Skip to content

Commit d89d63b

Browse files
author
Leo Alt
committed
Use the nondeterministic interface also for BARECALL
1 parent 45a910c commit d89d63b

File tree

2 files changed

+17
-11
lines changed

2 files changed

+17
-11
lines changed

libsolidity/formal/CHC.cpp

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -529,11 +529,11 @@ void CHC::endVisit(FunctionCall const& _funCall)
529529
break;
530530
case FunctionType::Kind::External:
531531
case FunctionType::Kind::BareStaticCall:
532+
case FunctionType::Kind::BareCall:
532533
externalFunctionCall(_funCall);
533534
SMTEncoder::endVisit(_funCall);
534535
break;
535536
case FunctionType::Kind::DelegateCall:
536-
case FunctionType::Kind::BareCall:
537537
case FunctionType::Kind::BareCallCode:
538538
case FunctionType::Kind::BareDelegateCall:
539539
case FunctionType::Kind::Creation:
@@ -746,23 +746,29 @@ void CHC::externalFunctionCall(FunctionCall const& _funCall)
746746

747747
FunctionType const& funType = dynamic_cast<FunctionType const&>(*_funCall.expression().annotation().type);
748748
auto kind = funType.kind();
749-
solAssert(kind == FunctionType::Kind::External || kind == FunctionType::Kind::BareStaticCall, "");
749+
solAssert(
750+
kind == FunctionType::Kind::External ||
751+
kind == FunctionType::Kind::BareCall ||
752+
kind == FunctionType::Kind::BareStaticCall,
753+
""
754+
);
755+
756+
bool usesStaticCall = kind == FunctionType::Kind::BareStaticCall;
750757

751758
solAssert(m_currentContract, "");
752759
auto function = functionCallToDefinition(_funCall, currentScopeContract(), m_currentContract);
753-
if (!function)
754-
return;
755-
756-
for (auto var: function->returnParameters())
757-
m_context.variable(*var)->increaseIndex();
760+
if (function)
761+
{
762+
usesStaticCall |= function->stateMutability() == StateMutability::Pure ||
763+
function->stateMutability() == StateMutability::View;
764+
for (auto var: function->returnParameters())
765+
m_context.variable(*var)->increaseIndex();
766+
}
758767

759768
if (!m_currentFunction || m_currentFunction->isConstructor())
760769
return;
761770

762771
auto preCallState = vector<smtutil::Expression>{state().state()} + currentStateVariables();
763-
bool usesStaticCall = kind == FunctionType::Kind::BareStaticCall ||
764-
function->stateMutability() == StateMutability::Pure ||
765-
function->stateMutability() == StateMutability::View;
766772

767773
if (!usesStaticCall)
768774
{

libsolidity/formal/SMTEncoder.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -611,6 +611,7 @@ void SMTEncoder::endVisit(FunctionCall const& _funCall)
611611
break;
612612
case FunctionType::Kind::Internal:
613613
case FunctionType::Kind::BareStaticCall:
614+
case FunctionType::Kind::BareCall:
614615
break;
615616
case FunctionType::Kind::KECCAK256:
616617
case FunctionType::Kind::ECRecover:
@@ -653,7 +654,6 @@ void SMTEncoder::endVisit(FunctionCall const& _funCall)
653654
visitObjectCreation(_funCall);
654655
return;
655656
case FunctionType::Kind::DelegateCall:
656-
case FunctionType::Kind::BareCall:
657657
case FunctionType::Kind::BareCallCode:
658658
case FunctionType::Kind::BareDelegateCall:
659659
case FunctionType::Kind::Creation:

0 commit comments

Comments
 (0)