diff --git a/test/libsolidity/SemanticTest.cpp b/test/libsolidity/SemanticTest.cpp index 0afeaa577..7a06f0ba1 100644 --- a/test/libsolidity/SemanticTest.cpp +++ b/test/libsolidity/SemanticTest.cpp @@ -61,6 +61,8 @@ SemanticTest::SemanticTest( m_enforceGasCost(_enforceGasCost), m_enforceGasCostMinValue(_enforceGasCostMinValue) { + initializeBuiltins(); + string choice = m_reader.stringSetting("compileViaYul", "default"); if (choice == "also") { @@ -122,6 +124,15 @@ SemanticTest::SemanticTest( } } +void SemanticTest::initializeBuiltins() +{ + solAssert(m_builtins.count("smokeTest") == 0, ""); + m_builtins["smokeTest"] = [](FunctionCall const&) -> std::optional + { + return util::toBigEndian(u256(0x1234)); + }; +} + TestCase::TestResult SemanticTest::run(ostream& _stream, string const& _linePrefix, bool _formatted) { TestResult result = TestResult::Success; diff --git a/test/libsolidity/SemanticTest.h b/test/libsolidity/SemanticTest.h index 9520c1bc7..2bba341f4 100644 --- a/test/libsolidity/SemanticTest.h +++ b/test/libsolidity/SemanticTest.h @@ -78,6 +78,7 @@ public: private: TestResult runTest(std::ostream& _stream, std::string const& _linePrefix, bool _formatted, bool _compileViaYul, bool _compileToEwasm); bool checkGasCostExpectation(TestFunctionCall& io_test, bool _compileViaYul) const; + void initializeBuiltins(); SourceMap m_sources; std::size_t m_lineOffset; std::vector m_tests; diff --git a/test/libsolidity/semanticTests/builtins/smoke_test.sol b/test/libsolidity/semanticTests/builtins/smoke_test.sol new file mode 100644 index 000000000..d41b0e15e --- /dev/null +++ b/test/libsolidity/semanticTests/builtins/smoke_test.sol @@ -0,0 +1,7 @@ +contract SmokeTest { +} +// ==== +// compileViaYul: also +// ---- +// constructor() +// smokeTest -> 0x1234 diff --git a/test/libsolidity/util/TestFileParser.cpp b/test/libsolidity/util/TestFileParser.cpp index aa34c2844..19819ac1c 100644 --- a/test/libsolidity/util/TestFileParser.cpp +++ b/test/libsolidity/util/TestFileParser.cpp @@ -127,6 +127,8 @@ vector TestFileParser::parseFunctionCall tie(call.signature, lowLevelCall) = parseFunctionSignature(); if (lowLevelCall) call.kind = FunctionCall::Kind::LowLevel; + else if (isBuiltinFunction(call.signature)) + call.kind = FunctionCall::Kind::Builtin; if (accept(Token::Comma, true)) call.value = parseFunctionCallValue();