Fix bug: test/Regression/Assembler/2002-08-15-UnresolvedGlobalReference.ll
authorChris Lattner <sabre@nondot.org>
Thu, 15 Aug 2002 17:58:33 +0000 (17:58 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 15 Aug 2002 17:58:33 +0000 (17:58 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@3350 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AsmParser/llvmAsmParser.y

index 923e48d36bbd532e2699a5670af959769aeafc48..0175d6590a860fb08756c81afdf035cc770eff9c 100644 (file)
@@ -919,8 +919,21 @@ ConstVal: Types '[' ConstVector ']' { // Nonempty unsized arr
     if (Ty == 0)
       ThrowException("Global const reference must be a pointer type!");
 
+    // ConstExprs can exist in the body of a function, thus creating
+    // ConstantPointerRefs whenever they refer to a variable.  Because we are in
+    // the context of a function, getValNonImprovising will search the functions
+    // symbol table instead of the module symbol table for the global symbol,
+    // which throws things all off.  To get around this, we just tell
+    // getValNonImprovising that we are at global scope here.
+    //
+    Function *SavedCurFn = CurMeth.CurrentFunction;
+    CurMeth.CurrentFunction = 0;
+
     Value *V = getValNonImprovising(Ty, $2);
 
+    CurMeth.CurrentFunction = SavedCurFn;
+
+
     // If this is an initializer for a constant pointer, which is referencing a
     // (currently) undefined variable, create a stub now that shall be replaced
     // in the future with the right type of variable.
@@ -960,7 +973,6 @@ ConstVal: Types '[' ConstVector ']' { // Nonempty unsized arr
   };
 
 
-// FIXME: ConstExpr::get never return null!  Do checking here in the parser.
 ConstExpr: Types CAST ConstVal {
     $$ = ConstantExpr::getCast($3, $1->get());
     delete $1;