Fix bug: Assembler/2003-04-25-UnresolvedGlobalReference.ll
authorChris Lattner <sabre@nondot.org>
Fri, 25 Apr 2003 21:47:33 +0000 (21:47 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 25 Apr 2003 21:47:33 +0000 (21:47 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5948 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AsmParser/llvmAsmParser.y

index 19cda682a16d1bf2fdf8f3e8d883bec54632d4b0..fa57e9187e74e69c0ea421c2a61d31c6eca0311b 100644 (file)
@@ -156,6 +156,25 @@ static struct PerFunctionInfo {
     // resolve the branches now...
     ResolveDefinitions(LateResolveValues, &CurModule.LateResolveValues);
 
+    // Make sure to resolve any constant expr references that might exist within
+    // the function we just declared itself.
+    ValID FID;
+    if (CurrentFunction->hasName()) {
+      FID = ValID::create((char*)CurrentFunction->getName().c_str());
+    } else {
+      unsigned Slot = CurrentFunction->getType()->getUniqueID();
+      assert(CurModule.Values.size() > Slot && "Function not inserted?");
+      // Figure out which slot number if is...
+      for (unsigned i = 0; ; ++i) {
+        assert(i < CurModule.Values[Slot].size() && "Function not found!");
+        if (CurModule.Values[Slot][i] == CurrentFunction) {
+          FID = ValID::create((int)i);
+          break;
+        }
+      }
+    }
+    CurModule.DeclareNewGlobalValue(CurrentFunction, FID);
+
     Values.clear();         // Clear out function local definitions
     Types.clear();
     CurrentFunction = 0;
@@ -965,7 +984,6 @@ ConstVal: Types '[' ConstVector ']' { // Nonempty unsized arr
 
     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.