[LVI] Avoid iterator invalidation in LazyValueInfoCache::threadEdge
authorBruno Cardoso Lopes <bruno.cardoso@gmail.com>
Thu, 20 Aug 2015 18:24:54 +0000 (18:24 +0000)
committerBruno Cardoso Lopes <bruno.cardoso@gmail.com>
Thu, 20 Aug 2015 18:24:54 +0000 (18:24 +0000)
Do that by copying out the elements to another SmallPtrSet.
Follow up from r245309.

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

lib/Analysis/LazyValueInfo.cpp

index a984bc40ac1034d9fea8a7a258ec7eb9acef2969..4fb6b105646e9ddbed827aa9b5254fffa640b530 100644 (file)
@@ -1055,7 +1055,7 @@ void LazyValueInfoCache::threadEdge(BasicBlock *PredBB, BasicBlock *OldSucc,
   auto I = OverDefinedCache.find(OldSucc);
   if (I == OverDefinedCache.end())
     return; // Nothing to process here.
   auto I = OverDefinedCache.find(OldSucc);
   if (I == OverDefinedCache.end())
     return; // Nothing to process here.
-  SmallPtrSetImpl<Value *> &ClearSet = I->second;
+  SmallPtrSet<Value *, 4> ClearSet(I->second.begin(), I->second.end());
 
   // Use a worklist to perform a depth-first search of OldSucc's successors.
   // NOTE: We do not need a visited list since any blocks we have already
 
   // Use a worklist to perform a depth-first search of OldSucc's successors.
   // NOTE: We do not need a visited list since any blocks we have already