diff --git a/compiler/ir1opt.lisp b/compiler/ir1opt.lisp
index 30a33568d773b2edd871443b61b1e77d20ad57ec..6244e0ecd9a16d54a0b2290a5f42db5c69509f43 100644
--- a/compiler/ir1opt.lisp
+++ b/compiler/ir1opt.lisp
@@ -1009,7 +1009,8 @@
 ;;; inhibited when:
 ;;; -- CONT has other uses, or
 ;;; -- CONT receives multiple values, or
-;;; -- the reference is in a different environment from the variable.
+;;; -- the reference is in a different environment from the variable, or
+;;; -- either continuation has a funky TYPE-CHECK annotation.
 ;;;
 ;;;    We change the Ref to be a reference to NIL with unused value, and let it
 ;;; be flushed as dead code.  A side-effect of this substitution is to delete
@@ -1024,7 +1025,9 @@
 	       dest
 	       (not (typep dest '(or creturn exit mv-combination)))
 	       (eq (lambda-home (block-lambda (node-block ref)))
-		   (lambda-home (lambda-var-home var))))
+		   (lambda-home (lambda-var-home var)))
+	       (member (continuation-type-check arg) '(t nil))
+	       (member (continuation-type-check cont) '(t nil)))
       (assert-continuation-type arg (continuation-asserted-type cont))
       (change-ref-leaf ref (find-constant nil))
       (substitute-continuation arg cont)