mirror of
https://github.com/Z3Prover/z3
synced 2025-08-17 00:32:16 +00:00
fix push/pop bug for ite-elimination, thanks to Nao Hirokawa for reporting it
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
de43e05102
commit
4c0db00a7b
4 changed files with 13 additions and 3 deletions
|
@ -27,14 +27,16 @@ class elim_term_ite_cfg : public default_rewriter_cfg {
|
|||
ast_manager& m;
|
||||
defined_names & m_defined_names;
|
||||
vector<justified_expr> m_new_defs;
|
||||
unsigned_vector m_lim;
|
||||
public:
|
||||
elim_term_ite_cfg(ast_manager & m, defined_names & d): m(m), m_defined_names(d) {
|
||||
// TBD enable_ac_support(false);
|
||||
}
|
||||
virtual ~elim_term_ite_cfg() {}
|
||||
vector<justified_expr> const& new_defs() const { return m_new_defs; }
|
||||
void reset() { m_new_defs.reset(); }
|
||||
br_status reduce_app(func_decl* f, unsigned n, expr *const* args, expr_ref& result, proof_ref& result_pr);
|
||||
void push() { m_lim.push_back(m_new_defs.size()); }
|
||||
void pop(unsigned n) {if (n > 0) { m_new_defs.shrink(m_lim[m_lim.size() - n]); m_lim.shrink(m_lim.size() - n); } }
|
||||
};
|
||||
|
||||
class elim_term_ite_rw : public rewriter_tpl<elim_term_ite_cfg> {
|
||||
|
@ -45,7 +47,8 @@ public:
|
|||
m_cfg(m, dn)
|
||||
{}
|
||||
vector<justified_expr> const& new_defs() const { return m_cfg.new_defs(); }
|
||||
void reset() { m_cfg.reset(); }
|
||||
void push() { m_cfg.push(); }
|
||||
void pop(unsigned n) { m_cfg.pop(n); }
|
||||
};
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue