mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	Merge pull request #11333 from ethereum/smt_fix_free_functions
[SMTChecker] Fix ICE in free functions
This commit is contained in:
		
						commit
						fe4822a1d2
					
				| @ -2960,9 +2960,6 @@ vector<smtutil::Expression> SMTEncoder::symbolicArguments(FunctionCall const& _f | ||||
| 
 | ||||
| void SMTEncoder::collectFreeFunctions(set<SourceUnit const*, ASTNode::CompareByID> const& _sources) | ||||
| { | ||||
| 	if (!m_freeFunctions.empty()) | ||||
| 		return; | ||||
| 
 | ||||
| 	for (auto source: _sources) | ||||
| 		for (auto node: source->nodes()) | ||||
| 			if (auto function = dynamic_cast<FunctionDefinition const*>(node.get())) | ||||
|  | ||||
| @ -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 | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user