mirror of
https://github.com/Z3Prover/z3
synced 2025-06-25 15:23:41 +00:00
prevent checking scope of XOR variables in theory_str::process_concat_eq
This commit is contained in:
parent
f5b82740c3
commit
41497f44c1
1 changed files with 6 additions and 8 deletions
|
@ -2417,7 +2417,7 @@ void theory_str::process_concat_eq_type1(expr * concatAst1, expr * concatAst2) {
|
||||||
} else {
|
} else {
|
||||||
if (internal_variable_set.find((entry1->second)[0]) == internal_variable_set.end()
|
if (internal_variable_set.find((entry1->second)[0]) == internal_variable_set.end()
|
||||||
|| internal_variable_set.find((entry1->second)[1]) == internal_variable_set.end()
|
|| internal_variable_set.find((entry1->second)[1]) == internal_variable_set.end()
|
||||||
|| internal_variable_set.find((entry1->second)[2]) == internal_variable_set.end()) {
|
/*|| internal_variable_set.find((entry1->second)[2]) == internal_variable_set.end() */) {
|
||||||
entry1InScope = false;
|
entry1InScope = false;
|
||||||
} else {
|
} else {
|
||||||
entry1InScope = true;
|
entry1InScope = true;
|
||||||
|
@ -2430,7 +2430,7 @@ void theory_str::process_concat_eq_type1(expr * concatAst1, expr * concatAst2) {
|
||||||
} else {
|
} else {
|
||||||
if (internal_variable_set.find((entry2->second)[0]) == internal_variable_set.end()
|
if (internal_variable_set.find((entry2->second)[0]) == internal_variable_set.end()
|
||||||
|| internal_variable_set.find((entry2->second)[1]) == internal_variable_set.end()
|
|| internal_variable_set.find((entry2->second)[1]) == internal_variable_set.end()
|
||||||
|| internal_variable_set.find((entry2->second)[2]) == internal_variable_set.end()) {
|
/* || internal_variable_set.find((entry2->second)[2]) == internal_variable_set.end() */) {
|
||||||
entry2InScope = false;
|
entry2InScope = false;
|
||||||
} else {
|
} else {
|
||||||
entry2InScope = true;
|
entry2InScope = true;
|
||||||
|
@ -2738,8 +2738,6 @@ void theory_str::process_concat_eq_type2(expr * concatAst1, expr * concatAst2) {
|
||||||
std::map<std::pair<expr*,expr*>, std::map<int, expr*> >::iterator entry2 = varForBreakConcat.find(key2);
|
std::map<std::pair<expr*,expr*>, std::map<int, expr*> >::iterator entry2 = varForBreakConcat.find(key2);
|
||||||
|
|
||||||
// prevent checking scope for the XOR term, as it's always in the same scope as the split var
|
// prevent checking scope for the XOR term, as it's always in the same scope as the split var
|
||||||
// TODO probably make this change everywhere else in process_concat_eq*,
|
|
||||||
// and also make sure this is correct.
|
|
||||||
|
|
||||||
bool entry1InScope;
|
bool entry1InScope;
|
||||||
if (entry1 == varForBreakConcat.end()) {
|
if (entry1 == varForBreakConcat.end()) {
|
||||||
|
@ -3061,7 +3059,7 @@ void theory_str::process_concat_eq_type3(expr * concatAst1, expr * concatAst2) {
|
||||||
entry1InScope = false;
|
entry1InScope = false;
|
||||||
} else {
|
} else {
|
||||||
if (internal_variable_set.find((entry1->second)[0]) == internal_variable_set.end()
|
if (internal_variable_set.find((entry1->second)[0]) == internal_variable_set.end()
|
||||||
|| internal_variable_set.find((entry1->second)[1]) == internal_variable_set.end()) {
|
/* || internal_variable_set.find((entry1->second)[1]) == internal_variable_set.end() */) {
|
||||||
entry1InScope = false;
|
entry1InScope = false;
|
||||||
} else {
|
} else {
|
||||||
entry1InScope = true;
|
entry1InScope = true;
|
||||||
|
@ -3073,7 +3071,7 @@ void theory_str::process_concat_eq_type3(expr * concatAst1, expr * concatAst2) {
|
||||||
entry2InScope = false;
|
entry2InScope = false;
|
||||||
} else {
|
} else {
|
||||||
if (internal_variable_set.find((entry2->second)[0]) == internal_variable_set.end()
|
if (internal_variable_set.find((entry2->second)[0]) == internal_variable_set.end()
|
||||||
|| internal_variable_set.find((entry2->second)[1]) == internal_variable_set.end()) {
|
/* || internal_variable_set.find((entry2->second)[1]) == internal_variable_set.end() */) {
|
||||||
entry2InScope = false;
|
entry2InScope = false;
|
||||||
} else {
|
} else {
|
||||||
entry2InScope = true;
|
entry2InScope = true;
|
||||||
|
@ -3560,7 +3558,7 @@ void theory_str::process_concat_eq_type6(expr * concatAst1, expr * concatAst2) {
|
||||||
entry1InScope = false;
|
entry1InScope = false;
|
||||||
} else {
|
} else {
|
||||||
if (internal_variable_set.find((entry1->second)[0]) == internal_variable_set.end()
|
if (internal_variable_set.find((entry1->second)[0]) == internal_variable_set.end()
|
||||||
|| internal_variable_set.find((entry1->second)[1]) == internal_variable_set.end()) {
|
/* || internal_variable_set.find((entry1->second)[1]) == internal_variable_set.end() */) {
|
||||||
entry1InScope = false;
|
entry1InScope = false;
|
||||||
} else {
|
} else {
|
||||||
entry1InScope = true;
|
entry1InScope = true;
|
||||||
|
@ -3572,7 +3570,7 @@ void theory_str::process_concat_eq_type6(expr * concatAst1, expr * concatAst2) {
|
||||||
entry2InScope = false;
|
entry2InScope = false;
|
||||||
} else {
|
} else {
|
||||||
if (internal_variable_set.find((entry2->second)[0]) == internal_variable_set.end()
|
if (internal_variable_set.find((entry2->second)[0]) == internal_variable_set.end()
|
||||||
|| internal_variable_set.find((entry2->second)[1]) == internal_variable_set.end()) {
|
/* || internal_variable_set.find((entry2->second)[1]) == internal_variable_set.end() */) {
|
||||||
entry2InScope = false;
|
entry2InScope = false;
|
||||||
} else {
|
} else {
|
||||||
entry2InScope = true;
|
entry2InScope = true;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue