Skip to content

Commit fbb2da1

Browse files
Refactoring hardness collection to not expose prop
1 parent dec0612 commit fbb2da1

16 files changed

+267
-349
lines changed

src/goto-checker/bmc_util.cpp

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ Author: Daniel Kroening, Peter Schrammel
2626
#include <linking/static_lifetime_init.h>
2727

2828
#include <solvers/decision_procedure.h>
29-
#include <solvers/flattening/boolbv.h>
3029

3130
#include <util/make_unique.h>
3231
#include <util/ui_message.h>
@@ -150,22 +149,13 @@ void output_graphml(
150149

151150
void convert_symex_target_equation(
152151
symex_target_equationt &equation,
153-
goto_symex_property_decidert &property_decider,
152+
decision_proceduret &decision_procedure,
154153
message_handlert &message_handler)
155154
{
156155
messaget msg(message_handler);
157156
msg.status() << "converting SSA" << messaget::eom;
158157

159-
// convert SSA
160-
if(dynamic_cast<boolbvt *>(&property_decider.get_decision_procedure()))
161-
{
162-
equation.convert(
163-
property_decider.get_decision_procedure(), property_decider.get_prop());
164-
}
165-
else
166-
{
167-
equation.convert(property_decider.get_decision_procedure());
168-
}
158+
equation.convert(decision_procedure);
169159
}
170160

171161
std::unique_ptr<memory_model_baset>
@@ -370,7 +360,8 @@ std::chrono::duration<double> prepare_property_decider(
370360
<< property_decider.get_decision_procedure().decision_procedure_text()
371361
<< messaget::eom;
372362

373-
convert_symex_target_equation(equation, property_decider, ui_message_handler);
363+
convert_symex_target_equation(
364+
equation, property_decider.get_decision_procedure(), ui_message_handler);
374365
property_decider.update_properties_goals_from_symex_target_equation(
375366
properties);
376367
property_decider.convert_goals();

src/goto-checker/bmc_util.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,9 @@ struct trace_optionst;
3535
class ui_message_handlert;
3636

3737
void convert_symex_target_equation(
38-
symex_target_equationt &,
39-
goto_symex_property_decidert &,
40-
message_handlert &);
38+
symex_target_equationt &equation,
39+
decision_proceduret &decision_procedure,
40+
message_handlert &message_handler);
4141

4242
/// Returns a function that checks whether an SSA step is an assertion
4343
/// with \p property_id. Usually used for `build_goto_trace`.

src/goto-checker/goto_symex_property_decider.cpp

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -110,11 +110,6 @@ goto_symex_property_decidert::get_decision_procedure() const
110110
return solver->decision_procedure();
111111
}
112112

113-
propt &goto_symex_property_decidert::get_prop() const
114-
{
115-
return solver->prop();
116-
}
117-
118113
stack_decision_proceduret &
119114
goto_symex_property_decidert::get_stack_decision_procedure() const
120115
{

src/goto-checker/goto_symex_property_decider.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,6 @@ class goto_symex_property_decidert
4444
/// Calls solve() on the solver instance
4545
decision_proceduret::resultt solve();
4646

47-
/// Returns the prop
48-
propt &get_prop() const;
49-
5047
/// Returns the solver instance
5148
decision_proceduret &get_decision_procedure() const;
5249

@@ -68,7 +65,6 @@ class goto_symex_property_decidert
6865
std::unordered_set<irep_idt> &updated_properties,
6966
decision_proceduret::resultt dec_result,
7067
bool set_pass = true) const;
71-
7268
protected:
7369
const optionst &options;
7470
ui_message_handlert &ui_message_handler;

src/goto-checker/multi_path_symex_checker.cpp

Lines changed: 5 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ Author: Daniel Kroening, Peter Schrammel
1313

1414
#include <chrono>
1515

