To not barf when an error occurs.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10236 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/AsmParser/llvmAsmParser.y b/lib/AsmParser/llvmAsmParser.y
index e5018ec..5706b53 100644
--- a/lib/AsmParser/llvmAsmParser.y
+++ b/lib/AsmParser/llvmAsmParser.y
@@ -554,10 +554,6 @@
       }
     }
 
-    // Clear the symbol table so it doesn't complain when it
-    // gets destructed
-    CurFun.LocalSymtab.clear();
-
     ThrowException("Redefinition of value named '" + Name + "' in the '" +
 		   V->getType()->getDescription() + "' type plane!");
   }
@@ -572,10 +568,6 @@
 
     // If it already exists
     if (Existing) {
-      // Clear the symbol table so it doesn't complain when it
-      // gets destructed
-      CurFun.LocalSymtab.clear();
-
       // Bail
       ThrowException("Redefinition of value named '" + Name + "' in the '" +
 		   V->getType()->getDescription() + "' type plane!");
@@ -646,7 +638,15 @@
 
   // Allocate a new module to read
   CurModule.CurrentModule = new Module(Filename);
-  yyparse();       // Parse the file.
+
+  try {
+    yyparse();       // Parse the file.
+  } catch (...) {
+    // Clear the symbol table so it doesn't complain when it
+    // gets destructed
+    CurFun.LocalSymtab.clear();
+    throw;
+  }
 
   Module *Result = ParserResult;