Skip to content

Commit 0535cdd

Browse files
authored
Merge pull request #15785 from ipsilon/asserts-in-ir-generator-for-statements
eof: Assert against legacy identifiers/members availability in EOF context.
2 parents e6b5b43 + 5d27b0f commit 0535cdd

File tree

1 file changed

+14
-0
lines changed

1 file changed

+14
-0
lines changed

libsolidity/codegen/ir/IRGeneratorForStatements.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1529,6 +1529,15 @@ void IRGeneratorForStatements::endVisit(FunctionCall const& _functionCall)
15291529
case FunctionType::Kind::BlockHash:
15301530
case FunctionType::Kind::BlobHash:
15311531
{
1532+
solAssert(
1533+
!m_context.eofVersion().has_value() || functionType->kind() != FunctionType::Kind::GasLeft,
1534+
"EOF does not support gasleft."
1535+
);
1536+
solAssert(
1537+
!m_context.eofVersion().has_value() || functionType->kind() != FunctionType::Kind::Selfdestruct,
1538+
"EOF does not support selfdestruct."
1539+
);
1540+
15321541
static std::map<FunctionType::Kind, std::string> functions = {
15331542
{FunctionType::Kind::GasLeft, "gas"},
15341543
{FunctionType::Kind::Selfdestruct, "selfdestruct"},
@@ -1845,6 +1854,7 @@ void IRGeneratorForStatements::endVisit(MemberAccess const& _memberAccess)
18451854
")\n";
18461855
else if (member == "code")
18471856
{
1857+
solAssert(!m_context.eofVersion().has_value(), "EOF does not support address.code.");
18481858
std::string externalCodeFunction = m_utils.externalCodeFunction();
18491859
define(_memberAccess) <<
18501860
externalCodeFunction <<
@@ -1853,10 +1863,13 @@ void IRGeneratorForStatements::endVisit(MemberAccess const& _memberAccess)
18531863
")\n";
18541864
}
18551865
else if (member == "codehash")
1866+
{
1867+
solAssert(!m_context.eofVersion().has_value(), "EOF does not support address.codehash.");
18561868
define(_memberAccess) <<
18571869
"extcodehash(" <<
18581870
expressionAsType(_memberAccess.expression(), *TypeProvider::address()) <<
18591871
")\n";
1872+
}
18601873
else if (std::set<std::string>{"send", "transfer"}.count(member))
18611874
{
18621875
solAssert(dynamic_cast<AddressType const&>(*_memberAccess.expression().annotation().type).stateMutability() == StateMutability::Payable);
@@ -1973,6 +1986,7 @@ void IRGeneratorForStatements::endVisit(MemberAccess const& _memberAccess)
19731986
solAssert(false, "Blockhash has been removed.");
19741987
else if (member == "creationCode" || member == "runtimeCode")
19751988
{
1989+
solAssert(!m_context.eofVersion().has_value(), "EOF does not support \"" + member + "\".");
19761990
Type const* arg = dynamic_cast<MagicType const&>(*_memberAccess.expression().annotation().type).typeArgument();
19771991
auto const& contractType = dynamic_cast<ContractType const&>(*arg);
19781992
solAssert(!contractType.isSuper());

0 commit comments

Comments
 (0)