then requesting a BACKTRACE at the debugger prompt gives no information
about where in the user program the problem occurred.
- (this is apparently mostly fixed on the SPARC and PPC architectures:
- while giving the backtrace the system complains about "unknown
+ (this is apparently mostly fixed on the SPARC, PPC, and x86 architectures:
+ while giving the backtrace the non-x86 systems complains about "unknown
source location: using block start", but apart from that the
- backtrace seems reasonable. See tests/debug.impure.lisp for a test
- case)
+ backtrace seems reasonable. On x86 this is masked by bug 353. See
+ tests/debug.impure.lisp for a test case)
64:
Using the pretty-printer from the command prompt gives funny
conformance problem, since seems hard to construct useful code
where it matters.)
+ [ partially fixed by CSR in 0.8.17.17 because of a PFD ansi-tests
+ report that (COMPLEX RATIO) was failing; still failing on types of
+ the form (AND NUMBER (SATISFIES REALP) (SATISFIES ZEROP)). ]
+
b. (fixed in 0.8.3.43)
146:
b. The same for CSUBTYPEP.
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.
+ During inline expansion of a local function Python can try to
+ reference optimized away objects (functions, variables, CTRANs from
+ tags and blocks), which later may lead to problems. Some of the
+ cases are worked around by forbidding expansion in such cases, but
+ the better way would be to reimplement inline expansion by copying
+ IR1 structures.
266:
David Lichteblau provided (sbcl-devel 2003-06-01) a patch to fix
gives the error
failed AVER: "(NOT (AND (NOT EQUALP) CERTAINP))"
-302: Undefined type messes up DATA-VECTOR-REF expansion.
- Compiling this file
- (defun dis (s ei x y)
- (declare (type (simple-array function (2)) s) (type ei ei))
- (funcall (aref s ei) x y))
- on sbcl-0.8.7.36/X86/Linux causes a BUG to be signalled:
- full call to SB-KERNEL:DATA-VECTOR-REF
-
303: "nonlinear LVARs" (aka MISC.293)
(defun buu (x)
(multiple-value-call #'list
collect `(array ,(sb-vm:saetp-specifier x)))))
=> NIL, T (when it should be T, T)
-308: "Characters without names"
- (reported by Bruno Haible sbcl-devel "character names are missing"
- 2004-04-19)
- (graphic-char-p (code-char 255))
- => NIL
- (char-name (code-char 255))
- => NIL
-
- SBCL is unsure of what to do about characters with codes in the
- range 128-255. Currently they are treated as non-graphic, but don't
- have names, which is not compliant with the standard. Various fixes
- are possible, such as
- * giving them names such as NON-ASCII-128;
- * reducing CHAR-CODE-LIMIT to 127 (almost certainly unpopular);
- * making the characters graphic (makes a certain amount of sense);
- * biting the bullet and implementing Unicode (probably quite hard).
-
309: "Dubious values for implementation limits"
(reported by Bruno Haible sbcl-devel "Incorrect value of
multiple-values-limit" 2004-04-19)
in the wrapper, and then to update the instance just run through
all the old wrappers in order from oldest to newest.
-331: "lazy creation of CLOS classes for user-defined conditions"
- (defstruct foo)
- (defstruct (bar (:include foo)))
- (sb-mop:class-direct-subclasses (find-class 'foo))
- returns NIL, rather than a singleton list containing the BAR class.
-
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
(it is likely that the fault lies in PPRINT-LOGICAL-BLOCK, as
suggested by the suggested implementation of PPRINT-TABULAR)
-342: PPRINT-TABULAR / PPRINT-LOGICAL-BLOCK logical block start position
- The logical block introduced by PPRINT-LOGICAL-BLOCK should not
- include the prefix, so that
- (pprint-tabular *standard-output* '(1 2 3) t nil 2)
- should print
- "(1 2 3)" rather than "(1 2 3)".
-
343: MOP:COMPUTE-DISCRIMINATING-FUNCTION overriding causes error
Even the simplest possible overriding of
COMPUTE-DISCRIMINATING-FUNCTION, suggested in the PCL implementation
(Note: there's at least one dubious thing in room.lisp: see the
comment in VALID-OBJ)
-345: backtrace on x86 undefined function
- In sbcl-0.8.13 (and probably earlier versions), code of the form
- (flet ((test () (#:undefined-fun 42)))
- (funcall #'test))
- yields the debugger with a poorly-functioning backtrace. Brian
- Downing fixed most of the problems on non-x86 architectures, but on
- the x86 the backtrace from this evaluation does not reveal anything
- about the problem. (See tests in debug.impure.lisp)
-
346: alpha backtrace
In sbcl-0.8.13, all backtraces from errors caused by internal errors
on the alpha seem to have a "bogus stack frame".
pprinter and only truncated at output? (So that indenting by 1/2
then 3/2 would indent by two spaces, not one?)
-350: heap overflow when printing bignums
- (reported by Bruno Haible 2004-10-08)
- In sbcl-0.8.15.18,
- * (DEFPARAMETER *BIG* (ASH 1 1000000))
- *BIG*
- * (PRINT *BIG*)
- Argh! gc_find_freeish_pages failed (restart_page), nbytes=110152.
- It should be straightforward to push the heap overflow threshold
- up to much larger bignums; Paul Dietz pointed out it would help to
- use a bignum-printing algorithm which bisected the printed number,
- rather than stripping off digits one by one, and CSR suggested using
- iteration rather than recursion to encourage intermediate results
- to be GCed.
-
-351: suboptimal error handling/reporting when compiling (PUSH (LET ...))
- In sbcl-0.8.15.18,
- * (defvar *b*)
- *B*
- * (defun oops ()
- (push *b*
- (let ((b *b*))
- (aref b 1))))
- causes the compiler to die with a TYPE-ERROR in SB-C::EXTRACT-LET-VARS,
- The value #:G4 is not of type LIST.
- Since the (LET ...) expression is being misused in PUSH as a
- SETFable place, it would be more helpful to fail as in
- * (defun oops2 () (setf (let ((b *b*)) (aref b 1)) *b*))
- with compilation errors and warnings like
- ; in: LAMBDA NIL
- ; ((B *B*))
- ; caught ERROR:
- ; illegal function call
- and
- ; caught WARNING:
- ; The function (SETF LET) is undefined, and its name is reserved
- ; by ANSI CL so that even if it were defined later, the code
- ; doing so would not be portable.
+352: forward-referenced-class trouble
+ reported by Bruno Haible on sbcl-devel
+ (defclass c (a) ())
+ (setf (class-name (find-class 'a)) 'b)
+ (defclass a () (x))
+ (defclass b () (y))
+ (make-instance 'c)
+ Expected: an instance of c, with a slot named x
+ Got: debugger invoked on a SIMPLE-ERROR in thread 78906:
+ While computing the class precedence list of the class named C.
+ The class named B is a forward referenced class.
+ The class named B is a direct superclass of the class named C.
+
+353: debugger suboptimalities on x86
+ On x86 backtraces for undefined functions start with a bogus stack
+ frame, and backtraces for throws to unknown catch tags with a "no
+ debug information" frame. These are both due to CODE-COMPONENT-FROM-BITS
+ (used on non-x86 platforms) being a more complete solution then what
+ is done on x86.
+
+ More generally, the debugger internals suffer from excessive x86/non-x86
+ conditionalization and OAOOMization: refactoring the common parts would
+ be good.
+
+354: XEPs in backtraces
+ Under default compilation policy
+ (defun test ()
+ (throw :unknown t))
+ (test)
+ Has the XEP for TEST in the backtrace, not the TEST frame itself.
+ (sparc and x86 at least)