Fix bug: IndVarsSimplify/2003-12-10-RemoveInstrCrash.llx
authorChris Lattner <sabre@nondot.org>
Wed, 10 Dec 2003 20:43:04 +0000 (20:43 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 10 Dec 2003 20:43:04 +0000 (20:43 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10385 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Scalar/IndVarSimplify.cpp

index 369be4768417287a8785a25ce7b843b25a06d889..ed5aca372ab0469aab9d44a109732b2998b38780 100644 (file)
@@ -140,6 +140,8 @@ static bool TransformLoop(LoopInfo *Loops, Loop *Loop) {
 
     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 @@ static bool TransformLoop(LoopInfo *Loops, Loop *Loop) {
           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();
         }
       }