although the name of the uninitialized-element placeholder will
be shorter.
+ The same thing happens if the compiler macro expansion of
+ EVERY into MAP is hand-expanded:
+ (defun bar2 (dims)
+ (if (block blockname
+ (map nil
+ (lambda (dim)
+ (let ((pred-value (funcall #'integerp dim)))
+ (unless pred-value
+ (return-from blockname
+ nil))))
+ dims)
+ t)
+ 1
+ 2))
+ CMU CL doesn't have this compiler macro expansion, so it was
+ immune to the original bug in BAR, but once we hand-expand it
+ into BAR2, CMU CL 18c has the same bug. (Run (BAR '(NIL NIL)).)
+
+ The native compiler handles it fine, both in SBCL and in CMU CL.
KNOWN BUGS RELATED TO THE IR1 INTERPRETER
#!+x86
(defun find-escaped-frame (frame-pointer)
(declare (type system-area-pointer frame-pointer))
-
- ;; FIXME: These conditionals are a hack to get the system to
- ;; bootstrap itself despite a byte interpreter/compiler bug. Without
- ;; it, the byte interpreter blows up when trying to cross-compile
- ;; this function, hitting #:UNINITIALIZED-EVAL-STACK-ELEMENT while
- ;; executing (SB-XC:MACRO-FUNCTION 'SB!EXT:WITH-ALIEN).
- #+sb-xc (values nil 0 nil) #-sb-xc ; REMOVEME
(dotimes (index *free-interrupt-context-index* (values nil 0 nil))
(sb!alien:with-alien
((lisp-interrupt-contexts (array (* os-context-t) nil)
(dimensions (required-argument) :type list))
(def-alien-type-translator array (ele-type &rest dims &environment env)
+
+ ;; This declaration is a workaround for bug 119, which causes the
+ ;; EVERY #'INTEGERP expression below to be compiled incorrectly
+ ;; by the byte compiler. Since as of sbcl-0.pre7.x we are using
+ ;; the byte compiler to do all the tricky stuff for the 'interpreter',
+ ;; and since we use 'interpreted' definitions of these type translators
+ ;; at cross-compilation time, this means that cross-compilation
+ ;; doesn't work properly unless we force this function to be
+ ;; native compiled instead of byte-compiled.
+ ;;
+ ;; FIXME: So, when bug 119 is fixed, this declaration can go away.
+ (declare (optimize (speed 2))) ; i.e. not byte-compiled
+
(when dims
(unless (typep (first dims) '(or index null))
(error "The first dimension is not a non-negative fixnum or NIL: ~S"
(ecase (cleanup-kind (nlx-info-cleanup nlx-info))
((:catch :unwind-protect)
(consume :nlx-entry))
- ;; If for a lexical exit, we will see a breakup later, so
- ;; don't consume :NLX-ENTRY now.
+ ;; If for a lexical exit, we will see a breakup
+ ;; later, so don't consume :NLX-ENTRY now.
(:tagbody)
(:block
(let ((cont (nlx-info-continuation nlx-info)))
;; Process all of the lambdas in component, and assign stack frame
;; locations for all the locals.
(dolist (lambda (component-lambdas component))
- ;; We don't generate any code for :external lambdas, so we don't need
- ;; to allocate stack space. Also, we don't use the ``more'' entry,
- ;; so we don't need code for it.
+ ;; We don't generate any code for :EXTERNAL lambdas, so we don't
+ ;; need to allocate stack space. Also, we don't use the ``more''
+ ;; entry, so we don't need code for it.
(cond
((or (eq (lambda-kind lambda) :external)
(and (eq (lambda-kind lambda) :optional)
;; stay in the argument area and which need to be moved into locals.
(assign-locals component)
- ;; Annotate every continuation with information about how we want the
- ;; values.
+ ;; Annotate every continuation with information about how we want
+ ;; the values.
(annotate-ir1 component)
- ;; Determine what stack values are dead, and emit cleanup code to pop
- ;; them.
+ ;; Determine what stack values are dead, and emit cleanup code to
+ ;; pop them.
(byte-stack-analyze component)
;; Make sure any newly added blocks have a block-number.
;;; four numeric fields, is used for versions which aren't released
;;; but correspond only to CVS tags or snapshots.
-"0.pre7.14.flaky4.8"
+"0.pre7.14.flaky4.9"