mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Don't erase things for BMC if function call is staticcall
This commit is contained in:
parent
a55685c04f
commit
718f392849
@ -587,6 +587,11 @@ void BMC::internalOrExternalFunctionCall(FunctionCall const& _funCall)
|
|||||||
_funCall.location(),
|
_funCall.location(),
|
||||||
"BMC does not yet implement this type of function call."
|
"BMC does not yet implement this type of function call."
|
||||||
);
|
);
|
||||||
|
else if (funType.kind() == FunctionType::Kind::BareStaticCall)
|
||||||
|
{
|
||||||
|
// Do nothing here.
|
||||||
|
// Neither storage nor balances should be modified.
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_externalFunctionCallHappened = true;
|
m_externalFunctionCallHappened = true;
|
||||||
|
@ -0,0 +1,13 @@
|
|||||||
|
contract C {
|
||||||
|
function f(address _a) public {
|
||||||
|
uint b1 = address(this).balance;
|
||||||
|
_a.call("");
|
||||||
|
uint b2 = address(this).balance;
|
||||||
|
assert(b1 == b2); // should fail
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// ====
|
||||||
|
// SMTEngine: bmc
|
||||||
|
// ----
|
||||||
|
// Warning 9302: (83-94): Return value of low-level calls not used.
|
||||||
|
// Warning 4661: (133-149): BMC: Assertion violation happens here.
|
@ -0,0 +1,13 @@
|
|||||||
|
contract C {
|
||||||
|
uint x;
|
||||||
|
function f(address _a) public {
|
||||||
|
x = 2;
|
||||||
|
_a.call("");
|
||||||
|
assert(x == 2); // should fail
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// ====
|
||||||
|
// SMTEngine: bmc
|
||||||
|
// ----
|
||||||
|
// Warning 9302: (66-77): Return value of low-level calls not used.
|
||||||
|
// Warning 4661: (81-95): BMC: Assertion violation happens here.
|
@ -0,0 +1,12 @@
|
|||||||
|
contract C {
|
||||||
|
function f(address _a) public view {
|
||||||
|
uint b1 = address(this).balance;
|
||||||
|
_a.staticcall("");
|
||||||
|
uint b2 = address(this).balance;
|
||||||
|
assert(b1 == b2); // should hold
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// ====
|
||||||
|
// SMTEngine: bmc
|
||||||
|
// ----
|
||||||
|
// Warning 9302: (88-105): Return value of low-level calls not used.
|
@ -0,0 +1,12 @@
|
|||||||
|
contract C {
|
||||||
|
uint x;
|
||||||
|
function f(address _a) public {
|
||||||
|
x = 2;
|
||||||
|
_a.staticcall("");
|
||||||
|
assert(x == 2); // should hold
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// ====
|
||||||
|
// SMTEngine: bmc
|
||||||
|
// ----
|
||||||
|
// Warning 9302: (66-83): Return value of low-level calls not used.
|
Loading…
Reference in New Issue
Block a user