mirror of
https://github.com/Z3Prover/z3
synced 2025-04-14 04:48:45 +00:00
pin expressions per Sarah Winkler's memory leak report
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
d4c98c1ab4
commit
a156028d82
|
@ -291,15 +291,15 @@ namespace smt {
|
|||
return;
|
||||
}
|
||||
sort * s = m_manager.get_sort(n->get_arg(0));
|
||||
sort * u = m_manager.mk_fresh_sort("distinct-elems");
|
||||
func_decl * f = m_manager.mk_fresh_func_decl("distinct-aux-f", "", 1, &s, u);
|
||||
sort_ref u(m_manager.mk_fresh_sort("distinct-elems"), m_manager);
|
||||
func_decl_ref f(m_manager.mk_fresh_func_decl("distinct-aux-f", "", 1, &s, u), m_manager);
|
||||
for (unsigned i = 0; i < num_args; i++) {
|
||||
expr * arg = n->get_arg(i);
|
||||
app * fapp = m_manager.mk_app(f, arg);
|
||||
app * val = m_manager.mk_fresh_const("unique-value", u);
|
||||
app_ref fapp(m_manager.mk_app(f, arg), m_manager);
|
||||
app_ref val(m_manager.mk_fresh_const("unique-value", u), m_manager);
|
||||
enode * e = mk_enode(val, false, false, true);
|
||||
e->mark_as_interpreted();
|
||||
app * eq = m_manager.mk_eq(fapp, val);
|
||||
app_ref eq(m_manager.mk_eq(fapp, val), m_manager);
|
||||
TRACE("assert_distinct", tout << "eq: " << mk_pp(eq, m_manager) << "\n";);
|
||||
assert_default(eq, 0);
|
||||
mark_as_relevant(eq);
|
||||
|
@ -435,7 +435,7 @@ namespace smt {
|
|||
TRACE("distinct", tout << "internalizing distinct: " << mk_pp(n, m_manager) << "\n";);
|
||||
SASSERT(!b_internalized(n));
|
||||
SASSERT(m_manager.is_distinct(n));
|
||||
expr * def = m_manager.mk_distinct_expanded(n->get_num_args(), n->get_args());
|
||||
expr_ref def(m_manager.mk_distinct_expanded(n->get_num_args(), n->get_args()), m_manager);
|
||||
internalize(def, true);
|
||||
bool_var v = mk_bool_var(n);
|
||||
literal l(v);
|
||||
|
@ -753,8 +753,8 @@ namespace smt {
|
|||
expr * c = n->get_arg(0);
|
||||
expr * t = n->get_arg(1);
|
||||
expr * e = n->get_arg(2);
|
||||
app * eq1 = mk_eq_atom(n, t);
|
||||
app * eq2 = mk_eq_atom(n, e);
|
||||
app_ref eq1(mk_eq_atom(n, t), m_manager);
|
||||
app_ref eq2(mk_eq_atom(n, e), m_manager);
|
||||
mk_enode(n,
|
||||
true /* supress arguments, I don't want to apply CC on ite terms */,
|
||||
false /* it is a term, so it should not be merged with true/false */,
|
||||
|
|
Loading…
Reference in a new issue