Skip to content

Commit 40b9800

Browse files
committed
parameter eval order
Signed-off-by: Lev Nachmanson <[email protected]>
1 parent a41549e commit 40b9800

File tree

1 file changed

+4
-1
lines changed

1 file changed

+4
-1
lines changed

src/ast/rewriter/seq_rewriter.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4082,7 +4082,10 @@ expr_ref seq_rewriter::mk_derivative_rec(expr* ele, expr* r) {
40824082
// tl = rest of reverse(r2) i.e. butlast of r2
40834083
//hd = str().mk_nth_i(r2, m_autil.mk_sub(str().mk_length(r2), one()));
40844084
hd = mk_seq_last(r2);
4085-
m_br.mk_and(m().mk_not(m().mk_eq(r2, str().mk_empty(seq_sort))), m().mk_eq(hd, ele), result);
4085+
// factor nested constructor calls to enforce deterministic argument evaluation order
4086+
auto a_non_empty = m().mk_not(m().mk_eq(r2, str().mk_empty(seq_sort)));
4087+
auto a_eq = m().mk_eq(hd, ele);
4088+
m_br.mk_and(a_non_empty, a_eq, result);
40864089
tl = re().mk_to_re(mk_seq_butlast(r2));
40874090
return re_and(result, re().mk_reverse(tl));
40884091
}

0 commit comments

Comments
 (0)