mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge pull request #10471 from ethereum/yul-interpreter-finetune-execution-steps
Yul interpreter: Smaller execution timeout for tests and additional testcases
This commit is contained in:
commit
61363d8e21
@ -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 = 32;
|
||||
state.maxSteps = 512;
|
||||
try
|
||||
{
|
||||
Interpreter::run(state, EVMDialect::strictAssemblyForEVMObjects(langutil::EVMVersion{}), *m_ast);
|
||||
|
16
test/libyul/yulInterpreterTests/bounded_recursion.yul
Normal file
16
test/libyul/yulInterpreterTests/bounded_recursion.yul
Normal file
@ -0,0 +1,16 @@
|
||||
{
|
||||
function f(x) -> y {
|
||||
if lt(x, 150) {
|
||||
y := f(add(x, 1))
|
||||
}
|
||||
if eq(x, 150) {
|
||||
y := x
|
||||
}
|
||||
}
|
||||
mstore(0, f(0))
|
||||
}
|
||||
// ----
|
||||
// Trace:
|
||||
// Memory dump:
|
||||
// 0: 0000000000000000000000000000000000000000000000000000000000000096
|
||||
// Storage dump:
|
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,44 @@
|
||||
{
|
||||
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)
|
||||
// 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)
|
||||
// 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)
|
||||
// LOG0(0, 0)
|
||||
// LOG0(0, 0)
|
||||
// Trace size limit reached.
|
||||
// Memory dump:
|
||||
// Storage dump:
|
@ -104,12 +104,18 @@ DEFINE_PROTO_FUZZER(Program const& _input)
|
||||
return;
|
||||
|
||||
stack.optimize();
|
||||
yulFuzzerUtil::interpret(
|
||||
termReason = yulFuzzerUtil::interpret(
|
||||
os2,
|
||||
stack.parserResult()->code,
|
||||
EVMDialect::strictAssemblyForEVMObjects(version)
|
||||
);
|
||||
|
||||
if (
|
||||
termReason == yulFuzzerUtil::TerminationReason::StepLimitReached ||
|
||||
termReason == yulFuzzerUtil::TerminationReason::TraceLimitReached
|
||||
)
|
||||
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