diff options
author | Duncan Sands <baldrick@free.fr> | 2009-09-02 03:48:41 +0000 |
---|---|---|
committer | Duncan Sands <baldrick@free.fr> | 2009-09-02 03:48:41 +0000 |
commit | b3020d7a08b951adff8d102b27aaa0bc2a7156da (patch) | |
tree | e7001ea3796bdb66dde3523205f14148f4dedbb2 /lib/Analysis/IPA/CallGraphSCCPass.cpp | |
parent | 545898183e87d87047dac979791a47b4b7afa634 (diff) |
Complicate Chris's simplification, avoiding complaints
about singular iterators when building with expensive
checks turned on.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@80757 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/IPA/CallGraphSCCPass.cpp')
-rw-r--r-- | lib/Analysis/IPA/CallGraphSCCPass.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/lib/Analysis/IPA/CallGraphSCCPass.cpp b/lib/Analysis/IPA/CallGraphSCCPass.cpp index 85f22c7bd4..d21e031682 100644 --- a/lib/Analysis/IPA/CallGraphSCCPass.cpp +++ b/lib/Analysis/IPA/CallGraphSCCPass.cpp @@ -161,7 +161,7 @@ void CGPassManager::RefreshCallGraph(std::vector<CallGraphNode*> &CurSCC, // CGN with those actually in the function. // Get the set of call sites currently in the function. - for (CallGraphNode::iterator I = CGN->begin(), E = CGN->end(); I != E; ){ + for (CallGraphNode::iterator I = CGN->begin(), E = CGN->end(); I != E; ) { // If this call site is null, then the function pass deleted the call // entirely and the WeakVH nulled it out. if (I->first == 0 || @@ -178,7 +178,11 @@ void CGPassManager::RefreshCallGraph(std::vector<CallGraphNode*> &CurSCC, "CallGraphSCCPass did not update the CallGraph correctly!"); // Just remove the edge from the set of callees. + bool wasLast = I + 1 == E; CGN->removeCallEdge(I); + if (wasLast) + // I is now a singular iterator, do not compare with E. + break; E = CGN->end(); continue; } |