[llvm-commits] [llvm] r72168 - /llvm/trunk/include/llvm/Analysis/Dominators.h

Duncan Sands baldrick at free.fr
Wed May 20 08:12:08 PDT 2009


Author: baldrick
Date: Wed May 20 10:12:01 2009
New Revision: 72168

URL: http://llvm.org/viewvc/llvm-project?rev=72168&view=rev
Log:
When comparing DominanceFrontier's, advance iterators
before erasing nodes, not after.  Otherwise dom frontier
checking reads from freed memory.

Modified:
    llvm/trunk/include/llvm/Analysis/Dominators.h

Modified: llvm/trunk/include/llvm/Analysis/Dominators.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/Dominators.h?rev=72168&r1=72167&r2=72168&view=diff

==============================================================================
--- llvm/trunk/include/llvm/Analysis/Dominators.h (original)
+++ llvm/trunk/include/llvm/Analysis/Dominators.h Wed May 20 10:12:01 2009
@@ -968,8 +968,8 @@
       tmpSet.insert(*I);
 
     for (DomSetType::const_iterator I = DS1.begin(),
-           E = DS1.end(); I != E; ++I) {
-      BasicBlock *Node = *I;
+           E = DS1.end(); I != E; ) {
+      BasicBlock *Node = *I++;
 
       if (tmpSet.erase(Node) == 0)
         // Node is in DS1 but not in DS2.
@@ -993,7 +993,7 @@
       tmpFrontiers.insert(std::make_pair(I->first, I->second));
 
     for (DomSetMapType::iterator I = tmpFrontiers.begin(),
-           E = tmpFrontiers.end(); I != E; ++I) {
+           E = tmpFrontiers.end(); I != E; ) {
       BasicBlock *Node = I->first;
       const_iterator DFI = find(Node);
       if (DFI == end()) 
@@ -1002,6 +1002,7 @@
       if (compareDomSet(I->second, DFI->second))
         return true;
 
+      ++I;
       tmpFrontiers.erase(Node);
     }
 





More information about the llvm-commits mailing list