mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Update test harness with minimal setup.
This commit is contained in:
parent
b7d922b00e
commit
614fe9ea9e
@ -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.
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user