3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-10-01 13:39:28 +00:00

fix memory leak in SAT solver exposed by regression tests

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2016-01-06 11:44:55 -08:00
parent da63ac809e
commit aec5a38b14
10 changed files with 82 additions and 30 deletions

View file

@ -258,6 +258,7 @@ namespace smt {
replay_length_coherence(ast_manager& m, expr* e) : m_e(e, m) {}
virtual void operator()(theory_seq& th) {
th.check_length_coherence(m_e);
m_e.reset();
}
};
@ -267,6 +268,7 @@ namespace smt {
replay_axiom(ast_manager& m, expr* e) : m_e(e, m) {}
virtual void operator()(theory_seq& th) {
th.enque_axiom(m_e);
m_e.reset();
}
};
@ -279,6 +281,17 @@ namespace smt {
}
};
class pop_branch : public trail<theory_seq> {
expr_ref m_l, m_r;
public:
pop_branch(ast_manager& m, expr* l, expr* r): m_l(l, m), m_r(r, m) {}
virtual void undo(theory_seq& th) {
th.m_branch_start.erase(m_l, m_r);
m_l.reset();
m_r.reset();
}
};
void erase_index(unsigned idx, unsigned i);
struct stats {
@ -386,7 +399,10 @@ namespace smt {
void propagate_eq(literal lit, expr* e1, expr* e2, bool add_to_eqs = false);
void set_conflict(dependency* dep, literal_vector const& lits = literal_vector());
bool find_branch_candidate(dependency* dep, expr_ref_vector const& ls, expr_ref_vector const& rs);
obj_pair_map<expr, expr, unsigned> m_branch_start;
void insert_branch_start(expr* l, expr* r, unsigned s);
unsigned find_branch_start(expr* l, expr* r);
bool find_branch_candidate(unsigned& start, dependency* dep, expr_ref_vector const& ls, expr_ref_vector const& rs);
bool can_be_equal(unsigned szl, expr* const* ls, unsigned szr, expr* const* rs) const;
lbool assume_equality(expr* l, expr* r);