From 59957b18dc8945eeca9ca55cd89e3500be7fc5c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20=C5=9Aliwak?= Date: Mon, 14 Jun 2021 17:15:40 +0200 Subject: [PATCH] Make missing settings.optimizer.enabled key in Standard JSON equivalent to setting it to false --- Changelog.md | 4 +++- docs/using-the-compiler.rst | 5 ++++- libsolidity/interface/StandardCompiler.cpp | 5 +++-- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/Changelog.md b/Changelog.md index 5bd66ca91..5407d51ab 100644 --- a/Changelog.md +++ b/Changelog.md @@ -8,7 +8,9 @@ Compiler Features: Bugfixes: * Control Flow Graph: Fix incorrectly reported unreachable code. - * Solc-Js: Use the same optimizer settings as ``solc`` when the ``--optimize`` flag is not specified. + * Solc-Js: When running ``solcjs`` without the ``--optimize`` flag, use ``settings.optimizer.enabled=false`` in Standard JSON instead of omitting the key. + * Standard JSON: Omitting ``settings.optimizer.enabled`` was not equivalent to setting it to ``false``. + It meant disabling also the peephole optimizer and jumpdest remover which by default still run with ``enabled=false``. diff --git a/docs/using-the-compiler.rst b/docs/using-the-compiler.rst index 9202f9fe1..a023a8877 100644 --- a/docs/using-the-compiler.rst +++ b/docs/using-the-compiler.rst @@ -246,7 +246,10 @@ Input Description "remappings": [ ":g=/dir" ], // Optional: Optimizer settings "optimizer": { - // disabled by default + // Disabled by default. + // NOTE: enabled=false still leaves some optimizations on. See comments below. + // WARNING: Before version 0.8.6 omitting the 'enabled' key was not equivalent to setting + // it to false and would actually disable all the optimizations. "enabled": true, // Optimize for how many times you intend to run the code. // Lower values will optimize more for initial deployment cost, higher diff --git a/libsolidity/interface/StandardCompiler.cpp b/libsolidity/interface/StandardCompiler.cpp index 811ca9d9d..1295c8411 100644 --- a/libsolidity/interface/StandardCompiler.cpp +++ b/libsolidity/interface/StandardCompiler.cpp @@ -558,14 +558,15 @@ std::variant parseOptimizerSettings(Json::Value if (auto result = checkOptimizerKeys(_jsonInput)) return *result; - OptimiserSettings settings = OptimiserSettings::none(); + OptimiserSettings settings = OptimiserSettings::minimal(); if (_jsonInput.isMember("enabled")) { if (!_jsonInput["enabled"].isBool()) return formatFatalError("JSONError", "The \"enabled\" setting must be a Boolean."); - settings = _jsonInput["enabled"].asBool() ? OptimiserSettings::standard() : OptimiserSettings::minimal(); + if (_jsonInput["enabled"].asBool()) + settings = OptimiserSettings::standard(); } if (_jsonInput.isMember("runs"))