0.6.12.4:
[sbcl.git] / BUGS
diff --git a/BUGS b/BUGS
index 00f38e7..a839434 100644 (file)
--- a/BUGS
+++ b/BUGS
@@ -225,10 +225,12 @@ WORKAROUND:
 
 26:
   reported by Sam Steingold on the cmucl-imp mailing list 12 May 2000:
-
-Also, there is another bug: `array-displacement' should return an array
-or nil as first value (as per ANSI CL), while CMUCL declares it as
-returning an array as first value always.
+    Also, there is another bug: `array-displacement' should return an
+    array or nil as first value (as per ANSI CL), while CMUCL declares
+    it as returning an array as first value always.
+  (Actually, I think the old CMU CL version in SBCL never returns NIL,
+  i.e. it's not just a declaration problem, but the definition doesn't
+  behave ANSIly.)
 
 27:
   Sometimes (SB-EXT:QUIT) fails with 
@@ -878,6 +880,73 @@ Error in function C::GET-LAMBDA-TO-COMPILE:
   multiple-VALUES types. (Some issues related to this were discussed
   on cmucl-imp at some length sometime in 2000.)
 
+95:
+  The facility for dumping a running Lisp image to disk gets confused
+  when run without the PURIFY option, and creates an unnecessarily large
+  core file (apparently representing memory usage up to the previous
+  high-water mark). Moreover, when the file is loaded, it confuses the
+  GC, so that thereafter memory usage can never be reduced below that
+  level.
+
+96:
+  The TRACE facility can't be used on some kinds of functions.
+  (Basically, the breakpoint facility was incompletely implemented
+  in the X86 port of CMU CL, and hasn't been fixed in SBCL.)
+
+98:
+  In sbcl-0.6.11.41 (and in all earlier SBCL, and in CMU
+  CL), out-of-line structure slot setters are horribly inefficient
+  whenever the type of the slot is declared, because out-of-line
+  structure slot setters are implemented as closures to save space,
+  so the compiler doesn't compile the type test into code, but
+  instead just saves the type in a lexical closure and interprets it
+  at runtime.
+    A proper solution involves deciding whether it's really worth
+  saving space by implementing structure slot accessors as closures.
+  (If it's not worth it, the problem vanishes automatically. If it
+  is worth it, there are hacks we could use to force type tests to
+  be compiled anyway, and even shared. E.g. we could implement
+  an EQUAL hash table mapping from types to compiled type tests, 
+  and save the appropriate compiled type test as part of each lexical
+  closure; or we could make the lexical closures be placeholders
+  which overwrite their old definition as a lexical closure with
+  a new compiled definition the first time that they're called.)
+    As a workaround for the problem, #'(SETF FOO) expressions can
+  be replaced with (EFFICIENT-SETF-FUNCTION FOO), where
+(defmacro efficient-setf-function (place-function-name)
+  (or #+sbcl (and (sb-impl::info :function :accessor-for place-function-name)
+                 ;; a workaround for the problem, encouraging the
+                 ;; inline expansion of the structure accessor, so
+                 ;; that the compiler can optimize its type test
+                 (let ((new-value (gensym "NEW-VALUE-"))
+                        (structure-value (gensym "STRUCTURE-VALUE-")))
+                   `(lambda (,new-value ,structure-value)
+                      (setf (,place-function-name ,structure-value)
+                            ,new-value))))
+      ;; no problem, can just use the ordinary expansion
+      `(function (setf ,place-function-name))))
+
+99:
+  DESCRIBE interacts poorly with *PRINT-CIRCLE*, e.g. the output from 
+    (let ((*print-circle* t)) (describe (make-hash-table)))
+  is weird,
+    #<HASH-TABLE :TEST EQL :COUNT 0 {90BBFC5}> is an . (EQL)
+    Its SIZE is 16.
+    Its REHASH-SIZE is 1.5. Its REHASH-THRESHOLD is . (1.0)
+    It holds 0 key/value pairs.
+  where the ". (EQL)" and ". (1.0)" substrings are screwups.
+  (This is likely a pretty-printer problem which happens to
+  be exercised by DESCRIBE, not actually a DESCRIBE problem.)
+
+100:
+  There's apparently a bug in CEILING optimization which caused 
+  Douglas Crosher to patch the CMU CL version. Martin Atzmueller
+  applied the patches to SBCL and they didn't seem to cause problems
+  (as reported sbcl-devel 2001-05-04). However, since the patches
+  modify nontrivial code which was apparently written incorrectly
+  the first time around, until regression tests are written I'm not 
+  comfortable merging the patches in the CVS version of SBCL.
+
 
 KNOWN BUGS RELATED TO THE IR1 INTERPRETER