0.7.1.22:
authorWilliam Harold Newman <william.newman@airmail.net>
Wed, 20 Feb 2002 18:41:51 +0000 (18:41 +0000)
committerWilliam Harold Newman <william.newman@airmail.net>
Wed, 20 Feb 2002 18:41:51 +0000 (18:41 +0000)
merged CSR patch I and II: "CATCH and gc" 2002-02-18
merged CSR patch III: "lowtag horribleness" 2002-02-19

BUGS
src/compiler/alpha/nlx.lisp
src/compiler/generic/early-objdef.lisp
src/compiler/sparc/nlx.lisp
src/runtime/gc.c
version.lisp-expr

diff --git a/BUGS b/BUGS
index 0f4e0ce..7f00c53 100644 (file)
--- a/BUGS
+++ b/BUGS
@@ -1299,6 +1299,25 @@ WORKAROUND:
   them as TYPE-ERRORs (reporting the problem as something not being
   coerceable to a function).
 
+153:
+  (essentially the same problem as a CMU CL bug reported by Martin
+  Cracauer on cmucl-imp 2002-02-19)
+  There is a hole in structure slot type checking. Compiling and LOADing
+    (declaim (optimize safety))
+    (defstruct foo
+      (bla 0 :type fixnum))
+    (defun f ()
+      (let ((foo (make-foo)))
+        (setf (foo-bla foo) '(1 . 1))
+        (format t "Is ~a of type ~a a cons? => ~a~%"
+                (foo-bla foo)
+                (type-of (foo-bla foo))
+                (consp (foo-bla foo)))))
+    (f)
+  should signal an error, but in sbcl-0.7.1.21 instead gives the output
+    Is (1 . 1) of type CONS a cons? => NIL
+  without signalling an error.
+
 
 DEFUNCT CATEGORIES OF BUGS
   IR1-#:
index 654d39d..e11c746 100644 (file)
 ;;; specified tag, and link the block into the Current-Catch list.
 (define-vop (make-catch-block)
   (:args (tn)
-        (tag :scs (descriptor-reg)))
+        (tag :scs (any-reg descriptor-reg)))
   (:info entry-label)
   (:results (block :scs (any-reg)))
   (:temporary (:scs (descriptor-reg)) temp)
index 7407e4a..fb4deda 100644 (file)
 ;;;   * LIST-POINTER-LOWTAG + 4 = OTHER-POINTER-LOWTAG: NIL is both a
 ;;;     cons and a symbol (at the same address) and depends on this.
 ;;;     See the definition of SYMBOL in objdef.lisp
+;;;   * OTHER-POINTER-LOWTAG > 4: Some code in the SPARC backend,
+;;;     which uses bit 2 of the ALLOC register to indicate that
+;;;     PSEUDO-ATOMIC is on, doesn't strip the low bits of reg_ALLOC
+;;;     before ORing in OTHER-POINTER-LOWTAG within a PSEUDO-ATOMIC
+;;;     section.
+;;; (These are just the ones we know about as of sbcl-0.7.1.22. There
+;;; might easily be more, since these values have stayed highly
+;;; constrained for more than a decade, an inviting target for
+;;; inventive abstraction-phobic maintainers.:-)
 (eval-when (:compile-toplevel :load-toplevel :execute)
   ;; The EVAL-WHEN is necessary (at least for Lispworks), because the
   ;; second DEFENUM uses the value of OTHER-IMMEDIATE-0-LOWTAG, which is
index 2b63b13..5e67c47 100644 (file)
 ;;; link the block into the Current-Catch list.
 (define-vop (make-catch-block)
   (:args (tn)
-        (tag :scs (descriptor-reg)))
+        (tag :scs (any-reg descriptor-reg)))
   (:info entry-label)
   (:results (block :scs (any-reg)))
   (:temporary (:scs (descriptor-reg)) temp)
index 06b8d26..fdf9ed1 100644 (file)
@@ -28,9 +28,8 @@
 #include "interr.h"
 
 /* So you need to debug? */
-#define PRINTNOISE
-#define DEBUG_SPACE_PREDICATES
 #if 0
+#define PRINTNOISE
 #define DEBUG_SPACE_PREDICATES
 #define DEBUG_SCAVENGE_VERBOSE
 #define DEBUG_COPY_VERBOSE
@@ -511,7 +510,9 @@ scavenge_interrupt_context(os_context_t *context)
 #ifdef ARCH_HAS_NPC_REGISTER
        unsigned long npc_code_offset;
 #endif
+#ifdef DEBUG_SCAVENGE_VERBOSE
        fprintf(stderr, "Scavenging interrupt context at 0x%x\n",context);
+#endif
        /* Find the LIP's register pair and calculate its offset */
        /* before we scavenge the context. */
 #ifdef reg_LIP
@@ -603,7 +604,9 @@ void scavenge_interrupt_contexts(void)
 
     index = fixnum_value(SymbolValue(FREE_INTERRUPT_CONTEXT_INDEX));
 
+#ifdef DEBUG_SCAVENGE_VERBOSE
     fprintf(stderr, "%d interrupt contexts to scan\n",index);
+#endif
     for (i = 0; i < index; i++) {
        context = lisp_interrupt_contexts[i];
        scavenge_interrupt_context(context); 
index 8cb613b..493a90c 100644 (file)
@@ -18,4 +18,4 @@
 ;;; for internal versions, especially for internal versions off the
 ;;; main CVS branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
 
-"0.7.1.21"
+"0.7.1.22"