X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Flocall.lisp;h=0e9ba01c102a9ccafa5c652119b8ad920a0a5ec3;hb=8dd43b84a688fde72f6d957c59f7207d539990f7;hp=f370eb35a1201ca02bb727953c29e340f618c312;hpb=70ea2f8c140246a8b5f7cb126198ff068630258f;p=sbcl.git diff --git a/src/compiler/locall.lisp b/src/compiler/locall.lisp index f370eb3..0e9ba01 100644 --- a/src/compiler/locall.lisp +++ b/src/compiler/locall.lisp @@ -281,7 +281,7 @@ (return)) (let ((kind (functional-kind functional))) (cond ((or (functional-somewhat-letlike-p functional) - (eql kind :deleted)) + (memq kind '(:deleted :zombie))) (values)) ; nothing to do ((and (null (leaf-refs functional)) (eq kind nil) (not (functional-entry-fun functional))) @@ -959,7 +959,11 @@ next-block))) (move-return-stuff fun call next-block) (merge-lets fun call) - (setf (node-tail-p call) nil))) + (setf (node-tail-p call) nil) + ;; If CALL has a derive type NIL, it means that "its return" is + ;; unreachable, but the next BIND is still reachable; in order to + ;; not confuse MAYBE-TERMINATE-BLOCK... + (setf (node-derived-type call) *wild-type*))) ;;; Reoptimize all of CALL's args and its result. (defun reoptimize-call (call)