From: Chris Lattner Date: Thu, 1 Apr 2010 05:12:07 +0000 (+0000) Subject: fix a bug in DebugRecVH::deleted/allUsesReplacedWith. If an X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=175edf2c78ca009bc7eb66fe513559155af0f454;p=oota-llvm.git fix a bug in DebugRecVH::deleted/allUsesReplacedWith. If an 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 --- diff --git a/lib/VMCore/DebugLoc.cpp b/lib/VMCore/DebugLoc.cpp index d9f533a9d60..f02ce57c3b0 100644 --- a/lib/VMCore/DebugLoc.cpp +++ b/lib/VMCore/DebugLoc.cpp @@ -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 &Entry=Ctx->ScopeInlinedAtRecords[-Idx-1]; + Entry.first.Idx = Entry.second.Idx = 0; + } }