diff --git a/Changelog.md b/Changelog.md index 03a3f7e9b426..c00adf0fd977 100644 --- a/Changelog.md +++ b/Changelog.md @@ -6,6 +6,7 @@ Language Features: Compiler Features: * Error Reporting: Errors reported during code generation now point at the location of the contract when more fine-grained location is not available. * SMTChecker: Z3 is now a runtime dependency, not a build dependency (except for emscripten build). + * Yul Parser: Make name clash with a builtin a non-fatal error. Bugfixes: diff --git a/libyul/AsmParser.cpp b/libyul/AsmParser.cpp index 66ac22a08e72..8d8e91e5ce4d 100644 --- a/libyul/AsmParser.cpp +++ b/libyul/AsmParser.cpp @@ -755,7 +755,13 @@ YulName Parser::expectAsmIdentifier() { YulName name{currentLiteral()}; if (currentToken() == Token::Identifier && m_dialect.findBuiltin(name.str())) - fatalParserError(5568_error, "Cannot use builtin function name \"" + name.str() + "\" as identifier name."); + // Non-fatal. We'll continue and wrongly parse it as an identifier. May lead to some spurious + // errors after this point, but likely also much more useful ones. + m_errorReporter.parserError( + 5568_error, + currentLocation(), + "Cannot use builtin function name \"" + name.str() + "\" as identifier name." + ); // NOTE: We keep the expectation here to ensure the correct source location for the error above. expectToken(Token::Identifier); return name; diff --git a/test/libsolidity/syntaxTests/inlineAssembly/basefee_reserved_london.sol b/test/libsolidity/syntaxTests/inlineAssembly/basefee_reserved_london.sol index 00ecaf01a426..1235dd547c18 100644 --- a/test/libsolidity/syntaxTests/inlineAssembly/basefee_reserved_london.sol +++ b/test/libsolidity/syntaxTests/inlineAssembly/basefee_reserved_london.sol @@ -10,3 +10,4 @@ contract C { // EVMVersion: =london // ---- // ParserError 5568: (98-105): Cannot use builtin function name "basefee" as identifier name. +// ParserError 7104: (137-144): Builtin function "basefee" must be called. diff --git a/test/libsolidity/syntaxTests/inlineAssembly/blobbasefee_reserved_cancun.sol b/test/libsolidity/syntaxTests/inlineAssembly/blobbasefee_reserved_cancun.sol index 0bab7e36c74e..4e81c4865407 100644 --- a/test/libsolidity/syntaxTests/inlineAssembly/blobbasefee_reserved_cancun.sol +++ b/test/libsolidity/syntaxTests/inlineAssembly/blobbasefee_reserved_cancun.sol @@ -10,3 +10,4 @@ contract C { // EVMVersion: >=cancun // ---- // ParserError 5568: (98-109): Cannot use builtin function name "blobbasefee" as identifier name. +// ParserError 7104: (141-152): Builtin function "blobbasefee" must be called. diff --git a/test/libsolidity/syntaxTests/inlineAssembly/clash_with_reserved_builtin.sol b/test/libsolidity/syntaxTests/inlineAssembly/clash_with_reserved_builtin.sol index 7a1f6d5e957e..9dbf877d6bc2 100644 --- a/test/libsolidity/syntaxTests/inlineAssembly/clash_with_reserved_builtin.sol +++ b/test/libsolidity/syntaxTests/inlineAssembly/clash_with_reserved_builtin.sol @@ -10,3 +10,6 @@ contract C { } // ---- // ParserError 5568: (245-248): Cannot use builtin function name "add" as identifier name. +// ParserError 5568: (249-255): Cannot use builtin function name "mstore" as identifier name. +// ParserError 5568: (260-266): Cannot use builtin function name "sstore" as identifier name. +// ParserError 5568: (286-294): Cannot use builtin function name "coinbase" as identifier name. diff --git a/test/libsolidity/syntaxTests/inlineAssembly/difficulty_disallowed_function_pre_paris.sol b/test/libsolidity/syntaxTests/inlineAssembly/difficulty_disallowed_function_pre_paris.sol index a177e8f63099..d55935aad27a 100644 --- a/test/libsolidity/syntaxTests/inlineAssembly/difficulty_disallowed_function_pre_paris.sol +++ b/test/libsolidity/syntaxTests/inlineAssembly/difficulty_disallowed_function_pre_paris.sol @@ -19,3 +19,4 @@ contract C { // EVMVersion: =cancun // ---- // ParserError 5568: (101-106): Cannot use builtin function name "mcopy" as identifier name. +// ParserError 7104: (134-139): Builtin function "mcopy" must be called. diff --git a/test/libsolidity/syntaxTests/inlineAssembly/prevrandao_disallowed_function_post_paris.sol b/test/libsolidity/syntaxTests/inlineAssembly/prevrandao_disallowed_function_post_paris.sol index 6c284a005956..7924f52e2340 100644 --- a/test/libsolidity/syntaxTests/inlineAssembly/prevrandao_disallowed_function_post_paris.sol +++ b/test/libsolidity/syntaxTests/inlineAssembly/prevrandao_disallowed_function_post_paris.sol @@ -19,3 +19,4 @@ contract C { // EVMVersion: >=paris // ---- // ParserError 5568: (101-111): Cannot use builtin function name "prevrandao" as identifier name. +// ParserError 7104: (143-153): Builtin function "prevrandao" must be called. diff --git a/test/libsolidity/syntaxTests/inlineAssembly/tload_reserved_cancun.sol b/test/libsolidity/syntaxTests/inlineAssembly/tload_reserved_cancun.sol index 77c988577620..b8c09fd59c1a 100644 --- a/test/libsolidity/syntaxTests/inlineAssembly/tload_reserved_cancun.sol +++ b/test/libsolidity/syntaxTests/inlineAssembly/tload_reserved_cancun.sol @@ -10,3 +10,4 @@ contract C { // EVMVersion: >=cancun // ---- // ParserError 5568: (98-103): Cannot use builtin function name "tload" as identifier name. +// ParserError 7104: (135-140): Builtin function "tload" must be called. diff --git a/test/libsolidity/syntaxTests/inlineAssembly/tstore_reserved_cancun.sol b/test/libsolidity/syntaxTests/inlineAssembly/tstore_reserved_cancun.sol index 9f08d985aa38..9944c84f54c2 100644 --- a/test/libsolidity/syntaxTests/inlineAssembly/tstore_reserved_cancun.sol +++ b/test/libsolidity/syntaxTests/inlineAssembly/tstore_reserved_cancun.sol @@ -10,3 +10,4 @@ contract C { // EVMVersion: >=cancun // ---- // ParserError 5568: (98-104): Cannot use builtin function name "tstore" as identifier name. +// ParserError 7104: (136-142): Builtin function "tstore" must be called. diff --git a/test/libyul/yulSyntaxTests/blobhash.yul b/test/libyul/yulSyntaxTests/blobhash.yul index 6337f22c1b29..272ec13d7bb0 100644 --- a/test/libyul/yulSyntaxTests/blobhash.yul +++ b/test/libyul/yulSyntaxTests/blobhash.yul @@ -13,3 +13,4 @@ // EVMVersion: >=cancun // ---- // ParserError 5568: (20-28): Cannot use builtin function name "blobhash" as identifier name. +// ParserError 5568: (64-72): Cannot use builtin function name "blobhash" as identifier name. diff --git a/test/libyul/yulSyntaxTests/eof/extcall_function_in_eof.yul b/test/libyul/yulSyntaxTests/eof/extcall_function_in_eof.yul index 1e503ca94a65..021c98dd3c6f 100644 --- a/test/libyul/yulSyntaxTests/eof/extcall_function_in_eof.yul +++ b/test/libyul/yulSyntaxTests/eof/extcall_function_in_eof.yul @@ -8,4 +8,3 @@ object "a" { // bytecodeFormat: >=EOFv1 // ---- // ParserError 5568: (41-48): Cannot use builtin function name "extcall" as identifier name. -// ParserError 8143: (41-48): Expected keyword "data" or "object" or "}". diff --git a/test/libyul/yulSyntaxTests/eof/extdelegatecall_function_in_eof.yul b/test/libyul/yulSyntaxTests/eof/extdelegatecall_function_in_eof.yul index 0515c8d265b4..e352f1b3a650 100644 --- a/test/libyul/yulSyntaxTests/eof/extdelegatecall_function_in_eof.yul +++ b/test/libyul/yulSyntaxTests/eof/extdelegatecall_function_in_eof.yul @@ -8,4 +8,3 @@ object "a" { // bytecodeFormat: >=EOFv1 // ---- // ParserError 5568: (41-56): Cannot use builtin function name "extdelegatecall" as identifier name. -// ParserError 8143: (41-56): Expected keyword "data" or "object" or "}". diff --git a/test/libyul/yulSyntaxTests/eof/extstaticcall_function_in_eof.yul b/test/libyul/yulSyntaxTests/eof/extstaticcall_function_in_eof.yul index fbfb5074b6fd..0db2313a034a 100644 --- a/test/libyul/yulSyntaxTests/eof/extstaticcall_function_in_eof.yul +++ b/test/libyul/yulSyntaxTests/eof/extstaticcall_function_in_eof.yul @@ -8,4 +8,3 @@ object "a" { // bytecodeFormat: >=EOFv1 // ---- // ParserError 5568: (41-54): Cannot use builtin function name "extstaticcall" as identifier name. -// ParserError 8143: (41-54): Expected keyword "data" or "object" or "}". diff --git a/test/libyul/yulSyntaxTests/invalid/builtin_name_as_type.yul b/test/libyul/yulSyntaxTests/invalid/builtin_name_as_type.yul index c15247fcd164..b9b3346f48c2 100644 --- a/test/libyul/yulSyntaxTests/invalid/builtin_name_as_type.yul +++ b/test/libyul/yulSyntaxTests/invalid/builtin_name_as_type.yul @@ -6,3 +6,8 @@ } // ---- // ParserError 5568: (13-21): Cannot use builtin function name "datacopy" as identifier name. +// ParserError 5473: (10-21): Types are not supported in untyped Yul. +// ParserError 5568: (37-50): Cannot use builtin function name "loadimmutable" as identifier name. +// ParserError 5473: (31-50): Types are not supported in untyped Yul. +// ParserError 5568: (70-82): Cannot use builtin function name "linkersymbol" as identifier name. +// ParserError 5473: (67-82): Types are not supported in untyped Yul. diff --git a/test/libyul/yulSyntaxTests/invalid/clash_with_non_reserved_pure_yul_builtin.yul b/test/libyul/yulSyntaxTests/invalid/clash_with_non_reserved_pure_yul_builtin.yul index daaed0aa3e74..6f582442322b 100644 --- a/test/libyul/yulSyntaxTests/invalid/clash_with_non_reserved_pure_yul_builtin.yul +++ b/test/libyul/yulSyntaxTests/invalid/clash_with_non_reserved_pure_yul_builtin.yul @@ -6,3 +6,6 @@ } // ---- // ParserError 5568: (17-28): Cannot use builtin function name "memoryguard" as identifier name. +// ParserError 5568: (53-64): Cannot use builtin function name "memoryguard" as identifier name. +// ParserError 5568: (93-104): Cannot use builtin function name "memoryguard" as identifier name. +// ParserError 5568: (120-131): Cannot use builtin function name "memoryguard" as identifier name. diff --git a/test/libyul/yulSyntaxTests/invalid/clash_with_reserved_builtin.yul b/test/libyul/yulSyntaxTests/invalid/clash_with_reserved_builtin.yul index 52f76c30cd4c..f146f06aeb76 100644 --- a/test/libyul/yulSyntaxTests/invalid/clash_with_reserved_builtin.yul +++ b/test/libyul/yulSyntaxTests/invalid/clash_with_reserved_builtin.yul @@ -6,3 +6,6 @@ } // ---- // ParserError 5568: (160-163): Cannot use builtin function name "add" as identifier name. +// ParserError 5568: (164-170): Cannot use builtin function name "mstore" as identifier name. +// ParserError 5568: (175-181): Cannot use builtin function name "sstore" as identifier name. +// ParserError 5568: (193-201): Cannot use builtin function name "coinbase" as identifier name. diff --git a/test/libyul/yulSyntaxTests/invalid/clash_with_reserved_pure_yul_builtin.yul b/test/libyul/yulSyntaxTests/invalid/clash_with_reserved_pure_yul_builtin.yul index 0bc282fe3635..035efbacc46a 100644 --- a/test/libyul/yulSyntaxTests/invalid/clash_with_reserved_pure_yul_builtin.yul +++ b/test/libyul/yulSyntaxTests/invalid/clash_with_reserved_pure_yul_builtin.yul @@ -6,3 +6,6 @@ } // ---- // ParserError 5568: (158-171): Cannot use builtin function name "loadimmutable" as identifier name. +// ParserError 5568: (172-184): Cannot use builtin function name "setimmutable" as identifier name. +// ParserError 5568: (189-197): Cannot use builtin function name "datasize" as identifier name. +// ParserError 5568: (209-219): Cannot use builtin function name "dataoffset" as identifier name. diff --git a/test/libyul/yulSyntaxTests/mcopy_as_identifier.yul b/test/libyul/yulSyntaxTests/mcopy_as_identifier.yul index e48c27d06d81..be00e0a3584f 100644 --- a/test/libyul/yulSyntaxTests/mcopy_as_identifier.yul +++ b/test/libyul/yulSyntaxTests/mcopy_as_identifier.yul @@ -12,3 +12,4 @@ // EVMVersion: >=cancun // ---- // ParserError 5568: (20-25): Cannot use builtin function name "mcopy" as identifier name. +// ParserError 5568: (61-66): Cannot use builtin function name "mcopy" as identifier name.