0.8.3.3:
[sbcl.git] / BUGS
diff --git a/BUGS b/BUGS
index 19ac95c..0ad71a7 100644 (file)
--- a/BUGS
+++ b/BUGS
@@ -170,12 +170,6 @@ WORKAROUND:
 45:
   a slew of floating-point-related errors reported by Peter Van Eynde
   on July 25, 2000:
-       b: SBCL's value for LEAST-POSITIVE-SHORT-FLOAT on the x86 is 
-          bogus, and should probably be 1.4012985e-45. In SBCL,
-          (/ LEAST-POSITIVE-SHORT-FLOAT 2) returns a number smaller
-          than LEAST-POSITIVE-SHORT-FLOAT. Similar problems 
-          exist for LEAST-NEGATIVE-SHORT-FLOAT, LEAST-POSITIVE-LONG-FLOAT,
-          and LEAST-NEGATIVE-LONG-FLOAT.
        c: Many expressions generate floating infinity on x86/Linux:
                (/ 1 0.0)
                (/ 1 0.0d0)
@@ -223,12 +217,6 @@ WORKAROUND:
   crashes SBCL. In general tracing anything which is used in the 
   implementation of TRACE is likely to have the same problem.
 
-75:
-  As reported by Martin Atzmueller on sbcl-devel 26 Dec 2000,
-  ANSI says that WITH-OUTPUT-TO-STRING should have a keyword
-  :ELEMENT-TYPE, but in sbcl-0.6.9 this is not defined for
-  WITH-OUTPUT-TO-STRING.
-
 78:
   ANSI says in one place that type declarations can be abbreviated even
   when the type name is not a symbol, e.g.
@@ -502,6 +490,7 @@ WORKAROUND:
   it took more than two minutes (but less than five) for me.
 
 145:
