mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
[SMTChecker] Only check for overflow/underflow in the end of the function
This commit is contained in:
@@ -12,6 +12,5 @@ contract C
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning: (150-155): Overflow (resulting value larger than 2**256 - 1) happens here
|
||||
// Warning: (146-155): Overflow (resulting value larger than 2**256 - 1) happens here
|
||||
// Warning: (179-193): Assertion violation happens here
|
||||
// Warning: (150-155): Overflow (resulting value larger than 2**256 - 1) happens here
|
||||
|
||||
@@ -14,6 +14,5 @@ contract C
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning: (150-155): Overflow (resulting value larger than 2**256 - 1) happens here
|
||||
// Warning: (146-155): Overflow (resulting value larger than 2**256 - 1) happens here
|
||||
// Warning: (269-282): Assertion violation happens here
|
||||
// Warning: (150-155): Overflow (resulting value larger than 2**256 - 1) happens here
|
||||
|
||||
@@ -12,6 +12,9 @@ contract C
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning: (176-181): Overflow (resulting value larger than 2**256 - 1) happens here
|
||||
// Warning: (172-181): Overflow (resulting value larger than 2**256 - 1) happens here
|
||||
// Warning: (189-203): Assertion violation happens here
|
||||
// Warning: (176-181): Underflow (resulting value less than 0) happens here
|
||||
// Warning: (176-181): Overflow (resulting value larger than 2**256 - 1) happens here
|
||||
// Warning: (172-181): Underflow (resulting value less than 0) happens here
|
||||
// Warning: (172-181): Overflow (resulting value larger than 2**256 - 1) happens here
|
||||
// Warning: (126-129): Overflow (resulting value larger than 2**256 - 1) happens here
|
||||
|
||||
@@ -13,6 +13,9 @@ contract C
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning: (176-181): Overflow (resulting value larger than 2**256 - 1) happens here
|
||||
// Warning: (172-181): Overflow (resulting value larger than 2**256 - 1) happens here
|
||||
// Warning: (244-257): Assertion violation happens here
|
||||
// Warning: (176-181): Underflow (resulting value less than 0) happens here
|
||||
// Warning: (176-181): Overflow (resulting value larger than 2**256 - 1) happens here
|
||||
// Warning: (172-181): Underflow (resulting value less than 0) happens here
|
||||
// Warning: (172-181): Overflow (resulting value larger than 2**256 - 1) happens here
|
||||
// Warning: (126-129): Overflow (resulting value larger than 2**256 - 1) happens here
|
||||
|
||||
@@ -8,3 +8,5 @@ contract C {
|
||||
}
|
||||
// ----
|
||||
// Warning: (136-150): Assertion violation happens here
|
||||
// Warning: (115-120): Underflow (resulting value less than 0) happens here
|
||||
// Warning: (115-120): Overflow (resulting value larger than 2**256 - 1) happens here
|
||||
|
||||
@@ -10,3 +10,5 @@ contract C {
|
||||
}
|
||||
// ----
|
||||
// Warning: (167-181): Assertion violation happens here
|
||||
// Warning: (142-147): Underflow (resulting value less than 0) happens here
|
||||
// Warning: (142-147): Overflow (resulting value larger than 2**256 - 1) happens here
|
||||
|
||||
@@ -11,3 +11,5 @@ contract C {
|
||||
}
|
||||
// ----
|
||||
// Warning: (213-226): Assertion violation happens here
|
||||
// Warning: (142-147): Underflow (resulting value less than 0) happens here
|
||||
// Warning: (142-147): Overflow (resulting value larger than 2**256 - 1) happens here
|
||||
|
||||
@@ -11,3 +11,5 @@ contract C {
|
||||
}
|
||||
// ----
|
||||
// Warning: (138-144): For loop condition is always true.
|
||||
// Warning: (161-166): Underflow (resulting value less than 0) happens here
|
||||
// Warning: (161-166): Overflow (resulting value larger than 2**256 - 1) happens here
|
||||
|
||||
@@ -16,3 +16,5 @@ contract C {
|
||||
// ----
|
||||
// Warning: (115-121): Unused local variable.
|
||||
// Warning: (356-370): Assertion violation happens here
|
||||
// Warning: (285-290): Underflow (resulting value less than 0) happens here
|
||||
// Warning: (285-290): Overflow (resulting value larger than 2**256 - 1) happens here
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
pragma experimental SMTChecker;
|
||||
|
||||
contract C
|
||||
{
|
||||
function f(uint8 x) public pure returns (uint8) {
|
||||
x = 100;
|
||||
uint8 y = x * 3;
|
||||
assert(y == 44);
|
||||
x = 128;
|
||||
y = x * 4;
|
||||
assert(y == 0);
|
||||
return y;
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning: (120-125): Overflow (resulting value larger than 255) happens here
|
||||
// Warning: (163-168): Overflow (resulting value larger than 255) happens here
|
||||
@@ -0,0 +1,16 @@
|
||||
pragma experimental SMTChecker;
|
||||
|
||||
contract C
|
||||
{
|
||||
function f(int8 x) public pure returns (int8) {
|
||||
x = 100;
|
||||
int8 y = x * 2;
|
||||
assert(y == -56);
|
||||
y = x * 100;
|
||||
assert(y == 16);
|
||||
return y;
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning: (117-122): Overflow (resulting value larger than 127) happens here
|
||||
// Warning: (150-157): Overflow (resulting value larger than 127) happens here
|
||||
@@ -0,0 +1,18 @@
|
||||
pragma experimental SMTChecker;
|
||||
|
||||
contract C
|
||||
{
|
||||
function f(uint8 x) public pure returns (uint8) {
|
||||
uint8 y = x + 255;
|
||||
require(y >= x);
|
||||
x = 255;
|
||||
y = x + 1;
|
||||
assert(y == 0);
|
||||
y = x + 255;
|
||||
assert(y == 254);
|
||||
return y;
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning: (154-159): Overflow (resulting value larger than 255) happens here
|
||||
// Warning: (185-192): Overflow (resulting value larger than 255) happens here
|
||||
@@ -0,0 +1,19 @@
|
||||
pragma experimental SMTChecker;
|
||||
|
||||
contract C
|
||||
{
|
||||
function f(int8 x) public pure returns (int8) {
|
||||
x = 127;
|
||||
int8 y = x + 1;
|
||||
assert(y == -128);
|
||||
y = x + 127;
|
||||
assert(y == -2);
|
||||
x = -127;
|
||||
y = x + -127;
|
||||
assert(y == 2);
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning: (117-122): Overflow (resulting value larger than 127) happens here
|
||||
// Warning: (151-158): Overflow (resulting value larger than 127) happens here
|
||||
// Warning: (197-205): Underflow (resulting value less than -128) happens here
|
||||
@@ -0,0 +1,9 @@
|
||||
pragma experimental SMTChecker;
|
||||
|
||||
contract C
|
||||
{
|
||||
function add(uint x, uint y) public pure returns (uint) {
|
||||
require(x + y >= x);
|
||||
return x + y;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
pragma experimental SMTChecker;
|
||||
|
||||
contract C
|
||||
{
|
||||
function add(uint x, uint y) public pure returns (uint) {
|
||||
uint z = x + y;
|
||||
require(z >= x);
|
||||
return z;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
pragma experimental SMTChecker;
|
||||
|
||||
contract C
|
||||
{
|
||||
function div(uint256 a, uint256 b) internal pure returns (uint256) {
|
||||
require(b > 0);
|
||||
uint256 c = a / b;
|
||||
return c;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
pragma experimental SMTChecker;
|
||||
|
||||
contract C
|
||||
{
|
||||
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
|
||||
uint256 c;
|
||||
if (a != 0) {
|
||||
c = a * b;
|
||||
require(c / a == b);
|
||||
}
|
||||
return c;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
pragma experimental SMTChecker;
|
||||
|
||||
contract C
|
||||
{
|
||||
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
|
||||
if (a == 0) {
|
||||
return 0;
|
||||
}
|
||||
uint256 c = a * b;
|
||||
require(c / a == b);
|
||||
return c;
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning: (180-185): Division by zero happens here
|
||||
@@ -0,0 +1,10 @@
|
||||
pragma experimental SMTChecker;
|
||||
|
||||
contract C
|
||||
{
|
||||
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
|
||||
require(b <= a);
|
||||
uint256 c = a - b;
|
||||
return c;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
pragma experimental SMTChecker;
|
||||
|
||||
contract C
|
||||
{
|
||||
function f(uint8 x) public pure returns (uint) {
|
||||
x = 0;
|
||||
uint8 y = x - 1;
|
||||
assert(y == 255);
|
||||
y = x - 255;
|
||||
assert(y == 1);
|
||||
return y;
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning: (117-122): Underflow (resulting value less than 0) happens here
|
||||
// Warning: (150-157): Underflow (resulting value less than 0) happens here
|
||||
@@ -0,0 +1,21 @@
|
||||
pragma experimental SMTChecker;
|
||||
|
||||
contract C
|
||||
{
|
||||
function f(int8 x) public pure returns (int8) {
|
||||
x = -2;
|
||||
int8 y = x - 127;
|
||||
assert(y == 127);
|
||||
x = -128;
|
||||
y = x - 127;
|
||||
assert(y == 1);
|
||||
x = 127;
|
||||
y = x - (-127);
|
||||
assert(y == -2);
|
||||
return y;
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Warning: (116-123): Underflow (resulting value less than -128) happens here
|
||||
// Warning: (163-170): Underflow (resulting value less than -128) happens here
|
||||
// Warning: (207-217): Overflow (resulting value larger than 127) happens here
|
||||
@@ -20,6 +20,6 @@ contract C
|
||||
// Warning: (165-204): Assertion violation happens here
|
||||
// Warning: (208-240): Assertion violation happens here
|
||||
// Warning: (244-275): Assertion violation happens here
|
||||
// Warning: (311-316): Overflow (resulting value larger than 2**256 - 1) happens here
|
||||
// Warning: (304-332): Assertion violation happens here
|
||||
// Warning: (336-352): Assertion violation happens here
|
||||
// Warning: (356-379): Assertion violation happens here
|
||||
|
||||
Reference in New Issue
Block a user