mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	Merge pull request #14269 from blishko/smtchecker-fix-analysis-external-calls
[SMTChecker] Remember verification targets from trusted external calls
This commit is contained in:
		
						commit
						ceab4dfee5
					
				| @ -15,7 +15,7 @@ Compiler Features: | ||||
| Bugfixes: | ||||
|  * Commandline Interface: It is no longer possible to specify both ``--optimize-yul`` and ``--no-optimize-yul`` at the same time. | ||||
|  * SMTChecker: Fix encoding of side-effects inside ``if`` and ``ternary conditional``statements in the BMC engine. | ||||
| 
 | ||||
|  * SMTChecker: Fix false negative when a verification target can be violated only by trusted external call from another public function. | ||||
| 
 | ||||
| AST Changes: | ||||
|  * AST: Add the ``experimentalSolidity`` field to the ``SourceUnit`` nodes, which indicate whether the experimental parsing mode has been enabled via ``pragma experimental solidity``. | ||||
|  | ||||
| @ -1000,6 +1000,12 @@ void CHC::externalFunctionCallToTrustedCode(FunctionCall const& _funCall) | ||||
| 	if (!function) | ||||
| 		return; | ||||
| 
 | ||||
| 	// Remember the external call in the call graph to properly detect verification targets for the current function
 | ||||
| 	if (m_currentFunction && !m_currentFunction->isConstructor()) | ||||
| 		m_callGraph[m_currentFunction].insert(function); | ||||
| 	else | ||||
| 		m_callGraph[m_currentContract].insert(function); | ||||
| 
 | ||||
| 	// External call creates a new transaction.
 | ||||
| 	auto originalTx = state().tx(); | ||||
| 	Expression const* value = valueOption(callOptions); | ||||
|  | ||||
| @ -21,11 +21,8 @@ contract C { | ||||
| // SMTIgnoreOS: macos | ||||
| // ---- | ||||
| // Warning 4984: (47-50): CHC: Overflow (resulting value larger than 2**256 - 1) might happen here. | ||||
| // Warning 6328: (167-185): CHC: Assertion violation might happen here. | ||||
| // Warning 6328: (215-233): CHC: Assertion violation might happen here. | ||||
| // Warning 6328: (267-285): CHC: Assertion violation might happen here. | ||||
| // Warning 6328: (304-322): CHC: Assertion violation happens here. | ||||
| // Info 1391: CHC: 2 verification condition(s) proved safe! Enable the model checker option "show proved safe" to see all of them. | ||||
| // Warning 2661: (47-50): BMC: Overflow (resulting value larger than 2**256 - 1) happens here. | ||||
| // Warning 4661: (167-185): BMC: Assertion violation happens here. | ||||
| // Warning 4661: (215-233): BMC: Assertion violation happens here. | ||||
| // Warning 4661: (267-285): BMC: Assertion violation happens here. | ||||
|  | ||||
| @ -0,0 +1,23 @@ | ||||
| contract C { | ||||
| 
 | ||||
| 	uint v; | ||||
| 	bool guard = true; | ||||
| 
 | ||||
| 	function dec() public returns (uint) { | ||||
| 		if (guard) return 0; | ||||
| 		--v; | ||||
| 		return v; | ||||
| 	} | ||||
| 
 | ||||
| 	function f() public returns (uint) { | ||||
| 		guard = false; | ||||
| 		uint ret = this.dec(); | ||||
| 		guard = true; | ||||
| 		return ret; | ||||
| 	} | ||||
| } | ||||
| // ==== | ||||
| // SMTEngine: chc | ||||
| // SMTTargets: underflow | ||||
| // ---- | ||||
| // Warning 3944: (109-112): CHC: Underflow (resulting value less than 0) happens here. | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user