mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge pull request #9731 from ethereum/smt_import
[SMTChecker] Fix CHC encoding
This commit is contained in:
@@ -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.
|
||||
Reference in New Issue
Block a user