From d3bd0821b00f1100ab98454264c8775ace826f0d Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Wed, 2 Sep 2009 04:39:04 +0000 Subject: [PATCH] revert my patch, duncan points out what is wrong with my logic. Add a comment so that I don't change this in the future :) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@80760 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Analysis/IPA/CallGraphSCCPass.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/lib/Analysis/IPA/CallGraphSCCPass.cpp b/lib/Analysis/IPA/CallGraphSCCPass.cpp index 25964b2cd8c..66ccb8a2b71 100644 --- a/lib/Analysis/IPA/CallGraphSCCPass.cpp +++ b/lib/Analysis/IPA/CallGraphSCCPass.cpp @@ -177,12 +177,16 @@ void CGPassManager::RefreshCallGraph(std::vector &CurSCC, assert(!CheckingMode && "CallGraphSCCPass did not update the CallGraph correctly!"); - // Just remove the edge from the set of callees. + // Just remove the edge from the set of callees, keep track of whether + // I points to the last element of the vector. + bool WasLast = I + 1 == E; CGN->removeCallEdge(I); - // If we removed the last edge, get out of the loop. - if (CGN->empty()) break; - + // If I pointed to the last element of the vector, we have to bail out: + // iterator checking rejects comparisons of the resultant pointer with + // end. + if (WasLast) + break; E = CGN->end(); continue; } -- 2.34.1