mirror of
https://github.com/Z3Prover/z3
synced 2025-04-23 09:05:31 +00:00
fix unsound slice criteria (#6625)
* rename for readability * bug fix #6617. Don't slice op args that are values
This commit is contained in:
parent
42076a3c13
commit
f7c9c9ef72
1 changed files with 6 additions and 8 deletions
|
@ -467,15 +467,15 @@ namespace datalog {
|
|||
void mk_slice::solve_vars(rule& r, uint_set& used_vars, uint_set& parameter_vars) {
|
||||
expr_ref_vector conjs = get_tail_conjs(r);
|
||||
for (expr * e : conjs) {
|
||||
expr_ref r(m);
|
||||
expr_ref rhs(m);
|
||||
unsigned v = 0;
|
||||
if (is_eq(e, v, r) && is_output(v) && m_var_is_sliceable[v]) {
|
||||
if (is_eq(e, v, rhs) && is_output(v) && m_var_is_sliceable[v]) {
|
||||
TRACE("dl", tout << "is_eq: " << mk_pp(e, m) << " " << (m_solved_vars[v].get()?"solved":"new") << "\n";);
|
||||
add_var(v);
|
||||
if (!m_solved_vars[v].get()) {
|
||||
TRACE("dl", tout << v << " is solved\n";);
|
||||
add_free_vars(parameter_vars, r);
|
||||
m_solved_vars[v] = r;
|
||||
add_free_vars(parameter_vars, rhs);
|
||||
m_solved_vars[v] = rhs;
|
||||
}
|
||||
else {
|
||||
TRACE("dl", tout << v << " is used\n";);
|
||||
|
@ -666,10 +666,8 @@ namespace datalog {
|
|||
}
|
||||
else {
|
||||
SASSERT(m.is_value(arg));
|
||||
if (!is_output) {
|
||||
TRACE("dl", tout << "input " << i << " in " << p->get_decl()->get_name() << "\n";);
|
||||
bv.unset(i);
|
||||
}
|
||||
TRACE("dl", tout << i << " in " << p->get_decl()->get_name() << " is a value, unable to slice\n";);
|
||||
bv.unset(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue