void path_searcht::do_show_vcc( statet &state, const namespacet &ns) { // keep statistics number_of_VCCs++; const goto_programt::instructiont &instruction= *state.get_instruction(); mstreamt &out=result(); if(instruction.location.is_not_nil()) out << instruction.location << "\n"; if(instruction.location.get_comment()!="") out << instruction.location.get_comment() << "\n"; unsigned count=1; std::vector<path_symex_step_reft> steps; state.history.build_history(steps); for(std::vector<path_symex_step_reft>::const_iterator s_it=steps.begin(); s_it!=steps.end(); s_it++) { if((*s_it)->guard.is_not_nil()) { std::string string_value=from_expr(ns, "", (*s_it)->guard); out << "{-" << count << "} " << string_value << "\n"; count++; } if((*s_it)->ssa_rhs.is_not_nil()) { equal_exprt equality((*s_it)->ssa_lhs, (*s_it)->ssa_rhs); std::string string_value=from_expr(ns, "", equality); out << "{-" << count << "} " << string_value << "\n"; count++; } } out << "|--------------------------" << "\n"; exprt assertion=state.read(instruction.guard); out << "{" << 1 << "} " << from_expr(ns, "", assertion) << "\n"; if(!assertion.is_true()) number_of_VCCs_after_simplification++; out << eom; }
void path_searcht::do_show_vcc(statet &state) { // keep statistics number_of_VCCs++; const goto_programt::instructiont &instruction= *state.get_instruction(); mstreamt &out=result(); if(instruction.source_location.is_not_nil()) out << instruction.source_location << '\n'; if(instruction.source_location.get_comment()!="") out << instruction.source_location.get_comment() << '\n'; unsigned count=1; std::vector<path_symex_step_reft> steps; state.history.build_history(steps); for(const auto &step_ref : steps) { if(step_ref->guard.is_not_nil()) { std::string string_value=from_expr(ns, "", step_ref->guard); out << "{-" << count << "} " << string_value << '\n'; count++; } if(step_ref->ssa_rhs.is_not_nil()) { equal_exprt equality(step_ref->ssa_lhs, step_ref->ssa_rhs); std::string string_value=from_expr(ns, "", equality); out << "{-" << count << "} " << string_value << '\n'; count++; } } out << "|--------------------------" << '\n'; exprt assertion=state.read(instruction.guard); out << "{" << 1 << "} " << from_expr(ns, "", assertion) << '\n'; if(!assertion.is_true()) number_of_VCCs_after_simplification++; out << eom; }
void path_searcht::check_assertion( statet &state, const namespacet &ns) { // keep statistics number_of_VCCs++; const goto_programt::instructiont &instruction= *state.get_instruction(); irep_idt property_name=instruction.location.get_property_id(); property_entryt &property_entry=property_map[property_name]; if(property_entry.status==FAIL) return; // already failed else if(property_entry.status==NOT_REACHED) property_entry.status=PASS; // well, for now! // the assertion in SSA exprt assertion= state.read(instruction.guard); if(assertion.is_true()) return; // no error, trivially // keep statistics number_of_VCCs_after_simplification++; status() << "Checking property " << property_name << eom; // take the time absolute_timet sat_start_time=current_time(); satcheckt satcheck; bv_pointerst bv_pointers(ns, satcheck); satcheck.set_message_handler(get_message_handler()); bv_pointers.set_message_handler(get_message_handler()); if(!state.check_assertion(bv_pointers)) { build_goto_trace(state, bv_pointers, property_entry.error_trace); property_entry.status=FAIL; number_of_failed_properties++; } sat_time+=current_time()-sat_start_time; }