mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
[SMTChecker] Support array length
This commit is contained in:
+10
@@ -0,0 +1,10 @@
|
||||
pragma experimental SMTChecker;
|
||||
pragma experimental ABIEncoderV2;
|
||||
|
||||
contract C {
|
||||
function f(uint[][] memory arr) public pure {
|
||||
uint[][] memory arr2 = arr;
|
||||
assert(arr2[0].length == arr[0].length);
|
||||
assert(arr.length == arr2.length);
|
||||
}
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
pragma experimental SMTChecker;
|
||||
pragma experimental ABIEncoderV2;
|
||||
|
||||
contract C {
|
||||
uint[][] arr;
|
||||
uint[][] arr2;
|
||||
function f() public view {
|
||||
assert(arr2[0].length == arr[0].length);
|
||||
assert(arr2.length == arr.length);
|
||||
}
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
pragma experimental SMTChecker;
|
||||
pragma experimental ABIEncoderV2;
|
||||
|
||||
contract C {
|
||||
uint[][] arr;
|
||||
function f(uint[][] memory arr2) public {
|
||||
arr = arr2;
|
||||
assert(arr2[0].length == arr[0].length);
|
||||
assert(arr2.length == arr.length);
|
||||
}
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
pragma experimental SMTChecker;
|
||||
pragma experimental ABIEncoderV2;
|
||||
|
||||
contract C {
|
||||
uint[][] arr;
|
||||
function f() public view {
|
||||
uint[][] memory arr2 = arr;
|
||||
assert(arr2[0].length == arr[0].length);
|
||||
assert(arr2.length == arr.length);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
pragma experimental SMTChecker;
|
||||
|
||||
contract C {
|
||||
mapping (uint => uint[]) map;
|
||||
function f() public view {
|
||||
assert(map[0].length == map[1].length);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
pragma experimental SMTChecker;
|
||||
|
||||
contract C {
|
||||
mapping (uint => uint[]) map;
|
||||
function f(uint x, uint y) public view {
|
||||
require(x == y);
|
||||
assert(map[x].length == map[y].length);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
pragma experimental SMTChecker;
|
||||
|
||||
contract C {
|
||||
mapping (uint => uint[][]) map;
|
||||
function f(uint x, uint y) public view {
|
||||
require(x == y);
|
||||
assert(map[x][0].length == map[y][0].length);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
pragma experimental SMTChecker;
|
||||
|
||||
contract C {
|
||||
struct S {
|
||||
uint[] arr;
|
||||
}
|
||||
S s1;
|
||||
S s2;
|
||||
function f() public view {
|
||||
assert(s1.arr.length == s2.arr.length);
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning: (76-80): Assertion checker does not yet support the type of this variable.
|
||||
// Warning: (83-87): Assertion checker does not yet support the type of this variable.
|
||||
// Warning: (126-132): Assertion checker does not yet support this expression.
|
||||
// Warning: (126-128): Assertion checker does not yet implement type struct C.S storage ref
|
||||
// Warning: (143-149): Assertion checker does not yet support this expression.
|
||||
// Warning: (143-145): Assertion checker does not yet implement type struct C.S storage ref
|
||||
// Warning: (119-157): Assertion violation happens here
|
||||
@@ -0,0 +1,22 @@
|
||||
pragma experimental SMTChecker;
|
||||
|
||||
contract C {
|
||||
struct S {
|
||||
uint[][] arr;
|
||||
}
|
||||
S s1;
|
||||
S s2;
|
||||
function f() public view {
|
||||
assert(s1.arr[0].length == s2.arr[0].length);
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning: (78-82): Assertion checker does not yet support the type of this variable.
|
||||
// Warning: (85-89): Assertion checker does not yet support the type of this variable.
|
||||
// Warning: (128-134): Assertion checker does not yet support this expression.
|
||||
// Warning: (128-130): Assertion checker does not yet implement type struct C.S storage ref
|
||||
// Warning: (128-137): Assertion checker does not yet implement this expression.
|
||||
// Warning: (148-154): Assertion checker does not yet support this expression.
|
||||
// Warning: (148-150): Assertion checker does not yet implement type struct C.S storage ref
|
||||
// Warning: (148-157): Assertion checker does not yet implement this expression.
|
||||
// Warning: (121-165): Assertion violation happens here
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
pragma experimental SMTChecker;
|
||||
pragma experimental ABIEncoderV2;
|
||||
|
||||
contract C {
|
||||
function f(uint[][] memory arr) public pure {
|
||||
uint[][] memory arr2 = arr;
|
||||
assert(arr2.length == arr.length);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
pragma experimental SMTChecker;
|
||||
|
||||
contract C {
|
||||
function f(uint[] memory arr) public pure {
|
||||
uint[] memory arr2 = arr;
|
||||
assert(arr2.length == arr.length);
|
||||
}
|
||||
}
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
pragma experimental SMTChecker;
|
||||
|
||||
contract C {
|
||||
uint[] arr;
|
||||
uint[] arr2;
|
||||
function f() public {
|
||||
arr2 = arr;
|
||||
assert(arr2.length == arr.length);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
pragma experimental SMTChecker;
|
||||
|
||||
contract C {
|
||||
uint[] arr;
|
||||
function f() public view {
|
||||
uint x = arr.length;
|
||||
uint y = x;
|
||||
assert(arr.length == y);
|
||||
assert(arr.length != y);
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning: (153-176): Assertion violation happens here
|
||||
@@ -0,0 +1,9 @@
|
||||
pragma experimental SMTChecker;
|
||||
|
||||
contract C {
|
||||
uint[] arr;
|
||||
function f(uint[] memory marr) public {
|
||||
arr = marr;
|
||||
assert(marr.length == arr.length);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
pragma experimental SMTChecker;
|
||||
|
||||
contract C {
|
||||
uint[] arr;
|
||||
function f() public view {
|
||||
uint[] memory marr = arr;
|
||||
assert(marr.length == arr.length);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
pragma experimental SMTChecker;
|
||||
|
||||
contract C {
|
||||
uint[] arr;
|
||||
function f() public view {
|
||||
assert(arr.length == g().length);
|
||||
}
|
||||
function g() internal pure returns (uint[] memory) {
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
pragma experimental SMTChecker;
|
||||
|
||||
contract C {
|
||||
uint[] arr;
|
||||
function f() public view {
|
||||
uint[] memory arr2 = arr;
|
||||
arr2[2] = 3;
|
||||
assert(arr.length == arr2.length);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
pragma experimental SMTChecker;
|
||||
|
||||
contract C {
|
||||
uint[][] arr;
|
||||
uint[][] arr2;
|
||||
function f() public {
|
||||
uint x = arr[2].length;
|
||||
uint y = arr[3].length;
|
||||
uint z = arr.length;
|
||||
arr[2][333] = 444;
|
||||
assert(arr[2].length == x);
|
||||
assert(arr[3].length == y);
|
||||
assert(arr.length == z);
|
||||
}
|
||||
}
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
pragma experimental SMTChecker;
|
||||
|
||||
contract C {
|
||||
uint[][] arr;
|
||||
uint[][] arr2;
|
||||
function f() public {
|
||||
uint x = arr[2].length;
|
||||
uint y = arr[3].length;
|
||||
uint z = arr.length;
|
||||
arr[2][333] = 444;
|
||||
assert(arr[2].length != x);
|
||||
assert(arr[3].length != y);
|
||||
assert(arr.length != z);
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning: (198-224): Assertion violation happens here
|
||||
// Warning: (228-254): Assertion violation happens here
|
||||
// Warning: (258-281): Assertion violation happens here
|
||||
@@ -0,0 +1,17 @@
|
||||
pragma experimental SMTChecker;
|
||||
|
||||
contract C {
|
||||
uint[][] arr;
|
||||
uint[][] arr2;
|
||||
function f() public {
|
||||
uint x = arr[2].length;
|
||||
uint y = arr[3].length;
|
||||
uint z = arr.length;
|
||||
uint t = arr[5].length;
|
||||
arr[5] = arr[8];
|
||||
assert(arr[2].length == x);
|
||||
assert(arr[3].length == y);
|
||||
assert(arr.length == z);
|
||||
assert(arr[5].length == t);
|
||||
}
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
pragma experimental SMTChecker;
|
||||
|
||||
contract C {
|
||||
uint[][] arr;
|
||||
uint[][] arr2;
|
||||
function f() public {
|
||||
uint x = arr[2].length;
|
||||
uint y = arr[3].length;
|
||||
uint z = arr.length;
|
||||
uint t = arr[5].length;
|
||||
arr[5] = arr[8];
|
||||
assert(arr[2].length != x);
|
||||
assert(arr[3].length != y);
|
||||
assert(arr.length != z);
|
||||
assert(arr[5].length != t);
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning: (222-248): Assertion violation happens here
|
||||
// Warning: (252-278): Assertion violation happens here
|
||||
// Warning: (282-305): Assertion violation happens here
|
||||
// Warning: (309-335): Assertion violation happens here
|
||||
@@ -34,9 +34,7 @@ library MerkleProof {
|
||||
}
|
||||
|
||||
// ----
|
||||
// Warning: (755-767): Assertion checker does not yet support this expression.
|
||||
// Warning: (988-991): Assertion checker does not yet implement type abi
|
||||
// Warning: (988-1032): Assertion checker does not yet implement this type of function call.
|
||||
// Warning: (1175-1178): Assertion checker does not yet implement type abi
|
||||
// Warning: (1175-1219): Assertion checker does not yet implement this type of function call.
|
||||
// Warning: (755-767): Assertion checker does not yet support this expression.
|
||||
|
||||
@@ -10,6 +10,5 @@ contract C {
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning: (163-184): Error trying to invoke SMT solver.
|
||||
// Warning: (188-209): Error trying to invoke SMT solver.
|
||||
// Warning: (188-209): Assertion violation happens here
|
||||
|
||||
@@ -10,6 +10,5 @@ contract C {
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning: (171-190): Error trying to invoke SMT solver.
|
||||
// Warning: (194-213): Error trying to invoke SMT solver.
|
||||
// Warning: (194-213): Assertion violation happens here
|
||||
|
||||
@@ -12,4 +12,5 @@ contract C
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning: (191-212): Error trying to invoke SMT solver.
|
||||
// Warning: (191-212): Assertion violation happens here
|
||||
|
||||
@@ -12,4 +12,5 @@ contract C
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning: (197-216): Error trying to invoke SMT solver.
|
||||
// Warning: (197-216): Assertion violation happens here
|
||||
|
||||
@@ -4,6 +4,7 @@ contract C
|
||||
{
|
||||
uint[][] a;
|
||||
function f(bool b) public {
|
||||
a[1][1] = 512;
|
||||
a[2][3] = 4;
|
||||
if (b)
|
||||
delete a;
|
||||
@@ -16,3 +17,4 @@ contract C
|
||||
// ====
|
||||
// SMTSolvers: z3
|
||||
// ----
|
||||
// Warning: (191-211): Assertion violation happens here
|
||||
|
||||
@@ -7,5 +7,4 @@ contract C
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning: (86-101): Assertion checker does not yet support this expression.
|
||||
// Warning: (79-106): Assertion violation happens here
|
||||
|
||||
@@ -30,6 +30,7 @@ contract C
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning: (670-690): Error trying to invoke SMT solver.
|
||||
// Warning: (397-417): Assertion violation happens here
|
||||
// Warning: (463-481): Assertion violation happens here
|
||||
// Warning: (533-557): Assertion violation happens here
|
||||
|
||||
@@ -7,6 +7,4 @@ contract C
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning: (117-133): Assertion checker does not yet support this expression.
|
||||
// Warning: (137-153): Assertion checker does not yet support this expression.
|
||||
// Warning: (110-154): Assertion violation happens here
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
{
|
||||
"smtlib2responses":
|
||||
{
|
||||
"0x9c50514d749eabf3c13d97ad7d787e682dd99a114bad652b10a01b8c6ad6c1fb": "sat\n((|EVALEXPR_0| 1))\n",
|
||||
"0xb524e7c577188e2e36f0e67fead51269fa0f8b8fb41bff2d973dcf584d38cd1e": "sat\n((|EVALEXPR_0| 0))\n"
|
||||
"0x45598870c7c0bc4c4f61acad7e0dd9399fb28aa3df198379dd36a95d70814ef8": "sat\n((|EVALEXPR_0| 1))\n",
|
||||
"0xee335f8104fdb81b6e5fb418725923b81f7d78ffbd6bf95fb82e5593a1ac366a": "sat\n((|EVALEXPR_0| 0))\n"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
{
|
||||
"smtlib2responses":
|
||||
{
|
||||
"0x45c37a9829e623d7838d82b547d297cd446d6b5faff36c53a56862fcee50fb41": "sat\n((|EVALEXPR_0| 0))\n"
|
||||
"0x535c76d6b87d14bd4b4bf1014d14b8e91b648f073a68f9f267c4fe1df570bc14": "sat\n((|EVALEXPR_0| 0))\n"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user