diff --git a/lib/Analysis/IPA/CallGraphSCCPass.cpp b/lib/Analysis/IPA/CallGraphSCCPass.cpp
index 1dec9c5b..beb4e6f 100644
--- a/lib/Analysis/IPA/CallGraphSCCPass.cpp
+++ b/lib/Analysis/IPA/CallGraphSCCPass.cpp
@@ -143,11 +143,16 @@
     
     // Walk the function body looking for call sites.  Sync up the call sites in
     // 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; ++I){
+    bool isLast = CGN->empty();
+    for (CallGraphNode::iterator I = CGN->begin(), E = CGN->end(), N; !isLast;){
+      // Take care not to use singular iterators.
+      N = I + 1;
+      isLast = N == E;
+
       // If this call site is null, then the function pass deleted the call
-      // entirely and the WeakVH nulled it out.  
+      // entirely and the WeakVH nulled it out.
       if (I->first == 0 ||
           // If we've already seen this call site, then the FunctionPass RAUW'd
           // one call with another, which resulted in two "uses" in the edge
@@ -161,15 +166,15 @@
         // Just remove the edge from the set of callees.
         CGN->removeCallEdge(I);
         E = CGN->end();
-        --I;
         continue;
       }
-      
+
       assert(!CallSites.count(I->first) &&
              "Call site occurs in node multiple times");
       CallSites.insert(std::make_pair(I->first, I->second));
+      I = N;
     }
-    
+
     // Loop over all of the instructions in the function, getting the callsites.
     for (Function::iterator BB = F->begin(), E = F->end(); BB != E; ++BB)
       for (BasicBlock::iterator I = BB->begin(), E = BB->end(); I != E; ++I) {
