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:
|
Bugfixes:
|
||||||
* Commandline Interface: It is no longer possible to specify both ``--optimize-yul`` and ``--no-optimize-yul`` at the same time.
|
* 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 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 Changes:
|
||||||
* AST: Add the ``experimentalSolidity`` field to the ``SourceUnit`` nodes, which indicate whether the experimental parsing mode has been enabled via ``pragma experimental solidity``.
|
* 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)
|
if (!function)
|
||||||
return;
|
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.
|
// External call creates a new transaction.
|
||||||
auto originalTx = state().tx();
|
auto originalTx = state().tx();
|
||||||
Expression const* value = valueOption(callOptions);
|
Expression const* value = valueOption(callOptions);
|
||||||
|
@ -21,11 +21,8 @@ contract C {
|
|||||||
// SMTIgnoreOS: macos
|
// SMTIgnoreOS: macos
|
||||||
// ----
|
// ----
|
||||||
// Warning 4984: (47-50): CHC: Overflow (resulting value larger than 2**256 - 1) might happen here.
|
// 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: (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.
|
// 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 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: (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