1.0.23.41: fix DX-COMBINATION-P
authorNikodemus Siivola <nikodemus@random-state.net>
Mon, 15 Dec 2008 09:40:07 +0000 (09:40 +0000)
committerNikodemus Siivola <nikodemus@random-state.net>
Mon, 15 Dec 2008 09:40:07 +0000 (09:40 +0000)
 * Punt on multiple result-uses. Reported by Pascal Costanza and
   Thiemo Seufer.

 * Also check for clean arg flow all cases.

src/compiler/ir1util.lisp
tests/dynamic-extent.impure.lisp
version.lisp-expr

index 9af9351..d23bc01 100644 (file)
                           (lambda-return clambda)))
                (result-use (when (return-p creturn)
                              (principal-lvar-use (return-result creturn)))))
-          (when result-use
-            (if (known-dx-combination-p result-use dx)
-                (combination-args-flow-cleanly-p use result-use dx)
-                (dx-combination-p result-use dx)))))
-       t))
+          ;; FIXME: We should be able to deal with multiple uses here as well.
+          (and (dx-combination-p result-use dx)
+               (combination-args-flow-cleanly-p use result-use dx))))))
 
 (defun combination-args-flow-cleanly-p (combination1 combination2 dx)
   (labels ((recurse (combination)
index 6740a28..9aba2db 100644 (file)
                14)
          ))))
 (assert (equal '((0 4) (3 ((1 2 3 5) 14))) (test-update-uvl-live-sets #() 4 5)))
+
+(with-test (:name :regression-1.0.23.38)
+  (compile nil '(lambda ()
+                 (flet ((make (x y)
+                          (let ((res (cons x x)))
+                            (setf (cdr res) y)
+                            res)))
+                   (declaim (inline make))
+                   (let ((z (make 1 2)))
+                     (declare (dynamic-extent z))
+                     (print z)
+                     t))))
+  (compile nil '(lambda ()
+                 (flet ((make (x y)
+                          (let ((res (cons x x)))
+                            (setf (cdr res) y)
+                            (if x res y))))
+                   (declaim (inline make))
+                   (let ((z (make 1 2)))
+                     (declare (dynamic-extent z))
+                     (print z)
+                     t)))))
 \f
index db7535b..bc122c8 100644 (file)
@@ -17,4 +17,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.23.40"
+"1.0.23.41"