Fix bug: IndVarsSimplify/2003-12-10-RemoveInstrCrash.llx


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10385 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Transforms/Scalar/IndVarSimplify.cpp b/lib/Transforms/Scalar/IndVarSimplify.cpp
index 369be47..ed5aca3 100644
--- a/lib/Transforms/Scalar/IndVarSimplify.cpp
+++ b/lib/Transforms/Scalar/IndVarSimplify.cpp
@@ -140,6 +140,8 @@
 
     DEBUG(IV->print(std::cerr));
 
+    while (isa<PHINode>(AfterPHIIt)) ++AfterPHIIt;
+
     // Don't do math with pointers...
     const Type *IVTy = IV->Phi->getType();
     if (isa<PointerType>(IVTy)) IVTy = Type::ULongTy;
@@ -204,6 +206,9 @@
           PHIOps.insert(PHIOps.end(), MaybeDead->op_begin(),
                         MaybeDead->op_end());
           MaybeDead->getParent()->getInstList().erase(MaybeDead);
+
+          // Erasing the instruction could invalidate the AfterPHI iterator!
+          AfterPHIIt = Header->begin();
         }
       }