Make ToolExecutionError inherit std::exception and implement its
interface: getMessage() is gone, use what() instead.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11621 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/include/llvm/Support/ToolRunner.h b/include/llvm/Support/ToolRunner.h
index d8e7503..9cbbf7f 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 <exception>
 #include <vector>
 
 namespace llvm {
@@ -30,11 +31,12 @@
 /// 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 6ad3d43..4a7be56 100644
--- a/lib/Support/ToolRunner.cpp
+++ b/lib/Support/ToolRunner.cpp
@@ -21,6 +21,8 @@
 #include <sstream>
 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 4359622..d3a57f4 100644
--- a/tools/bugpoint/BugDriver.cpp
+++ b/tools/bugpoint/BugDriver.cpp
@@ -159,7 +159,7 @@
       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 @@
       return debugMiscompilation();
     }
   } catch (ToolExecutionError &TEE) {
-    std::cerr << TEE.getMessage();
+    std::cerr << TEE.what();
     return debugCodeGeneratorCrash();
   }
 
diff --git a/tools/bugpoint/ToolRunner.cpp b/tools/bugpoint/ToolRunner.cpp
index 6ad3d43..4a7be56 100644
--- a/tools/bugpoint/ToolRunner.cpp
+++ b/tools/bugpoint/ToolRunner.cpp
@@ -21,6 +21,8 @@
 #include <sstream>
 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/ToolRunner.h b/tools/bugpoint/ToolRunner.h
index d8e7503..9cbbf7f 100644
--- a/tools/bugpoint/ToolRunner.h
+++ b/tools/bugpoint/ToolRunner.h
@@ -18,6 +18,7 @@
 #define TOOLRUNNER_H
 
 #include "Support/SystemUtils.h"
+#include <exception>
 #include <vector>
 
 namespace llvm {
@@ -30,11 +31,12 @@
 /// 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/tools/bugpoint/bugpoint.cpp b/tools/bugpoint/bugpoint.cpp
index 3c89dce..65de965 100644
--- a/tools/bugpoint/bugpoint.cpp
+++ b/tools/bugpoint/bugpoint.cpp
@@ -54,7 +54,7 @@
   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.  "