+  a.
   ANSI allows types `(COMPLEX ,FOO) to use very hairy values for
   FOO, e.g. (COMPLEX (AND REAL (SATISFIES ODDP))). The old CMU CL
   COMPLEX implementation didn't deal with this, and hasn't been
@@ -509,6 +498,18 @@ WORKAROUND:
   conformance problem, since seems hard to construct useful code
   where it matters.)
 
+  b.
+  * (defun foo (x)
+      (declare (type (double-float -0d0) x))
+      (declare (optimize speed))
+      (+ x (sqrt (log (random 1d0)))))
+  debugger invoked on condition of type SIMPLE-ERROR:
+    bad thing to be a type specifier: ((COMPLEX
+                                        (DOUBLE-FLOAT 0.0d0
+                                                      #.SB-EXT:DOUBLE-FLOAT-POSITIVE-INFINITY))
+                                       #C(0.0d0 #.SB-EXT:DOUBLE-FLOAT-POSITIVE-INFINITY)
+                                       #C(0.0d0 #.SB-EXT:DOUBLE-FLOAT-POSITIVE-INFINITY))
+
 146:
   Floating point errors are reported poorly. E.g. on x86 OpenBSD
   with sbcl-0.7.1, 
@@ -1039,16 +1040,6 @@ WORKAROUND:
   be nice to understand why the first patch caused problems, and to
   fix the cause if possible.
 
-267:
-  In
-    (defun fact (x i)
-      (if (= x 0)
-          i
-          (fact (1- x) (* x i))))
-  sbcl does not convert the self-recursive call to a jump, though it
-  is allowed to by CLHS 3.2.2.3.  CMUCL, however, does perform this
-  optimization.
-
 268: "wrong free declaration scope"
   The following code must signal type error:
 
@@ -1058,6 +1049,130 @@ WORKAROUND:
                (list x y)))
         (funcall (eval #'foo) 1)))
 
+269:
+  SCALE-FLOAT should accept any integer for its second argument.
+
+270:
+  In the following function constraint propagator optimizes nothing:
+
+    (defun foo (x)
+      (declare (integer x))
+      (declare (optimize speed))
+      (typecase x
+        (fixnum "hala")
+        (fixnum "buba")
+        (bignum "hip")
+        (t "zuz")))
+
+272:
+  All forms of GC hooks (including notifiers and finalisers) are currently
+  (since 0.8.0) broken for gencgc (i.e. x86) users 
+
+273:
+  Compilation of the following two forms causes "X is unbound" error:
+
+    (symbol-macrolet ((x pi))
+      (macrolet ((foo (y) (+ x y)))
+        (declaim (inline bar))
+        (defun bar (z)
+          (* z (foo 4)))))
+    (defun quux (z)
+      (bar z))
+
+  (See (COERCE (CDR X) 'FUNCTION) in IR1-CONVERT-INLINE-LAMBDA.)
+
+274:
+  CLHS says that type declaration of a symbol macro should not affect
+  its expansion, but in SBCL it does.
+
+275:
+  The following code (taken from CLOCC) takes a lot of time to compile:
+
+    (defun foo (n)
+      (declare (type (integer 0 #.large-constant) n))
+      (expt 1/10 n))
+
+  (fixed in 0.8.2.51, but a test case would be good)
+
+276:
+    (defmethod fee ((x fixnum))
+      (setq x (/ x 2))
+      x)
+    (fee 1) => type error
+
+  (taken from CLOCC)
+
+277:
+  IGNORE/IGNORABLE declarations should be acceptable for symbol
+  macros.
+
+278:
+  a.
+    (defun foo ()
+      (declare (optimize speed))
+      (loop for i of-type (integer 0) from 0 by 2 below 10
+            collect i))
+
+  uses generic arithmetic.
+
+  b. For the example above, the compiler does not issue a note.
+
+279: type propagation error -- correctly inferred type goes astray?
+  In sbcl-0.8.3 and sbcl-0.8.1.47, the warning
+       The binding of ABS-FOO is a (VALUES (INTEGER 0 0)
+       &OPTIONAL), not a (INTEGER 1 536870911)
+  is emitted when compiling this file:
+    (declaim (ftype (function ((integer 0 #.most-positive-fixnum))
+                              (integer #.most-negative-fixnum 0))
+                    foo))
+    (defun foo (x)
+      (- x))
+    (defun bar (x)
+      (let* (;; Uncomment this for a type mismatch warning indicating 
+             ;; that the type of (FOO X) is correctly understood.
+             #+nil (fs-foo (float-sign (foo x)))
+                   ;; Uncomment this for a type mismatch warning 
+                   ;; indicating that the type of (ABS (FOO X)) is
+                   ;; correctly understood.
+             #+nil (fs-abs-foo (float-sign (abs (foo x))))
+             ;; something wrong with this one though
+             (abs-foo (abs (foo x))))
+        (declare (type (integer 1 100) abs-foo))
+        (print abs-foo)))
+
+280: bogus WARNING about duplicate function definition 
+  In sbcl-0.8.3 and sbcl-0.8.1.47, if BS.MIN is defined inline,
+  e.g. by 
+     (declaim (inline bs.min))
+     (defun bs.min (bases) nil)
+  before compiling the file below, the compiler warns
+     Duplicate definition for BS.MIN found in one static
+     unit (usually a file).
+  when compiling 
+    (declaim (special *minus* *plus* *stagnant*))
+    (defun b.*.min (&optional (x () xp) (y () yp) &rest rest)
+      (bs.min avec))
+    (define-compiler-macro b.*.min (&rest rest)
+      `(bs.min ,@rest))
+    (defun afish-d-rbd (pd)
+      (if *stagnant* 
+          (b.*.min (foo-d-rbd *stagnant*))
+          (multiple-value-bind (reduce-fn initial-value)
+              (etypecase pd
+                (list (values #'bs.min 0))
+                (vector (values #'bs.min *plus*)))
+            (let ((cv-ks (cv (kpd.ks pd))))
+              (funcall reduce-fn d-rbds)))))
+    (defun bfish-d-rbd (pd)
+      (if *stagnant* 
+          (b.*.min (foo-d-rbd *stagnant*))
+          (multiple-value-bind (reduce-fn initial-value)
+              (etypecase pd
+                (list (values #'bs.min *minus*))
+                (vector (values #'bs.min 0)))
+            (let ((cv-ks (cv (kpd.ks pd))))
+              (funcall reduce-fn d-rbds)))))
+
 DEFUNCT CATEGORIES OF BUGS
   IR1-#:
     These labels were used for bugs related to the old IR1 interpreter.