1.0.10.7: multiply-used DX LVARS
[sbcl.git] / src / compiler / physenvanal.lisp
index 481ce2e..af8fec3 100644 (file)
                          do (etypecase what
                               (lvar
                                (let* ((lvar what)
-                                      (use (lvar-uses lvar)))
-                                 (if (and (combination-p use)
-                                          (eq (basic-combination-kind use) :known)
-                                          (awhen (fun-info-stack-allocate-result
-                                                  (basic-combination-fun-info use))
-                                            (funcall it use)))
+                                      (uses (lvar-uses lvar)))
+                                 (if (every (lambda (use)
+                                             (and (combination-p use)
+                                                  (eq (basic-combination-kind use) :known)
+                                                  (awhen (fun-info-stack-allocate-result
+                                                          (basic-combination-fun-info use))
+                                                    (funcall it use))))
+                                           (if (listp uses) uses (list uses)))
                                      (real-dx-lvars lvar)
-                                     (setf (lvar-dynamic-extent lvar) nil))))
+                                    (setf (lvar-dynamic-extent lvar) nil))))
                               (node ; DX closure
                                (let* ((call what)
                                       (arg (first (basic-combination-args call)))