[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