X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fcompiler%2Fdebug-dump.lisp;h=19f6a0f74bfd8e4a8c5252ee8900890bd3629654;hb=4ae1b794a5d6a90794468cf8017f5307f2c30dfe;hp=a69a7fc8b7586b022399ca08760f2b7e1ce6a1e3;hpb=104ee7ee303efa16e415f5e75df635ac54dba733;p=sbcl.git diff --git a/src/compiler/debug-dump.lisp b/src/compiler/debug-dump.lisp index a69a7fc..19f6a0f 100644 --- a/src/compiler/debug-dump.lisp +++ b/src/compiler/debug-dump.lisp @@ -240,7 +240,7 @@ ;;; Return a list of DEBUG-SOURCE structures containing information ;;; derived from INFO. Unless :BYTE-COMPILE T was specified, we always -;;; dump the Start-Positions, since it is too hard figure out whether +;;; dump the START-POSITIONS, since it is too hard figure out whether ;;; we need them or not. (defun debug-source-for-info (info) (declare (type source-info info)) @@ -277,7 +277,8 @@ ;;; a vector whose element size is an integer multiple of output byte ;;; size. (defun coerce-to-smallest-eltype (seq) - (let ((maxoid #-sb-xc-host 0 + (let ((maxoid ;; It's probably better to avoid (UNSIGNED-BYTE 0). + #-sb-xc-host 1 ;; An initial value of 255 prevents us from ;; specializing the array to anything smaller than ;; (UNSIGNED-BYTE 8), which keeps the cross-compiler's @@ -294,7 +295,17 @@ (frob i)) (dovector (i seq) (frob i))) - (coerce seq `(simple-array (integer 0 ,maxoid) (*)))))) + (let ((specializer `(unsigned-byte ,(integer-length maxoid)))) + ;; cross-compilers beware! It would be possible for the + ;; upgraded-array-element-type of (UNSIGNED-BYTE 15) to be + ;; (SIGNED-BYTE 16), and this is completely valid by + ;; ANSI. However, the cross-compiler doesn't know how to dump + ;; SIGNED-BYTE arrays, so better make it break now if it ever + ;; will: + #+sb-xc-host + (aver (subtypep (upgraded-array-element-type specializer) + 'unsigned-byte)) + (coerce seq `(simple-array ,specializer (*))))))) ;;;; variables