-94:
- As reported by Christophe Rhodes on sbcl-devel 2001-03-28, the
- old declaration
- (declaim (ftype (function (list list symbol t) list) parse-deftransform))
- above DEFUN PARSE-DEFTRANSFORM was incorrect. The bad declaration was
- removed in sbcl-0.6.11.28, but the compiler problem remains: the compiler
- should've complained about the mismatch between the declaration and the
- definition, and didn't. (The compiler in cmucl-2.5.1 does detect the
- problem and complain.)
+94a:
+ Inconsistencies between derived and declared VALUES return types for
+ DEFUN aren't checked very well. E.g. the logic which successfully
+ catches problems like
+ (declaim (ftype (function (fixnum) float) foo))
+ (defun foo (x)
+ (declare (type integer x))
+ (values x)) ; wrong return type, detected, gives warning, good!
+ fails to catch
+ (declaim (ftype (function (t) (values t t)) bar))
+ (defun bar (x)
+ (values x)) ; wrong number of return values, no warning, bad!
+ The cause of this is seems to be that (1) the internal function
+ VALUES-TYPES-EQUAL-OR-INTERSECT used to make the check handles its
+ arguments symmetrically, and (2) when the type checking code was
+ written back when when SBCL's code was still CMU CL, the intent
+ was that this case
+ (declaim (ftype (function (t) t) bar))
+ (defun bar (x)
+ (values x x)) ; wrong number of return values; should give warning?
+ not be warned for, because a two-valued return value is considered
+ to be compatible with callers who expects a single value to be
+ returned. That intent is probably not appropriate for modern ANSI
+ Common Lisp, but fixing this might be complicated because of other
+ divergences between auld-style and new-style handling of
+ 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 wasn incompletely implemented
+ in the X86 port of CMU CL, and we haven't fixed it in SBCL.
+
+97:
+ FRESH-LINE doesn't seem to work properly within pretty-printed
+ output. E.g.
+ "~@<unhandled CONDITION (of type ~S): ~2I~_~A~:>~2%"
+ called on a CONDITION whose printer does
+ "~&~@<error in function ~S: ~3I~:_~?~:>"
+ gives two newlines between "unhandled CONDITION" and "error", when
+ (it at least seems as though) correct behavior would be to give one.