But please do fix some or all of the problem, I'm tired
of messing with it. -- WHN 2001-12-22
+138:
+ a cross-compiler bug in sbcl-0.pre7.107
+
+ $ cat > /tmp/bug139.lisp << EOF
+ (in-package "SB!KERNEL")
+ (defun f-c-l (name parent-types)
+ (let* ((cpl (mapcar (lambda (x)
+ (condition-class-cpl x))
+ parent-types))
+ (new-inherits
+ (concatenate 'simple-vector
+ (layout-inherits cond-layout))))
+ (if (not (mismatch (layout-inherits olayout) new-inherits))
+ olayout
+ (make-layout))))
+ EOF
+ $ sbcl --core output/after-xc.core
+ ...
+ * (target-compile-file "/tmp/bug139.lisp")
+ ...
+ internal error, failed AVER:
+ "(COMMON-LISP:MEMBER SB!C::FUN (SB!C::COMPONENT-LAMBDAS SB!C:COMPONENT))"
+
+ It seems as though this xc bug is likely to correspond to a bug in the
+ ordinary compiler, but I haven't yet found a test case which causes
+ this problem in the ordinary compiler.
+
+ related weirdness: Using #'(LAMBDA (X) ...) instead of (LAMBDA (X) ...)
+ makes the assertion failure go away.
+
+139:
+ In sbcl-0.pre7.107, (DIRECTORY "*.*") is broken, as reported by
+ Nathan Froyd sbcl-devel 2001-12-28.
+
+ Christophe Rhodes suggested (sbcl-devel 2001-12-30) converting
+ the MERGED-PATHNAME expression in DEFUN DIRECTORY to
+ (merged-pathname (merge-pathnames pathname
+ *default-pathname-defaults*))
+ This looks right, and fixes this bug, but it interacts with the NODES
+ logic in %ENUMERATE-PATHNAMES to create a new bug, so that
+ (DIRECTORY "../**/*.*") no longer shows files in the current working
+ directory. Probably %ENUMERATE-PATHNAMES (or related logic like
+ %ENUMERATE-MATCHES) needs to be patched as well.
+
+ Note: The MERGED-PATHNAME change changes behavior incompatibly,
+ making e.g. (DIRECTORY "*") no longer equivalent to (DIRECTORY "*.*"),
+ so deserves a NEWS entry. E.g.
+* minor incompatible change (part of a bug fix by Christophe Rhodes
+ to DIRECTORY behavior): DIRECTORY no longer implicitly promotes
+ NIL slots of its pathname argument to :WILD, and in particular
+ asking for the contents of a directory, which you used to be able
+ to do without explicit wildcards, e.g. (DIRECTORY "/tmp/"),
+ now needs explicit wildcards, e.g. (DIRECTORY "/tmp/*.*").
+
KNOWN BUGS RELATED TO THE IR1 INTERPRETER
(eval-when (:compile-toplevel :load-toplevel :execute)
(/show0 "condition.lisp 103")
(let ((condition-class (locally
- ;; KLUDGE: There's a FIND-CLASS DEFTRANSFORM for
+ ;; KLUDGE: There's a DEFTRANSFORM FIND-CLASS for
;; constant class names which creates fast but
;; non-cold-loadable, non-compact code. In this
;; context, we'd rather have compact, cold-loadable
(/show0 "condition.lisp 103"))
(setf (condition-class-report (locally
- ;; KLUDGE: There's a FIND-CLASS DEFTRANSFORM
+ ;; KLUDGE: There's a DEFTRANSFORM FIND-CLASS
;; for constant class names which creates fast
;; but non-cold-loadable, non-compact code. In
;; this context, we'd rather have compact,
(let ((directory (pathname-directory pathname)))
(/noshow0 "computed DIRECTORY")
(if directory
- (ecase (car directory)
+ (ecase (first directory)
(:absolute
(/noshow0 "absolute directory")
- (%enumerate-directories "/" (cdr directory) pathname
+ (%enumerate-directories "/" (rest directory) pathname
verify-existence follow-links
nil function))
(:relative
(/noshow0 "relative directory")
- (%enumerate-directories "" (cdr directory) pathname
+ (%enumerate-directories "" (rest directory) pathname
verify-existence follow-links
nil function)))
(%enumerate-files "" pathname verify-existence function))))
;; can arise when e.g. multiple symlinks map to the same
;; truename).
(truenames (make-hash-table :test #'equal))
+ ;; FIXME: not really right, as per bug 139
(merged-pathname (merge-pathnames pathname
(make-pathname :name :wild
:type :wild
;; function as far as the debugger is concerned.
(environment-start nil :type (or label null)))
(defprinter (ir2-physenv)
- environment
+ closure
old-fp
return-pc
return-pc-pass)
;;; In sbcl-0.6.9 DIRECTORY failed on paths with :WILD or
;;; :WILD-INFERIORS in their directory components.
-(let ((dir (directory "../**/*")))
+(let ((dir (directory "../**/*.*")))
;; We know a little bit about the structure of this result;
;; let's test to make sure that this test file is in it.
(assert (find-if (lambda (pathname)
dir)))
;;; ANSI: FILE-LENGTH should signal an error of type TYPE-ERROR if
-;;; stream is not a stream associated with a file.
+;;; STREAM is not a stream associated with a file.
;;;
;;; (Peter Van Eynde's ansi-test suite caught this, and Eric Marsden
;;; reported a fix for CMU CL, which was ported to sbcl-0.6.12.35.)
#p\"$testdir/test-2.tmp\")"
$SBCL <<EOF
(in-package :cl-user)
- (let* ((directory (directory "./*"))
+ (let* ((directory (directory "./*.*"))
(truenames (sort directory #'string< :key #'pathname-name)))
(format t "~&TRUENAMES=~S~%" truenames)
(finish-output)
cd ..
$SBCL <<EOF
(in-package :cl-user)
- (let* ((directory (directory "$testdir/*"))
+ (let* ((directory (directory "$testdir/*.*"))
(truenames (sort directory #'string< :key #'pathname-name)))
(format t "~&TRUENAMES=~S~%" truenames)
(finish-output)
;;; for internal versions, especially for internal versions off the
;;; main CVS branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
-"0.pre7.106"
+"0.pre7.107"