From: Alexey Dejneka Date: Fri, 27 Sep 2002 01:57:13 +0000 (+0000) Subject: 0.7.8.1: X-Git-Url: http://repo.macrolet.net/gitweb/?a=commitdiff_plain;h=df81175171338132825adfd1e522f350878986da;p=sbcl.git 0.7.8.1: VALUES-LIST is no longer flushed when its values is not used. --- diff --git a/NEWS b/NEWS index 012ca20..6bacac8 100644 --- a/NEWS +++ b/NEWS @@ -1297,6 +1297,9 @@ changes in sbcl-0.7.8 relative to sbcl-0.7.7: incremented seemed like the simplest and most conservative thing to do.) +changes in sbcl-0.7.9 relative to sbcl-0.7.8: + * fixed bug: VALUES-LIST is no longer optimized away + planned incompatible changes in 0.7.x: * When the profiling interface settles down, maybe in 0.7.x, maybe later, it might impact TRACE. They both encapsulate functions, and diff --git a/src/compiler/ir2tran.lisp b/src/compiler/ir2tran.lisp index 9059525..d32325b 100644 --- a/src/compiler/ir2tran.lisp +++ b/src/compiler/ir2tran.lisp @@ -1290,14 +1290,15 @@ (defoptimizer (values-list ir2-convert) ((list) node block) (let* ((cont (node-cont node)) (2cont (continuation-info cont))) - (when 2cont - (ecase (ir2-continuation-kind 2cont) - (:fixed (ir2-convert-full-call node block)) - (:unknown - (let ((locs (ir2-continuation-locs 2cont))) - (vop* values-list node block - ((continuation-tn node block list) nil) - ((reference-tn-list locs t))))))))) + (cond ((and 2cont + (eq (ir2-continuation-kind 2cont) :unknown)) + (let ((locs (ir2-continuation-locs 2cont))) + (vop* values-list node block + ((continuation-tn node block list) nil) + ((reference-tn-list locs t))))) + (t (aver (or (not 2cont) ; i.e. we want to check the argument + (eq (ir2-continuation-kind 2cont) :fixed))) + (ir2-convert-full-call node block))))) (defoptimizer (%more-arg-values ir2-convert) ((context start count) node block) (let* ((cont (node-cont node)) diff --git a/tests/compiler.pure.lisp b/tests/compiler.pure.lisp index 07872ae..1dbd339 100644 --- a/tests/compiler.pure.lisp +++ b/tests/compiler.pure.lisp @@ -186,7 +186,7 @@ (assert (not (eval `(locally (declare (optimize (safety 0))) (ignore-errors (progn ,form t))))))) -(dolist (form '(#+nil(values-list '(1 . 2)) ; This case still fails +(dolist (form '((values-list (car (list '(1 . 2)))) (fboundp '(set bet)) (atan #c(1 1) (car (list #c(2 2)))) (nthcdr (car (list (floor (cos 3)))) '(1 2 3 4 5)) diff --git a/version.lisp-expr b/version.lisp-expr index 6e870c1..752a85d 100644 --- a/version.lisp-expr +++ b/version.lisp-expr @@ -18,4 +18,4 @@ ;;; internal versions off the main CVS branch, it gets hairier, e.g. ;;; "0.pre7.14.flaky4.13".) -"0.7.8" +"0.7.8.1"