room: Fix reconstituting CONS cells with unbound-marker in the CAR.
[sbcl.git] / src / code / room.lisp
index 462474b..b94d9d8 100644 (file)
 (let ((cons-info (make-room-info :name 'cons
                                  :kind :list)))
   ;; A cons consists of two words, both of which may be either a
-  ;; pointer or immediate data.  Disregarding the possibility of an
-  ;; unbound-marker (permitted, according to the GC), this means
-  ;; either a fixnum, a character, a single-float on a 64-bit system,
-  ;; or a pointer.
+  ;; pointer or immediate data.  According to the runtime this means
+  ;; either a fixnum, a character, an unbound-marker, a single-float
+  ;; on a 64-bit system, or a pointer.
   (dotimes (i (ash 1 (- n-widetag-bits n-fixnum-tag-bits)))
     (setf (svref *meta-room-info* (ash i n-fixnum-tag-bits)) cons-info))
 
 
   (setf (svref *meta-room-info* character-widetag) cons-info)
 
+  (setf (svref *meta-room-info* unbound-marker-widetag) cons-info)
+
   ;; Single-floats are immediate data on 64-bit systems.
   #!+#.(cl:if (cl:= 64 sb!vm:n-word-bits) '(and) '(or))
   (setf (svref *meta-room-info* single-float-widetag) cons-info))