mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
In this case I observed brittle behaviour with Z3, which behaved differently on two equivalent queries with only variables renamed. The reason for different versions was that in isoltest, we add version pragma to the source code and this changes the ids of AST nodes. These are in turn used to generate uniques names for SMT variables.
24 lines
664 B
Solidity
24 lines
664 B
Solidity
contract C {
|
|
uint[][] public a;
|
|
constructor() {
|
|
a.push();
|
|
a.push();
|
|
a.push();
|
|
a[2].push();
|
|
a[2].push();
|
|
a[2].push();
|
|
a[2].push();
|
|
}
|
|
function f() public view {
|
|
uint y = this.a(2,3);
|
|
assert(y == a[2][3]); // should hold
|
|
assert(y == 1); // should fail
|
|
}
|
|
}
|
|
// ====
|
|
// SMTEngine: all
|
|
// SMTIgnoreCex: yes
|
|
// ----
|
|
// Warning 6328: (242-256): CHC: Assertion violation happens here.\nCounterexample:\na = [[], [], [0, 0, 0, 0]]\ny = 0\n\nTransaction trace:\nC.constructor()\nState: a = [[], [], [0, 0, 0, 0]]\nC.f()
|
|
// Info 1391: CHC: 7 verification condition(s) proved safe! Enable the model checker option "show proved safe" to see all of them.
|