To not barf when an error occurs.
authorChris Lattner <sabre@nondot.org>
Wed, 26 Nov 2003 07:24:58 +0000 (07:24 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 26 Nov 2003 07:24:58 +0000 (07:24 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10236 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AsmParser/llvmAsmParser.y

index e5018ec05afeca7f756189c671d1859de3f061f9..5706b5396eab8591a7c90409c73b81abbe67f255 100644 (file)
@@ -554,10 +554,6 @@ static bool setValueName(Value *V, char *NameStr) {
       }
     }
 
-    // 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 @@ static bool setValueName(Value *V, char *NameStr) {
 
     // 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 @@ Module *RunVMAsmParser(const std::string &Filename, FILE *F) {
 
   // 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;