Skip to content

Commit 7358881

Browse files
fix #4112
Signed-off-by: Nikolaj Bjorner <[email protected]>
1 parent c2e0491 commit 7358881

File tree

6 files changed

+23
-20
lines changed

6 files changed

+23
-20
lines changed

src/ast/ast.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1986,6 +1986,7 @@ void ast_manager::delete_node(ast * n) {
19861986
}
19871987
}
19881988

1989+
19891990
sort * ast_manager::mk_sort(family_id fid, decl_kind k, unsigned num_parameters, parameter const * parameters) {
19901991
decl_plugin * p = get_plugin(fid);
19911992
if (p)

src/ast/rewriter/rewriter_def.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,6 @@ bool rewriter_tpl<Config>::process_const(app * t0) {
134134
template<typename Config>
135135
template<bool ProofGen>
136136
bool rewriter_tpl<Config>::visit(expr * t, unsigned max_depth) {
137-
// retry:
138137
TRACE("rewriter_visit", tout << "visiting\n" << mk_ismt2_pp(t, m()) << "\n";);
139138
expr * new_t = nullptr;
140139
proof * new_t_pr = nullptr;

src/ast/shared_occs.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,9 @@ void shared_occs::operator()(expr * t, shared_occs_mark & visited) {
9393
expr * curr = fr.first;
9494
switch (curr->get_kind()) {
9595
case AST_APP: {
96+
9697
unsigned num_args = to_app(curr)->get_num_args();
98+
9799
while (fr.second < num_args) {
98100
expr * arg = to_app(curr)->get_arg(fr.second);
99101
fr.second++;

src/tactic/core/symmetry_reduce_tactic.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -515,7 +515,6 @@ class symmetry_reduce_tactic::imp {
515515
public:
516516
num_occurrences(app_map& occs): m_occs(occs) {}
517517
void operator()(app* n) {
518-
app_map::obj_map_entry* e;
519518
m_occs.insert_if_not_there(n, 0);
520519
unsigned sz = n->get_num_args();
521520
for (unsigned i = 0; i < sz; ++i) {

src/tactic/ufbv/ufbv_rewriter.cpp

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ ufbv_rewriter::ufbv_rewriter(ast_manager & m):
3131
m_match_subst(m),
3232
m_bsimp(m),
3333
m_todo(m),
34+
m_new_args(m),
3435
m_rewrite_todo(m),
3536
m_rewrite_cache(m),
3637
m_new_exprs(m) {
@@ -221,11 +222,12 @@ void ufbv_rewriter::remove_fwd_idx(func_decl * f, quantifier * demodulator) {
221222
fwd_idx_map::iterator it = m_fwd_idx.find_iterator(f);
222223
if (it != m_fwd_idx.end()) {
223224
demodulator2lhs_rhs::iterator fit = m_demodulator2lhs_rhs.find_iterator(demodulator);
224-
m.dec_ref(fit->m_value.first);
225-
m.dec_ref(fit->m_value.second);
226-
m.dec_ref(demodulator);
225+
expr_pair p = fit->m_value;
227226
m_demodulator2lhs_rhs.erase(demodulator);
228227
it->m_value->erase(demodulator);
228+
m.dec_ref(p.first);
229+
m.dec_ref(p.second);
230+
m.dec_ref(demodulator);
229231
} else {
230232
SASSERT(m_demodulator2lhs_rhs.contains(demodulator));
231233
}
@@ -262,11 +264,11 @@ void ufbv_rewriter::show_fwd_idx(std::ostream & out) {
262264
}
263265
}
264266

265-
bool ufbv_rewriter::rewrite1(func_decl * f, ptr_vector<expr> & m_new_args, expr_ref & np) {
267+
bool ufbv_rewriter::rewrite1(func_decl * f, expr_ref_vector & m_new_args, expr_ref & np) {
266268
fwd_idx_map::iterator it = m_fwd_idx.find_iterator(f);
267269
if (it != m_fwd_idx.end()) {
268270
TRACE("demodulator_bug", tout << "trying to rewrite: " << f->get_name() << " args:\n";
269-
for (unsigned i = 0; i < m_new_args.size(); i++) { tout << mk_pp(m_new_args[i], m) << "\n"; });
271+
tout << m_new_args << "\n";);
270272
for (quantifier* d : *it->m_value) {
271273

272274
SASSERT(m_demodulator2lhs_rhs.contains(d));
@@ -305,12 +307,12 @@ bool ufbv_rewriter::rewrite_visit_children(app * a) {
305307
if (ebp.second)
306308
v = ebp.first;
307309
}
308-
for (unsigned i = sz; i > 0; i--) {
309-
if (m_rewrite_todo[i - 1] == v) {
310+
for (unsigned i = sz; i-- > 0;) {
311+
if (m_rewrite_todo[i] == v) {
310312
recursive = true;
311313
TRACE("demodulator", tout << "Detected demodulator cycle: " <<
312314
mk_pp(a, m) << " --> " << mk_pp(v, m) << std::endl;);
313-
m_rewrite_cache.insert(e, expr_bool_pair(v, true));
315+
rewrite_cache(e, v, true);
314316
break;
315317
}
316318
}
@@ -346,7 +348,7 @@ expr * ufbv_rewriter::rewrite(expr * n) {
346348
);
347349

348350
expr * e = m_rewrite_todo.back();
349-
expr * actual = e;
351+
expr_ref actual(e, m);
350352

351353
if (m_rewrite_cache.contains(e)) {
352354
const expr_bool_pair &ebp = m_rewrite_cache.get(e);
@@ -370,9 +372,8 @@ expr * ufbv_rewriter::rewrite(expr * n) {
370372
func_decl * f = a->get_decl();
371373
m_new_args.reset();
372374
unsigned num_args = a->get_num_args();
373-
bool all_untouched=true;
374-
for (unsigned i = 0 ; i < num_args ; i++ ) {
375-
expr * o_child = a->get_arg(i);
375+
bool all_untouched = true;
376+
for (expr* o_child : *a) {
376377
expr * n_child;
377378
SASSERT(m_rewrite_cache.contains(o_child) && m_rewrite_cache.get(o_child).second);
378379
expr_bool_pair const & ebp = m_rewrite_cache.get(o_child);
@@ -386,17 +387,17 @@ expr * ufbv_rewriter::rewrite(expr * n) {
386387
rewrite_cache(e, np, false);
387388
// No pop.
388389
} else {
389-
if(all_untouched) {
390+
if (all_untouched) {
390391
rewrite_cache(e, actual, true);
391392
}
392393
else {
393394
expr_ref na(m);
394395
if (f->get_family_id() != m.get_basic_family_id())
395-
na = m.mk_app(f, m_new_args.size(), m_new_args.c_ptr());
396+
na = m.mk_app(f, m_new_args);
396397
else
397398
m_bsimp.mk_app(f, m_new_args.size(), m_new_args.c_ptr(), na);
398399
TRACE("demodulator_bug", tout << "e:\n" << mk_pp(e, m) << "\nnew_args: \n";
399-
for (unsigned i = 0; i < m_new_args.size(); i++) { tout << mk_pp(m_new_args[i], m) << "\n"; }
400+
tout << m_new_args << "\n";
400401
tout << "=====>\n";
401402
tout << "na:\n " << mk_pp(na, m) << "\n";);
402403
rewrite_cache(e, na, true);
@@ -577,7 +578,7 @@ void ufbv_rewriter::reschedule_demodulators(func_decl * f, expr * lhs) {
577578
expr_ref l(m);
578579

579580
for (auto s : *it->m_value)
580-
all_occurrences.insert(s);
581+
all_occurrences.insert(s);
581582

582583
// Run over all f-demodulators
583584
for (expr* occ : all_occurrences) {
@@ -853,6 +854,7 @@ bool ufbv_rewriter::match_subst::match_args(app * lhs, expr * const * args) {
853854

854855

855856
bool ufbv_rewriter::match_subst::operator()(app * lhs, expr * rhs, expr * const * args, expr_ref & new_rhs) {
857+
856858
if (match_args(lhs, args)) {
857859
if (m_all_args_eq) {
858860
// quick success...

src/tactic/ufbv/ufbv_rewriter.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ class ufbv_rewriter {
165165
demodulator2lhs_rhs m_demodulator2lhs_rhs;
166166
expr_ref_buffer m_todo;
167167
obj_hashtable<expr> m_processed;
168-
ptr_vector<expr> m_new_args;
168+
expr_ref_vector m_new_args;
169169

170170
expr_ref_buffer m_rewrite_todo;
171171
rewrite_cache_map m_rewrite_cache;
@@ -179,7 +179,7 @@ class ufbv_rewriter {
179179
bool can_rewrite(expr * n, expr * lhs);
180180

181181
expr * rewrite(expr * n);
182-
bool rewrite1(func_decl * f, ptr_vector<expr> & m_new_args, expr_ref & np);
182+
bool rewrite1(func_decl * f, expr_ref_vector & m_new_args, expr_ref & np);
183183
bool rewrite_visit_children(app * a);
184184
void rewrite_cache(expr * e, expr * new_e, bool done);
185185
void reschedule_processed(func_decl * f);

0 commit comments

Comments
 (0)