From: Alexey Dejneka Date: Fri, 14 Nov 2003 08:45:50 +0000 (+0000) Subject: 0.8.5.36: X-Git-Url: http://repo.macrolet.net/gitweb/?a=commitdiff_plain;h=a83191ce453e8bc92e9c773ac7ce1e0c59252d99;p=sbcl.git 0.8.5.36: * Fix PFD bugs MISC.166, 167, 168: do not perform tail- and let-convertion, if block of lambda's BIND node is to be deleted. --- diff --git a/src/compiler/locall.lisp b/src/compiler/locall.lisp index 3239cd3..7edff10 100644 --- a/src/compiler/locall.lisp +++ b/src/compiler/locall.lisp @@ -1032,6 +1032,7 @@ (eq (basic-combination-fun dest) ref-lvar) (eq (basic-combination-kind dest) :local) (not (node-to-be-deleted-p dest)) + (not (block-delete-p (lambda-block clambda))) (cond ((ok-initial-convert-p clambda) t) (t (reoptimize-lvar ref-lvar) @@ -1071,7 +1072,8 @@ ;;; tail-convert. The second is the value of M-C-T-A. (defun maybe-convert-tail-local-call (call) (declare (type combination call)) - (let ((return (lvar-dest (node-lvar call)))) + (let ((return (lvar-dest (node-lvar call))) + (fun (combination-lambda call))) (aver (return-p return)) (when (and (not (node-tail-p call)) ; otherwise already converted ;; this is a tail call @@ -1082,10 +1084,10 @@ ;; non-tail so that we can use known return inside the ;; component. (not (eq (functional-kind (node-home-lambda call)) - :external))) + :external)) + (not (block-delete-p (lambda-block fun)))) (node-ends-block call) - (let ((block (node-block call)) - (fun (combination-lambda call))) + (let ((block (node-block call))) (setf (node-tail-p call) t) (unlink-blocks block (first (block-succ block))) (link-blocks block (lambda-block fun)) diff --git a/version.lisp-expr b/version.lisp-expr index 4a41772..9f7237b 100644 --- a/version.lisp-expr +++ b/version.lisp-expr @@ -17,4 +17,4 @@ ;;; checkins which aren't released. (And occasionally for internal ;;; versions, especially for internal versions off the main CVS ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".) -"0.8.5.35" +"0.8.5.36"