diff --git a/lib/Analysis/ScalarEvolutionExpander.cpp b/lib/Analysis/ScalarEvolutionExpander.cpp
index 852c7a0..58181fb 100644
--- a/lib/Analysis/ScalarEvolutionExpander.cpp
+++ b/lib/Analysis/ScalarEvolutionExpander.cpp
@@ -35,9 +35,7 @@ Value *SCEVExpander::ReuseOrCreateCast(Value *V, Type *Ty,
   // InsertPt to ensure that the expression's expansion dominates its uses.
   // Assert that the requested insertion point works at least for new
   // instructions.
-
-  // FIXME: disabled to make the bots happy.
-  //assert(SE.DT->dominates(IP, Builder.GetInsertPoint()));
+  assert(SE.DT->dominates(IP, Builder.GetInsertPoint()));
 
   // Check to see if there is already a cast!
   for (Value::use_iterator UI = V->use_begin(), E = V->use_end();
diff --git a/lib/VMCore/Dominators.cpp b/lib/VMCore/Dominators.cpp
index d052f24..f24c584 100644
--- a/lib/VMCore/Dominators.cpp
+++ b/lib/VMCore/Dominators.cpp
@@ -87,11 +87,17 @@ bool DominatorTree::dominates(const Instruction *A, const Instruction *B) const{
 
   // If A is an invoke instruction, its value is only available in this normal
   // successor block.
-  if (const InvokeInst *II = dyn_cast<InvokeInst>(A))
+  const InvokeInst *II = dyn_cast<InvokeInst>(A);
+  if (II)
     BBA = II->getNormalDest();
 
   if (BBA != BBB) return dominates(BBA, BBB);
 
+  // If A is an invoke, it dominates anything on the normal successor block.
+  // FIXME: Should it dominate phis?
+  if (II)
+    return true;
+
   // It is not possible to determine dominance between two PHI nodes
   // based on their ordering.
   if (isa<PHINode>(A) && isa<PHINode>(B))
diff --git a/test/Transforms/LoopStrengthReduce/normal_successor.ll b/test/Transforms/LoopStrengthReduce/normal_successor.ll
new file mode 100644
index 0000000..ae85411
--- /dev/null
+++ b/test/Transforms/LoopStrengthReduce/normal_successor.ll
@@ -0,0 +1,25 @@
+; RUN: opt < %s -loop-reduce
+
+define void @f(i32* %foo) {
+entry:
+  br label %arrayctor.loop
+
+arrayctor.loop:                                   ; preds = %invoke.cont, %entry
+  %arrayctor.cur = phi i32* [ %foo, %entry ], [ %arrayctor.next, %invoke.cont ]
+  invoke void @g(i32* null)
+          to label %invoke.cont unwind label %lpad
+
+invoke.cont:                                      ; preds = %arrayctor.loop
+  %arrayctor.next = getelementptr inbounds i32* %arrayctor.cur, i64 1
+  %arrayctor.done = icmp eq i32* %arrayctor.next, null
+  br label %arrayctor.loop
+
+lpad:                                             ; preds = %arrayctor.loop
+  %tmp2 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
+          cleanup
+  ret void
+}
+
+declare i32 @__gxx_personality_v0(...)
+
+declare void @g(i32*)
