mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Yul interpreter: Smaller execution timeout for tests and additional test cases
This commit is contained in:
parent
7ad27188a0
commit
0b1d0e0bd2
@ -87,8 +87,8 @@ bool YulInterpreterTest::parse(ostream& _stream, string const& _linePrefix, bool
|
||||
string YulInterpreterTest::interpret()
|
||||
{
|
||||
InterpreterState state;
|
||||
state.maxTraceSize = 10000;
|
||||
state.maxSteps = 10000;
|
||||
state.maxTraceSize = 10;
|
||||
state.maxSteps = 150;
|
||||
try
|
||||
{
|
||||
Interpreter::run(state, EVMDialect::strictAssemblyForEVMObjects(langutil::EVMVersion{}), *m_ast);
|
||||
|
11
test/libyul/yulInterpreterTests/infinite_recursion.yul
Normal file
11
test/libyul/yulInterpreterTests/infinite_recursion.yul
Normal file
@ -0,0 +1,11 @@
|
||||
{
|
||||
function f() {
|
||||
f()
|
||||
}
|
||||
f()
|
||||
}
|
||||
// ----
|
||||
// Trace:
|
||||
// Interpreter execution step limit reached.
|
||||
// Memory dump:
|
||||
// Storage dump:
|
@ -0,0 +1,22 @@
|
||||
{
|
||||
function f() {
|
||||
log0(0x0, 0x0)
|
||||
f()
|
||||
}
|
||||
f()
|
||||
}
|
||||
// ----
|
||||
// Trace:
|
||||
// LOG0(0, 0)
|
||||
// LOG0(0, 0)
|
||||
// LOG0(0, 0)
|
||||
// LOG0(0, 0)
|
||||
// LOG0(0, 0)
|
||||
// LOG0(0, 0)
|
||||
// LOG0(0, 0)
|
||||
// LOG0(0, 0)
|
||||
// LOG0(0, 0)
|
||||
// LOG0(0, 0)
|
||||
// Trace size limit reached.
|
||||
// Memory dump:
|
||||
// Storage dump:
|
@ -91,25 +91,22 @@ DEFINE_PROTO_FUZZER(Program const& _input)
|
||||
|
||||
ostringstream os1;
|
||||
ostringstream os2;
|
||||
yulFuzzerUtil::TerminationReason termReason = yulFuzzerUtil::interpret(
|
||||
yulFuzzerUtil::interpret(
|
||||
os1,
|
||||
stack.parserResult()->code,
|
||||
EVMDialect::strictAssemblyForEVMObjects(version)
|
||||
);
|
||||
|
||||
if (
|
||||
termReason == yulFuzzerUtil::TerminationReason::StepLimitReached ||
|
||||
termReason == yulFuzzerUtil::TerminationReason::TraceLimitReached
|
||||
)
|
||||
return;
|
||||
|
||||
stack.optimize();
|
||||
yulFuzzerUtil::interpret(
|
||||
yulFuzzerUtil::TerminationReason termReason = yulFuzzerUtil::interpret(
|
||||
os2,
|
||||
stack.parserResult()->code,
|
||||
EVMDialect::strictAssemblyForEVMObjects(version)
|
||||
);
|
||||
|
||||
if (termReason == yulFuzzerUtil::TerminationReason::StepLimitReached)
|
||||
return;
|
||||
|
||||
bool isTraceEq = (os1.str() == os2.str());
|
||||
yulAssert(isTraceEq, "Interpreted traces for optimized and unoptimized code differ.");
|
||||
return;
|
||||
|
Loading…
Reference in New Issue
Block a user