* This turned out to be a bug in the gencgc guts,
looks_like_valid_lisp_pointer_p() was doing pointer arithmetic
when it should have been converting the pointer to an integer.
correctly, even on wide-fixnum builds. (lp#887220)
* bug fix: (directory "foo/*/*.*") did not follow symlinks in foo/ that
resolved to directories.
+ * bug fix: SB-KERNEL:MAKE-LISP-OBJ on GENCGC no longer categorically
+ refuses to create SIMPLE-FUN objects.
changes in sbcl-1.0.53 relative to sbcl-1.0.52:
* enhancement: on 64-bit targets, in src/compiler/generic/early-vm.lisp,
case CODE_HEADER_WIDETAG:
/* Make sure we actually point to a function in the code object,
* as opposed to a random point there. */
- if (SIMPLE_FUN_HEADER_WIDETAG==widetag_of(*(pointer-FUN_POINTER_LOWTAG)))
+ if (SIMPLE_FUN_HEADER_WIDETAG==widetag_of(*((lispobj *)(((unsigned long)pointer)-FUN_POINTER_LOWTAG))))
return 1;
else
return 0;
;; unconditional, in case either previous left it enabled
(disable-debugger)
+\f
+;;;; test some limitations of MAKE-LISP-OBJ
+
+;;; Older GENCGC systems had a bug in the pointer validation used by
+;;; MAKE-LISP-OBJ that made SIMPLE-FUN objects always fail to
+;;; validate.
+(with-test (:name (make-lisp-obj :simple-funs))
+ (sb-sys:without-gcing
+ (assert (eq #'identity
+ (sb-kernel:make-lisp-obj
+ (sb-kernel:get-lisp-obj-address
+ #'identity))))))
(write-line "/debug.impure.lisp done")