-258: "TYPE-ERROR when recursive LABELS function is declared INLINE"
- The compiler does emit a helpful
- ; note: couldn't inline expand because expansion calls this
- ; LET-converted local function:
- ; "LABELS COMMON-LISP-USER::C.FROB"
- but still shouldn't fail with a TYPE-ERROR
- The value NIL is not of type SB-C::NODE.
- when compiling
- (cl:in-package :cl-user)
- (declaim (optimize (safety 3) (speed 2) (space 1)))
- (defvar *foo*)
- (defvar *bar*)
- (defun u-b-sra (x r ad0 &optional ad1 &rest ad-list)
- (labels ((c.frob (c0)
- (let ()
- (when *foo*
- (vector-push-extend c0 *bar*))))
- (ad.frob (ad)
- (if *foo*
- (map nil #'ad.frob (the (vector t) *bar*))
- (dolist (b *bar*)
- (c.frob b)))))
- (declare (inline c.frob ad.frob)) ; 'til DYNAMIC-EXTENT
- (ad.frob ad0)))
+ Another problem is confusing error message "asserted type ARRAY
+ conflicts with derived type (VALUES SIMPLE-VECTOR &OPTIONAL)" during
+ compiling (LAMBDA (V) (VALUES (SVREF V 0) (VECTOR-POP V))).
+
+ The last problem is that when type assertions are converted to type
+ checks, types are represented with type specifiers, so we could lose
+ complex attribute. (Now this is probably not important, because
+ currently checks for complex arrays seem to be performed by
+ callees.)
+
+259:
+ (compile nil '(lambda () (aref (make-array 0) 0))) compiles without
+ warning. Analogous cases with the index and length being equal and
+ greater than 0 are warned for; the problem here seems to be that the
+ type required for an array reference of this type is (INTEGER 0 (0))
+ which is canonicalized to NIL.
+
+260:
+ a.
+ (let* ((s (gensym))
+ (t1 (specifier-type s)))
+ (eval `(defstruct ,s))
+ (type= t1 (specifier-type s)))
+ => NIL, NIL
+
+ (fixed in 0.8.1.24)
+
+ b. The same for CSUBTYPEP.
+
+261:
+ * (let () (list (the (values &optional fixnum) (eval '(values)))))
+ debugger invoked on condition of type TYPE-ERROR:
+ The value NIL is not of type FIXNUM.
+
+262: "yet another bug in inline expansion of local functions"
+ Compiler fails on
+
+ (defun foo (x y)
+ (declare (integer x y))
+ (+ (block nil
+ (flet ((xyz (u)
+ (declare (integer u))
+ (if (> (1+ (the unsigned-byte u)) 0)
+ (+ 1 u)
+ (return (+ 38 (cos (/ u 78)))))))
+ (declare (inline xyz))
+ (return-from foo
+ (* (funcall (eval #'xyz) x)
+ (if (> x 30)
+ (funcall (if (> x 5) #'xyz #'identity)
+ (+ x 13))
+ 38)))))
+ (sin (* x y))))
+
+ Urgh... It's time to write IR1-copier.
+
+265:
+ SB-EXT:RUN-PROGRAM is currently non-functional on Linux/PPC;
+ attempting to use it leads to segmentation violations. This is
+ probably because of a bogus implementation of
+ os_restore_fp_control().
+
+266:
+ David Lichteblau provided (sbcl-devel 2003-06-01) a patch to fix
+ behaviour of streams with element-type (SIGNED-BYTE 8). The patch
+ looks reasonable, if not obviously correct; however, it caused the
+ PPC/Linux port to segfault during warm-init while loading
+ src/pcl/std-class.fasl. A workaround patch was made, but it would
+ 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:
+
+ (locally (declare (optimize (safety 3)))
+ (flet ((foo (x &optional (y (car x)))
+ (declare (optimize (safety 0)))
+ (list x y)))
+ (funcall (eval #'foo) 1)))