mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Use the nondeterministic interface also for BARECALL
This commit is contained in:
parent
45a910c2ca
commit
d89d63bf9c
@ -529,11 +529,11 @@ void CHC::endVisit(FunctionCall const& _funCall)
|
||||
break;
|
||||
case FunctionType::Kind::External:
|
||||
case FunctionType::Kind::BareStaticCall:
|
||||
case FunctionType::Kind::BareCall:
|
||||
externalFunctionCall(_funCall);
|
||||
SMTEncoder::endVisit(_funCall);
|
||||
break;
|
||||
case FunctionType::Kind::DelegateCall:
|
||||
case FunctionType::Kind::BareCall:
|
||||
case FunctionType::Kind::BareCallCode:
|
||||
case FunctionType::Kind::BareDelegateCall:
|
||||
case FunctionType::Kind::Creation:
|
||||
@ -746,23 +746,29 @@ void CHC::externalFunctionCall(FunctionCall const& _funCall)
|
||||
|
||||
FunctionType const& funType = dynamic_cast<FunctionType const&>(*_funCall.expression().annotation().type);
|
||||
auto kind = funType.kind();
|
||||
solAssert(kind == FunctionType::Kind::External || kind == FunctionType::Kind::BareStaticCall, "");
|
||||
solAssert(
|
||||
kind == FunctionType::Kind::External ||
|
||||
kind == FunctionType::Kind::BareCall ||
|
||||
kind == FunctionType::Kind::BareStaticCall,
|
||||
""
|
||||
);
|
||||
|
||||
bool usesStaticCall = kind == FunctionType::Kind::BareStaticCall;
|
||||
|
||||
solAssert(m_currentContract, "");
|
||||
auto function = functionCallToDefinition(_funCall, currentScopeContract(), m_currentContract);
|
||||
if (!function)
|
||||
return;
|
||||
|
||||
if (function)
|
||||
{
|
||||
usesStaticCall |= function->stateMutability() == StateMutability::Pure ||
|
||||
function->stateMutability() == StateMutability::View;
|
||||
for (auto var: function->returnParameters())
|
||||
m_context.variable(*var)->increaseIndex();
|
||||
}
|
||||
|
||||
if (!m_currentFunction || m_currentFunction->isConstructor())
|
||||
return;
|
||||
|
||||
auto preCallState = vector<smtutil::Expression>{state().state()} + currentStateVariables();
|
||||
bool usesStaticCall = kind == FunctionType::Kind::BareStaticCall ||
|
||||
function->stateMutability() == StateMutability::Pure ||
|
||||
function->stateMutability() == StateMutability::View;
|
||||
|
||||
if (!usesStaticCall)
|
||||
{
|
||||
|
@ -611,6 +611,7 @@ void SMTEncoder::endVisit(FunctionCall const& _funCall)
|
||||
break;
|
||||
case FunctionType::Kind::Internal:
|
||||
case FunctionType::Kind::BareStaticCall:
|
||||
case FunctionType::Kind::BareCall:
|
||||
break;
|
||||
case FunctionType::Kind::KECCAK256:
|
||||
case FunctionType::Kind::ECRecover:
|
||||
@ -653,7 +654,6 @@ void SMTEncoder::endVisit(FunctionCall const& _funCall)
|
||||
visitObjectCreation(_funCall);
|
||||
return;
|
||||
case FunctionType::Kind::DelegateCall:
|
||||
case FunctionType::Kind::BareCall:
|
||||
case FunctionType::Kind::BareCallCode:
|
||||
case FunctionType::Kind::BareDelegateCall:
|
||||
case FunctionType::Kind::Creation:
|
||||
|
Loading…
Reference in New Issue
Block a user