diff --git a/compiler/ir1util.lisp b/compiler/ir1util.lisp
index e1cd0eff6169401b9776df70284bd72e9d926fb0..da35d2c6dc8b1e82ac006ec302d69ee363f593b8 100644
--- a/compiler/ir1util.lisp
+++ b/compiler/ir1util.lisp
@@ -415,21 +415,23 @@
 	       (setf (continuation-block last-cont) new-block)))
 	  (setf (continuation-block cont) new-block))
 
-	(do ((cup (find-enclosing-cleanup cleanup)
-		  (find-enclosing-cleanup (cleanup-enclosing cup))))
-	    ((null cup))
-	  (when (eq (continuation-block (cleanup-start cup)) new-block)
-	    (do ((cup (find-enclosing-cleanup (cleanup-enclosing cup))
-		      (find-enclosing-cleanup (cleanup-enclosing cup))))
-		((null cup)
-		 (let ((start-cleanup (block-start-cleanup block)))
+	(let ((start-cleanup (block-start-cleanup block)))
+	  (do ((cup (find-enclosing-cleanup cleanup)
+		    (find-enclosing-cleanup (cleanup-enclosing cup))))
+	      ((null cup))
+	    (when (eq (node-block (continuation-use (cleanup-start cup)))
+		      new-block)
+	      (do ((cup (find-enclosing-cleanup (cleanup-enclosing cup))
+			(find-enclosing-cleanup (cleanup-enclosing cup))))
+		  ((null cup)
 		   (setf (block-end-cleanup block) start-cleanup)
-		   (setf (block-start-cleanup new-block) start-cleanup)))
-	      (unless (eq (continuation-block (cleanup-start cup)) new-block)
-		(setf (block-end-cleanup block) cup)
-		(setf (block-start-cleanup new-block) cup)
-		(return)))
-	    (return)))
+		   (setf (block-start-cleanup new-block) start-cleanup))
+		(let ((cb (node-block (continuation-use (cleanup-start cup)))))
+		  (unless (eq cb new-block)
+		    (setf (block-end-cleanup block) cup)
+		    (setf (block-start-cleanup new-block) cup)
+		    (return))))
+	      (return))))
 
 	(setf (block-type-asserted block) t)
 	(setf (block-test-modified block) t))))