[SMTChecker] Support bound function calls

This commit is contained in:
Leonardo Alt
2018-11-19 15:29:00 +01:00
parent 5be45e736d
commit 06c3f0953a
6 changed files with 91 additions and 0 deletions
@@ -0,0 +1,19 @@
pragma experimental SMTChecker;
library L
{
function add(uint x, uint y) internal pure returns (uint) {
require(x < 1000);
require(y < 1000);
return x + y;
}
}
contract C
{
using L for uint;
function f(uint x) public pure {
uint y = x.add(999);
assert(y < 10000);
}
}
@@ -0,0 +1,21 @@
pragma experimental SMTChecker;
library L
{
function add(uint x, uint y) internal pure returns (uint) {
require(x < 1000);
require(y < 1000);
return x + y;
}
}
contract C
{
using L for uint;
function f(uint x) public pure {
uint y = x.add(999);
assert(y < 1000);
}
}
// ----
// Warning: (261-277): Assertion violation happens here
@@ -0,0 +1,18 @@
pragma experimental SMTChecker;
library L
{
function add(uint x, uint y) internal pure returns (uint) {
require(x < 1000);
require(y < 1000);
return x + y;
}
}
contract C
{
function f(uint x) public pure {
uint y = L.add(x, 999);
assert(y < 10000);
}
}
@@ -0,0 +1,20 @@
pragma experimental SMTChecker;
library L
{
function add(uint x, uint y) internal pure returns (uint) {
require(x < 1000);
require(y < 1000);
return x + y;
}
}
contract C
{
function f(uint x) public pure {
uint y = L.add(x, 999);
assert(y < 1000);
}
}
// ----
// Warning: (245-261): Assertion violation happens here