diff --git a/test/libyul/YulOptimizerTestCommon.cpp b/test/libyul/YulOptimizerTestCommon.cpp index e98beb55b..90b7a33ef 100644 --- a/test/libyul/YulOptimizerTestCommon.cpp +++ b/test/libyul/YulOptimizerTestCommon.cpp @@ -321,6 +321,8 @@ YulOptimizerTestCommon::YulOptimizerTestCommon( }}, {"stackLimitEvader", [&]() { disambiguate(); + FunctionHoister::run(*m_context, *m_ast); + CircularReferencesPruner::run(*m_context, *m_ast); StackLimitEvader::run(*m_context, *m_object, CompilabilityChecker{ *m_dialect, *m_object, diff --git a/test/tools/ossfuzz/YulToEvmDifferentialFuzzer.cpp b/test/tools/ossfuzz/YulToEvmDifferentialFuzzer.cpp index c6ded0cc7..e14241654 100644 --- a/test/tools/ossfuzz/YulToEvmDifferentialFuzzer.cpp +++ b/test/tools/ossfuzz/YulToEvmDifferentialFuzzer.cpp @@ -129,12 +129,9 @@ DEFINE_PROTO_FUZZER(Program const& _input) EVMDialect::strictAssemblyForEVMObjects(version) ); // Run circular references pruner and then stack limit evader. - string step = "circularReferencesPruner"; + string step = "stackLimitEvader"; optimizerTest.setStep(step); shared_ptr astBlock = optimizerTest.run(); - step = "stackLimitEvader"; - optimizerTest.setStep(step); - astBlock = optimizerTest.run(); string optimisedProgram = Whiskers(R"( object "main" { code { diff --git a/test/tools/ossfuzz/protoToYul.cpp b/test/tools/ossfuzz/protoToYul.cpp index 2392e7f4b..ee21cbd58 100644 --- a/test/tools/ossfuzz/protoToYul.cpp +++ b/test/tools/ossfuzz/protoToYul.cpp @@ -573,7 +573,8 @@ void ProtoConverter::visit(UnaryOp const& _x) op == UnaryOp::EXTCODEHASH || op == UnaryOp::EXTCODESIZE || op == UnaryOp::BALANCE || - op == UnaryOp::BLOCKHASH + op == UnaryOp::BLOCKHASH || + op == UnaryOp::MLOAD ) ) { @@ -659,7 +660,8 @@ void ProtoConverter::visit(NullaryOp const& _x) op == NullaryOp::TIMESTAMP || op == NullaryOp::NUMBER || op == NullaryOp::CHAINID || - op == NullaryOp::SELFBALANCE + op == NullaryOp::SELFBALANCE || + op == NullaryOp::MSIZE ) ) { @@ -1057,6 +1059,9 @@ optional ProtoConverter::functionExists(NumFunctionReturns _numReturns) void ProtoConverter::visit(FunctionCall const& _x, string const& _functionName, bool _expression) { + // Disable recursive calls. + if (_functionName == m_currentFunctionName) + return; yulAssert(m_functionSigMap.count(_functionName), "Proto fuzzer: Invalid function."); auto ret = m_functionSigMap.at(_functionName); unsigned numInParams = ret.first; @@ -1721,7 +1726,7 @@ void ProtoConverter::fillFunctionCallInput(unsigned _numInParams) m_output << "calldataload(" << slot << ")"; break; case 1: - m_output << "mload(" << slot << ")"; + m_output << "sload(" << slot << ")"; break; case 2: m_output << "sload(" << slot << ")";