0.8.10.5:
authorAlexey Dejneka <adejneka@comail.ru>
Sun, 2 May 2004 14:03:48 +0000 (14:03 +0000)
committerAlexey Dejneka <adejneka@comail.ru>
Sun, 2 May 2004 14:03:48 +0000 (14:03 +0000)
        * Fix MISC.361: forbid conversion of a single-value CAST
          argument into UVL.

src/compiler/ir1opt.lisp
src/compiler/ir1util.lisp
tests/compiler.pure.lisp
version.lisp-expr

index 6fe4c36..988348d 100644 (file)
           ;; FIXME: Do it in one step.
           (filter-lvar
            value
-           `(multiple-value-call #'list 'dummy))
+           (if (cast-single-value-p cast)
+               `(list 'dummy)
+               `(multiple-value-call #'list 'dummy)))
           (filter-lvar
            (cast-value cast)
            ;; FIXME: Derived type.
index 95f2e3f..b86ce53 100644 (file)
 (defun ctran-home-lambda (ctran)
   (ctran-home-lambda-or-null ctran))
 
+(declaim (inline cast-single-value-p))
+(defun cast-single-value-p (cast)
+  (not (values-type-p (cast-asserted-type cast))))
+
 #!-sb-fluid (declaim (inline lvar-single-value-p))
 (defun lvar-single-value-p (lvar)
   (or (not lvar)
           (cast
            (locally
                (declare (notinline lvar-single-value-p))
-             (and (not (values-type-p (cast-asserted-type dest)))
+             (and (cast-single-value-p dest)
                   (lvar-single-value-p (node-lvar dest)))))
           (t
            t)))))
index 2810dee..11c73a3 100644 (file)
                (catch 'ct1 (throw 'ct1 0))))))
          15867134))
 
+;;; misc.361: replacing CAST with (m-v-call #'%compile-time-type-error)
+;;; could transform known-values LVAR to UVL
+(assert (zerop (funcall
+   (compile
+    nil
+    '(lambda (a b c)
+       (declare (notinline boole values denominator list))
+       (declare
+       (optimize (speed 2)
+                 (space 0)
+                 (safety 1)
+                 (debug 0)
+                 (compilation-speed 2)))
+       (catch 'ct6
+        (progv
+            '(*s8*)
+            (list 0)
+          (let ((v9 (ignore-errors (throw 'ct6 0))))
+            (denominator
+             (progv nil nil (values (boole boole-and 0 v9)))))))))
+   1 2 3)))
 \f
 ;;; MISC.275
 (assert
index 5e6ae43..eefeb8f 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".)
-"0.8.10.4"
+"0.8.10.5"