LOAD-FOREIGN, and (2) hunt for any other code which uses temporary
files and make it share the same new safe logic.
+ (partially alleviated in sbcl-0.7.9.32 by a fix by Matthew Danish to
+ make the temporary filename less easily guessable)
+
82:
Functions are assigned names based on the context in which they're
defined. This is less than ideal for the functions which are
isn't too surprising since there are many differences in stack
implementation and GC conservatism between the X86 and other ports.)
-166:
- Compiling
- (in-package :cl-user)
- (defstruct uustk)
- (defmethod permanentize ((uustk uustk))
- (flet ((frob (hash-table test-for-deletion)
- )
- (obj-entry.stale? (oe)
- (destructuring-bind (key . datum) oe
- (declare (type simple-vector key))
- (deny0 (void? datum))
- (some #'stale? key))))
- (declare (inline frob obj-entry.stale?))
- (frob (uustk.args-hash->obj-alist uustk)
- #'obj-entry.stale?)
- (frob (uustk.hash->memoized-objs-list uustk)
- #'objs.stale?))
- (call-next-method))
- in sbcl-0.7.3.11 causes an assertion failure,
- failed AVER:
- "(NOT
-(AND (NULL (BLOCK-SUCC B))
- (NOT (BLOCK-DELETE-P B))
- (NOT (EQ B (COMPONENT-HEAD #)))))"
-
167:
In sbcl-0.7.3.11, compiling the (illegal) code
(in-package :cl-user)
macro is unhappy with the illegal syntax in the method body, and
is giving an unclear error message.
-172:
- sbcl's treatment of at least macro lambda lists is too permissive;
- e.g., in sbcl-0.7.3.7:
- (defmacro foo (&rest rest bar) `(,bar ,rest))
- (macroexpand '(foo quux zot)) -> (QUUX (QUUX ZOT))
- whereas section 3.4.4 of the CLHS doesn't allow required parameters
- to come after the rest argument.
-
173:
The compiler sometimes tries to constant-fold expressions before
it checks to see whether they can be reached. This can lead to
returns (1 2 3) instead of signalling an error. This was fixed by
APD's "more strict type checking patch", but although the fixed
code (in sbcl-0.7.7.19) works (signals TYPE-ERROR) interactively,
- it's difficult to write a regression test for it, because
+ it's difficult to write a regression test for it, because
(IGNORE-ERRORS (MULTIPLE-VALUE-PROG1 (PROGN (THE REAL '(1 2 3)))))
still returns (1 2 3).
- still-broken parts:
- b. (IGNORE-ERRORS (MULTIPLE-VALUE-PROG1 (PROGN (THE REAL '(1 2 3)))))
+ still-broken parts:
+ b. (IGNORE-ERRORS (MULTIPLE-VALUE-PROG1 (PROGN (THE REAL '(1 2 3)))))
returns (1 2 3). (As above, this shows up when writing regression
tests for fixed-ness of part a.)
c. Also in sbcl-0.7.7.9, (IGNORE-ERRORS (THE REAL '(1 2 3))) => (1 2 3).
29-bit pseudorandom numbers?
208: "package confusion in PCL handling of structure slot handlers"
- In sbcl-0.7.8 compiling and loading
+ In sbcl-0.7.8 compiling and loading
(in-package :cl)
(defstruct foo (slot (error "missing")) :type list :read-only t)
(defmethod print-object ((foo foo) stream) (print nil stream))
; in: LAMBDA NIL
; (FOO :Y 1 :Y 2)
- ;
+ ;
; caught STYLE-WARNING:
; The variable #:G15 is defined but never used.
given an error instead (ANSI 17.1.1 allows this behaviour on the part
of the implementation, as conforming code cannot give non-proper
sequences to these functions. MAP also has this problem (and
- solution), though arguably the convenience of being able to do
- (MAP 'LIST '+ FOO '#1=(1 . #1#))
+ solution), though arguably the convenience of being able to do
+ (MAP 'LIST '+ FOO '#1=(1 . #1#))
might be classed as more important (though signalling an error when
all of the arguments are circular is probably desireable).
213: "Sequence functions and type checking"
a. MAKE-SEQUENCE, COERCE, MERGE and CONCATENATE cannot deal with
- various complicated, though recognizeable, CONS types [e.g.
+ various complicated, though recognizeable, CONS types [e.g.
(CONS * (CONS * NULL))
which according to ANSI should be recognized] (and, in SAFETY 3
code, should return a list of LENGTH 2 or signal an error)
(CONS INTEGER *)
whether or not the return value is of this type. This is
probably permitted by ANSI (see "Exceptional Situations" under
- ANSI MAKE-SEQUENCE), but the DERIVE-TYPE mechanism does not
+ ANSI MAKE-SEQUENCE), but the DERIVE-TYPE mechanism does not
know about this escape clause, so code of the form
(INTEGERP (CAR (MAKE-SEQUENCE '(CONS INTEGER *) 2)))
can erroneously return T.
219: "DEFINE-COMPILER-MACRO in non-toplevel contexts evaluated at compile-time"
In sbcl-0.7.9:
- * (defun foo (x)
+ * (defun foo (x)
(when x
(define-compiler-macro bar (&whole whole)
(declare (ignore whole))
* (baz t)
1
-220:
+220:
Sbcl 0.7.9 fails to compile
(multiple-value-call #'list
arguments, but it could be tricky to check result types of PROG1, IF
etc.
-221:
- Sometime between sbcl-0.7.8.51 and sbcl-0.7.9.5 the system lost the
- ability to compile
- (declaim (ftype (function (fixnum) (values package boolean)) f1))
- (declaim (ftype (function (t) (values package boolean)) f2))
- (defun ow (b x)
- (funcall (if b #'f1 #'f2) x))
- Now the compiler dies with
- SUBTYPEP is illegal on this type: (VALUES PACKAGE (MEMBER T NIL))
- apparently when attempting to infer the type of the IF expression.
+222: "environment problems in PCL"
+ Evaluating
+
+ (symbol-macrolet ((x 1))
+ (defmethod foo (z)
+ (macrolet ((ml (form) `(progn ,form ,x)))
+ (ml (print x)))))
+
+ causes
+
+ debugger invoked on condition of type UNBOUND-VARIABLE:
+ The variable X is unbound.
+
+223: "(SETF FDEFINITION) and #' semantics broken for wrappers"
+ Although this
+ (defun foo (x)
+ (print x))
+ (defun traced (fn)
+ (lambda (&rest rest)
+ (format t "~&about to call ~S on ~S~%" fn rest)
+ (apply fn rest)
+ (format t "~&returned from ~S~%" fn)))
+ (setf (fdefinition 'foo)
+ (traced #'foo))
+ (foo 11)
+ does what one would expect, this
+ (defun bar (x)
+ (print x))
+ (let ((bar0 #'bar))
+ (setf (fdefinition 'bar)
+ (lambda (&rest rest)
+ (format t "~&about to enter BAR ~S~%" rest)
+ (apply bar0 rest)
+ (format t "~&back from BAR~%"))))
+ (bar 12)
+ recurses endlessly in sbcl-0.7.9.32. (Or it works if #' and
+ FDEFINITION are replaced by SYMBOL-FUNCTION.)
+
+224:
+ SBCL 0.7.8 fails to compile
+
+ (localy (declare (optimize (safety 3)))
+ (ignore-errors (progn (values-list (car (list '(1 . 2)))) t)))
+
+225:
+ (fixed in 0.7.9.42)
+
+226: "AVER failure in COMPILE-FILE of clocc-ansi-test/tests.lisp"
+ sbcl-0.7.9.43 dies with failed AVER "(EQ (TN-PHYSENV TN) TN-ENV)" when
+ trying to compile clocc-ansi-test/tests.lisp. sbcl-0.7.9.31 was able to
+ to compile it. A smaller test case exhibiting the same problem is
+ (declaim (optimize (speed 0) (safety 3) (debug 3)))
+ (defun c-a-p ()
+ (flet ((safe-format (stream string &rest r)
+ (unless (ignore-errors (progn
+ (apply #'format stream string r)
+ t))
+ (format stream "~&foo ~S" string))))
+ (cond
+ ((eq my-result :ERROR)
+ (cond
+ ((ignore-errors (typep condition result))
+ (safe-format t "~&bar ~S" result))
+ (t
+ (safe-format t "~&baz ~S (~A) ~S" condition condition result)))))))
DEFUNCT CATEGORIES OF BUGS