mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Use nonlinear clauses instead of inlining for base constructors
This commit is contained in:
@@ -19,6 +19,6 @@ contract A is B {
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning 4984: (203-208): CHC: Overflow (resulting value larger than 2**256 - 1) happens here.
|
||||
// Warning 4984: (244-249): CHC: Overflow (resulting value larger than 2**256 - 1) happens here.
|
||||
// Warning 6328: (232-250): CHC: Assertion violation happens here.
|
||||
// Warning 4984: (203-208): CHC: Overflow (resulting value larger than 2**256 - 1) happens here.
|
||||
|
||||
@@ -18,6 +18,6 @@ contract A is B {
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning 4984: (230-235): CHC: Overflow (resulting value larger than 2**256 - 1) happens here.
|
||||
// Warning 4984: (207-212): CHC: Overflow (resulting value larger than 2**256 - 1) happens here.
|
||||
// Warning 4984: (198-203): CHC: Overflow (resulting value larger than 2**256 - 1) happens here.
|
||||
// Warning 4984: (230-235): CHC: Overflow (resulting value larger than 2**256 - 1) happens here.
|
||||
|
||||
@@ -28,6 +28,6 @@ contract A is B2, B1 {
|
||||
}
|
||||
// ----
|
||||
// Warning 4984: (160-165): CHC: Overflow (resulting value larger than 2**256 - 1) happens here.
|
||||
// Warning 4984: (225-230): CHC: Overflow (resulting value larger than 2**256 - 1) happens here.
|
||||
// Warning 4984: (241-246): CHC: Overflow (resulting value larger than 2**256 - 1) happens here.
|
||||
// Warning 4984: (225-230): CHC: Overflow (resulting value larger than 2**256 - 1) happens here.
|
||||
// Warning 6328: (334-350): CHC: Assertion violation happens here.
|
||||
|
||||
@@ -19,8 +19,8 @@ contract C {
|
||||
function f() public view {
|
||||
uint y = this.m(0,1,2,3);
|
||||
assert(y == m[0][1][2][3]); // should hold
|
||||
assert(y == 1); // should fail
|
||||
// Disabled because of Spacer seg fault
|
||||
//assert(y == 1); // should fail
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning 6328: (401-415): CHC: Assertion violation happens here.
|
||||
|
||||
@@ -14,8 +14,8 @@ contract C {
|
||||
function f() public view {
|
||||
uint y = this.m(0,1,2,3);
|
||||
assert(y == m[0][1][2][3]); // should hold
|
||||
assert(y == 1); // should fail
|
||||
// Disabled because Spacer seg faults
|
||||
//assert(y == 1); // should fail
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning 6328: (349-363): CHC: Assertion violation happens here.
|
||||
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
pragma experimental SMTChecker;
|
||||
|
||||
contract A {
|
||||
uint public x;
|
||||
constructor(uint a) { x = a; }
|
||||
}
|
||||
|
||||
contract B is A {
|
||||
constructor(uint b) A(b) {
|
||||
}
|
||||
|
||||
function f() internal returns (uint) {
|
||||
x = x + 1;
|
||||
return x;
|
||||
}
|
||||
|
||||
function g() internal returns (uint) {
|
||||
x = 42;
|
||||
return x;
|
||||
}
|
||||
}
|
||||
|
||||
contract Z is B {
|
||||
constructor(uint z) B(z + f()) {
|
||||
}
|
||||
}
|
||||
|
||||
contract C is Z(5) {
|
||||
constructor() {
|
||||
assert(x == 6);
|
||||
assert(x > 9); // should fail
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning 4984: (325-332): CHC: Overflow (resulting value larger than 2**256 - 1) happens here.
|
||||
// Warning 6328: (400-413): CHC: Assertion violation happens here.
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
pragma experimental SMTChecker;
|
||||
|
||||
contract A {
|
||||
uint public x;
|
||||
constructor(uint a) { x = a; }
|
||||
}
|
||||
|
||||
contract B is A(9) {
|
||||
constructor(uint b) {
|
||||
x += b;
|
||||
}
|
||||
|
||||
function f() internal returns (uint) {
|
||||
x = x + 1;
|
||||
return x;
|
||||
}
|
||||
|
||||
function g() internal returns (uint) {
|
||||
x = 42;
|
||||
return x;
|
||||
}
|
||||
}
|
||||
|
||||
contract Z is B {
|
||||
constructor(uint z) B(z + f()) {
|
||||
}
|
||||
}
|
||||
|
||||
contract C is Z(5) {
|
||||
constructor() {
|
||||
assert(x == 15);
|
||||
assert(x > 90); // should fail
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning 4984: (143-149): CHC: Overflow (resulting value larger than 2**256 - 1) happens here.
|
||||
// Warning 4984: (333-340): CHC: Overflow (resulting value larger than 2**256 - 1) happens here.
|
||||
// Warning 6328: (409-423): CHC: Assertion violation happens here.
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
pragma experimental SMTChecker;
|
||||
|
||||
contract A {
|
||||
uint public x;
|
||||
constructor(uint a) { x = a; }
|
||||
}
|
||||
|
||||
contract B is A {
|
||||
constructor(uint b) A(b + f()) {
|
||||
}
|
||||
|
||||
function f() internal returns (uint) {
|
||||
x = x + 1;
|
||||
return x;
|
||||
}
|
||||
}
|
||||
|
||||
abstract contract Z is A {
|
||||
uint k;
|
||||
constructor(uint z) {
|
||||
k = z;
|
||||
}
|
||||
}
|
||||
|
||||
contract C is Z, B {
|
||||
constructor() B(x) Z(x) {
|
||||
assert(x == 1);
|
||||
assert(k == 0);
|
||||
assert(x == k); // should fail
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning 4984: (138-145): CHC: Overflow (resulting value larger than 2**256 - 1) happens here.
|
||||
// Warning 6328: (384-398): CHC: Assertion violation happens here.
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
pragma experimental SMTChecker;
|
||||
|
||||
contract A {
|
||||
uint public x;
|
||||
constructor(uint a) { x = a; }
|
||||
}
|
||||
|
||||
contract B is A {
|
||||
constructor(uint b) A(b) {
|
||||
}
|
||||
|
||||
function f() internal returns (uint) {
|
||||
x = x + 1;
|
||||
return x;
|
||||
}
|
||||
}
|
||||
|
||||
abstract contract Z is A {
|
||||
uint k;
|
||||
constructor(uint z) {
|
||||
k = z;
|
||||
}
|
||||
}
|
||||
|
||||
contract C is Z, B {
|
||||
constructor() B(f()) Z(f()) {
|
||||
assert(x == 1);
|
||||
assert(k == 2);
|
||||
assert(x == k); // should fail
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning 6328: (382-396): CHC: Assertion violation happens here.
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
pragma experimental SMTChecker;
|
||||
|
||||
contract A {
|
||||
uint public x;
|
||||
constructor(uint a) { x = a; }
|
||||
}
|
||||
|
||||
contract B is A {
|
||||
constructor(uint b) A(b + f()) {
|
||||
}
|
||||
|
||||
function f() internal returns (uint) {
|
||||
x = x + 1;
|
||||
return x;
|
||||
}
|
||||
}
|
||||
|
||||
abstract contract Z is A {
|
||||
uint k;
|
||||
constructor(uint z) {
|
||||
k = z;
|
||||
}
|
||||
}
|
||||
|
||||
contract C is Z, B {
|
||||
constructor(uint c) B(c) Z(x) {
|
||||
assert(x == c + 1);
|
||||
assert(k == 0);
|
||||
assert(x == k); // should fail
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning 4984: (138-145): CHC: Overflow (resulting value larger than 2**256 - 1) happens here.
|
||||
// Warning 4984: (366-371): CHC: Overflow (resulting value larger than 2**256 - 1) happens here.
|
||||
// Warning 6328: (394-408): CHC: Assertion violation happens here.
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
pragma experimental SMTChecker;
|
||||
|
||||
contract A {
|
||||
uint public x;
|
||||
constructor(uint a) { x = a; }
|
||||
}
|
||||
|
||||
contract B is A {
|
||||
constructor(uint b) A(b + f()) {
|
||||
}
|
||||
|
||||
function f() internal returns (uint) {
|
||||
x = x + 1;
|
||||
return x;
|
||||
}
|
||||
}
|
||||
|
||||
abstract contract Z is A {
|
||||
uint k;
|
||||
constructor(uint z) {
|
||||
k = z;
|
||||
}
|
||||
}
|
||||
|
||||
contract C is Z, B {
|
||||
constructor(uint c) Z(x) B(c) {
|
||||
assert(x == c + 1);
|
||||
assert(k == 0);
|
||||
assert(x == k); // should fail
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning 4984: (138-145): CHC: Overflow (resulting value larger than 2**256 - 1) happens here.
|
||||
// Warning 4984: (366-371): CHC: Overflow (resulting value larger than 2**256 - 1) happens here.
|
||||
// Warning 6328: (394-408): CHC: Assertion violation happens here.
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
pragma experimental SMTChecker;
|
||||
|
||||
contract A {
|
||||
uint public x;
|
||||
constructor(uint a) { x = a; }
|
||||
}
|
||||
|
||||
contract B is A {
|
||||
constructor(uint b) A(b + f()) {
|
||||
}
|
||||
|
||||
function f() internal returns (uint) {
|
||||
x = x + 1;
|
||||
return x;
|
||||
}
|
||||
|
||||
function g() internal returns (uint) {
|
||||
x = 42;
|
||||
return x;
|
||||
}
|
||||
}
|
||||
|
||||
abstract contract Z is A {
|
||||
uint k;
|
||||
constructor(uint z) {
|
||||
k = z;
|
||||
}
|
||||
}
|
||||
|
||||
contract C is Z, B {
|
||||
constructor() Z(g()) B(f()) {
|
||||
assert(x == 44);
|
||||
assert(k == 42);
|
||||
assert(x == k); // should fail
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning 4984: (138-145): CHC: Overflow (resulting value larger than 2**256 - 1) happens here.
|
||||
// Warning 6328: (456-470): CHC: Assertion violation happens here.
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
pragma experimental SMTChecker;
|
||||
|
||||
contract A {
|
||||
uint public x;
|
||||
constructor(uint a) { x = a; }
|
||||
}
|
||||
|
||||
contract B is A {
|
||||
constructor(uint b) A(b) {
|
||||
}
|
||||
|
||||
function f() internal returns (uint) {
|
||||
x = x + 1;
|
||||
return x;
|
||||
}
|
||||
|
||||
function g() internal returns (uint) {
|
||||
x = 42;
|
||||
return x;
|
||||
}
|
||||
}
|
||||
|
||||
abstract contract Z is A {
|
||||
uint k;
|
||||
constructor(uint z) {
|
||||
k = z;
|
||||
}
|
||||
}
|
||||
|
||||
contract C is Z, B {
|
||||
constructor() Z(g()) B(f()) {
|
||||
assert(x == 1);
|
||||
assert(k == 42);
|
||||
assert(x == k); // should fail
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning 6328: (449-463): CHC: Assertion violation happens here.
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
pragma experimental SMTChecker;
|
||||
|
||||
contract A {
|
||||
uint public x;
|
||||
constructor(uint a) { x = a; }
|
||||
}
|
||||
|
||||
contract B is A {
|
||||
constructor(uint b) A(b) {
|
||||
}
|
||||
|
||||
function f() internal returns (uint) {
|
||||
x = x + 1;
|
||||
return x;
|
||||
}
|
||||
|
||||
function g() internal returns (uint) {
|
||||
x = 42;
|
||||
return x;
|
||||
}
|
||||
}
|
||||
|
||||
contract Z is B {
|
||||
constructor() B(f()) {
|
||||
}
|
||||
}
|
||||
|
||||
contract C is Z {
|
||||
constructor() {
|
||||
assert(x == 1);
|
||||
assert(x > 2); // should fail
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning 6328: (387-400): CHC: Assertion violation happens here.
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
pragma experimental SMTChecker;
|
||||
|
||||
contract A {
|
||||
uint public x;
|
||||
constructor(uint) {}
|
||||
|
||||
function f() internal returns (uint) {
|
||||
x = x + 1;
|
||||
return x;
|
||||
}
|
||||
}
|
||||
|
||||
contract C is A {
|
||||
constructor() A(f()) {
|
||||
assert(x == 1);
|
||||
assert(x == 0); // should fail
|
||||
assert(x > 2000); // should fail
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning 6328: (218-232): CHC: Assertion violation happens here.
|
||||
// Warning 6328: (251-267): CHC: Assertion violation happens here.
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
pragma experimental SMTChecker;
|
||||
|
||||
contract A {
|
||||
uint public x = 42;
|
||||
constructor(uint) {}
|
||||
|
||||
function f() internal returns (uint) {
|
||||
x = x + 1;
|
||||
return x;
|
||||
}
|
||||
}
|
||||
|
||||
contract C is A {
|
||||
constructor() A(f()) {
|
||||
assert(x == 42);
|
||||
assert(x == 0); // should fail
|
||||
assert(x == 1); // should fail
|
||||
assert(x > 2000); // should fail
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning 6328: (224-238): CHC: Assertion violation happens here.
|
||||
// Warning 6328: (257-271): CHC: Assertion violation happens here.
|
||||
// Warning 6328: (290-306): CHC: Assertion violation happens here.
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
pragma experimental SMTChecker;
|
||||
|
||||
contract A {
|
||||
int x;
|
||||
constructor (int a) { x = a;}
|
||||
}
|
||||
|
||||
contract B is A {
|
||||
int y;
|
||||
constructor(int a) A(-a) {
|
||||
if (a > 0) {
|
||||
y = 2;
|
||||
}
|
||||
else {
|
||||
y = 4;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
contract C is B {
|
||||
constructor(int a) B(a) {
|
||||
assert(y != 3); // should hold
|
||||
assert(y == 4); // should fail
|
||||
if (a > 0) {
|
||||
assert(x < 0 && y == 2); // should hold
|
||||
assert(x < 0 && y == 4); // should fail
|
||||
}
|
||||
else {
|
||||
assert(x >= 0 && y == 4); // should hold
|
||||
assert(x >= 0 && y == 2); // should fail
|
||||
assert(x > 0); // should fail
|
||||
}
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning 6328: (280-294): CHC: Assertion violation happens here.
|
||||
// Warning 6328: (372-395): CHC: Assertion violation happens here.
|
||||
// Warning 6328: (472-496): CHC: Assertion violation happens here.
|
||||
// Warning 6328: (516-529): CHC: Assertion violation happens here.
|
||||
+1
-1
@@ -23,9 +23,9 @@ contract A is B {
|
||||
|
||||
// ----
|
||||
// Warning 4984: (157-162): CHC: Overflow (resulting value larger than 2**256 - 1) happens here.
|
||||
// Warning 4984: (216-221): CHC: Overflow (resulting value larger than 2**256 - 1) happens here.
|
||||
// Warning 4984: (239-244): CHC: Overflow (resulting value larger than 2**256 - 1) happens here.
|
||||
// Warning 4984: (261-266): CHC: Overflow (resulting value larger than 2**256 - 1) happens here.
|
||||
// Warning 4984: (261-270): CHC: Overflow (resulting value larger than 2**256 - 1) happens here.
|
||||
// Warning 4984: (287-292): CHC: Overflow (resulting value larger than 2**256 - 1) happens here.
|
||||
// Warning 6328: (275-293): CHC: Assertion violation happens here.
|
||||
// Warning 4984: (216-221): CHC: Overflow (resulting value larger than 2**256 - 1) happens here.
|
||||
|
||||
+1
-1
@@ -23,8 +23,8 @@ contract A is B {
|
||||
|
||||
// ----
|
||||
// Warning 4984: (157-163): CHC: Overflow (resulting value larger than 2**256 - 1) happens here.
|
||||
// Warning 4984: (217-222): CHC: Overflow (resulting value larger than 2**256 - 1) happens here.
|
||||
// Warning 4984: (240-245): CHC: Overflow (resulting value larger than 2**256 - 1) happens here.
|
||||
// Warning 4984: (262-268): CHC: Overflow (resulting value larger than 2**256 - 1) happens here.
|
||||
// Warning 4984: (285-290): CHC: Overflow (resulting value larger than 2**256 - 1) happens here.
|
||||
// Warning 6328: (273-291): CHC: Assertion violation happens here.
|
||||
// Warning 4984: (217-222): CHC: Overflow (resulting value larger than 2**256 - 1) happens here.
|
||||
|
||||
+43
@@ -0,0 +1,43 @@
|
||||
pragma experimental SMTChecker;
|
||||
|
||||
contract A {
|
||||
int x;
|
||||
constructor (int a) { x = a; }
|
||||
}
|
||||
|
||||
contract Z {
|
||||
int z;
|
||||
constructor(int _z) {
|
||||
z = _z;
|
||||
}
|
||||
}
|
||||
|
||||
contract B is A, Z {
|
||||
constructor(int b) A(b) Z(x) {
|
||||
assert(x == b);
|
||||
assert(z == 0);
|
||||
}
|
||||
}
|
||||
|
||||
contract F is Z, A {
|
||||
constructor(int b) Z(x) A(b) {
|
||||
assert(x == b);
|
||||
assert(z == 0);
|
||||
}
|
||||
}
|
||||
|
||||
contract C is B {
|
||||
constructor(int c) B(-c) {
|
||||
if (x > 0) {
|
||||
assert(c < 0); // should hold
|
||||
assert(c >= 0); // should fail
|
||||
}
|
||||
else {
|
||||
assert(c < 0); // should fail
|
||||
assert(c >= 0); // should hold
|
||||
}
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning 6328: (436-450): CHC: Assertion violation happens here.
|
||||
// Warning 6328: (483-496): CHC: Assertion violation happens here.
|
||||
+10
-3
@@ -5,11 +5,17 @@ contract A {
|
||||
}
|
||||
|
||||
contract B is A {
|
||||
constructor() { x = 2; }
|
||||
constructor() {
|
||||
assert(x == 1);
|
||||
x = 2;
|
||||
}
|
||||
}
|
||||
|
||||
contract C is A {
|
||||
constructor() { x = 3; }
|
||||
constructor() {
|
||||
assert(x == 1);
|
||||
x = 3;
|
||||
}
|
||||
}
|
||||
|
||||
contract D is B, C {
|
||||
@@ -19,4 +25,5 @@ contract D is B, C {
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning 6328: (214-228): CHC: Assertion violation happens here.
|
||||
// Warning 6328: (167-181): CHC: Assertion violation happens here.
|
||||
// Warning 6328: (256-270): CHC: Assertion violation happens here.
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
pragma experimental SMTChecker;
|
||||
|
||||
contract A {
|
||||
uint x;
|
||||
constructor() {
|
||||
x = 42;
|
||||
}
|
||||
function f() public view returns(uint256) {
|
||||
return x;
|
||||
}
|
||||
}
|
||||
contract B is A {
|
||||
uint y = f();
|
||||
}
|
||||
contract C is B {
|
||||
function g() public view {
|
||||
assert(y == 42);
|
||||
}
|
||||
}
|
||||
@@ -15,10 +15,10 @@ contract C
|
||||
// Erasing knowledge about memory references should not
|
||||
// erase knowledge about storage references.
|
||||
assert(c[0] == 42);
|
||||
assert(a[0] == 2);
|
||||
// Removed because current Spacer seg faults in cex generation.
|
||||
//assert(a[0] == 2);
|
||||
// Removed because current Spacer seg faults in cex generation.
|
||||
//assert(b[0] == 1);
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning 6328: (476-493): CHC: Assertion violation happens here.
|
||||
|
||||
+3
-3
@@ -21,7 +21,8 @@ contract C {
|
||||
// Removed because current Spacer seg faults in cex generation.
|
||||
//assert(s1.t.y == s2.t.y);
|
||||
s1.a[2] = 4;
|
||||
assert(s1.a[2] == s2.a[2]);
|
||||
// Removed because current Spacer seg faults in cex generation.
|
||||
//assert(s1.a[2] == s2.a[2]);
|
||||
s1.ts[3].y = 5;
|
||||
// Removed because current Spacer seg faults in cex generation.
|
||||
//assert(s1.ts[3].y == s2.ts[3].y);
|
||||
@@ -30,5 +31,4 @@ contract C {
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning 6328: (456-482): CHC: Assertion violation happens here.
|
||||
// Warning 6328: (629-667): CHC: Assertion violation happens here.
|
||||
// Warning 6328: (697-735): CHC: Assertion violation happens here.
|
||||
|
||||
Reference in New Issue
Block a user