Skip to content

Commit 5a96632

Browse files
committed
fix the order of parameter evaluation
Signed-off-by: Lev Nachmanson <[email protected]>
1 parent 5ae858f commit 5a96632

File tree

1 file changed

+17
-6
lines changed

1 file changed

+17
-6
lines changed

src/ast/rewriter/arith_rewriter.cpp

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -728,17 +728,28 @@ br_status arith_rewriter::mk_le_ge_eq_core(expr * arg1, expr * arg2, op_kind kin
728728
}
729729
}
730730
if (m.is_ite(arg1, c, t, e) && is_numeral(e, a1) && is_numeral(arg2, a2)) {
731+
auto a = m.mk_not(c);
731732
switch (kind) {
732-
case LE: result = a1 <= a2 ? m.mk_or(m.mk_not(c), m_util.mk_le(t, arg2)) : m.mk_and(c, m_util.mk_le(t, arg2)); return BR_REWRITE2;
733-
case GE: result = a1 >= a2 ? m.mk_or(m.mk_not(c), m_util.mk_ge(t, arg2)) : m.mk_and(c, m_util.mk_ge(t, arg2)); return BR_REWRITE2;
734-
case EQ: result = a1 == a2 ? m.mk_or(m.mk_not(c), m.mk_eq(t, arg2)) : m.mk_and(c, m_util.mk_eq(t, arg2)); return BR_REWRITE2;
733+
case LE: result = a1 <= a2 ? m.mk_or(a, m_util.mk_le(t, arg2)) : m.mk_and(c, m_util.mk_le(t, arg2)); return BR_REWRITE2;
734+
case GE: result = a1 >= a2 ? m.mk_or(a, m_util.mk_ge(t, arg2)) : m.mk_and(c, m_util.mk_ge(t, arg2)); return BR_REWRITE2;
735+
case EQ: result = a1 == a2 ? m.mk_or(a, m.mk_eq(t, arg2)) : m.mk_and(c, m_util.mk_eq(t, arg2)); return BR_REWRITE2;
735736
}
736737
}
737738
if (m.is_ite(arg1, c, t, e) && arg1->get_ref_count() == 1) {
738739
switch (kind) {
739-
case LE: result = m.mk_ite(c, m_util.mk_le(t, arg2), m_util.mk_le(e, arg2)); return BR_REWRITE2;
740-
case GE: result = m.mk_ite(c, m_util.mk_ge(t, arg2), m_util.mk_ge(e, arg2)); return BR_REWRITE2;
741-
case EQ: result = m.mk_ite(c, m.mk_eq(t, arg2), m.mk_eq(e, arg2)); return BR_REWRITE2;
740+
case LE:
741+
{
742+
auto a = m_util.mk_le(t, arg2);
743+
result = m.mk_ite(c, a, m_util.mk_le(e, arg2)); return BR_REWRITE2;
744+
}
745+
case GE: {
746+
auto a = m_util.mk_ge(t, arg2);
747+
result = m.mk_ite(c, a, m_util.mk_ge(e, arg2)); return BR_REWRITE2;
748+
}
749+
case EQ:{
750+
auto a = m.mk_eq(t, arg2);
751+
result = m.mk_ite(c, a, m.mk_eq(e, arg2)); return BR_REWRITE2;
752+
}
742753
}
743754
}
744755
if (m_util.is_to_int(arg2) && is_numeral(arg1)) {

0 commit comments

Comments
 (0)