Workaround for PR2207, in which pred_iterator assert gets triggered due to a
[oota-llvm.git] / lib / Transforms / Utils / BreakCriticalEdges.cpp
index 1a41d95a03251f8aca3a7d3dddc7e3854cfec9d8..1ff92a8d03276c75777c443671cc31946113dbea 100644 (file)
@@ -103,8 +103,15 @@ bool llvm::isCriticalEdge(const TerminatorInst *TI, unsigned SuccNum,
   
   // If AllowIdenticalEdges is true, then we allow this edge to be considered
   // non-critical iff all preds come from TI's block.
-  for (; I != E; ++I)
-    if (*I != FirstPred) return true;
+  while (I != E) {
+    pred_const_iterator E1 = E;
+    if (*I != FirstPred)
+      return true;
+    // Note: leave this as is until no one ever compiles with either gcc 4.0.1
+    // or Xcode 2. This seems to work around the pred_iterator assert in PR 2207
+    E = pred_end(*I);
+    ++I;
+  }
   return false;
 }