From 07717e67b9ba85c162a76d10510448037959a07f Mon Sep 17 00:00:00 2001 From: ram <ram> Date: Thu, 17 May 1990 13:44:46 +0000 Subject: [PATCH] In SUBSTITUTE-SINGLE-USE-CONTINUATION, we also punt if either continuation has some weird TYPE-CHECK annotation. This prevents us from trashing type check generation. --- compiler/ir1opt.lisp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/compiler/ir1opt.lisp b/compiler/ir1opt.lisp index 30a33568d..6244e0ecd 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) -- GitLab