diff --git a/utils/TableGen/CodeGenDAGPatterns.cpp b/utils/TableGen/CodeGenDAGPatterns.cpp
index 6e7dd1e..6af0515 100644
--- a/utils/TableGen/CodeGenDAGPatterns.cpp
+++ b/utils/TableGen/CodeGenDAGPatterns.cpp
@@ -1113,7 +1113,7 @@
 
 void TreePattern::error(const std::string &Msg) const {
   dump();
-  throw "In " + TheRecord->getName() + ": " + Msg;
+  throw TGError(TheRecord->getLoc(), "In " + TheRecord->getName() + ": " + Msg);
 }
 
 TreePatternNode *TreePattern::ParseTreePattern(DagInit *Dag) {
diff --git a/utils/TableGen/Record.h b/utils/TableGen/Record.h
index 5eb07eb..00b7730 100644
--- a/utils/TableGen/Record.h
+++ b/utils/TableGen/Record.h
@@ -1195,6 +1195,17 @@
   }
 };
 
+
+class TGError {
+  TGLoc Loc;
+  std::string Message;
+public:
+  TGError(TGLoc loc, const std::string &message) : Loc(loc), Message(message) {}
+  
+  TGLoc getLoc() const { return Loc; }
+  const std::string &getMessage() const { return Message; }
+};
+  
   
 std::ostream &operator<<(std::ostream &OS, const RecordKeeper &RK);
 
diff --git a/utils/TableGen/TableGen.cpp b/utils/TableGen/TableGen.cpp
index 1beddf0..36ad999 100644
--- a/utils/TableGen/TableGen.cpp
+++ b/utils/TableGen/TableGen.cpp
@@ -114,7 +114,7 @@
 
 static TGSourceMgr SrcMgr;
 
-void PrintError(TGLoc ErrorLoc, const std::string &Msg) {
+void llvm::PrintError(TGLoc ErrorLoc, const std::string &Msg) {
   SrcMgr.PrintError(ErrorLoc, Msg);
 }
 
@@ -229,31 +229,26 @@
       assert(1 && "Invalid Action");
       return 1;
     }
+    
+    if (Out != cout.stream()) 
+      delete Out;                               // Close the file
+    return 0;
+    
+  } catch (const TGError &Error) {
+    cerr << argv[0] << ": error:\n";
+    PrintError(Error.getLoc(), Error.getMessage());
+    
   } catch (const std::string &Error) {
     cerr << argv[0] << ": " << Error << "\n";
-    if (Out != cout.stream()) {
-      delete Out;                             // Close the file
-      std::remove(OutputFilename.c_str());    // Remove the file, it's broken
-    }
-    return 1;
   } catch (const char *Error) {
     cerr << argv[0] << ": " << Error << "\n";
-    if (Out != cout.stream()) {
-      delete Out;                             // Close the file
-      std::remove(OutputFilename.c_str());    // Remove the file, it's broken
-    }
-    return 1;
   } catch (...) {
     cerr << argv[0] << ": Unknown unexpected exception occurred.\n";
-    if (Out != cout.stream()) {
-      delete Out;                             // Close the file
-      std::remove(OutputFilename.c_str());    // Remove the file, it's broken
-    }
-    return 2;
   }
-
+  
   if (Out != cout.stream()) {
-    delete Out;                               // Close the file
+    delete Out;                             // Close the file
+    std::remove(OutputFilename.c_str());    // Remove the file, it's broken
   }
-  return 0;
+  return 1;
 }
