Update test harness with minimal setup.

This commit is contained in:
Bhargava Shastry 2021-04-15 11:36:13 +02:00
parent b7d922b00e
commit 614fe9ea9e

View File

@ -101,15 +101,11 @@ DEFINE_PROTO_FUZZER(Program const& _input)
} }
solidity::frontend::OptimiserSettings settings = solidity::frontend::OptimiserSettings::none(); solidity::frontend::OptimiserSettings settings = solidity::frontend::OptimiserSettings::none();
// Stack evader requires stack allocation to be done.
settings.optimizeStackAllocation = true;
settings.runYulOptimiser = true;
AssemblyStack stackUnoptimized(version, AssemblyStack::Language::StrictAssembly, settings); AssemblyStack stackUnoptimized(version, AssemblyStack::Language::StrictAssembly, settings);
solAssert( solAssert(
stackUnoptimized.parseAndAnalyze("source", yulSubObject), stackUnoptimized.parseAndAnalyze("source", yulSubObject),
"Parsing fuzzer generated input failed." "Parsing fuzzer generated input failed."
); );
stackUnoptimized.optimize();
ostringstream unoptimizedState; ostringstream unoptimizedState;
yulFuzzerUtil::TerminationReason termReason = yulFuzzerUtil::interpret( yulFuzzerUtil::TerminationReason termReason = yulFuzzerUtil::interpret(
unoptimizedState, unoptimizedState,
@ -128,16 +124,17 @@ DEFINE_PROTO_FUZZER(Program const& _input)
stackOptimized.parseAndAnalyze("source", yulSubObject), stackOptimized.parseAndAnalyze("source", yulSubObject),
"Parsing fuzzer generated input failed." "Parsing fuzzer generated input failed."
); );
stackOptimized.optimize();
YulOptimizerTestCommon optimizerTest( YulOptimizerTestCommon optimizerTest(
stackOptimized.parserResult(), stackOptimized.parserResult(),
EVMDialect::strictAssemblyForEVMObjects(version) EVMDialect::strictAssemblyForEVMObjects(version)
); );
// HACK: Force this to fake stack limit evader for now // Run circular references pruner and then stack limit evader.
string step = "stackLimitEvader"; string step = "circularReferencesPruner";
optimizerTest.setStep(step); optimizerTest.setStep(step);
// optimizerTest.setStep(optimizerTest.randomOptimiserStep(_input.step()));
shared_ptr<solidity::yul::Block> astBlock = optimizerTest.run(); shared_ptr<solidity::yul::Block> astBlock = optimizerTest.run();
step = "stackLimitEvader";
optimizerTest.setStep(step);
astBlock = optimizerTest.run();
string optimisedProgram = Whiskers(R"( string optimisedProgram = Whiskers(R"(
object "main" { object "main" {
code { code {
@ -155,7 +152,7 @@ DEFINE_PROTO_FUZZER(Program const& _input)
.render(); .render();
cout << AsmPrinter{}(*astBlock) << endl; cout << AsmPrinter{}(*astBlock) << endl;
bytes optimisedByteCode; bytes optimisedByteCode;
settings.runYulOptimiser = false; settings.optimizeStackAllocation = true;
optimisedByteCode = YulAssembler{version, settings, optimisedProgram}.assemble(); optimisedByteCode = YulAssembler{version, settings, optimisedProgram}.assemble();
// Reset host before running optimised code. // Reset host before running optimised code.