void fault_localizationt::run(irep_idt goal_id) { // find failed property failed=get_failed_property(); assert(failed!=bmc.equation.SSA_steps.end()); if(goal_id==ID_nil) goal_id=failed->source.pc->source_location.get_property_id(); lpointst &lpoints = lpoints_map[goal_id]; // collect lpoints collect_guards(lpoints); if(lpoints.empty()) return; status() << "Localizing fault" << eom; // pick localization method // if(options.get_option("localize-faults-method")=="TBD") localize_linear(lpoints); // clear assumptions bvt assumptions; bmc.prop_conv.set_assumptions(assumptions); }
void counterexample_beautificationt::operator()( bv_cbmct &bv_cbmc, const symex_target_equationt &equation, const namespacet &ns) { // find failed property failed=get_failed_property(bv_cbmc, equation); // lock the failed assertion bv_cbmc.set_to(literal_exprt(failed->cond_literal), false); { bv_cbmc.status() << "Beautifying counterexample (guards)" << messaget::eom; // compute weights for guards typedef std::map<literalt, unsigned> guard_countt; guard_countt guard_count; for(symex_target_equationt::SSA_stepst::const_iterator it=equation.SSA_steps.begin(); it!=equation.SSA_steps.end(); it++) { if(it->is_assignment() && it->assignment_type!=symex_targett::assignment_typet::HIDDEN) { if(!it->guard_literal.is_constant()) guard_count[it->guard_literal]++; } // reached failed assertion? if(it==failed) break; } // give to propositional minimizer prop_minimizet prop_minimize(bv_cbmc); prop_minimize.set_message_handler(bv_cbmc.get_message_handler()); for(const auto &g : guard_count) prop_minimize.objective(g.first, g.second); // minimize prop_minimize(); } { bv_cbmc.status() << "Beautifying counterexample (values)" << messaget::eom; // get symbols we care about minimization_listt minimization_list; get_minimization_list(bv_cbmc, equation, minimization_list); // minimize bv_minimizet bv_minimize(bv_cbmc); bv_minimize.set_message_handler(bv_cbmc.get_message_handler()); bv_minimize(minimization_list); } }