mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge pull request #9069 from ethereum/smt_try
[SMTChecker] Fix internal error on try/catch
This commit is contained in:
commit
96ce4abe0e
@ -29,6 +29,7 @@ Bugfixes:
|
|||||||
* SMTChecker: Fix internal error when applying arithmetic operators to fixed point variables.
|
* SMTChecker: Fix internal error when applying arithmetic operators to fixed point variables.
|
||||||
* SMTChecker: Fix internal error when short circuiting Boolean expressions with function calls in state variable initialization.
|
* SMTChecker: Fix internal error when short circuiting Boolean expressions with function calls in state variable initialization.
|
||||||
* SMTChecker: Fix internal error when assigning to index access inside branches.
|
* SMTChecker: Fix internal error when assigning to index access inside branches.
|
||||||
|
* SMTChecker: Fix internal error on try/catch clauses with parameters.
|
||||||
|
|
||||||
### 0.6.8 (2020-05-14)
|
### 0.6.8 (2020-05-14)
|
||||||
|
|
||||||
|
@ -274,6 +274,20 @@ bool SMTEncoder::visit(InlineAssembly const& _inlineAsm)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool SMTEncoder::visit(TryCatchClause const& _clause)
|
||||||
|
{
|
||||||
|
if (auto params = _clause.parameters())
|
||||||
|
for (auto const& var: params->parameters())
|
||||||
|
createVariable(*var);
|
||||||
|
|
||||||
|
m_errorReporter.warning(
|
||||||
|
7645_error,
|
||||||
|
_clause.location(),
|
||||||
|
"Assertion checker does not support try/catch clauses."
|
||||||
|
);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
bool SMTEncoder::visit(IfStatement const& _node)
|
bool SMTEncoder::visit(IfStatement const& _node)
|
||||||
{
|
{
|
||||||
_node.condition().accept(*this);
|
_node.condition().accept(*this);
|
||||||
|
@ -91,6 +91,7 @@ protected:
|
|||||||
bool visit(InlineAssembly const& _node) override;
|
bool visit(InlineAssembly const& _node) override;
|
||||||
void endVisit(Break const&) override {}
|
void endVisit(Break const&) override {}
|
||||||
void endVisit(Continue const&) override {}
|
void endVisit(Continue const&) override {}
|
||||||
|
bool visit(TryCatchClause const& _node) override;
|
||||||
|
|
||||||
/// Do not visit subtree if node is a RationalNumber.
|
/// Do not visit subtree if node is a RationalNumber.
|
||||||
/// Symbolic _expr is the rational literal.
|
/// Symbolic _expr is the rational literal.
|
||||||
|
@ -0,0 +1,12 @@
|
|||||||
|
pragma experimental SMTChecker;
|
||||||
|
contract C {
|
||||||
|
function g() public returns (uint) {
|
||||||
|
try this.g() returns (uint x) { x; }
|
||||||
|
catch Error(string memory s) { s; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// ====
|
||||||
|
// EVMVersion: >=byzantium
|
||||||
|
// ----
|
||||||
|
// Warning: (98-121): Assertion checker does not support try/catch clauses.
|
||||||
|
// Warning: (124-159): Assertion checker does not support try/catch clauses.
|
@ -0,0 +1,14 @@
|
|||||||
|
pragma experimental SMTChecker;
|
||||||
|
contract C {
|
||||||
|
function f() public {
|
||||||
|
try this.f() {}
|
||||||
|
catch (bytes memory x) {
|
||||||
|
x;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// ====
|
||||||
|
// EVMVersion: >=byzantium
|
||||||
|
// ----
|
||||||
|
// Warning: (83-85): Assertion checker does not support try/catch clauses.
|
||||||
|
// Warning: (88-122): Assertion checker does not support try/catch clauses.
|
Loading…
Reference in New Issue
Block a user