diff --git a/Changelog.md b/Changelog.md index 6fd65df79..ddfe1648e 100644 --- a/Changelog.md +++ b/Changelog.md @@ -16,6 +16,7 @@ Bugfixes: * Code Generator: Fix constructor source mappings for immutables. * Commandline Interface: Fix extra newline character being appended to sources passed through standard input, affecting their hashes. * Commandline Interface: Report output selection options unsupported by the selected input mode instead of ignoring them. + * Commandline Interface: Don't return zero exit code when writing linked files to disk fails. * SMTChecker: Fix internal error in magic type access (``block``, ``msg``, ``tx``). * TypeChecker: Fix internal error when using user defined value types in public library functions. * Yul IR Generator: Do not output empty switches/if-bodies for empty contracts. diff --git a/solc/CommandLineInterface.cpp b/solc/CommandLineInterface.cpp index 3b26b6c83..6c24b7742 100644 --- a/solc/CommandLineInterface.cpp +++ b/solc/CommandLineInterface.cpp @@ -553,7 +553,7 @@ void CommandLineInterface::createFile(string const& _fileName, string const& _da if (fs::exists(pathName) && !m_options.output.overwriteFiles) { serr() << "Refusing to overwrite existing file \"" << pathName << "\" (use --overwrite to force)." << endl; - m_error = true; + m_outputFailed = true; return; } ofstream outFile(pathName); @@ -561,7 +561,7 @@ void CommandLineInterface::createFile(string const& _fileName, string const& _da if (!outFile) { serr() << "Could not write to file \"" << pathName << "\"." << endl; - m_error = true; + m_outputFailed = true; return; } } @@ -855,7 +855,7 @@ bool CommandLineInterface::actOnInput() solAssert(m_options.input.mode == InputMode::Compiler || m_options.input.mode == InputMode::CompilerWithASTImport, ""); outputCompilationResults(); } - return !m_error; + return !m_outputFailed; } bool CommandLineInterface::link() @@ -937,6 +937,7 @@ void CommandLineInterface::writeLinkedFiles() if (!outFile) { serr() << "Could not write to file " << src.first << ". Aborting." << endl; + m_outputFailed = true; return; } } diff --git a/solc/CommandLineInterface.h b/solc/CommandLineInterface.h index 5504e51bb..1ca40568c 100644 --- a/solc/CommandLineInterface.h +++ b/solc/CommandLineInterface.h @@ -121,7 +121,7 @@ private: std::ostream& m_sout; std::ostream& m_serr; bool m_hasOutput = false; - bool m_error = false; ///< If true, some error occurred. + bool m_outputFailed = false; ///< If true, creation or write to some of the output files failed. FileReader m_fileReader; std::optional m_standardJsonInput; std::unique_ptr m_compiler;