diff --git a/include/llvm/Support/ToolRunner.h b/include/llvm/Support/ToolRunner.h index d8e7503253f..9cbbf7f51e0 100644 --- a/include/llvm/Support/ToolRunner.h +++ b/include/llvm/Support/ToolRunner.h @@ -18,6 +18,7 @@ #define TOOLRUNNER_H #include "Support/SystemUtils.h" +#include #include namespace llvm { @@ -30,11 +31,12 @@ class LLC; /// AbstractInterpreter instances if there is an error running a tool (e.g., LLC /// crashes) which prevents execution of the program. /// -class ToolExecutionError { +class ToolExecutionError : std::exception { std::string Message; public: - ToolExecutionError(const std::string &M) : Message(M) {} - const std::string getMessage() const { return Message; } + explicit ToolExecutionError(const std::string &M) : Message(M) {} + virtual ~ToolExecutionError() throw(); + virtual const char* what() const throw() { return Message.c_str(); } }; diff --git a/lib/Support/ToolRunner.cpp b/lib/Support/ToolRunner.cpp index 6ad3d4392c0..4a7be56461a 100644 --- a/lib/Support/ToolRunner.cpp +++ b/lib/Support/ToolRunner.cpp @@ -21,6 +21,8 @@ #include using namespace llvm; +ToolExecutionError::~ToolExecutionError() throw() { } + static void ProcessFailure(std::string ProgPath, const char** Args) { std::ostringstream OS; OS << "\nError running tool:\n "; diff --git a/tools/bugpoint/BugDriver.cpp b/tools/bugpoint/BugDriver.cpp index 4359622777f..d3a57f4afe2 100644 --- a/tools/bugpoint/BugDriver.cpp +++ b/tools/bugpoint/BugDriver.cpp @@ -159,7 +159,7 @@ bool BugDriver::run() { CreatedOutput = true; std::cout << "Reference output is: " << ReferenceOutputFile << "\n"; } catch (ToolExecutionError &TEE) { - std::cerr << TEE.getMessage(); + std::cerr << TEE.what(); if (Interpreter != cbe) { std::cerr << "*** There is a bug running the C backend. Either debug" << " it (use the -run-cbe bugpoint option), or fix the error" @@ -183,7 +183,7 @@ bool BugDriver::run() { return debugMiscompilation(); } } catch (ToolExecutionError &TEE) { - std::cerr << TEE.getMessage(); + std::cerr << TEE.what(); return debugCodeGeneratorCrash(); } diff --git a/tools/bugpoint/bugpoint.cpp b/tools/bugpoint/bugpoint.cpp index 3c89dce525a..65de9658a7e 100644 --- a/tools/bugpoint/bugpoint.cpp +++ b/tools/bugpoint/bugpoint.cpp @@ -54,7 +54,7 @@ int main(int argc, char **argv) { try { return D.run(); } catch (ToolExecutionError &TEE) { - std::cerr << "Tool execution error: " << TEE.getMessage() << "\n"; + std::cerr << "Tool execution error: " << TEE.what() << "\n"; return 1; } catch (...) { std::cerr << "Whoops, an exception leaked out of bugpoint. "