From: Alexey Dejneka Date: Sun, 28 May 2006 04:16:09 +0000 (+0000) Subject: 0.9.13.2: X-Git-Url: http://repo.macrolet.net/gitweb/?a=commitdiff_plain;h=933bb309622b9a2a8bfe65bbb387dcdae6bcb379;p=sbcl.git 0.9.13.2: * Fix bug MISC.641: unused optional entry deletion after physical environment analysis can cause LET-conversion, so the latter must deal with NLX-INFOs. --- diff --git a/NEWS b/NEWS index fe8ebb5..a92dd40 100644 --- a/NEWS +++ b/NEWS @@ -1,4 +1,9 @@ ;;;; -*- coding: utf-8; -*- +changes in sbcl-0.9.14 relative to sbcl-0.9.13: + * fixed some bugs revealed by Paul Dietz' test suite: + ** MISC.641: LET-conversion were not supposed to work in late + compilation stages. + changes in sbcl-0.9.13 relative to sbcl-0.9.12: * new feature: source path information is generated for macro-expansion errors for use in IDE's like Slime (thanks to Helmut Eller) diff --git a/src/compiler/locall.lisp b/src/compiler/locall.lisp index 8d34d60..f480fcf 100644 --- a/src/compiler/locall.lisp +++ b/src/compiler/locall.lisp @@ -832,7 +832,8 @@ (depart-from-tail-set clambda) (let* ((home (node-home-lambda call)) - (home-physenv (lambda-physenv home))) + (home-physenv (lambda-physenv home)) + (physenv (lambda-physenv clambda))) (aver (not (eq home clambda))) @@ -841,6 +842,11 @@ (setf (lambda-home clambda) home) (setf (lambda-physenv clambda) home-physenv) + (when physenv + (setf (physenv-nlx-info home-physenv) + (nconc (physenv-nlx-info physenv) + (physenv-nlx-info home-physenv)))) + ;; All of CLAMBDA's LETs belong to HOME now. (let ((lets (lambda-lets clambda))) (dolist (let lets) diff --git a/tests/compiler.pure.lisp b/tests/compiler.pure.lisp index 213aaa7..0f94a7a 100644 --- a/tests/compiler.pure.lisp +++ b/tests/compiler.pure.lisp @@ -2099,3 +2099,12 @@ summing i) x))) (assert (= a (random most-positive-fixnum)))) + +;;; MISC.641: LET-conversion after physical environment analysis lost NLX-INFOs +(let ((form '(lambda () + (declare (optimize (speed 1) (space 0) (debug 2) + (compilation-speed 0) (safety 1))) + (flet ((%f3 (f3-1 &key (key1 (count (floor 0 (min -74 0)) #()))) + 0)) + (apply #'%f3 0 nil))))) + (assert (zerop (funcall (compile nil form))))) diff --git a/version.lisp-expr b/version.lisp-expr index f3df9a5..55fda2e 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.9.13.1" +"0.9.13.2"