Fix another regression in dumping specialized vectors.
[sbcl.git] / src / code / fop.lisp
index 44e512d..f7bb13b 100644 (file)
     res))
 
 (defglobal **saetp-bits-per-length**
-    (let ((array (make-array 255 :element-type '(unsigned-byte 8)
-                                 :initial-element 255)))
+    (let ((array (make-array (1+ sb!vm:widetag-mask)
+                             :element-type '(unsigned-byte 8)
+                             :initial-element 255)))
       (loop for saetp across sb!vm:*specialized-array-element-type-properties*
             do
             (setf (aref array (sb!vm:saetp-typecode saetp))
                   (sb!vm:saetp-n-bits saetp)))
       array)
     "255 means bad entry.")
-(declaim (type (simple-array (unsigned-byte 8) (255))
+(declaim (type (simple-array (unsigned-byte 8) (#.(1+ sb!vm:widetag-mask)))
                **saetp-bits-per-length**))
 
 (define-fop (fop-spec-vector 43)
   (let* ((length (read-word-arg))
          (widetag (read-byte-arg))
          (bits-per-length (aref **saetp-bits-per-length** widetag))
-         (bytes  (progn
-                   (aver (< bits-per-length 255))
-                   (ceiling (* length bits-per-length) sb!vm:n-byte-bits)))
-         (vector (allocate-vector widetag length (* bytes sb!vm:n-word-bytes))))
-    (declare (type index length))
+         (bits (progn (aver (< bits-per-length 255))
+                      (* length bits-per-length)))
+         (bytes (ceiling bits sb!vm:n-byte-bits))
+         (words (ceiling bytes sb!vm:n-word-bytes))
+         (vector (allocate-vector widetag length words)))
+    (declare (type index length bytes words)
+             (type word bits))
     (read-n-bytes *fasl-input-stream* vector 0 bytes)
     vector))