1.0.28.65: fix compiling with *PROFILE-HASH-CACHE* set to T
[sbcl.git] / src / compiler / generic / objdef.lisp
index e2d8396..e942b54 100644 (file)
                 :ref-known (flushable foldable)
                 :set-trans (setf %array-displacement)
                 :set-known (unsafe))
-  (displaced-p :type (member t nil)
+  (displaced-p :type t
                :ref-trans %array-displaced-p
                :ref-known (flushable foldable)
                :set-trans (setf %array-displaced-p)
                :set-known (unsafe))
+  (displaced-from :type list
+                  :ref-trans %array-displaced-from
+                  :ref-known (flushable)
+                  :set-trans (setf %array-displaced-from)
+                  :set-known (unsafe))
   (dimensions :rest-p t))
 
 (define-primitive-object (vector :type vector
   ;; first data slot, and if you subtract 7 you get a symbol header.
 
   ;; also the CAR of NIL-as-end-of-list
-  (value :init :unbound :ref-known (flushable) :ref-trans symbol-global-value)
+  (value :init :unbound
+         :set-trans %set-symbol-global-value
+         :set-known (unsafe))
   ;; also the CDR of NIL-as-end-of-list.  Its reffer needs special
   ;; care for this reason, as hash values must be fixnums.
   (hash :set-trans %set-symbol-hash)
   (interrupt-data :c-type "struct interrupt_data *"
                   :length #!+alpha 2 #!-alpha 1)
   (stepping)
+  ;; KLUDGE: On alpha, until STEPPING we have been lucky and the 32
+  ;; bit slots came in pairs. However the C compiler will align
+  ;; interrupt_contexts on a double word boundary. This logic should
+  ;; be handled by DEFINE-PRIMITIVE-OBJECT.
+  #!+alpha
+  (padding)
   (interrupt-contexts :c-type "os_context_t *" :rest-p t))