Make error messages more useful than jsut an abort
[oota-llvm.git] / lib / AsmParser / Parser.cpp
index 3e55e90461f96be071ebaff61b6ccc08325121ef..dfe8d559a44cd526c8c28ea788e3bd907be9cc39 100644 (file)
@@ -7,7 +7,6 @@
 #include "llvm/Analysis/Verifier.h"
 #include "llvm/Module.h"
 #include "ParserInternals.h"
-#include <stdio.h>  // for sprintf
 using std::string;
 
 // The useful interface defined by this file... Parse an ascii file, and return
@@ -16,26 +15,24 @@ using std::string;
 Module *ParseAssemblyFile(const string &Filename) { // throw (ParseException)
   FILE *F = stdin;
 
-  if (Filename != "-") 
+  if (Filename != "-") {
     F = fopen(Filename.c_str(), "r");
 
-  if (F == 0) {
-    throw ParseException(Filename, string("Could not open file '") + 
-                        Filename + "'");
+    if (F == 0)
+      throw ParseException(Filename, "Could not open file '" + Filename + "'");
   }
 
-  // TODO: If this throws an exception, F is not closed.
-  Module *Result = RunVMAsmParser(Filename, F);
+  Module *Result;
+  try {
+    Result = RunVMAsmParser(Filename, F);
+  } catch (...) {
+    if (F != stdin) fclose(F);      // Make sure to close file descriptor if an
+    throw;                          // exception is thrown
+  }
 
   if (F != stdin)
     fclose(F);
 
-  if (Result) {  // Check to see that it is valid...
-    if (verifyModule(Result)) {
-      delete Result;
-      throw ParseException(Filename, "Source file is not well formed LLVM!");
-    }
-  }
   return Result;
 }