Close input file if exception is thrown
authorChris Lattner <sabre@nondot.org>
Wed, 20 Feb 2002 18:06:43 +0000 (18:06 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 20 Feb 2002 18:06:43 +0000 (18:06 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@1784 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AsmParser/Parser.cpp

index 3e55e90461f96be071ebaff61b6ccc08325121ef..a99849d31b45f8a582d51b1b53a23670f17b1c98 100644 (file)
@@ -16,16 +16,20 @@ 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);