mirror of
https://github.com/Z3Prover/z3
synced 2025-04-07 09:55:19 +00:00
gc expressions in the scope of updates, not old expressions
This commit is contained in:
parent
842385a7d7
commit
ea44c110bb
|
@ -113,7 +113,7 @@ void elim_unconstrained::eliminate() {
|
||||||
|
|
||||||
IF_VERBOSE(11, verbose_stream() << "replace " << mk_pp(t, m) << " / " << rr << " -> " << r << "\n");
|
IF_VERBOSE(11, verbose_stream() << "replace " << mk_pp(t, m) << " / " << rr << " -> " << r << "\n");
|
||||||
|
|
||||||
TRACE("elim_unconstrained", tout << mk_pp(t, m) << " -> " << r << "\n");
|
TRACE("elim_unconstrained", tout << mk_pp(t, m) << " / " << rr << " -> " << r << "\n");
|
||||||
SASSERT(r->get_sort() == t->get_sort());
|
SASSERT(r->get_sort() == t->get_sort());
|
||||||
m_stats.m_num_eliminated++;
|
m_stats.m_num_eliminated++;
|
||||||
m_trail.push_back(r);
|
m_trail.push_back(r);
|
||||||
|
@ -271,12 +271,18 @@ void elim_unconstrained::gc(expr* t) {
|
||||||
while (!todo.empty()) {
|
while (!todo.empty()) {
|
||||||
t = todo.back();
|
t = todo.back();
|
||||||
todo.pop_back();
|
todo.pop_back();
|
||||||
|
|
||||||
node& n = get_node(t);
|
node& n = get_node(t);
|
||||||
if (n.m_refcount == 0)
|
if (n.m_refcount == 0)
|
||||||
continue;
|
continue;
|
||||||
|
if (n.m_term && !is_node(n.m_term))
|
||||||
|
continue;
|
||||||
|
|
||||||
dec_ref(t);
|
dec_ref(t);
|
||||||
if (n.m_refcount != 0)
|
if (n.m_refcount != 0)
|
||||||
continue;
|
continue;
|
||||||
|
if (n.m_term)
|
||||||
|
t = n.m_term;
|
||||||
if (is_app(t)) {
|
if (is_app(t)) {
|
||||||
for (expr* arg : *to_app(t))
|
for (expr* arg : *to_app(t))
|
||||||
todo.push_back(arg);
|
todo.push_back(arg);
|
||||||
|
@ -436,5 +442,4 @@ void elim_unconstrained::reduce() {
|
||||||
update_model_trail(*mc, old_fmls);
|
update_model_trail(*mc, old_fmls);
|
||||||
mc->reset();
|
mc->reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1112,7 +1112,7 @@ namespace euf {
|
||||||
if (b != sat::null_bool_var) {
|
if (b != sat::null_bool_var) {
|
||||||
r->m_bool_var2expr.setx(b, n->get_expr(), nullptr);
|
r->m_bool_var2expr.setx(b, n->get_expr(), nullptr);
|
||||||
SASSERT(r->m.is_bool(n->get_sort()));
|
SASSERT(r->m.is_bool(n->get_sort()));
|
||||||
IF_VERBOSE(11, verbose_stream() << "set bool_var " << b << " " << r->bpp(n) << " " << mk_bounded_pp(n->get_expr(), m) << "\n");
|
IF_VERBOSE(20, verbose_stream() << "set bool_var " << b << " " << r->bpp(n) << " " << mk_bounded_pp(n->get_expr(), m) << "\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (auto* s_orig : m_id2solver) {
|
for (auto* s_orig : m_id2solver) {
|
||||||
|
|
Loading…
Reference in a new issue