X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fphysenvanal.lisp;h=e43bf9e85d90015e0177d0ce06a91d3fa0979ee0;hb=d25e3478acccec70402ff32554669a982be8e281;hp=592c0023f7531f8281a64382f2f31564de64971b;hpb=757091b10a73a7f6e2bd673bcf990ac93f23f77c;p=sbcl.git diff --git a/src/compiler/physenvanal.lisp b/src/compiler/physenvanal.lisp index 592c002..e43bf9e 100644 --- a/src/compiler/physenvanal.lisp +++ b/src/compiler/physenvanal.lisp @@ -335,11 +335,17 @@ do (etypecase what (cons (let ((lvar (cdr what))) - (if (lvar-good-for-dx-p lvar (car what) component) - (let ((real (principal-lvar lvar))) - (setf (lvar-dynamic-extent real) cleanup) - (real-dx-lvars real)) - (setf (lvar-dynamic-extent lvar) nil)))) + (cond ((lvar-good-for-dx-p lvar (car what) component) + (let ((real (principal-lvar lvar))) + (setf (lvar-dynamic-extent real) cleanup) + (real-dx-lvars real))) + (t + (do-uses (use lvar) + (unless (ref-p use) + (let ((*compiler-error-context* use)) + (compiler-notify "could not stack allocate the result of ~S" + (find-original-source (node-source-path use)))))) + (setf (lvar-dynamic-extent lvar) nil))))) (node ; DX closure (let* ((call what) (arg (first (basic-combination-args call)))