Close input file if exception is thrown


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@1784 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/AsmParser/Parser.cpp b/lib/AsmParser/Parser.cpp
index 3e55e90..a99849d 100644
--- a/lib/AsmParser/Parser.cpp
+++ b/lib/AsmParser/Parser.cpp
@@ -16,16 +16,20 @@
 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);