3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-12 12:08:18 +00:00

Fixed ref-counting bug in smt_model_checker. Fixes #1212.

This commit is contained in:
Christoph M. Wintersteiger 2017-08-17 19:29:37 +01:00
parent 320c81e497
commit abd599f48e
2 changed files with 9 additions and 4 deletions

View file

@ -40,7 +40,7 @@ namespace smt {
m_max_cexs(1), m_max_cexs(1),
m_iteration_idx(0), m_iteration_idx(0),
m_curr_model(0), m_curr_model(0),
m_new_instances_bindings(m) { m_pinned_exprs(m) {
} }
model_checker::~model_checker() { model_checker::~model_checker() {
@ -200,8 +200,12 @@ namespace smt {
} }
void model_checker::add_instance(quantifier* q, expr_ref_vector const& bindings, unsigned max_generation) { void model_checker::add_instance(quantifier* q, expr_ref_vector const& bindings, unsigned max_generation) {
SASSERT(q->get_num_decls() == bindings.size());
for (unsigned i = 0; i < bindings.size(); i++) for (unsigned i = 0; i < bindings.size(); i++)
m_new_instances_bindings.push_back(bindings[i]); m_pinned_exprs.push_back(bindings[i]);
m_pinned_exprs.push_back(q);
void * mem = m_new_instances_region.allocate(instance::get_obj_size(q->get_num_decls())); void * mem = m_new_instances_region.allocate(instance::get_obj_size(q->get_num_decls()));
instance * new_inst = new (mem) instance(q, bindings.c_ptr(), max_generation); instance * new_inst = new (mem) instance(q, bindings.c_ptr(), max_generation);
m_new_instances.push_back(new_inst); m_new_instances.push_back(new_inst);
@ -469,8 +473,9 @@ namespace smt {
} }
void model_checker::reset_new_instances() { void model_checker::reset_new_instances() {
m_new_instances_region.reset(); m_pinned_exprs.reset();
m_new_instances.reset(); m_new_instances.reset();
m_new_instances_region.reset();
} }
void model_checker::reset() { void model_checker::reset() {

View file

@ -73,8 +73,8 @@ namespace smt {
}; };
region m_new_instances_region; region m_new_instances_region;
expr_ref_vector m_new_instances_bindings;
ptr_vector<instance> m_new_instances; ptr_vector<instance> m_new_instances;
expr_ref_vector m_pinned_exprs;
bool add_instance(quantifier * q, model * cex, expr_ref_vector & sks, bool use_inv); bool add_instance(quantifier * q, model * cex, expr_ref_vector & sks, bool use_inv);
void reset_new_instances(); void reset_new_instances();
void assert_new_instances(); void assert_new_instances();