Address review comments

This commit is contained in:
Nikola Matic
2022-09-13 17:23:31 +02:00
parent feba1bfeff
commit e37dc8e975
23 changed files with 108 additions and 243 deletions
@@ -1 +0,0 @@
--ir-optimized --optimize --yul-optimizations dhfo[Dg:vu]lfnTUtnIf
@@ -1 +0,0 @@
Invalid optimizer step sequence in --yul-optimizations: Cleanup sequence delimiter cannot be placed inside the brackets
@@ -1,7 +0,0 @@
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.0;
contract C
{
function f() public pure {}
}
@@ -1 +0,0 @@
--ir-optimized --optimize --yul-optimizations dhfoDg:vulfn:TUtnIf
@@ -1 +0,0 @@
Invalid optimizer step sequence in --yul-optimizations: Too many cleanup sequence delimiters
@@ -1 +0,0 @@
1
@@ -1,7 +0,0 @@
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.0;
contract C
{
function f() public pure {}
}
@@ -1 +0,0 @@
--ir-optimized --optimize --yul-optimizations dhfoDgvulfnTUtnIf:fDnTOc
@@ -1,8 +0,0 @@
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.0;
pragma abicoder v2;
contract C
{
constructor() {}
}
@@ -1,34 +0,0 @@
Optimized IR:
/// @use-src 0:"yul_optimizer_steps_with_cleanup_sequence/input.sol"
object "C_7" {
code {
{
/// @src 0:80:115 "contract C..."
mstore(64, memoryguard(0x80))
if callvalue()
{
revert_error_ca66f745a3ce8ff40e2ccaf1ad45db7774001b90d25810abd9040049be7bf4bb()
}
let _1 := allocate_unbounded()
codecopy(_1, dataoffset("C_7_deployed"), datasize("C_7_deployed"))
return(_1, datasize("C_7_deployed"))
}
function allocate_unbounded() -> memPtr
{ memPtr := mload(64) }
function revert_error_ca66f745a3ce8ff40e2ccaf1ad45db7774001b90d25810abd9040049be7bf4bb()
{ revert(0, 0) }
}
/// @use-src 0:"yul_optimizer_steps_with_cleanup_sequence/input.sol"
object "C_7_deployed" {
code {
{
/// @src 0:80:115 "contract C..."
mstore(64, memoryguard(0x80))
revert_error_42b3090547df1d2001c96683413b8cf91c1b902ef5e3cb8d9f6f304cf7446f74()
}
function revert_error_42b3090547df1d2001c96683413b8cf91c1b902ef5e3cb8d9f6f304cf7446f74()
{ revert(0, 0) }
}
data ".metadata" hex"<BYTECODE REMOVED>"
}
}
@@ -1 +0,0 @@
--ir-optimized --optimize --yul-optimizations :
@@ -1,8 +0,0 @@
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.0;
pragma abicoder v2;
contract C
{
constructor() {}
}
@@ -1,42 +0,0 @@
Optimized IR:
/// @use-src 0:"yul_optimizer_steps_with_empty_sequences/input.sol"
object "C_7" {
code {
{
/// @src 0:80:115 "contract C..."
mstore(64, memoryguard(0x80))
if callvalue()
{
revert_error_ca66f745a3ce8ff40e2ccaf1ad45db7774001b90d25810abd9040049be7bf4bb()
}
constructor_C()
let _1 := allocate_unbounded()
codecopy(_1, dataoffset("C_7_deployed"), datasize("C_7_deployed"))
return(_1, datasize("C_7_deployed"))
}
function allocate_unbounded() -> memPtr
{ memPtr := mload(64) }
function revert_error_ca66f745a3ce8ff40e2ccaf1ad45db7774001b90d25810abd9040049be7bf4bb()
{ revert(0, 0) }
/// @ast-id 6 @src 0:97:113 "constructor() {}"
function constructor_C()
{ }
}
/// @use-src 0:"yul_optimizer_steps_with_empty_sequences/input.sol"
object "C_7_deployed" {
code {
{
/// @src 0:80:115 "contract C..."
mstore(64, memoryguard(0x80))
revert_error_42b3090547df1d2001c96683413b8cf91c1b902ef5e3cb8d9f6f304cf7446f74()
}
function shift_right_unsigned(value) -> newValue
{ newValue := shr(224, value) }
function allocate_unbounded() -> memPtr
{ memPtr := mload(64) }
function revert_error_42b3090547df1d2001c96683413b8cf91c1b902ef5e3cb8d9f6f304cf7446f74()
{ revert(0, 0) }
}
data ".metadata" hex"<BYTECODE REMOVED>"
}
}
+11 -13
View File
@@ -404,25 +404,25 @@ BOOST_AUTO_TEST_CASE(metadata_optimiser_sequence)
{
char const* sourceCode = R"(
pragma solidity >=0.0;
contract test {
contract C {
}
)";
vector<tuple<string, string>> sequences =
{
// { "<optimizer sequence>", "<optimizer cleanup sequence>" }
{ "", "" },
{ "", "fDn" },
{ "dhfoDgvulfnTUtnIf", "" },
{ "dhfoDgvulfnTUtnIf", "fDn" }
// {"<optimizer sequence>", "<optimizer cleanup sequence>"}
{"", ""},
{"", "fDn"},
{"dhfoDgvulfnTUtnIf", "" },
{"dhfoDgvulfnTUtnIf", "fDn"}
};
auto check = [sourceCode](string const& optimizerSequence, string const& optimizerCleanupSequence)
auto check = [sourceCode](string const& _optimizerSequence, string const& _optimizerCleanupSequence)
{
OptimiserSettings optimizerSettings = OptimiserSettings::minimal();
optimizerSettings.runYulOptimiser = true;
optimizerSettings.yulOptimiserSteps = optimizerSequence;
optimizerSettings.yulOptimiserCleanupSteps = optimizerCleanupSequence;
optimizerSettings.yulOptimiserSteps = _optimizerSequence;
optimizerSettings.yulOptimiserCleanupSteps = _optimizerCleanupSequence;
CompilerStack compilerStack;
compilerStack.setSources({{"", std::string(sourceCode)}});
compilerStack.setEVMVersion(solidity::test::CommonOptions::get().evmVersion());
@@ -430,7 +430,7 @@ BOOST_AUTO_TEST_CASE(metadata_optimiser_sequence)
BOOST_REQUIRE_MESSAGE(compilerStack.compile(), "Compiling contract failed");
std::string const& serialisedMetadata = compilerStack.metadata("test");
std::string const& serialisedMetadata = compilerStack.metadata("C");
Json::Value metadata;
BOOST_REQUIRE(util::jsonParseStrict(serialisedMetadata, metadata));
BOOST_CHECK(solidity::test::isValidMetadata(metadata));
@@ -439,14 +439,12 @@ BOOST_AUTO_TEST_CASE(metadata_optimiser_sequence)
BOOST_CHECK(metadata["settings"]["optimizer"]["details"]["yulDetails"].isMember("optimizerSteps"));
string const metadataOptimizerSteps = metadata["settings"]["optimizer"]["details"]["yulDetails"]["optimizerSteps"].asString();
string const expectedMetadataOptimiserSteps = optimizerSequence + ":" + optimizerCleanupSequence;
string const expectedMetadataOptimiserSteps = _optimizerSequence + ":" + _optimizerCleanupSequence;
BOOST_CHECK_EQUAL(metadataOptimizerSteps, expectedMetadataOptimiserSteps);
};
for (auto const& [sequence, cleanupSequence] : sequences)
{
check(sequence, cleanupSequence);
}
}
BOOST_AUTO_TEST_CASE(metadata_license_missing)
+4 -2
View File
@@ -1247,8 +1247,10 @@ BOOST_AUTO_TEST_CASE(optimizer_settings_details_different)
(set<string>{"stackAllocation", "optimizerSteps"})
);
BOOST_CHECK(optimizer["details"]["yulDetails"]["stackAllocation"].asBool() == true);
BOOST_CHECK(optimizer["details"]["yulDetails"]["optimizerSteps"].asString() ==
string{OptimiserSettings::DefaultYulOptimiserSteps} + ":" + string{OptimiserSettings::DefaultYulOptimiserCleanupSteps});
BOOST_CHECK(
optimizer["details"]["yulDetails"]["optimizerSteps"].asString() ==
OptimiserSettings::DefaultYulOptimiserSteps + ":"s + OptimiserSettings::DefaultYulOptimiserCleanupSteps
);
BOOST_CHECK_EQUAL(optimizer["details"].getMemberNames().size(), 9);
BOOST_CHECK(optimizer["runs"].asUInt() == 600);
}
+11 -11
View File
@@ -428,7 +428,7 @@ BOOST_AUTO_TEST_CASE(invalid_options_input_modes_combinations)
BOOST_AUTO_TEST_CASE(default_optimiser_sequence)
{
auto const& commandLineOptions = parseCommandLine({"solc", "contract.sol", "--optimize"});
CommandLineOptions const& commandLineOptions = parseCommandLine({"solc", "contract.sol", "--optimize"});
BOOST_CHECK_EQUAL(commandLineOptions.optimiserSettings().yulOptimiserSteps, OptimiserSettings::DefaultYulOptimiserSteps);
BOOST_CHECK_EQUAL(commandLineOptions.optimiserSettings().yulOptimiserCleanupSteps, OptimiserSettings::DefaultYulOptimiserCleanupSteps);
}
@@ -436,26 +436,26 @@ BOOST_AUTO_TEST_CASE(default_optimiser_sequence)
BOOST_AUTO_TEST_CASE(valid_optimiser_sequences)
{
vector<string> validSequenceInputs {
":", // Empty optimizaiton sequence and empty cleanup sequence
":fDn", // Empty optimization sequence and specified cleanup sequence
"dhfoDgvulfnTUtnIf:", // Specified optimizaiton sequence and empty cleanup sequence
"dhfoDgvulfnTUtnIf:fDn", // Specified optimization sequence and cleanup sequence
":", // Empty optimization sequence and empty cleanup sequence
":fDn", // Empty optimization sequence and specified cleanup sequence
"dhfoDgvulfnTUtnIf:", // Specified optimization sequence and empty cleanup sequence
"dhfoDgvulfnTUtnIf:fDn", // Specified optimization sequence and cleanup sequence
"dhfo[Dgvulfn]TUtnIf:f[D]n" // Specified and nested optimization and cleanup sequence
};
vector<tuple<string, string>> expectedParsedSequences {
{ "", "" },
{ "", "fDn"},
{ "dhfoDgvulfnTUtnIf", ""},
{ "dhfoDgvulfnTUtnIf", "fDn"},
{ "dhfo[Dgvulfn]TUtnIf", "f[D]n"}
{"", ""},
{"", "fDn"},
{"dhfoDgvulfnTUtnIf", ""},
{"dhfoDgvulfnTUtnIf", "fDn"},
{"dhfo[Dgvulfn]TUtnIf", "f[D]n"}
};
BOOST_CHECK_EQUAL(validSequenceInputs.size(), expectedParsedSequences.size());
for (size_t i = 0; i < validSequenceInputs.size(); ++i)
{
auto const& commandLineOptions = parseCommandLine({"solc", "contract.sol", "--optimize", "--yul-optimizations=" + validSequenceInputs[i]});
CommandLineOptions const& commandLineOptions = parseCommandLine({"solc", "contract.sol", "--optimize", "--yul-optimizations=" + validSequenceInputs[i]});
auto const& [expectedYulOptimiserSteps, expectedYulCleanupSteps] = expectedParsedSequences[i];
BOOST_CHECK_EQUAL(commandLineOptions.optimiserSettings().yulOptimiserSteps, expectedYulOptimiserSteps);
BOOST_CHECK_EQUAL(commandLineOptions.optimiserSettings().yulOptimiserCleanupSteps, expectedYulCleanupSteps);