isn't too surprising since there are many differences in stack
implementation and GC conservatism between the X86 and other ports.)
+ (Can't reproduce on x86 linux as of 1.0.20.23 - MGL)
+
This is probably the same bug as 216
173:
the bad VECTOR-PUSH-EXTEND frame causes GC problems, though that may
not be the actual problem. (CMU CL 18c doesn't have problems with this.)
+ (Can't reproduce on x86 linux as of 1.0.20.22 - MGL)
+
This is probably the same bug as 162
235: "type system and inline expansion"
(fixed in 0.8.2.51, but a test case would be good)
-276:
- b. The same as in a., but using MULTIPLE-VALUE-SETQ instead of SETQ.
- c. (defvar *faa*)
- (defmethod faa ((*faa* double-float))
- (set '*faa* (when (< *faa* 0) (- *faa*)))
- (1+ *faa*))
- (faa 1d0) => type error
-
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)
(open "/dev/zero" :element-type '(unsigned-byte 1025))
gives an error in sbcl-0.8.10.
-325: "CLOSE :ABORT T on supeseding streams"
+325: "CLOSE :ABORT T on superseding streams"
Closing a stream opened with :IF-EXISTS :SUPERSEDE with :ABORT T leaves no
file on disk, even if one existed before opening.
in the wrapper, and then to update the instance just run through
all the old wrappers in order from oldest to newest.
-332: "fasl stack inconsistency in structure redefinition"
- (reported by Tim Daly Jr sbcl-devel 2004-05-06)
- Even though structure redefinition is undefined by the standard, the
- following behaviour is suboptimal: running
- (defun stimulate-sbcl ()
- (let ((filename (format nil "/tmp/~A.lisp" (gensym))))
- ;;create a file which redefines a structure incompatibly
- (with-open-file (f filename :direction :output :if-exists :supersede)
- (print '(defstruct astruct foo) f)
- (print '(defstruct astruct foo bar) f))
- ;;compile and load the file, then invoke the continue restart on
- ;;the structure redefinition error
- (handler-bind ((error (lambda (c) (continue c))))
- (load (compile-file filename)))))
- (stimulate-sbcl)
- and choosing the CONTINUE restart yields the message
- debugger invoked on a SB-INT:BUG in thread 27726:
- fasl stack not empty when it should be
-
336: "slot-definitions must retain the generic functions of accessors"
reported by Tony Martinez:
(defclass foo () ((bar :reader foo-bar)))
Expected: ERROR
Got: #<SB-MOP:STANDARD-DIRECT-SLOT-DEFINITION FOO>
-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
- can be intersected exactly, so that ASSERTs fail in this test case:
- (in-package :cl-user)
- (let ((types (mapcar #'sb-c::values-specifier-type
- '((values (vector package) &optional)
- (values (vector package) &rest t)
- (values (vector hash-table) &rest t)
- (values (vector hash-table) &optional)
- (values t &optional)
- (values t &rest t)
- (values nil &optional)
- (values nil &rest t)
- (values sequence &optional)
- (values sequence &rest t)
- (values list &optional)
- (values list &rest t)))))
- (dolist (x types)
- (dolist (y types)
- (let ((i (sb-c::values-type-intersection x y)))
- (assert (sb-c::type= i (sb-c::values-type-intersection i x)))
- (assert (sb-c::type= i (sb-c::values-type-intersection i y)))))))
-
370: reader misbehaviour on large-exponent floats
(read-from-string "1.0s1000000000000000000000000000000000000000")
causes the reader to attempt to create a very large bignum (which it
379: TRACE :ENCAPSULATE NIL broken on ppc/darwin
See commented-out test-case in debug.impure.lisp.
-380: Accessor redefinition fails because of old accessor name
- When redefining an accessor, SB-PCL::FIX-SLOT-ACCESSORS may try to
- find the generic function named by the old accessor name using
- ENSURE-GENERIC-FUNCTION and then remove the old accessor's method in
- the GF. If the old name does not name a function, or if the old name
- does not name a generic function, no attempt to find the GF or remove
- any methods is made.
-
- However, if an unrelated GF with an incompatible lambda list exists,
- the class redefinition will fail when SB-PCL::REMOVE-READER-METHOD
- tries to find and remove a method with an incompatible lambda list
- from the unrelated generic function.
-
382: externalization unexpectedly changes array simplicity
COMPILE-FILE and LOAD
(defun foo ()
385:
(format nil "~4,1F" 0.001) => "0.00" (should be " 0.0");
(format nil "~4,1@F" 0.001) => "+.00" (should be "+0.0").
+ (format nil "~E" 0.01) => "10.e-3" (should be "1.e-2");
+ (format nil "~G" 0.01) => "10.e-3" (should be "1.e-2");
386: SunOS/x86 stack exhaustion handling broken
According to <http://alfa.s145.xrea.com/sbcl/solaris-x86.html>, the
implementation of read circularity, using a symbol as a marker for
the previously-referenced object.
-415: Issues creating large arrays on x86-64/Linux and x86/Darwin
-
- (make-array (1- array-dimension-limit))
-
- causes a GC invariant violation on x86-64/Linux, and
- an unhandled SIGILL on x86/Darwin.
-
416: backtrace confusion
(defun foo (x)
419: stack-allocated indirect closure variables are not popped
- (locally (declare (optimize sb-c::stack-allocate-dynamic-extent
- sb-c::stack-allocate-value-cells))
(defun bug419 (x)
(multiple-value-call #'list
(eval '(values 1 2 3))
(let ((x x))
- (declare (dynamic-extent x))
+ (declare (sb-int:truly-dynamic-extent x))
(flet ((mget (y)
(+ x y))
(mset (z)
(incf x z)))
(declare (dynamic-extent #'mget #'mset))
- ((lambda (f g) (eval `(progn ,f ,g (values 4 5 6)))) #'mget #'mset))))))
+ ((lambda (f g) (eval `(progn ,f ,g (values 4 5 6)))) #'mget #'mset)))))
(ASSERT (EQUAL (BUG419 42) '(1 2 3 4 5 6))) => failure
- Note: as of SBCL 1.0.26.29 this bug no longer affects user code, as
- SB-C::STACK-ALLOCATE-VALUE-CELLS needs to be explicitly turned on for
- that to happen. Proper fix for this bug requires (Nikodemus thinks)
- storing the relevant LAMBDA-VARs in a :DYNAMIC-EXTENT cleanup, and
- teaching stack analysis how to deal with them.
+ Note: as of SBCL 1.0.16.29 this bug no longer affects user code, as
+ SB-INT:TRULY-DYNAMIC-EXTENT needs to be used instead of
+ DYNAMIC-EXTENT for this to happen. Proper fix for this bug requires
+ (Nikodemus thinks) storing the relevant LAMBDA-VARs in a
+ :DYNAMIC-EXTENT cleanup, and teaching stack analysis how to deal
+ with them.
421: READ-CHAR-NO-HANG misbehaviour on Windows Console:
(Test-case adapted from CL-PPCRE.)
-425: reading from closed streams
-
- Reported by Damien Cassou on sbcl-devel. REPL transcript follows:
-
- * (open ".bashrc" :direction :input)
- #<SB-SYS:FD-STREAM for "file /home/cassou/.bashrc" {A6ADFC9}>
- * (defparameter *s* *)
- *S*
- * (read-line *s*)
- "# -*- Mode: Sh -*-"
- * (read-line *s*)
- "# Files you make look like rw-r--r--"
- * (open-stream-p *s*)
- T
- * (close *s*)
- T
- * (open-stream-p *s*)
- NIL
- * (read-line *s*)
- "umask 022"
-
- The problem is with the fast path using ansi-stream-cin-buffer not hitting
- closed-flame.
-
-426: inlining failure involving multiple nested calls
-
- (declaim (inline foo))
- (defun foo (x y)
- (cons x y))
- (defun bar (x)
- (foo (foo x x) (foo x x)))
- ;; shows a full call to FOO
- (disassemble 'bar)
- ;; simple way to test this programmatically
- (let ((code (sb-c::fun-code-header #'bar))
- (foo (sb-impl::fdefinition-object 'foo nil)))
- (loop for i from sb-vm:code-constants-offset below (sb-kernel:get-header-data code)
- do (assert (not (eq foo (sb-kernel:code-header-ref code i))))))
-
- This appears to be an ancient bug, inherited from CMUCL: reportedly
- 18c does the same thing. RECOGNIZE-KNOWN-CALL correctly picks up only
- one of the calls, but local call analysis fails to inline the call
- for the second time. Nikodemus thinks (but is not 100% sure based on
- very brief investigation) that the call that is not inlined is the
- second nested one. A trivial fix is to call CHANGE-REF-LEAF in known
- call for functions already inline converted there, but he is not sure
- if this has adverse effects elsewhere.
-
-428: TIMER SCHEDULE-STRESS in timer.impure.lisp fails
+428: TIMER SCHEDULE-STRESS and PARALLEL-UNSCHEDULE in
+ timer.impure.lisp fails
Failure modes vary. Core problem seems to be (?) recursive entry to
RUN-EXPIRED-TIMERS.
+
+429: compiler hangs
+
+ Compiling a file with this contents makes the compiler loop in
+ ORDER-UVL-SETS:
+
+ (declaim (inline storage))
+ (defun storage (x)
+ (the (simple-array flt (*)) (unknown x)))
+
+ (defun test1 (lumps &key cg)
+ (let ((nodes (map 'list (lambda (lump) (storage lump))
+ lumps)))
+ (setf (aref nodes 0) 2)
+ (assert (every #'~= (apply #'concatenate 'list nodes) '(2 3 6 9)))))
+
+431: alien strucure redefinition doesn't work as expected
+ fixed in 1.0.21.29