Browse files gtn: KLUDGE the lambda-var assignment to not break tail-ca…


  * 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.
  • Loading branch information...
1 parent 818b7d2 commit a5bbce0fccb293efc38ce1a2f64cea8e71fa2e61 Alastair Bridgewater committed Nov 27, 2010
Showing with 11 additions and 1 deletion.
  1. +10 −0 src/compiler/gtn.lisp
  2. +1 −1 version.lisp-expr
10 src/compiler/gtn.lisp
@@ -56,6 +56,16 @@
;; live over the dynamic contour of the physenv.
(setf (tn-sc res) (svref *backend-sc-numbers*
+ ;; 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)))
2 version.lisp-expr
@@ -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".)

0 comments on commit a5bbce0

Please sign in to comment.