Merge pull request #9731 from ethereum/smt_import

[SMTChecker] Fix CHC encoding
This commit is contained in:
Leonardo
2020-09-12 00:56:04 +02:00
committed by GitHub
14 changed files with 195 additions and 91 deletions
@@ -0,0 +1,25 @@
==== Source: ====
import "B.sol";
pragma experimental SMTChecker;
contract C is B {
function h(uint _x) public view {
assert(_x < x);
}
}
==== Source: A.sol ====
contract A {
uint x;
function f(uint _x) public {
x = _x;
}
}
==== Source: B.sol ====
import "A.sol";
contract B is A {
function g(uint _x) public view {
assert(_x > x);
}
}
// ----
// Warning 6328: (103-117): Assertion violation happens here.
// Warning 6328: (B.sol:71-85): Assertion violation happens here.
@@ -0,0 +1,27 @@
==== Source: ====
import "B.sol";
pragma experimental SMTChecker;
contract C is B {
function h(uint _x) public view {
assert(_x < x);
}
}
==== Source: A.sol ====
contract A {
uint x;
function f(uint _x) public {
x = _x;
}
}
==== Source: B.sol ====
import "A.sol";
pragma experimental SMTChecker;
contract B is A {
function g(uint _x) public view {
assert(_x > x);
}
}
// ----
// Warning 6328: (B.sol:103-117): Assertion violation happens here.
// Warning 6328: (103-117): Assertion violation happens here.
// Warning 6328: (B.sol:103-117): Assertion violation happens here.
@@ -0,0 +1,26 @@
==== Source: ====
import "A.sol";
pragma experimental SMTChecker;
contract C is A {
function h(uint _x) public view {
assert(_x < x);
}
}
==== Source: A.sol ====
contract A {
uint x;
function f(uint _x) public {
x = _x;
}
}
==== Source: B.sol ====
import "A.sol";
pragma experimental SMTChecker;
contract B is A {
function g(uint _x) public view {
assert(_x > x);
}
}
// ----
// Warning 6328: (103-117): Assertion violation happens here.
// Warning 6328: (B.sol:103-117): Assertion violation happens here.
@@ -0,0 +1,6 @@
==== Source: A.sol ====
contract A { function f() public {} }
==== Source:====
import "A.sol";
pragma experimental SMTChecker;
contract C is A {}
@@ -0,0 +1,12 @@
==== Source: ====
import "A.sol";
pragma experimental SMTChecker;
contract C is A {}
==== Source: A.sol ====
contract A {
function f(uint x) public pure {
assert(x > 0);
}
}
// ----
// Warning 6328: (A.sol:49-62): Assertion violation happens here.
@@ -0,0 +1,14 @@
==== Source: ====
import "A.sol";
pragma experimental SMTChecker;
contract C is A {}
==== Source: A.sol ====
pragma experimental SMTChecker;
contract A {
function f(uint x) public pure {
assert(x > 0);
}
}
// ----
// Warning 6328: (A.sol:81-94): Assertion violation happens here.
// Warning 6328: (A.sol:81-94): Assertion violation happens here.
@@ -1,19 +0,0 @@
pragma experimental SMTChecker;
contract C {
function f(uint8 a, uint8 b) internal pure returns (uint256) {
return a >> b;
}
function t() public pure {
assert(f(0x66, 0) == 0x66);
// Fails because the above is true.
assert(f(0x66, 0) == 0x6);
assert(f(0x66, 8) == 0);
// Fails because the above is true.
assert(f(0x66, 8) == 1);
}
}
// ----
// Warning 6328: (240-265): Assertion violation happens here.
// Warning 6328: (335-358): Assertion violation happens here.