1.0.44.34: gtn: KLUDGE the lambda-var assignment to not break tail-calls.
authorAlastair Bridgewater <lisphacker@users.sourceforge.net>
Sat, 27 Nov 2010 03:01:50 +0000 (03:01 +0000)
committerAlastair Bridgewater <lisphacker@users.sourceforge.net>
Sat, 27 Nov 2010 03:01:50 +0000 (03:01 +0000)
  * As an utter KLUDGE, when assigning TNs for closed-over lambda
variables with implicit value-cells, make the TNs component-live
instead of physenv-live.  This prevents any possible problems with
the new physenv introduced by a tail-call overwriting the storage
for the variable.

src/compiler/gtn.lisp
version.lisp-expr

index ca2c23f..b665ddf 100644 (file)
           ;; live over the dynamic contour of the physenv.
           (setf (tn-sc res) (svref *backend-sc-numbers*
                                    sb!vm:control-stack-sc-number))
+          ;; KLUDGE: In the case of a tail-local-call, the entire
+          ;; stack frame is overwritten by the physenv of the called
+          ;; function.  Unfortunately, the tail-call appears to end
+          ;; the dynamic contour of the physenv, meaning that the
+          ;; stack slot occupied by the LAMBDA-VAR may be reassigned.
+          ;; Ideally, we might make the TN physenv-live across the
+          ;; physenvs of the tail-set of the lambda, but as a stopgap
+          ;; we can make it component-live instead.
+          (component-live-tn res)
+          #+(or)
           (physenv-live-tn res (lambda-physenv fun)))
 
          (debug-variable-p
index 22758bd..d82d36f 100644 (file)
@@ -20,4 +20,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".)
-"1.0.44.33"
+"1.0.44.34"