Fix ICE in free functions

This commit is contained in:
Leo Alt
2021-05-03 10:57:11 +02:00
parent 996f3d31d5
commit 1642c10f6e
3 changed files with 51 additions and 3 deletions
@@ -0,0 +1,23 @@
==== Source: Address.sol ====
pragma solidity ^0.8.0;
function s() pure {}
==== Source: ERC20.sol ====
pragma solidity ^0.8.0;
import "./Address.sol";
function sub(uint256 a, uint256 b) pure returns (uint256) {
return a - b;
}
contract ERC20 {
mapping (address => uint256) private _balances;
function transferFrom(uint256 amount) public view {
sub(_balances[msg.sender], amount);
}
}
// ====
// SMTEngine: all
// ----
// Warning 3944: (ERC20.sol:121-126): CHC: Underflow (resulting value less than 0) happens here.\nCounterexample:\n\namount = 1\n\nTransaction trace:\nERC20.constructor()\nERC20.transferFrom(1)\n ERC20.sol:sub(0, 1) -- internal call
@@ -0,0 +1,28 @@
==== Source: Address.sol ====
pragma solidity ^0.8.0;
library Address { function s() internal pure {} }
==== Source: ERC20.sol ====
pragma solidity ^0.8.0;
import "./Address.sol";
library SafeMath {
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return a - b;
}
}
contract ERC20 {
using SafeMath for uint256;
using Address for address;
mapping (address => uint256) private _balances;
function transferFrom(uint256 amount) public view {
_balances[msg.sender].sub(amount);
}
}
// ====
// SMTEngine: all
// ----
// Warning 3944: (ERC20.sol:157-162): CHC: Underflow (resulting value less than 0) happens here.\nCounterexample:\n\namount = 1\n\nTransaction trace:\nERC20.constructor()\nERC20.transferFrom(1)\n SafeMath.sub(0, 1) -- internal call