mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Mark viaIR code generation as non-experimental.
This commit is contained in:
parent
3f6beaa0ad
commit
e58c0b561d
@ -6,6 +6,8 @@ Language Features:
|
|||||||
|
|
||||||
|
|
||||||
Compiler Features:
|
Compiler Features:
|
||||||
|
* Commandline Interface: Allow the use of ``--via-ir`` in place of ``--experimental-via-ir``.
|
||||||
|
* Compilation via Yul IR is no longer marked as experimental.
|
||||||
* JSON-AST: Added selector field for errors and events.
|
* JSON-AST: Added selector field for errors and events.
|
||||||
* LSP: Implements goto-definition.
|
* LSP: Implements goto-definition.
|
||||||
* Peephole Optimizer: Optimize comparisons in front of conditional jumps and conditional jumps across a single unconditional jump.
|
* Peephole Optimizer: Optimize comparisons in front of conditional jumps and conditional jumps across a single unconditional jump.
|
||||||
|
@ -140,8 +140,7 @@ by checking if the lowest bit is set: short (not set) and long (set).
|
|||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
Handling invalidly encoded slots is currently not supported but may be added in the future.
|
Handling invalidly encoded slots is currently not supported but may be added in the future.
|
||||||
If you are compiling via the experimental IR-based compiler pipeline, reading an invalidly encoded
|
If you are compiling via IR, reading an invalidly encoded slot results in a ``Panic(0x22)`` error.
|
||||||
slot results in a ``Panic(0x22)`` error.
|
|
||||||
|
|
||||||
JSON Output
|
JSON Output
|
||||||
===========
|
===========
|
||||||
|
@ -23,7 +23,7 @@ call completely.
|
|||||||
Currently, the parameter ``--optimize`` activates the opcode-based optimizer for the
|
Currently, the parameter ``--optimize`` activates the opcode-based optimizer for the
|
||||||
generated bytecode and the Yul optimizer for the Yul code generated internally, for example for ABI coder v2.
|
generated bytecode and the Yul optimizer for the Yul code generated internally, for example for ABI coder v2.
|
||||||
One can use ``solc --ir-optimized --optimize`` to produce an
|
One can use ``solc --ir-optimized --optimize`` to produce an
|
||||||
optimized experimental Yul IR for a Solidity source. Similarly, one can use ``solc --strict-assembly --optimize``
|
optimized Yul IR for a Solidity source. Similarly, one can use ``solc --strict-assembly --optimize``
|
||||||
for a stand-alone Yul mode.
|
for a stand-alone Yul mode.
|
||||||
|
|
||||||
You can find more details on both optimizer modules and their optimization steps below.
|
You can find more details on both optimizer modules and their optimization steps below.
|
||||||
|
@ -15,11 +15,7 @@ The IR-based code generator was introduced with an aim to not only allow
|
|||||||
code generation to be more transparent and auditable but also
|
code generation to be more transparent and auditable but also
|
||||||
to enable more powerful optimization passes that span across functions.
|
to enable more powerful optimization passes that span across functions.
|
||||||
|
|
||||||
Currently, the IR-based code generator is still marked experimental,
|
You can enable it on the command line using ``--via-ir``
|
||||||
but it supports all language features and has received a lot of testing,
|
|
||||||
so we consider it almost ready for production use.
|
|
||||||
|
|
||||||
You can enable it on the command line using ``--experimental-via-ir``
|
|
||||||
or with the option ``{"viaIR": true}`` in standard-json and we
|
or with the option ``{"viaIR": true}`` in standard-json and we
|
||||||
encourage everyone to try it out!
|
encourage everyone to try it out!
|
||||||
|
|
||||||
|
@ -298,7 +298,7 @@ Input Description
|
|||||||
// tangerineWhistle, spuriousDragon, byzantium, constantinople, petersburg, istanbul or berlin
|
// tangerineWhistle, spuriousDragon, byzantium, constantinople, petersburg, istanbul or berlin
|
||||||
"evmVersion": "byzantium",
|
"evmVersion": "byzantium",
|
||||||
// Optional: Change compilation pipeline to go through the Yul intermediate representation.
|
// Optional: Change compilation pipeline to go through the Yul intermediate representation.
|
||||||
// This is a highly EXPERIMENTAL feature, not to be used for production. This is false by default.
|
// This is false by default.
|
||||||
"viaIR": true,
|
"viaIR": true,
|
||||||
// Optional: Debugging settings
|
// Optional: Debugging settings
|
||||||
"debug": {
|
"debug": {
|
||||||
|
@ -93,7 +93,7 @@ pair<string, string> IRGenerator::run(
|
|||||||
map<ContractDefinition const*, string_view const> const& _otherYulSources
|
map<ContractDefinition const*, string_view const> const& _otherYulSources
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
string const ir = yul::reindent(generate(_contract, _cborMetadata, _otherYulSources));
|
string ir = yul::reindent(generate(_contract, _cborMetadata, _otherYulSources));
|
||||||
|
|
||||||
yul::AssemblyStack asmStack(
|
yul::AssemblyStack asmStack(
|
||||||
m_evmVersion,
|
m_evmVersion,
|
||||||
@ -113,15 +113,7 @@ pair<string, string> IRGenerator::run(
|
|||||||
}
|
}
|
||||||
asmStack.optimize();
|
asmStack.optimize();
|
||||||
|
|
||||||
string warning =
|
return {move(ir), asmStack.print(m_context.soliditySourceProvider())};
|
||||||
"/*=====================================================*\n"
|
|
||||||
" * WARNING *\n"
|
|
||||||
" * Solidity to Yul compilation is still EXPERIMENTAL *\n"
|
|
||||||
" * It can result in LOSS OF FUNDS or worse *\n"
|
|
||||||
" * !USE AT YOUR OWN RISK! *\n"
|
|
||||||
" *=====================================================*/\n\n";
|
|
||||||
|
|
||||||
return {warning + ir, warning + asmStack.print(m_context.soliditySourceProvider())};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
string IRGenerator::generate(
|
string IRGenerator::generate(
|
||||||
|
@ -1677,7 +1677,7 @@ bytes CompilerStack::createCBORMetadata(Contract const& _contract, bool _forIR)
|
|||||||
else
|
else
|
||||||
solAssert(m_metadataHash == MetadataHash::None, "Invalid metadata hash");
|
solAssert(m_metadataHash == MetadataHash::None, "Invalid metadata hash");
|
||||||
|
|
||||||
if (experimentalMode || _forIR)
|
if (experimentalMode)
|
||||||
encoder.pushBool("experimental", true);
|
encoder.pushBool("experimental", true);
|
||||||
if (m_metadataFormat == MetadataFormat::WithReleaseVersionTag)
|
if (m_metadataFormat == MetadataFormat::WithReleaseVersionTag)
|
||||||
encoder.pushBytes("solc", VersionCompactBytes);
|
encoder.pushBytes("solc", VersionCompactBytes);
|
||||||
|
@ -189,7 +189,7 @@ public:
|
|||||||
/// Enable EVM Bytecode generation. This is enabled by default.
|
/// Enable EVM Bytecode generation. This is enabled by default.
|
||||||
void enableEvmBytecodeGeneration(bool _enable = true) { m_generateEvmBytecode = _enable; }
|
void enableEvmBytecodeGeneration(bool _enable = true) { m_generateEvmBytecode = _enable; }
|
||||||
|
|
||||||
/// Enable experimental generation of Yul IR code.
|
/// Enable generation of Yul IR code.
|
||||||
void enableIRGeneration(bool _enable = true) { m_generateIR = _enable; }
|
void enableIRGeneration(bool _enable = true) { m_generateIR = _enable; }
|
||||||
|
|
||||||
/// Enable experimental generation of Ewasm code. If enabled, IR is also generated.
|
/// Enable experimental generation of Ewasm code. If enabled, IR is also generated.
|
||||||
@ -373,8 +373,8 @@ private:
|
|||||||
std::shared_ptr<evmasm::Assembly> evmRuntimeAssembly;
|
std::shared_ptr<evmasm::Assembly> evmRuntimeAssembly;
|
||||||
evmasm::LinkerObject object; ///< Deployment object (includes the runtime sub-object).
|
evmasm::LinkerObject object; ///< Deployment object (includes the runtime sub-object).
|
||||||
evmasm::LinkerObject runtimeObject; ///< Runtime object.
|
evmasm::LinkerObject runtimeObject; ///< Runtime object.
|
||||||
std::string yulIR; ///< Experimental Yul IR code.
|
std::string yulIR; ///< Yul IR code.
|
||||||
std::string yulIROptimized; ///< Optimized experimental Yul IR code.
|
std::string yulIROptimized; ///< Optimized Yul IR code.
|
||||||
std::string ewasm; ///< Experimental Ewasm text representation
|
std::string ewasm; ///< Experimental Ewasm text representation
|
||||||
evmasm::LinkerObject ewasmObject; ///< Experimental Ewasm code
|
evmasm::LinkerObject ewasmObject; ///< Experimental Ewasm code
|
||||||
util::LazyInit<std::string const> metadata; ///< The metadata json that will be hashed into the chain.
|
util::LazyInit<std::string const> metadata; ///< The metadata json that will be hashed into the chain.
|
||||||
@ -447,8 +447,7 @@ private:
|
|||||||
/// Can only be called after state is SourcesSet.
|
/// Can only be called after state is SourcesSet.
|
||||||
Source const& source(std::string const& _sourceName) const;
|
Source const& source(std::string const& _sourceName) const;
|
||||||
|
|
||||||
/// @param _forIR If true, include a flag that indicates that the bytecode comes from the
|
/// @param _forIR If true, include a flag that indicates that the bytecode comes from IR codegen.
|
||||||
/// experimental IR codegen.
|
|
||||||
/// @returns the metadata JSON as a compact string for the given contract.
|
/// @returns the metadata JSON as a compact string for the given contract.
|
||||||
std::string createMetadata(Contract const& _contract, bool _forIR) const;
|
std::string createMetadata(Contract const& _contract, bool _forIR) const;
|
||||||
|
|
||||||
|
@ -693,7 +693,7 @@ void CommandLineInterface::compile()
|
|||||||
m_compiler->setModelCheckerSettings(m_options.modelChecker.settings);
|
m_compiler->setModelCheckerSettings(m_options.modelChecker.settings);
|
||||||
m_compiler->setRemappings(m_options.input.remappings);
|
m_compiler->setRemappings(m_options.input.remappings);
|
||||||
m_compiler->setLibraries(m_options.linker.libraries);
|
m_compiler->setLibraries(m_options.linker.libraries);
|
||||||
m_compiler->setViaIR(m_options.output.experimentalViaIR);
|
m_compiler->setViaIR(m_options.output.viaIR);
|
||||||
m_compiler->setEVMVersion(m_options.output.evmVersion);
|
m_compiler->setEVMVersion(m_options.output.evmVersion);
|
||||||
m_compiler->setRevertStringBehaviour(m_options.output.revertStrings);
|
m_compiler->setRevertStringBehaviour(m_options.output.revertStrings);
|
||||||
if (m_options.output.debugInfoSelection.has_value())
|
if (m_options.output.debugInfoSelection.has_value())
|
||||||
|
@ -47,6 +47,7 @@ static string const g_strErrorRecovery = "error-recovery";
|
|||||||
static string const g_strEVM = "evm";
|
static string const g_strEVM = "evm";
|
||||||
static string const g_strEVMVersion = "evm-version";
|
static string const g_strEVMVersion = "evm-version";
|
||||||
static string const g_strEwasm = "ewasm";
|
static string const g_strEwasm = "ewasm";
|
||||||
|
static string const g_strViaIR = "via-ir";
|
||||||
static string const g_strExperimentalViaIR = "experimental-via-ir";
|
static string const g_strExperimentalViaIR = "experimental-via-ir";
|
||||||
static string const g_strGas = "gas";
|
static string const g_strGas = "gas";
|
||||||
static string const g_strHelp = "help";
|
static string const g_strHelp = "help";
|
||||||
@ -225,7 +226,7 @@ bool CommandLineOptions::operator==(CommandLineOptions const& _other) const noex
|
|||||||
output.dir == _other.output.dir &&
|
output.dir == _other.output.dir &&
|
||||||
output.overwriteFiles == _other.output.overwriteFiles &&
|
output.overwriteFiles == _other.output.overwriteFiles &&
|
||||||
output.evmVersion == _other.output.evmVersion &&
|
output.evmVersion == _other.output.evmVersion &&
|
||||||
output.experimentalViaIR == _other.output.experimentalViaIR &&
|
output.viaIR == _other.output.viaIR &&
|
||||||
output.revertStrings == _other.output.revertStrings &&
|
output.revertStrings == _other.output.revertStrings &&
|
||||||
output.debugInfoSelection == _other.output.debugInfoSelection &&
|
output.debugInfoSelection == _other.output.debugInfoSelection &&
|
||||||
output.stopAfter == _other.output.stopAfter &&
|
output.stopAfter == _other.output.stopAfter &&
|
||||||
@ -578,7 +579,11 @@ General Information)").c_str(),
|
|||||||
)
|
)
|
||||||
(
|
(
|
||||||
g_strExperimentalViaIR.c_str(),
|
g_strExperimentalViaIR.c_str(),
|
||||||
"Turn on experimental compilation mode via the IR (EXPERIMENTAL)."
|
"Deprecated synonym of --via-ir."
|
||||||
|
)
|
||||||
|
(
|
||||||
|
g_strViaIR.c_str(),
|
||||||
|
"Turn on compilation mode via the IR."
|
||||||
)
|
)
|
||||||
(
|
(
|
||||||
g_strRevertStrings.c_str(),
|
g_strRevertStrings.c_str(),
|
||||||
@ -706,8 +711,8 @@ General Information)").c_str(),
|
|||||||
(CompilerOutputs::componentName(&CompilerOutputs::binary).c_str(), "Binary of the contracts in hex.")
|
(CompilerOutputs::componentName(&CompilerOutputs::binary).c_str(), "Binary of the contracts in hex.")
|
||||||
(CompilerOutputs::componentName(&CompilerOutputs::binaryRuntime).c_str(), "Binary of the runtime part of the contracts in hex.")
|
(CompilerOutputs::componentName(&CompilerOutputs::binaryRuntime).c_str(), "Binary of the runtime part of the contracts in hex.")
|
||||||
(CompilerOutputs::componentName(&CompilerOutputs::abi).c_str(), "ABI specification of the contracts.")
|
(CompilerOutputs::componentName(&CompilerOutputs::abi).c_str(), "ABI specification of the contracts.")
|
||||||
(CompilerOutputs::componentName(&CompilerOutputs::ir).c_str(), "Intermediate Representation (IR) of all contracts (EXPERIMENTAL).")
|
(CompilerOutputs::componentName(&CompilerOutputs::ir).c_str(), "Intermediate Representation (IR) of all contracts.")
|
||||||
(CompilerOutputs::componentName(&CompilerOutputs::irOptimized).c_str(), "Optimized intermediate Representation (IR) of all contracts (EXPERIMENTAL).")
|
(CompilerOutputs::componentName(&CompilerOutputs::irOptimized).c_str(), "Optimized intermediate Representation (IR) of all contracts.")
|
||||||
(CompilerOutputs::componentName(&CompilerOutputs::ewasm).c_str(), "Ewasm text representation of all contracts (EXPERIMENTAL).")
|
(CompilerOutputs::componentName(&CompilerOutputs::ewasm).c_str(), "Ewasm text representation of all contracts (EXPERIMENTAL).")
|
||||||
(CompilerOutputs::componentName(&CompilerOutputs::ewasmIR).c_str(), "Intermediate representation (IR) converted to a form that can be translated directly into Ewasm text representation (EXPERIMENTAL).")
|
(CompilerOutputs::componentName(&CompilerOutputs::ewasmIR).c_str(), "Intermediate representation (IR) converted to a form that can be translated directly into Ewasm text representation (EXPERIMENTAL).")
|
||||||
(CompilerOutputs::componentName(&CompilerOutputs::signatureHashes).c_str(), "Function signature hashes of the contracts.")
|
(CompilerOutputs::componentName(&CompilerOutputs::signatureHashes).c_str(), "Function signature hashes of the contracts.")
|
||||||
@ -906,6 +911,7 @@ void CommandLineParser::processArgs()
|
|||||||
// TODO: This should eventually contain all options.
|
// TODO: This should eventually contain all options.
|
||||||
{g_strErrorRecovery, {InputMode::Compiler, InputMode::CompilerWithASTImport}},
|
{g_strErrorRecovery, {InputMode::Compiler, InputMode::CompilerWithASTImport}},
|
||||||
{g_strExperimentalViaIR, {InputMode::Compiler, InputMode::CompilerWithASTImport}},
|
{g_strExperimentalViaIR, {InputMode::Compiler, InputMode::CompilerWithASTImport}},
|
||||||
|
{g_strViaIR, {InputMode::Compiler, InputMode::CompilerWithASTImport}}
|
||||||
};
|
};
|
||||||
vector<string> invalidOptionsForCurrentInputMode;
|
vector<string> invalidOptionsForCurrentInputMode;
|
||||||
for (auto const& [optionName, inputModes]: validOptionInputModeCombinations)
|
for (auto const& [optionName, inputModes]: validOptionInputModeCombinations)
|
||||||
@ -1256,7 +1262,7 @@ void CommandLineParser::processArgs()
|
|||||||
m_args.count(g_strModelCheckerSolvers) ||
|
m_args.count(g_strModelCheckerSolvers) ||
|
||||||
m_args.count(g_strModelCheckerTargets) ||
|
m_args.count(g_strModelCheckerTargets) ||
|
||||||
m_args.count(g_strModelCheckerTimeout);
|
m_args.count(g_strModelCheckerTimeout);
|
||||||
m_options.output.experimentalViaIR = (m_args.count(g_strExperimentalViaIR) > 0);
|
m_options.output.viaIR = (m_args.count(g_strExperimentalViaIR) > 0 || m_args.count(g_strViaIR) > 0);
|
||||||
if (m_options.input.mode == InputMode::Compiler)
|
if (m_options.input.mode == InputMode::Compiler)
|
||||||
m_options.input.errorRecovery = (m_args.count(g_strErrorRecovery) > 0);
|
m_options.input.errorRecovery = (m_args.count(g_strErrorRecovery) > 0);
|
||||||
|
|
||||||
|
@ -182,7 +182,7 @@ struct CommandLineOptions
|
|||||||
boost::filesystem::path dir;
|
boost::filesystem::path dir;
|
||||||
bool overwriteFiles = false;
|
bool overwriteFiles = false;
|
||||||
langutil::EVMVersion evmVersion;
|
langutil::EVMVersion evmVersion;
|
||||||
bool experimentalViaIR = false;
|
bool viaIR = false;
|
||||||
RevertStrings revertStrings = RevertStrings::Default;
|
RevertStrings revertStrings = RevertStrings::Default;
|
||||||
std::optional<langutil::DebugInfoSelection> debugInfoSelection;
|
std::optional<langutil::DebugInfoSelection> debugInfoSelection;
|
||||||
CompilerStack::State stopAfter = CompilerStack::State::CompilationSuccessful;
|
CompilerStack::State stopAfter = CompilerStack::State::CompilationSuccessful;
|
||||||
|
@ -339,7 +339,7 @@ function test_via_ir_equivalence()
|
|||||||
)
|
)
|
||||||
asm_output_via_ir=$(
|
asm_output_via_ir=$(
|
||||||
echo "$solidity_code" |
|
echo "$solidity_code" |
|
||||||
msg_on_error --no-stderr "$SOLC" - --experimental-via-ir --asm --debug-info location "${optimizer_flags[@]}" |
|
msg_on_error --no-stderr "$SOLC" - --via-ir --asm --debug-info location "${optimizer_flags[@]}" |
|
||||||
sed '/^======= <stdin>/d' |
|
sed '/^======= <stdin>/d' |
|
||||||
sed '/^EVM assembly:$/d'
|
sed '/^EVM assembly:$/d'
|
||||||
)
|
)
|
||||||
@ -355,7 +355,7 @@ function test_via_ir_equivalence()
|
|||||||
)
|
)
|
||||||
bin_output_via_ir=$(
|
bin_output_via_ir=$(
|
||||||
echo "$solidity_code" |
|
echo "$solidity_code" |
|
||||||
msg_on_error --no-stderr "$SOLC" - --experimental-via-ir --bin "${optimizer_flags[@]}" |
|
msg_on_error --no-stderr "$SOLC" - --via-ir --bin "${optimizer_flags[@]}" |
|
||||||
sed '/^======= <stdin>/d' |
|
sed '/^======= <stdin>/d' |
|
||||||
sed '/^Binary:$/d'
|
sed '/^Binary:$/d'
|
||||||
)
|
)
|
||||||
@ -588,7 +588,7 @@ printTask "Testing assemble, yul, strict-assembly and optimize..."
|
|||||||
test_solc_assembly_output "{ let x := 0 }" "{ { } }" "--strict-assembly --optimize"
|
test_solc_assembly_output "{ let x := 0 }" "{ { } }" "--strict-assembly --optimize"
|
||||||
)
|
)
|
||||||
|
|
||||||
printTask "Testing the eqivalence of --experimental-via-ir and a two-stage compilation..."
|
printTask "Testing the eqivalence of --via-ir and a two-stage compilation..."
|
||||||
(
|
(
|
||||||
printTask " - Smoke test"
|
printTask " - Smoke test"
|
||||||
test_via_ir_equivalence "contract C {}"
|
test_via_ir_equivalence "contract C {}"
|
||||||
|
@ -1,11 +1,4 @@
|
|||||||
Optimized IR:
|
Optimized IR:
|
||||||
/*=====================================================*
|
|
||||||
* WARNING *
|
|
||||||
* Solidity to Yul compilation is still EXPERIMENTAL *
|
|
||||||
* It can result in LOSS OF FUNDS or worse *
|
|
||||||
* !USE AT YOUR OWN RISK! *
|
|
||||||
*=====================================================*/
|
|
||||||
|
|
||||||
/// @use-src 0:"constant_optimizer_yul/input.sol"
|
/// @use-src 0:"constant_optimizer_yul/input.sol"
|
||||||
object "C_12" {
|
object "C_12" {
|
||||||
code {
|
code {
|
||||||
|
@ -54,13 +54,6 @@ sub_0: assembly {
|
|||||||
}
|
}
|
||||||
|
|
||||||
IR:
|
IR:
|
||||||
/*=====================================================*
|
|
||||||
* WARNING *
|
|
||||||
* Solidity to Yul compilation is still EXPERIMENTAL *
|
|
||||||
* It can result in LOSS OF FUNDS or worse *
|
|
||||||
* !USE AT YOUR OWN RISK! *
|
|
||||||
*=====================================================*/
|
|
||||||
|
|
||||||
|
|
||||||
/// @use-src 0:"debug_info_in_yul_and_evm_asm_print_all/input.sol"
|
/// @use-src 0:"debug_info_in_yul_and_evm_asm_print_all/input.sol"
|
||||||
object "C_6" {
|
object "C_6" {
|
||||||
@ -176,13 +169,6 @@ object "C_6" {
|
|||||||
|
|
||||||
|
|
||||||
Optimized IR:
|
Optimized IR:
|
||||||
/*=====================================================*
|
|
||||||
* WARNING *
|
|
||||||
* Solidity to Yul compilation is still EXPERIMENTAL *
|
|
||||||
* It can result in LOSS OF FUNDS or worse *
|
|
||||||
* !USE AT YOUR OWN RISK! *
|
|
||||||
*=====================================================*/
|
|
||||||
|
|
||||||
/// @use-src 0:"debug_info_in_yul_and_evm_asm_print_all/input.sol"
|
/// @use-src 0:"debug_info_in_yul_and_evm_asm_print_all/input.sol"
|
||||||
object "C_6" {
|
object "C_6" {
|
||||||
code {
|
code {
|
||||||
|
@ -54,13 +54,6 @@ sub_0: assembly {
|
|||||||
}
|
}
|
||||||
|
|
||||||
IR:
|
IR:
|
||||||
/*=====================================================*
|
|
||||||
* WARNING *
|
|
||||||
* Solidity to Yul compilation is still EXPERIMENTAL *
|
|
||||||
* It can result in LOSS OF FUNDS or worse *
|
|
||||||
* !USE AT YOUR OWN RISK! *
|
|
||||||
*=====================================================*/
|
|
||||||
|
|
||||||
|
|
||||||
/// @use-src 0:"debug_info_in_yul_and_evm_asm_print_location_only/input.sol"
|
/// @use-src 0:"debug_info_in_yul_and_evm_asm_print_location_only/input.sol"
|
||||||
object "C_6" {
|
object "C_6" {
|
||||||
@ -175,13 +168,6 @@ object "C_6" {
|
|||||||
|
|
||||||
|
|
||||||
Optimized IR:
|
Optimized IR:
|
||||||
/*=====================================================*
|
|
||||||
* WARNING *
|
|
||||||
* Solidity to Yul compilation is still EXPERIMENTAL *
|
|
||||||
* It can result in LOSS OF FUNDS or worse *
|
|
||||||
* !USE AT YOUR OWN RISK! *
|
|
||||||
*=====================================================*/
|
|
||||||
|
|
||||||
/// @use-src 0:"debug_info_in_yul_and_evm_asm_print_location_only/input.sol"
|
/// @use-src 0:"debug_info_in_yul_and_evm_asm_print_location_only/input.sol"
|
||||||
object "C_6" {
|
object "C_6" {
|
||||||
code {
|
code {
|
||||||
|
@ -51,13 +51,6 @@ sub_0: assembly {
|
|||||||
}
|
}
|
||||||
|
|
||||||
IR:
|
IR:
|
||||||
/*=====================================================*
|
|
||||||
* WARNING *
|
|
||||||
* Solidity to Yul compilation is still EXPERIMENTAL *
|
|
||||||
* It can result in LOSS OF FUNDS or worse *
|
|
||||||
* !USE AT YOUR OWN RISK! *
|
|
||||||
*=====================================================*/
|
|
||||||
|
|
||||||
|
|
||||||
/// @use-src 0:"debug_info_in_yul_and_evm_asm_print_none/input.sol"
|
/// @use-src 0:"debug_info_in_yul_and_evm_asm_print_none/input.sol"
|
||||||
object "C_6" {
|
object "C_6" {
|
||||||
@ -166,13 +159,6 @@ object "C_6" {
|
|||||||
|
|
||||||
|
|
||||||
Optimized IR:
|
Optimized IR:
|
||||||
/*=====================================================*
|
|
||||||
* WARNING *
|
|
||||||
* Solidity to Yul compilation is still EXPERIMENTAL *
|
|
||||||
* It can result in LOSS OF FUNDS or worse *
|
|
||||||
* !USE AT YOUR OWN RISK! *
|
|
||||||
*=====================================================*/
|
|
||||||
|
|
||||||
/// @use-src 0:"debug_info_in_yul_and_evm_asm_print_none/input.sol"
|
/// @use-src 0:"debug_info_in_yul_and_evm_asm_print_none/input.sol"
|
||||||
object "C_6" {
|
object "C_6" {
|
||||||
code {
|
code {
|
||||||
|
@ -1,11 +1,4 @@
|
|||||||
IR:
|
IR:
|
||||||
/*=====================================================*
|
|
||||||
* WARNING *
|
|
||||||
* Solidity to Yul compilation is still EXPERIMENTAL *
|
|
||||||
* It can result in LOSS OF FUNDS or worse *
|
|
||||||
* !USE AT YOUR OWN RISK! *
|
|
||||||
*=====================================================*/
|
|
||||||
|
|
||||||
|
|
||||||
/// @use-src 0:"debug_info_in_yul_snippet_escaping/input.sol"
|
/// @use-src 0:"debug_info_in_yul_snippet_escaping/input.sol"
|
||||||
object "C_2" {
|
object "C_2" {
|
||||||
@ -70,13 +63,6 @@ object "C_2" {
|
|||||||
|
|
||||||
|
|
||||||
Optimized IR:
|
Optimized IR:
|
||||||
/*=====================================================*
|
|
||||||
* WARNING *
|
|
||||||
* Solidity to Yul compilation is still EXPERIMENTAL *
|
|
||||||
* It can result in LOSS OF FUNDS or worse *
|
|
||||||
* !USE AT YOUR OWN RISK! *
|
|
||||||
*=====================================================*/
|
|
||||||
|
|
||||||
/// @use-src 0:"debug_info_in_yul_snippet_escaping/input.sol"
|
/// @use-src 0:"debug_info_in_yul_snippet_escaping/input.sol"
|
||||||
object "C_2" {
|
object "C_2" {
|
||||||
code {
|
code {
|
||||||
@ -103,13 +89,6 @@ object "C_2" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
IR:
|
IR:
|
||||||
/*=====================================================*
|
|
||||||
* WARNING *
|
|
||||||
* Solidity to Yul compilation is still EXPERIMENTAL *
|
|
||||||
* It can result in LOSS OF FUNDS or worse *
|
|
||||||
* !USE AT YOUR OWN RISK! *
|
|
||||||
*=====================================================*/
|
|
||||||
|
|
||||||
|
|
||||||
/// @use-src 0:"debug_info_in_yul_snippet_escaping/input.sol"
|
/// @use-src 0:"debug_info_in_yul_snippet_escaping/input.sol"
|
||||||
object "D_27" {
|
object "D_27" {
|
||||||
@ -367,12 +346,6 @@ object "D_27" {
|
|||||||
/// @src 0:279:599 "contract D /** @src 0:96:165 \"contract D {...\" *\/ {..."
|
/// @src 0:279:599 "contract D /** @src 0:96:165 \"contract D {...\" *\/ {..."
|
||||||
|
|
||||||
}
|
}
|
||||||
/*=====================================================*
|
|
||||||
* WARNING *
|
|
||||||
* Solidity to Yul compilation is still EXPERIMENTAL *
|
|
||||||
* It can result in LOSS OF FUNDS or worse *
|
|
||||||
* !USE AT YOUR OWN RISK! *
|
|
||||||
*=====================================================*/
|
|
||||||
|
|
||||||
/// @use-src 0:"debug_info_in_yul_snippet_escaping/input.sol"
|
/// @use-src 0:"debug_info_in_yul_snippet_escaping/input.sol"
|
||||||
object "C_2" {
|
object "C_2" {
|
||||||
@ -442,13 +415,6 @@ object "D_27" {
|
|||||||
|
|
||||||
|
|
||||||
Optimized IR:
|
Optimized IR:
|
||||||
/*=====================================================*
|
|
||||||
* WARNING *
|
|
||||||
* Solidity to Yul compilation is still EXPERIMENTAL *
|
|
||||||
* It can result in LOSS OF FUNDS or worse *
|
|
||||||
* !USE AT YOUR OWN RISK! *
|
|
||||||
*=====================================================*/
|
|
||||||
|
|
||||||
/// @use-src 0:"debug_info_in_yul_snippet_escaping/input.sol"
|
/// @use-src 0:"debug_info_in_yul_snippet_escaping/input.sol"
|
||||||
object "D_27" {
|
object "D_27" {
|
||||||
code {
|
code {
|
||||||
|
@ -1,11 +1,4 @@
|
|||||||
IR:
|
IR:
|
||||||
/*=====================================================*
|
|
||||||
* WARNING *
|
|
||||||
* Solidity to Yul compilation is still EXPERIMENTAL *
|
|
||||||
* It can result in LOSS OF FUNDS or worse *
|
|
||||||
* !USE AT YOUR OWN RISK! *
|
|
||||||
*=====================================================*/
|
|
||||||
|
|
||||||
|
|
||||||
/// @use-src 0:"exp_base_literal/input.sol"
|
/// @use-src 0:"exp_base_literal/input.sol"
|
||||||
object "C_81" {
|
object "C_81" {
|
||||||
|
@ -1 +1 @@
|
|||||||
--experimental-via-ir --optimize --combined-json function-debug,function-debug-runtime --pretty-json
|
--via-ir --optimize --combined-json function-debug,function-debug-runtime --pretty-json
|
||||||
|
@ -1 +1 @@
|
|||||||
--experimental-via-ir --combined-json function-debug-runtime --pretty-json --json-indent 4
|
--via-ir --combined-json function-debug-runtime --pretty-json --json-indent 4
|
@ -1,11 +1,4 @@
|
|||||||
Optimized IR:
|
Optimized IR:
|
||||||
/*=====================================================*
|
|
||||||
* WARNING *
|
|
||||||
* Solidity to Yul compilation is still EXPERIMENTAL *
|
|
||||||
* It can result in LOSS OF FUNDS or worse *
|
|
||||||
* !USE AT YOUR OWN RISK! *
|
|
||||||
*=====================================================*/
|
|
||||||
|
|
||||||
/// @use-src 0:"ir_compiler_inheritance_nosubobjects/input.sol"
|
/// @use-src 0:"ir_compiler_inheritance_nosubobjects/input.sol"
|
||||||
object "C_7" {
|
object "C_7" {
|
||||||
code {
|
code {
|
||||||
@ -32,13 +25,6 @@ object "C_7" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Optimized IR:
|
Optimized IR:
|
||||||
/*=====================================================*
|
|
||||||
* WARNING *
|
|
||||||
* Solidity to Yul compilation is still EXPERIMENTAL *
|
|
||||||
* It can result in LOSS OF FUNDS or worse *
|
|
||||||
* !USE AT YOUR OWN RISK! *
|
|
||||||
*=====================================================*/
|
|
||||||
|
|
||||||
/// @use-src 0:"ir_compiler_inheritance_nosubobjects/input.sol"
|
/// @use-src 0:"ir_compiler_inheritance_nosubobjects/input.sol"
|
||||||
object "D_10" {
|
object "D_10" {
|
||||||
code {
|
code {
|
||||||
|
@ -1,11 +1,4 @@
|
|||||||
Optimized IR:
|
Optimized IR:
|
||||||
/*=====================================================*
|
|
||||||
* WARNING *
|
|
||||||
* Solidity to Yul compilation is still EXPERIMENTAL *
|
|
||||||
* It can result in LOSS OF FUNDS or worse *
|
|
||||||
* !USE AT YOUR OWN RISK! *
|
|
||||||
*=====================================================*/
|
|
||||||
|
|
||||||
/// @use-src 0:"ir_compiler_subobjects/input.sol"
|
/// @use-src 0:"ir_compiler_subobjects/input.sol"
|
||||||
object "C_3" {
|
object "C_3" {
|
||||||
code {
|
code {
|
||||||
@ -32,13 +25,6 @@ object "C_3" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Optimized IR:
|
Optimized IR:
|
||||||
/*=====================================================*
|
|
||||||
* WARNING *
|
|
||||||
* Solidity to Yul compilation is still EXPERIMENTAL *
|
|
||||||
* It can result in LOSS OF FUNDS or worse *
|
|
||||||
* !USE AT YOUR OWN RISK! *
|
|
||||||
*=====================================================*/
|
|
||||||
|
|
||||||
/// @use-src 0:"ir_compiler_subobjects/input.sol"
|
/// @use-src 0:"ir_compiler_subobjects/input.sol"
|
||||||
object "D_16" {
|
object "D_16" {
|
||||||
code {
|
code {
|
||||||
|
@ -1,11 +1,4 @@
|
|||||||
Optimized IR:
|
Optimized IR:
|
||||||
/*=====================================================*
|
|
||||||
* WARNING *
|
|
||||||
* Solidity to Yul compilation is still EXPERIMENTAL *
|
|
||||||
* It can result in LOSS OF FUNDS or worse *
|
|
||||||
* !USE AT YOUR OWN RISK! *
|
|
||||||
*=====================================================*/
|
|
||||||
|
|
||||||
/// @use-src 0:"ir_with_assembly_no_memoryguard_creation/input.sol"
|
/// @use-src 0:"ir_with_assembly_no_memoryguard_creation/input.sol"
|
||||||
object "D_12" {
|
object "D_12" {
|
||||||
code {
|
code {
|
||||||
|
@ -1,11 +1,4 @@
|
|||||||
Optimized IR:
|
Optimized IR:
|
||||||
/*=====================================================*
|
|
||||||
* WARNING *
|
|
||||||
* Solidity to Yul compilation is still EXPERIMENTAL *
|
|
||||||
* It can result in LOSS OF FUNDS or worse *
|
|
||||||
* !USE AT YOUR OWN RISK! *
|
|
||||||
*=====================================================*/
|
|
||||||
|
|
||||||
/// @use-src 0:"ir_with_assembly_no_memoryguard_runtime/input.sol"
|
/// @use-src 0:"ir_with_assembly_no_memoryguard_runtime/input.sol"
|
||||||
object "D_8" {
|
object "D_8" {
|
||||||
code {
|
code {
|
||||||
|
@ -1,11 +1,4 @@
|
|||||||
Optimized IR:
|
Optimized IR:
|
||||||
/*=====================================================*
|
|
||||||
* WARNING *
|
|
||||||
* Solidity to Yul compilation is still EXPERIMENTAL *
|
|
||||||
* It can result in LOSS OF FUNDS or worse *
|
|
||||||
* !USE AT YOUR OWN RISK! *
|
|
||||||
*=====================================================*/
|
|
||||||
|
|
||||||
/// @use-src 0:"keccak_optimization_deploy_code/input.sol"
|
/// @use-src 0:"keccak_optimization_deploy_code/input.sol"
|
||||||
object "C_12" {
|
object "C_12" {
|
||||||
code {
|
code {
|
||||||
|
@ -1,11 +1,4 @@
|
|||||||
Optimized IR:
|
Optimized IR:
|
||||||
/*=====================================================*
|
|
||||||
* WARNING *
|
|
||||||
* Solidity to Yul compilation is still EXPERIMENTAL *
|
|
||||||
* It can result in LOSS OF FUNDS or worse *
|
|
||||||
* !USE AT YOUR OWN RISK! *
|
|
||||||
*=====================================================*/
|
|
||||||
|
|
||||||
/// @use-src 0:"keccak_optimization_low_runs/input.sol"
|
/// @use-src 0:"keccak_optimization_low_runs/input.sol"
|
||||||
object "C_7" {
|
object "C_7" {
|
||||||
code {
|
code {
|
||||||
|
@ -1,11 +1,4 @@
|
|||||||
Optimized IR:
|
Optimized IR:
|
||||||
/*=====================================================*
|
|
||||||
* WARNING *
|
|
||||||
* Solidity to Yul compilation is still EXPERIMENTAL *
|
|
||||||
* It can result in LOSS OF FUNDS or worse *
|
|
||||||
* !USE AT YOUR OWN RISK! *
|
|
||||||
*=====================================================*/
|
|
||||||
|
|
||||||
/// @use-src 0:"name_simplifier/input.sol"
|
/// @use-src 0:"name_simplifier/input.sol"
|
||||||
object "C_59" {
|
object "C_59" {
|
||||||
code {
|
code {
|
||||||
|
@ -1,11 +1,4 @@
|
|||||||
Optimized IR:
|
Optimized IR:
|
||||||
/*=====================================================*
|
|
||||||
* WARNING *
|
|
||||||
* Solidity to Yul compilation is still EXPERIMENTAL *
|
|
||||||
* It can result in LOSS OF FUNDS or worse *
|
|
||||||
* !USE AT YOUR OWN RISK! *
|
|
||||||
*=====================================================*/
|
|
||||||
|
|
||||||
/// @use-src 0:"optimizer_array_sload/input.sol"
|
/// @use-src 0:"optimizer_array_sload/input.sol"
|
||||||
object "Arraysum_34" {
|
object "Arraysum_34" {
|
||||||
code {
|
code {
|
||||||
|
@ -1,11 +1,4 @@
|
|||||||
IR:
|
IR:
|
||||||
/*=====================================================*
|
|
||||||
* WARNING *
|
|
||||||
* Solidity to Yul compilation is still EXPERIMENTAL *
|
|
||||||
* It can result in LOSS OF FUNDS or worse *
|
|
||||||
* !USE AT YOUR OWN RISK! *
|
|
||||||
*=====================================================*/
|
|
||||||
|
|
||||||
|
|
||||||
/// @use-src 0:"revert_strings/input.sol"
|
/// @use-src 0:"revert_strings/input.sol"
|
||||||
object "C_15" {
|
object "C_15" {
|
||||||
|
@ -60,14 +60,7 @@ sub_0: assembly {
|
|||||||
}
|
}
|
||||||
"
|
"
|
||||||
},
|
},
|
||||||
"ir": "/*=====================================================*
|
"ir": "
|
||||||
* WARNING *
|
|
||||||
* Solidity to Yul compilation is still EXPERIMENTAL *
|
|
||||||
* It can result in LOSS OF FUNDS or worse *
|
|
||||||
* !USE AT YOUR OWN RISK! *
|
|
||||||
*=====================================================*/
|
|
||||||
|
|
||||||
|
|
||||||
/// @use-src 0:\"C\"
|
/// @use-src 0:\"C\"
|
||||||
object \"C_6\" {
|
object \"C_6\" {
|
||||||
code {
|
code {
|
||||||
@ -181,14 +174,7 @@ object \"C_6\" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
",
|
",
|
||||||
"irOptimized": "/*=====================================================*
|
"irOptimized": "/// @use-src 0:\"C\"
|
||||||
* WARNING *
|
|
||||||
* Solidity to Yul compilation is still EXPERIMENTAL *
|
|
||||||
* It can result in LOSS OF FUNDS or worse *
|
|
||||||
* !USE AT YOUR OWN RISK! *
|
|
||||||
*=====================================================*/
|
|
||||||
|
|
||||||
/// @use-src 0:\"C\"
|
|
||||||
object \"C_6\" {
|
object \"C_6\" {
|
||||||
code {
|
code {
|
||||||
{
|
{
|
||||||
|
@ -60,14 +60,7 @@ sub_0: assembly {
|
|||||||
}
|
}
|
||||||
"
|
"
|
||||||
},
|
},
|
||||||
"ir": "/*=====================================================*
|
"ir": "
|
||||||
* WARNING *
|
|
||||||
* Solidity to Yul compilation is still EXPERIMENTAL *
|
|
||||||
* It can result in LOSS OF FUNDS or worse *
|
|
||||||
* !USE AT YOUR OWN RISK! *
|
|
||||||
*=====================================================*/
|
|
||||||
|
|
||||||
|
|
||||||
/// @use-src 0:\"C\"
|
/// @use-src 0:\"C\"
|
||||||
object \"C_6\" {
|
object \"C_6\" {
|
||||||
code {
|
code {
|
||||||
@ -180,14 +173,7 @@ object \"C_6\" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
",
|
",
|
||||||
"irOptimized": "/*=====================================================*
|
"irOptimized": "/// @use-src 0:\"C\"
|
||||||
* WARNING *
|
|
||||||
* Solidity to Yul compilation is still EXPERIMENTAL *
|
|
||||||
* It can result in LOSS OF FUNDS or worse *
|
|
||||||
* !USE AT YOUR OWN RISK! *
|
|
||||||
*=====================================================*/
|
|
||||||
|
|
||||||
/// @use-src 0:\"C\"
|
|
||||||
object \"C_6\" {
|
object \"C_6\" {
|
||||||
code {
|
code {
|
||||||
{
|
{
|
||||||
|
@ -57,14 +57,7 @@ sub_0: assembly {
|
|||||||
}
|
}
|
||||||
"
|
"
|
||||||
},
|
},
|
||||||
"ir": "/*=====================================================*
|
"ir": "
|
||||||
* WARNING *
|
|
||||||
* Solidity to Yul compilation is still EXPERIMENTAL *
|
|
||||||
* It can result in LOSS OF FUNDS or worse *
|
|
||||||
* !USE AT YOUR OWN RISK! *
|
|
||||||
*=====================================================*/
|
|
||||||
|
|
||||||
|
|
||||||
/// @use-src 0:\"C\"
|
/// @use-src 0:\"C\"
|
||||||
object \"C_6\" {
|
object \"C_6\" {
|
||||||
code {
|
code {
|
||||||
@ -171,14 +164,7 @@ object \"C_6\" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
",
|
",
|
||||||
"irOptimized": "/*=====================================================*
|
"irOptimized": "/// @use-src 0:\"C\"
|
||||||
* WARNING *
|
|
||||||
* Solidity to Yul compilation is still EXPERIMENTAL *
|
|
||||||
* It can result in LOSS OF FUNDS or worse *
|
|
||||||
* !USE AT YOUR OWN RISK! *
|
|
||||||
*=====================================================*/
|
|
||||||
|
|
||||||
/// @use-src 0:\"C\"
|
|
||||||
object \"C_6\" {
|
object \"C_6\" {
|
||||||
code {
|
code {
|
||||||
{
|
{
|
||||||
|
@ -1,11 +1,4 @@
|
|||||||
{"contracts":{"C":{"C":{"ir":"/*=====================================================*
|
{"contracts":{"C":{"C":{"ir":"
|
||||||
* WARNING *
|
|
||||||
* Solidity to Yul compilation is still EXPERIMENTAL *
|
|
||||||
* It can result in LOSS OF FUNDS or worse *
|
|
||||||
* !USE AT YOUR OWN RISK! *
|
|
||||||
*=====================================================*/
|
|
||||||
|
|
||||||
|
|
||||||
/// @use-src 0:\"C\"
|
/// @use-src 0:\"C\"
|
||||||
object \"C_54\" {
|
object \"C_54\" {
|
||||||
code {
|
code {
|
||||||
@ -609,14 +602,7 @@ object \"C_54\" {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
","irOptimized":"/*=====================================================*
|
","irOptimized":"/// @use-src 0:\"C\"
|
||||||
* WARNING *
|
|
||||||
* Solidity to Yul compilation is still EXPERIMENTAL *
|
|
||||||
* It can result in LOSS OF FUNDS or worse *
|
|
||||||
* !USE AT YOUR OWN RISK! *
|
|
||||||
*=====================================================*/
|
|
||||||
|
|
||||||
/// @use-src 0:\"C\"
|
|
||||||
object \"C_54\" {
|
object \"C_54\" {
|
||||||
code {
|
code {
|
||||||
{
|
{
|
||||||
@ -776,14 +762,7 @@ object \"C_54\" {
|
|||||||
data \".metadata\" hex\"<BYTECODE REMOVED>\"
|
data \".metadata\" hex\"<BYTECODE REMOVED>\"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
"}},"D":{"D":{"ir":"/*=====================================================*
|
"}},"D":{"D":{"ir":"
|
||||||
* WARNING *
|
|
||||||
* Solidity to Yul compilation is still EXPERIMENTAL *
|
|
||||||
* It can result in LOSS OF FUNDS or worse *
|
|
||||||
* !USE AT YOUR OWN RISK! *
|
|
||||||
*=====================================================*/
|
|
||||||
|
|
||||||
|
|
||||||
/// @use-src 0:\"C\", 1:\"D\"
|
/// @use-src 0:\"C\", 1:\"D\"
|
||||||
object \"D_72\" {
|
object \"D_72\" {
|
||||||
code {
|
code {
|
||||||
@ -1455,14 +1434,7 @@ object \"D_72\" {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
","irOptimized":"/*=====================================================*
|
","irOptimized":"/// @use-src 0:\"C\", 1:\"D\"
|
||||||
* WARNING *
|
|
||||||
* Solidity to Yul compilation is still EXPERIMENTAL *
|
|
||||||
* It can result in LOSS OF FUNDS or worse *
|
|
||||||
* !USE AT YOUR OWN RISK! *
|
|
||||||
*=====================================================*/
|
|
||||||
|
|
||||||
/// @use-src 0:\"C\", 1:\"D\"
|
|
||||||
object \"D_72\" {
|
object \"D_72\" {
|
||||||
code {
|
code {
|
||||||
{
|
{
|
||||||
|
@ -1,11 +1,4 @@
|
|||||||
{"contracts":{"A":{"C":{"irOptimized":"/*=====================================================*
|
{"contracts":{"A":{"C":{"irOptimized":"/// @use-src 0:\"A\"
|
||||||
* WARNING *
|
|
||||||
* Solidity to Yul compilation is still EXPERIMENTAL *
|
|
||||||
* It can result in LOSS OF FUNDS or worse *
|
|
||||||
* !USE AT YOUR OWN RISK! *
|
|
||||||
*=====================================================*/
|
|
||||||
|
|
||||||
/// @use-src 0:\"A\"
|
|
||||||
object \"C_7\" {
|
object \"C_7\" {
|
||||||
code {
|
code {
|
||||||
/// @src 0:79:121 \"contract C { function f() public pure {} }\"
|
/// @src 0:79:121 \"contract C { function f() public pure {} }\"
|
||||||
|
@ -1,11 +1,4 @@
|
|||||||
{"contracts":{"A":{"C":{"ir":"/*=====================================================*
|
{"contracts":{"A":{"C":{"ir":"
|
||||||
* WARNING *
|
|
||||||
* Solidity to Yul compilation is still EXPERIMENTAL *
|
|
||||||
* It can result in LOSS OF FUNDS or worse *
|
|
||||||
* !USE AT YOUR OWN RISK! *
|
|
||||||
*=====================================================*/
|
|
||||||
|
|
||||||
|
|
||||||
/// @use-src 0:\"A\"
|
/// @use-src 0:\"A\"
|
||||||
object \"C_7\" {
|
object \"C_7\" {
|
||||||
code {
|
code {
|
||||||
|
@ -1,11 +1,4 @@
|
|||||||
{"contracts":{"A":{"C":{"evm":{"bytecode":{"generatedSources":[],"object":"<BYTECODE REMOVED>"},"deployedBytecode":{"object":"<BYTECODE REMOVED>"}},"ir":"/*=====================================================*
|
{"contracts":{"A":{"C":{"evm":{"bytecode":{"generatedSources":[],"object":"<BYTECODE REMOVED>"},"deployedBytecode":{"object":"<BYTECODE REMOVED>"}},"ir":"
|
||||||
* WARNING *
|
|
||||||
* Solidity to Yul compilation is still EXPERIMENTAL *
|
|
||||||
* It can result in LOSS OF FUNDS or worse *
|
|
||||||
* !USE AT YOUR OWN RISK! *
|
|
||||||
*=====================================================*/
|
|
||||||
|
|
||||||
|
|
||||||
/// @use-src 0:\"A\"
|
/// @use-src 0:\"A\"
|
||||||
object \"C_3\" {
|
object \"C_3\" {
|
||||||
code {
|
code {
|
||||||
@ -67,14 +60,7 @@ object \"C_3\" {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
"},"D":{"evm":{"bytecode":{"generatedSources":[],"object":"<BYTECODE REMOVED>"},"deployedBytecode":{"object":"<BYTECODE REMOVED>"}},"ir":"/*=====================================================*
|
"},"D":{"evm":{"bytecode":{"generatedSources":[],"object":"<BYTECODE REMOVED>"},"deployedBytecode":{"object":"<BYTECODE REMOVED>"}},"ir":"
|
||||||
* WARNING *
|
|
||||||
* Solidity to Yul compilation is still EXPERIMENTAL *
|
|
||||||
* It can result in LOSS OF FUNDS or worse *
|
|
||||||
* !USE AT YOUR OWN RISK! *
|
|
||||||
*=====================================================*/
|
|
||||||
|
|
||||||
|
|
||||||
/// @use-src 0:\"A\"
|
/// @use-src 0:\"A\"
|
||||||
object \"D_16\" {
|
object \"D_16\" {
|
||||||
code {
|
code {
|
||||||
@ -207,12 +193,6 @@ object \"D_16\" {
|
|||||||
/// @src 0:93:146 \"contract D { function f() public { C c = new C(); } }\"
|
/// @src 0:93:146 \"contract D { function f() public { C c = new C(); } }\"
|
||||||
|
|
||||||
}
|
}
|
||||||
/*=====================================================*
|
|
||||||
* WARNING *
|
|
||||||
* Solidity to Yul compilation is still EXPERIMENTAL *
|
|
||||||
* It can result in LOSS OF FUNDS or worse *
|
|
||||||
* !USE AT YOUR OWN RISK! *
|
|
||||||
*=====================================================*/
|
|
||||||
|
|
||||||
/// @use-src 0:\"A\"
|
/// @use-src 0:\"A\"
|
||||||
object \"C_3\" {
|
object \"C_3\" {
|
||||||
|
@ -1,11 +1,4 @@
|
|||||||
IR:
|
IR:
|
||||||
/*=====================================================*
|
|
||||||
* WARNING *
|
|
||||||
* Solidity to Yul compilation is still EXPERIMENTAL *
|
|
||||||
* It can result in LOSS OF FUNDS or worse *
|
|
||||||
* !USE AT YOUR OWN RISK! *
|
|
||||||
*=====================================================*/
|
|
||||||
|
|
||||||
|
|
||||||
/// @use-src 0:"viair_abicoder_v1/input.sol"
|
/// @use-src 0:"viair_abicoder_v1/input.sol"
|
||||||
object "test_11" {
|
object "test_11" {
|
||||||
|
@ -1 +1 @@
|
|||||||
--ir-optimized --experimental-via-ir --optimize --bin --bin-runtime
|
--ir-optimized --via-ir --optimize --bin --bin-runtime
|
@ -5,13 +5,6 @@ Binary:
|
|||||||
Binary of the runtime part:
|
Binary of the runtime part:
|
||||||
<BYTECODE REMOVED>
|
<BYTECODE REMOVED>
|
||||||
Optimized IR:
|
Optimized IR:
|
||||||
/*=====================================================*
|
|
||||||
* WARNING *
|
|
||||||
* Solidity to Yul compilation is still EXPERIMENTAL *
|
|
||||||
* It can result in LOSS OF FUNDS or worse *
|
|
||||||
* !USE AT YOUR OWN RISK! *
|
|
||||||
*=====================================================*/
|
|
||||||
|
|
||||||
/// @use-src 0:"viair_subobjects/input.sol"
|
/// @use-src 0:"viair_subobjects/input.sol"
|
||||||
object "C_3" {
|
object "C_3" {
|
||||||
code {
|
code {
|
||||||
@ -44,13 +37,6 @@ Binary:
|
|||||||
Binary of the runtime part:
|
Binary of the runtime part:
|
||||||
<BYTECODE REMOVED>
|
<BYTECODE REMOVED>
|
||||||
Optimized IR:
|
Optimized IR:
|
||||||
/*=====================================================*
|
|
||||||
* WARNING *
|
|
||||||
* Solidity to Yul compilation is still EXPERIMENTAL *
|
|
||||||
* It can result in LOSS OF FUNDS or worse *
|
|
||||||
* !USE AT YOUR OWN RISK! *
|
|
||||||
*=====================================================*/
|
|
||||||
|
|
||||||
/// @use-src 0:"viair_subobjects/input.sol"
|
/// @use-src 0:"viair_subobjects/input.sol"
|
||||||
object "D_16" {
|
object "D_16" {
|
||||||
code {
|
code {
|
||||||
|
@ -1,11 +1,4 @@
|
|||||||
Optimized IR:
|
Optimized IR:
|
||||||
/*=====================================================*
|
|
||||||
* WARNING *
|
|
||||||
* Solidity to Yul compilation is still EXPERIMENTAL *
|
|
||||||
* It can result in LOSS OF FUNDS or worse *
|
|
||||||
* !USE AT YOUR OWN RISK! *
|
|
||||||
*=====================================================*/
|
|
||||||
|
|
||||||
/// @use-src 0:"yul_optimizer_steps/input.sol"
|
/// @use-src 0:"yul_optimizer_steps/input.sol"
|
||||||
object "C_7" {
|
object "C_7" {
|
||||||
code {
|
code {
|
||||||
|
@ -1,11 +1,4 @@
|
|||||||
Optimized IR:
|
Optimized IR:
|
||||||
/*=====================================================*
|
|
||||||
* WARNING *
|
|
||||||
* Solidity to Yul compilation is still EXPERIMENTAL *
|
|
||||||
* It can result in LOSS OF FUNDS or worse *
|
|
||||||
* !USE AT YOUR OWN RISK! *
|
|
||||||
*=====================================================*/
|
|
||||||
|
|
||||||
/// @use-src 0:"yul_optimizer_steps_nested_brackets/input.sol"
|
/// @use-src 0:"yul_optimizer_steps_nested_brackets/input.sol"
|
||||||
object "C_6" {
|
object "C_6" {
|
||||||
code {
|
code {
|
||||||
|
@ -1,11 +1,4 @@
|
|||||||
{"contracts":{"A":{"C":{"ir":"/*=====================================================*
|
{"contracts":{"A":{"C":{"ir":"
|
||||||
* WARNING *
|
|
||||||
* Solidity to Yul compilation is still EXPERIMENTAL *
|
|
||||||
* It can result in LOSS OF FUNDS or worse *
|
|
||||||
* !USE AT YOUR OWN RISK! *
|
|
||||||
*=====================================================*/
|
|
||||||
|
|
||||||
|
|
||||||
/// @use-src 0:\"A\"
|
/// @use-src 0:\"A\"
|
||||||
object \"C_11\" {
|
object \"C_11\" {
|
||||||
code {
|
code {
|
||||||
|
@ -1,11 +1,4 @@
|
|||||||
{"contracts":{"A":{"C":{"ir":"/*=====================================================*
|
{"contracts":{"A":{"C":{"ir":"
|
||||||
* WARNING *
|
|
||||||
* Solidity to Yul compilation is still EXPERIMENTAL *
|
|
||||||
* It can result in LOSS OF FUNDS or worse *
|
|
||||||
* !USE AT YOUR OWN RISK! *
|
|
||||||
*=====================================================*/
|
|
||||||
|
|
||||||
|
|
||||||
/// @use-src 0:\"A\"
|
/// @use-src 0:\"A\"
|
||||||
object \"C_11\" {
|
object \"C_11\" {
|
||||||
code {
|
code {
|
||||||
|
@ -1,11 +1,4 @@
|
|||||||
{"contracts":{"A":{"C":{"ir":"/*=====================================================*
|
{"contracts":{"A":{"C":{"ir":"
|
||||||
* WARNING *
|
|
||||||
* Solidity to Yul compilation is still EXPERIMENTAL *
|
|
||||||
* It can result in LOSS OF FUNDS or worse *
|
|
||||||
* !USE AT YOUR OWN RISK! *
|
|
||||||
*=====================================================*/
|
|
||||||
|
|
||||||
|
|
||||||
/// @use-src 0:\"A\"
|
/// @use-src 0:\"A\"
|
||||||
object \"C_11\" {
|
object \"C_11\" {
|
||||||
code {
|
code {
|
||||||
|
@ -1,11 +1,4 @@
|
|||||||
{"contracts":{"A":{"C":{"ir":"/*=====================================================*
|
{"contracts":{"A":{"C":{"ir":"
|
||||||
* WARNING *
|
|
||||||
* Solidity to Yul compilation is still EXPERIMENTAL *
|
|
||||||
* It can result in LOSS OF FUNDS or worse *
|
|
||||||
* !USE AT YOUR OWN RISK! *
|
|
||||||
*=====================================================*/
|
|
||||||
|
|
||||||
|
|
||||||
/// @use-src 0:\"A\"
|
/// @use-src 0:\"A\"
|
||||||
object \"C_11\" {
|
object \"C_11\" {
|
||||||
code {
|
code {
|
||||||
|
@ -1,11 +1,4 @@
|
|||||||
{"contracts":{"A":{"C":{"ir":"/*=====================================================*
|
{"contracts":{"A":{"C":{"ir":"
|
||||||
* WARNING *
|
|
||||||
* Solidity to Yul compilation is still EXPERIMENTAL *
|
|
||||||
* It can result in LOSS OF FUNDS or worse *
|
|
||||||
* !USE AT YOUR OWN RISK! *
|
|
||||||
*=====================================================*/
|
|
||||||
|
|
||||||
|
|
||||||
/// @use-src 0:\"A\"
|
/// @use-src 0:\"A\"
|
||||||
object \"C_11\" {
|
object \"C_11\" {
|
||||||
code {
|
code {
|
||||||
|
@ -373,13 +373,7 @@ BOOST_AUTO_TEST_CASE(metadata_viair)
|
|||||||
CompilerStack::MetadataFormat::WithReleaseVersionTag
|
CompilerStack::MetadataFormat::WithReleaseVersionTag
|
||||||
);
|
);
|
||||||
|
|
||||||
if (_viaIR)
|
BOOST_CHECK(parsedCBORMetadata.count("experimental") == 0);
|
||||||
{
|
|
||||||
BOOST_CHECK(parsedCBORMetadata.count("experimental") == 1);
|
|
||||||
BOOST_CHECK(parsedCBORMetadata.at("experimental") == "true");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
BOOST_CHECK(parsedCBORMetadata.count("experimental") == 0);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
check(sourceCode, true);
|
check(sourceCode, true);
|
||||||
|
@ -120,6 +120,7 @@ BOOST_AUTO_TEST_CASE(cli_mode_options)
|
|||||||
"--output-dir=/tmp/out",
|
"--output-dir=/tmp/out",
|
||||||
"--overwrite",
|
"--overwrite",
|
||||||
"--evm-version=spuriousDragon",
|
"--evm-version=spuriousDragon",
|
||||||
|
"--via-ir",
|
||||||
"--experimental-via-ir",
|
"--experimental-via-ir",
|
||||||
"--revert-strings=strip",
|
"--revert-strings=strip",
|
||||||
"--debug-info=location",
|
"--debug-info=location",
|
||||||
@ -175,7 +176,7 @@ BOOST_AUTO_TEST_CASE(cli_mode_options)
|
|||||||
expectedOptions.output.dir = "/tmp/out";
|
expectedOptions.output.dir = "/tmp/out";
|
||||||
expectedOptions.output.overwriteFiles = true;
|
expectedOptions.output.overwriteFiles = true;
|
||||||
expectedOptions.output.evmVersion = EVMVersion::spuriousDragon();
|
expectedOptions.output.evmVersion = EVMVersion::spuriousDragon();
|
||||||
expectedOptions.output.experimentalViaIR = true;
|
expectedOptions.output.viaIR = true;
|
||||||
expectedOptions.output.revertStrings = RevertStrings::Strip;
|
expectedOptions.output.revertStrings = RevertStrings::Strip;
|
||||||
expectedOptions.output.debugInfoSelection = DebugInfoSelection::fromString("location");
|
expectedOptions.output.debugInfoSelection = DebugInfoSelection::fromString("location");
|
||||||
expectedOptions.formatting.json = JsonFormat{JsonFormat::Pretty, 7};
|
expectedOptions.formatting.json = JsonFormat{JsonFormat::Pretty, 7};
|
||||||
@ -223,6 +224,13 @@ BOOST_AUTO_TEST_CASE(cli_mode_options)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(via_ir_options)
|
||||||
|
{
|
||||||
|
BOOST_TEST(!parseCommandLine({"solc", "contract.sol"}).output.viaIR);
|
||||||
|
for (string viaIrOption: {"--via-ir", "--experimental-via-ir"})
|
||||||
|
BOOST_TEST(parseCommandLine({"solc", viaIrOption, "contract.sol"}).output.viaIR);
|
||||||
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(assembly_mode_options)
|
BOOST_AUTO_TEST_CASE(assembly_mode_options)
|
||||||
{
|
{
|
||||||
static vector<tuple<vector<string>, AssemblyStack::Machine, AssemblyStack::Language>> const allowedCombinations = {
|
static vector<tuple<vector<string>, AssemblyStack::Machine, AssemblyStack::Language>> const allowedCombinations = {
|
||||||
@ -415,7 +423,8 @@ BOOST_AUTO_TEST_CASE(invalid_options_input_modes_combinations)
|
|||||||
map<string, vector<string>> invalidOptionInputModeCombinations = {
|
map<string, vector<string>> invalidOptionInputModeCombinations = {
|
||||||
// TODO: This should eventually contain all options.
|
// TODO: This should eventually contain all options.
|
||||||
{"--error-recovery", {"--assemble", "--yul", "--strict-assembly", "--standard-json", "--link"}},
|
{"--error-recovery", {"--assemble", "--yul", "--strict-assembly", "--standard-json", "--link"}},
|
||||||
{"--experimental-via-ir", {"--assemble", "--yul", "--strict-assembly", "--standard-json", "--link"}}
|
{"--experimental-via-ir", {"--assemble", "--yul", "--strict-assembly", "--standard-json", "--link"}},
|
||||||
|
{"--via-ir", {"--assemble", "--yul", "--strict-assembly", "--standard-json", "--link"}}
|
||||||
};
|
};
|
||||||
|
|
||||||
for (auto const& [optionName, inputModes]: invalidOptionInputModeCombinations)
|
for (auto const& [optionName, inputModes]: invalidOptionInputModeCombinations)
|
||||||
|
Loading…
Reference in New Issue
Block a user