Skip to content

Commit

Permalink
CommandLineParser: Fix some outputs not being properly disallowed wit…
Browse files Browse the repository at this point in the history
…h --stop-after parsing
  • Loading branch information
cameel committed Jun 14, 2023
1 parent 0713add commit f8a1af8
Show file tree
Hide file tree
Showing 6 changed files with 16 additions and 14 deletions.
1 change: 1 addition & 0 deletions Changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ Compiler Features:


Bugfixes:
* Commandline Interface: Fix internal error when using ``--stop-after parsing`` and requesting some of the outputs that require full analysis or compilation.
* Commandline Interface: It is no longer possible to specify both ``--optimize-yul`` and ``--no-optimize-yul`` at the same time.
* SMTChecker: Fix encoding of side-effects inside ``if`` and ``ternary conditional``statements in the BMC engine.
* SMTChecker: Fix false negative when a verification target can be violated only by trusted external call from another public function.
Expand Down
18 changes: 4 additions & 14 deletions solc/CommandLineParser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -997,21 +997,11 @@ void CommandLineParser::processArgs()
return;

checkMutuallyExclusive({g_strColor, g_strNoColor});
checkMutuallyExclusive({g_strStopAfter, g_strGas});

array<string, 9> const conflictingWithStopAfter{
CompilerOutputs::componentName(&CompilerOutputs::binary),
CompilerOutputs::componentName(&CompilerOutputs::ir),
CompilerOutputs::componentName(&CompilerOutputs::irAstJson),
CompilerOutputs::componentName(&CompilerOutputs::irOptimized),
CompilerOutputs::componentName(&CompilerOutputs::irOptimizedAstJson),
g_strGas,
CompilerOutputs::componentName(&CompilerOutputs::asm_),
CompilerOutputs::componentName(&CompilerOutputs::asmJson),
CompilerOutputs::componentName(&CompilerOutputs::opcodes),
};

for (auto& option: conflictingWithStopAfter)
checkMutuallyExclusive({g_strStopAfter, option});
for (string const& option: CompilerOutputs::componentMap() | ranges::views::keys)
if (option != CompilerOutputs::componentName(&CompilerOutputs::astCompactJson))
checkMutuallyExclusive({g_strStopAfter, option});

if (
m_options.input.mode != InputMode::Compiler &&
Expand Down
1 change: 1 addition & 0 deletions test/cmdlineTests/stop_after_parsing_abi/args
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
--pretty-json --json-indent 4 --stop-after parsing --abi
1 change: 1 addition & 0 deletions test/cmdlineTests/stop_after_parsing_abi/err
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
The following options are mutually exclusive: --stop-after, --abi. Select at most one.
1 change: 1 addition & 0 deletions test/cmdlineTests/stop_after_parsing_abi/exit
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
1
8 changes: 8 additions & 0 deletions test/cmdlineTests/stop_after_parsing_abi/input.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
// SPDX-License-Identifier: GPL-3.0
pragma solidity *;

import "A";

contract C {
function f() public {}
}

0 comments on commit f8a1af8

Please sign in to comment.