@@ -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