X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fir2tran.lisp;h=47968509f9416ffe6d288dc3002f35e66918c5d7;hb=95591ed483dbb8c0846c129953acac1554f28809;hp=cc74cca0937deda64aba578111377d44408ccf3e;hpb=79a8e51bf4b06a5bd57bc90233605f98fee3b041;p=sbcl.git diff --git a/src/compiler/ir2tran.lisp b/src/compiler/ir2tran.lisp index cc74cca..4796850 100644 --- a/src/compiler/ir2tran.lisp +++ b/src/compiler/ir2tran.lisp @@ -56,10 +56,13 @@ (defevent make-value-cell-event "Allocate heap value cell for lexical var.") (defun emit-make-value-cell (node block value res) (event make-value-cell-event node) - (let ((leaf (tn-leaf res))) + (let* ((leaf (tn-leaf res)) + (dx (when leaf (leaf-dynamic-extent leaf)))) + (when (and dx (neq :truly dx) (leaf-has-source-name-p leaf)) + (compiler-notify "cannot stack allocate value cell for ~S" (leaf-source-name leaf))) (vop make-value-cell node block value ;; FIXME: See bug 419 - (and leaf (eq :truly (leaf-dynamic-extent leaf))) + (eq :truly dx) res))) ;;;; leaf reference @@ -252,7 +255,11 @@ (vop current-stack-pointer call 2block (ir2-lvar-stack-pointer (lvar-info leaves)))) (dolist (leaf (lvar-value leaves)) - (binding* ((xep (functional-entry-fun leaf) :exit-if-null) + (binding* ((xep (awhen (functional-entry-fun leaf) + ;; if the xep's been deleted then we can skip it + (if (eq (functional-kind it) :deleted) + nil it)) + :exit-if-null) (nil (aver (xep-p xep))) (entry-info (lambda-info xep) :exit-if-null) (tn (entry-info-closure-tn entry-info) :exit-if-null)