16+
#include <solvers/hardness_collector.h>
17+
1618
#include "bmc_util.h"
1719
#include "counterexample_beautification.h"
1820
#include "goto_symex_fault_localizer.h"
@@ -25,17 +27,6 @@ multi_path_symex_checkert::multi_path_symex_checkert(
2527
equation_generated(false),
2628
property_decider(options, ui_message_handler, equation, ns)
2729
{
28-
if(options.is_set("write-solver-stats-to"))
29-
{
30-
if(
31-
auto hardness_collector =
32-
dynamic_cast<hardness_collectort *>(&property_decider.get_prop()))
33-
{
34-
hardness_collector->enable_hardness_collection();
35-
hardness_collector->get_solver_hardness().set_outfile(
36-
options.get_option("write-solver-stats-to"));
37-
}
38-
}
3930
}
4031

4132
incremental_goto_checkert::resultt multi_path_symex_checkert::
@@ -171,14 +162,8 @@ void multi_path_symex_checkert::report()
171162
{
172163
if(options.is_set("write-solver-stats-to"))
173164
{
174-
if(
175-
auto hardness_collector =
176-
dynamic_cast<hardness_collectort *>(&property_decider.get_prop()))
177-
{
178-
if(hardness_collector->is_hardness_collection_enabled())
179-
{
180-
hardness_collector->get_solver_hardness().produce_report();
181-
}
182-
}
165+
with_solver_hardness(
166+
property_decider.get_decision_procedure(),
167+
[](solver_hardnesst &hardness) { hardness.produce_report(); });
183168
}
184169
}

src/goto-checker/single_loop_incremental_symex_checker.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,15 +89,15 @@ operator()(propertiest &properties)
8989

9090
log.status() << "converting SSA" << messaget::eom;
9191
equation.convert_without_assertions(
92-
property_decider.get_decision_procedure(), nullptr);
92+
property_decider.get_decision_procedure());
9393

9494
property_decider.update_properties_goals_from_symex_target_equation(
9595
properties);
9696

9797
// We convert the assertions in a new context.
9898
property_decider.get_stack_decision_procedure().push();
9999
equation.convert_assertions(
100-
property_decider.get_decision_procedure(), nullptr, false);
100+
property_decider.get_decision_procedure(), false);
101101
property_decider.convert_goals();
102102

103103
current_equation_converted = true;

src/goto-checker/solver_factory.cpp

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -173,21 +173,35 @@ smt2_dect::solvert solver_factoryt::get_smt2_solver_type() const
173173
return s;
174174
}
175175

176+
template <typename SatcheckT>
177+
static std::unique_ptr<SatcheckT>
178+
make_satcheck_prop(message_handlert &message_handler, const optionst &options)
179+
{
180+
auto satcheck = util_make_unique<SatcheckT>(message_handler);
181+
if(options.is_set("write-solver-stats-to"))
182+
{
183+
satcheck->enable_hardness_collection();
184+
satcheck->with_solver_hardness([&options](solver_hardnesst &hardness) {
185+
hardness.set_outfile(options.get_option("write-solver-stats-to"));
186+
});
187+
}
188+
return satcheck;
189+
}
190+
176191
std::unique_ptr<solver_factoryt::solvert> solver_factoryt::get_default()
177192
{
178193
auto solver = util_make_unique<solvert>();
179-
180194
if(
181195
options.get_bool_option("beautify") ||
182196
!options.get_bool_option("sat-preprocessor")) // no simplifier
183197
{
184198
// simplifier won't work with beautification
185199
solver->set_prop(
186-
util_make_unique<satcheck_no_simplifiert>(message_handler));
200+
make_satcheck_prop<satcheck_no_simplifiert>(message_handler, options));
187201
}
188202
else // with simplifier
189203
{
190-
solver->set_prop(util_make_unique<satcheckt>(message_handler));
204+
solver->set_prop(make_satcheck_prop<satcheckt>(message_handler, options));
191205
}
192206

193207
auto bv_pointers =
@@ -225,9 +239,10 @@ std::unique_ptr<solver_factoryt::solvert> solver_factoryt::get_bv_refinement()
225239
if(options.get_bool_option("sat-preprocessor"))
226240
{
227241
no_beautification();
228-
return util_make_unique<satcheckt>(message_handler);
242+
return make_satcheck_prop<satcheckt>(message_handler, options);
229243
}
230-
return util_make_unique<satcheck_no_simplifiert>(message_handler);
244+
return make_satcheck_prop<satcheck_no_simplifiert>(
245+
message_handler, options);
231246
}();
232247

233248
bv_refinementt::infot info;
@@ -258,7 +273,8 @@ solver_factoryt::get_string_refinement()
258273
{
259274
string_refinementt::infot info;
260275
info.ns = &ns;
261-
auto prop = util_make_unique<satcheck_no_simplifiert>(message_handler);
276+
auto prop =
277+
make_satcheck_prop<satcheck_no_simplifiert>(message_handler, options);
262278
info.prop = prop.get();
263279
info.refinement_bound = DEFAULT_MAX_NB_REFINEMENT;
264280
info.output_xml = output_xml_in_refinement;

0 commit comments

Comments
 (0)