fix a bug in DebugRecVH::deleted/allUsesReplacedWith. If an
authorChris Lattner <sabre@nondot.org>
Thu, 1 Apr 2010 05:12:07 +0000 (05:12 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 1 Apr 2010 05:12:07 +0000 (05:12 +0000)
entry in the Scope+InlinedAt drops to a non-canonical form,
we need to reset the idx member of both VH's to 0.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@100084 91177308-0d34-0410-b5e6-96231b3b80d8

lib/VMCore/DebugLoc.cpp

index d9f533a9d60a6c8962fffc2da264e78936b0154d..f02ce57c3b0422ba1f569477eddc44f08e1d13f1 100644 (file)
@@ -220,9 +220,10 @@ void DebugRecVH::deleted() {
          "Mapping out of date");
   Ctx->ScopeInlinedAtIdx.erase(std::make_pair(OldScope, OldInlinedAt));
   
-  // Reset this VH to null.
+  // Reset this VH to null.  Drop both 'Idx' values to null to indicate that
+  // we're in non-canonical form now.
   setValPtr(0);
-  Idx = 0;
+  Entry.first.Idx = Entry.second.Idx = 0;
 }
 
 void DebugRecVH::allUsesReplacedWith(Value *NewVa) {
@@ -280,6 +281,8 @@ void DebugRecVH::allUsesReplacedWith(Value *NewVa) {
                                                    Entry.second.get(), Idx);
   // If NewVal already has an entry, this becomes a non-canonical reference,
   // just drop Idx to 0 to signify this.
-  if (NewIdx != Idx)
-    Idx = 0;
+  if (NewIdx != Idx) {
+    std::pair<DebugRecVH, DebugRecVH> &Entry=Ctx->ScopeInlinedAtRecords[-Idx-1];
+    Entry.first.Idx = Entry.second.Idx = 0;
+  }
 }