0.9.15.44: fix bug 368: intersection of array types
[sbcl.git] / BUGS
diff --git a/BUGS b/BUGS
index 0e990ce..98e54ac 100644 (file)
--- a/BUGS
+++ b/BUGS
@@ -635,31 +635,6 @@ WORKAROUND:
 
   This is probably the same bug as 162
 
-217: "Bad type operations with FUNCTION types"
-  In sbcl.0.7.7:
-
-    * (values-type-union (specifier-type '(function (base-char)))
-                         (specifier-type '(function (integer))))
-
-    #<FUN-TYPE (FUNCTION (BASE-CHAR) *)>
-
-  It causes insertion of wrong type assertions into generated
-  code. E.g.
-
-    (defun foo (x s)
-      (let ((f (etypecase x
-                 (character #'write-char)
-                 (integer #'write-byte))))
-        (funcall f x s)
-        (etypecase x
-          (character (write-char x s))
-          (integer (write-byte x s)))))
-
-   Then (FOO #\1 *STANDARD-OUTPUT*) signals type error.
-
-  (In 0.7.9.1 the result type is (FUNCTION * *), so Python does not
-  produce invalid code, but type checking is not accurate.)
-
 235: "type system and inline expansion"
   a.
   (declaim (ftype (function (cons) number) acc))
@@ -675,6 +650,10 @@ WORKAROUND:
 
   (foo '(nil) '(t)) => NIL, T.
 
+  As of 0.9.15.41 this seems to be due to ACC being inlined only once
+  inside FOO, which results in the second call reusing the FUNCTIONAL
+  resulting from the first -- which doesn't check the type.
+
 237: "Environment arguments to type functions"
   a. Functions SUBTYPEP, TYPEP, UPGRADED-ARRAY-ELEMENT-TYPE, and 
      UPGRADED-COMPLEX-PART-TYPE now have an optional environment
@@ -1466,44 +1445,6 @@ WORKAROUND:
     bug 367b: Comment out the (DECLAIM (FTYPE ... R367)), and compile 
       the file. The compiler fails with TYPE-ERROR at compile time.
 
-368: miscompiled OR (perhaps related to bug 367)
-  Trying to relax type declarations to find a workaround for bug 367,
-  it turns out that even when the return type isn't declared (or 
-  declared to be T, anyway) the system remains confused about type 
-  inference in code similar to that for bug 367:
-    (in-package :cl-user)
-    (declaim (optimize (safety 3) (debug 2) (speed 2) (space 1)))
-    (defstruct e368)
-    (defstruct i368)
-    (defstruct g368
-      (i368s (make-array 0 :fill-pointer t) :type (or (vector i368) null)))
-    (defstruct s368
-      (g368 (error "missing :G368") :type g368 :read-only t))
-    (declaim (ftype (function (fixnum (vector i368) e368) t) r368))
-    (declaim (ftype (function (fixnum (vector e368)) t) h368))
-    (defparameter *h368-was-called-p* nil)
-    (defun nsu (vertices e368)
-      (let ((i368s (g368-i368s (make-g368))))
-        (let ((fuis (r368 0 i368s e368)))
-          (format t "~&FUIS=~S~%" fuis)
-          (or fuis (h368 0 i368s)))))
-    (defun r368 (w x y)
-      (declare (ignore w x y))
-      nil)
-    (defun h368 (w x)
-      (declare (ignore w x))
-      (setf *h368-was-called-p* t)
-      (make-s368 :g368 (make-g368)))
-    (trace r368 h368)
-    (format t "~&calling NSU~%")
-    (let ((nsu (nsu #() (make-e368))))
-      (format t "~&NSU returned ~S~%" nsu)
-      (format t "~&*H368-WAS-CALLED-P*=~S~%" *h368-was-called-p*)
-      (assert (s368-p nsu))
-      (assert *h368-was-called-p*))
-  In sbcl-0.8.18, both ASSERTs fail, and (DISASSEMBLE 'NSU) shows
-  that no call to H368 is compiled.
-
 369: unlike-an-intersection behavior of VALUES-TYPE-INTERSECTION
   In sbcl-0.8.18.2, the identity $(x \cap y \cap y)=(x \cap y)$ 
   does not hold for VALUES-TYPE-INTERSECTION, even for types which