Fix bug: test/Regression/Other/2002-03-11-ConstPropCrash.ll


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@1858 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Transforms/Scalar/ConstantProp.cpp b/lib/Transforms/Scalar/ConstantProp.cpp
index fc4e3bf..624e6da 100644
--- a/lib/Transforms/Scalar/ConstantProp.cpp
+++ b/lib/Transforms/Scalar/ConstantProp.cpp
@@ -102,7 +102,8 @@
 // constant value, convert it into an unconditional branch to the constant
 // destination.
 //
-bool ConstantFoldTerminator(TerminatorInst *T) {
+bool ConstantFoldTerminator(BasicBlock *BB, BasicBlock::iterator &II,
+                            TerminatorInst *T) {
   // Branch - See if we are conditional jumping on constant
   if (BranchInst *BI = dyn_cast<BranchInst>(T)) {
     if (BI->isUnconditional()) return false;  // Can't optimize uncond branch
@@ -127,6 +128,7 @@
       // Set the unconditional destination, and change the insn to be an
       // unconditional branch.
       BI->setUnconditionalDest(Destination);
+      II = BB->end()-1;  // Update instruction iterator!
       return true;
     }
 #if 0
@@ -171,7 +173,7 @@
     Constant *D = dyn_cast<Constant>(UInst->getOperand(0));
     if (D) return ConstantFoldUnaryInst(BB, II, UInst, D);
   } else if (TerminatorInst *TInst = dyn_cast<TerminatorInst>(Inst)) {
-    return ConstantFoldTerminator(TInst);
+    return ConstantFoldTerminator(BB, II, TInst);
 
   } else if (PHINode *PN = dyn_cast<PHINode>(Inst)) {
     // If it's a PHI node and only has one operand