[SMTChecker] Fix ICE on compound assignment to array index

This commit is contained in:
Leonardo Alt
2020-07-16 17:44:10 +02:00
parent f9753a5101
commit 672633af0a
6 changed files with 53 additions and 8 deletions
@@ -1,13 +1,10 @@
pragma experimental SMTChecker;
contract C {
function f(bool b) public pure {
uint v = 0;
int[1] c;
function f(bool b) public {
if (b)
v |= 1;
assert(v == 1);
c[0] |= 1;
}
}
// ----
// Warning 9149: (106-112): Assertion checker does not yet implement this assignment operator.
// Warning 4661: (116-130): Assertion violation happens here
// Warning 9149: (97-106): Assertion checker does not yet implement this assignment operator.
@@ -0,0 +1,10 @@
pragma experimental SMTChecker;
contract C {
int[1][20] c;
function f(bool b) public {
if (b)
c[10][0] |= 1;
}
}
// ----
// Warning 9149: (101-114): Assertion checker does not yet implement this assignment operator.
@@ -0,0 +1,16 @@
pragma experimental SMTChecker;
contract C {
struct S {
uint x;
}
S s;
function f(bool b) public {
if (b)
s.x |= 1;
}
}
// ----
// Warning 8115: (71-74): Assertion checker does not yet support the type of this variable.
// Warning 7650: (117-120): Assertion checker does not yet support this expression.
// Warning 8364: (117-118): Assertion checker does not yet implement type struct C.S storage ref
// Warning 9149: (117-125): Assertion checker does not yet implement this assignment operator.
@@ -0,0 +1,17 @@
pragma experimental SMTChecker;
contract C {
struct S {
uint[] x;
}
S s;
function f(bool b) public {
if (b)
s.x[2] |= 1;
}
}
// ----
// Warning 8115: (73-76): Assertion checker does not yet support the type of this variable.
// Warning 7650: (119-122): Assertion checker does not yet support this expression.
// Warning 8364: (119-120): Assertion checker does not yet implement type struct C.S storage ref
// Warning 9118: (119-125): Assertion checker does not yet implement this expression.
// Warning 9149: (119-130): Assertion checker does not yet implement this assignment operator.