diff options
author | chriseth <chris@ethereum.org> | 2017-03-01 23:08:37 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-03-01 23:08:37 +0800 |
commit | 6ac2c15c2bbcce77cf60e5a1d6bb78b924609af7 (patch) | |
tree | f696d008ca98b90868d349e5172256020a8bd76a | |
parent | d2c79bf8e9400f783bf0feed34065882eae02a68 (diff) | |
parent | 41360ccd57997edfd6807c75a33f4dbc4b65558b (diff) | |
download | dexon-solidity-6ac2c15c2bbcce77cf60e5a1d6bb78b924609af7.tar dexon-solidity-6ac2c15c2bbcce77cf60e5a1d6bb78b924609af7.tar.gz dexon-solidity-6ac2c15c2bbcce77cf60e5a1d6bb78b924609af7.tar.bz2 dexon-solidity-6ac2c15c2bbcce77cf60e5a1d6bb78b924609af7.tar.lz dexon-solidity-6ac2c15c2bbcce77cf60e5a1d6bb78b924609af7.tar.xz dexon-solidity-6ac2c15c2bbcce77cf60e5a1d6bb78b924609af7.tar.zst dexon-solidity-6ac2c15c2bbcce77cf60e5a1d6bb78b924609af7.zip |
Merge pull request #1719 from ethereum/fuzzerLine
Filter fuzzing errors by cause.
-rw-r--r-- | libdevcore/Exceptions.h | 3 | ||||
-rw-r--r-- | libsolidity/interface/Exceptions.cpp | 14 | ||||
-rwxr-xr-x | scripts/uniqueErrors.sh | 14 | ||||
-rw-r--r-- | solc/jsonCompiler.cpp | 6 | ||||
-rw-r--r-- | test/fuzzer.cpp | 3 |
5 files changed, 35 insertions, 5 deletions
diff --git a/libdevcore/Exceptions.h b/libdevcore/Exceptions.h index 4622774a..37cdbed9 100644 --- a/libdevcore/Exceptions.h +++ b/libdevcore/Exceptions.h @@ -41,6 +41,9 @@ struct Exception: virtual std::exception, virtual boost::exception Exception(std::string _message = std::string()): m_message(std::move(_message)) {} const char* what() const noexcept override { return m_message.empty() ? std::exception::what() : m_message.c_str(); } + /// @returns "FileName:LineNumber" referring to the point where the exception was thrown. + std::string lineInfo() const; + private: std::string m_message; }; diff --git a/libsolidity/interface/Exceptions.cpp b/libsolidity/interface/Exceptions.cpp index 90a680b4..41890b91 100644 --- a/libsolidity/interface/Exceptions.cpp +++ b/libsolidity/interface/Exceptions.cpp @@ -23,6 +23,7 @@ #include <libsolidity/interface/Exceptions.h> #include <libsolidity/interface/Utils.h> +using namespace std; using namespace dev; using namespace dev::solidity; @@ -56,3 +57,16 @@ Error::Error(Type _type): m_type(_type) break; } } + +string Exception::lineInfo() const +{ + char const* const* file = boost::get_error_info<boost::throw_file>(*this); + int const* line = boost::get_error_info<boost::throw_line>(*this); + string ret; + if (file) + ret += *file; + ret += ':'; + if (line) + ret += boost::lexical_cast<string>(*line); + return ret; +} diff --git a/scripts/uniqueErrors.sh b/scripts/uniqueErrors.sh new file mode 100755 index 00000000..eee1df90 --- /dev/null +++ b/scripts/uniqueErrors.sh @@ -0,0 +1,14 @@ +#!/bin/sh + +REPO=$(dirname $0)/.. + +echo "Finding unique failures..." +( +for x in $* +do + echo -n $x " # " + # This subshell is a workaround to prevent the shell from printing + # "Aborted" + ("$REPO"/build/test/solfuzzer < "$x" || true) 2>&1 | head -n 1 +done +) | sort -u -t'#' -k 2 diff --git a/solc/jsonCompiler.cpp b/solc/jsonCompiler.cpp index d761b541..6ebd1a55 100644 --- a/solc/jsonCompiler.cpp +++ b/solc/jsonCompiler.cpp @@ -184,15 +184,15 @@ string compile(StringMap const& _sources, bool _optimize, CStyleReadFileCallback } catch (CompilerError const& exception) { - errors.append(formatError(exception, "Compiler error", scannerFromSourceName)); + errors.append(formatError(exception, "Compiler error (" + exception.lineInfo() + ")", scannerFromSourceName)); } catch (InternalCompilerError const& exception) { - errors.append(formatError(exception, "Internal compiler error", scannerFromSourceName)); + errors.append(formatError(exception, "Internal compiler error (" + exception.lineInfo() + ")", scannerFromSourceName)); } catch (UnimplementedFeatureError const& exception) { - errors.append(formatError(exception, "Unimplemented feature", scannerFromSourceName)); + errors.append(formatError(exception, "Unimplemented feature (" + exception.lineInfo() + ")", scannerFromSourceName)); } catch (Exception const& exception) { diff --git a/test/fuzzer.cpp b/test/fuzzer.cpp index 85a8fe99..410313c5 100644 --- a/test/fuzzer.cpp +++ b/test/fuzzer.cpp @@ -67,7 +67,6 @@ int main() for (Json::Value const& error: outputJson["errors"]) { string invalid = contains(error.asString(), vector<string>{ - "Compiler error", "Internal compiler error", "Exception during compilation", "Unknown exception during compilation", @@ -78,7 +77,7 @@ int main() }); if (!invalid.empty()) { - cout << "Invalid error: \"" << invalid << "\"" << endl; + cout << "Invalid error: \"" << error.asString() << "\"" << endl; abort(); } } |