Skip to content

Commit dcb75c4

Browse files
fix #4174
1 parent 166be6c commit dcb75c4

File tree

5 files changed

+16
-11
lines changed

5 files changed

+16
-11
lines changed

src/ast/num_occurs.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,12 @@ void num_occurs::process(expr * t, expr_fast_mark1 & visited) {
5959
}
6060
}
6161

62+
void num_occurs::validate() {
63+
for (auto & kv : m_num_occurs) {
64+
SASSERT(0 < kv.m_key->get_ref_count());
65+
}
66+
}
67+
6268
void num_occurs::operator()(expr * t) {
6369
expr_fast_mark1 visited;
6470
process(t, visited);

src/ast/num_occurs.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,8 @@ class num_occurs {
3838
m_ignore_quantifiers(ignore_quantifiers) {
3939
}
4040

41-
void reset() { m_num_occurs.reset(); }
41+
void validate();
42+
virtual void reset() { m_num_occurs.reset(); }
4243

4344
void operator()(expr * t);
4445
void operator()(unsigned num, expr * const * ts);

src/tactic/core/ctx_simplify_tactic.cpp

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ struct ctx_simplify_tactic::imp {
168168
m(_m),
169169
m_simp(simp),
170170
m_allocator("context-simplifier"),
171-
m_occs(true, true),
171+
m_occs(m, true, true),
172172
m_mk_app(m, p) {
173173
updt_params(p);
174174
m_simp->set_occs(m_occs);
@@ -522,7 +522,6 @@ struct ctx_simplify_tactic::imp {
522522
void process_goal(goal & g) {
523523
SASSERT(scope_level() == 0);
524524
// go forwards
525-
expr_ref_vector pinned(m);
526525
unsigned old_lvl = scope_level();
527526
unsigned sz = g.size();
528527
expr_ref r(m);
@@ -532,7 +531,6 @@ struct ctx_simplify_tactic::imp {
532531
if (i < sz - 1 && !m.is_true(r) && !m.is_false(r) && !g.dep(i) && !assert_expr(r, false)) {
533532
r = m.mk_false();
534533
}
535-
pinned.push_back(r);
536534
g.update(i, r, nullptr, g.dep(i));
537535
}
538536
pop(scope_level() - old_lvl);
@@ -571,13 +569,9 @@ struct ctx_simplify_tactic::imp {
571569

572570
void operator()(goal & g) {
573571
m_occs.reset();
574-
expr_ref_vector pinned(m);
575572
m_occs(g);
576-
unsigned sz = g.size();
577-
for (unsigned i = 0; i < sz; ++i) {
578-
pinned.push_back(g.form(i));
579-
}
580573
m_num_steps = 0;
574+
unsigned sz = g.size();
581575
tactic_report report("ctx-simplify", g);
582576
if (g.proofs_enabled()) {
583577
expr_ref r(m);

src/tactic/goal_num_occurs.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ void goal_num_occurs::operator()(goal const & g) {
2222
expr_fast_mark1 visited;
2323
unsigned sz = g.size();
2424
for (unsigned i = 0; i < sz; i++) {
25+
m_pinned.push_back(g.form(i));
2526
process(g.form(i), visited);
2627
}
2728
}

src/tactic/goal_num_occurs.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,14 @@ Revision History:
2323
class goal;
2424

2525
class goal_num_occurs : public num_occurs {
26+
expr_ref_vector m_pinned;
2627
public:
27-
goal_num_occurs(bool ignore_ref_count1 = false, bool ignore_quantifiers = false):
28-
num_occurs(ignore_ref_count1, ignore_quantifiers) {
28+
goal_num_occurs(ast_manager& m, bool ignore_ref_count1 = false, bool ignore_quantifiers = false):
29+
num_occurs(ignore_ref_count1, ignore_quantifiers),
30+
m_pinned(m) {
2931
}
3032

33+
void reset() override { num_occurs::reset(); m_pinned.reset(); }
3134
void operator()(goal const & s);
3235
};
3336

0 commit comments

Comments
 (0)