diff --git a/compiler/srctran.lisp b/compiler/srctran.lisp index 52c4b800d3ee728bf543dfa8a94cd66a8b8de2d9..112f81baaabd9f22542010696631c6de865aebc7 100644 --- a/compiler/srctran.lisp +++ b/compiler/srctran.lisp @@ -5,7 +5,7 @@ ;;; Carnegie Mellon University, and has been placed in the public domain. ;;; (ext:file-comment - "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/srctran.lisp,v 1.167 2008/08/20 17:07:32 rtoy Exp $") + "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/srctran.lisp,v 1.168 2008/09/02 04:23:48 rtoy Exp $") ;;; ;;; ********************************************************************** ;;; @@ -2427,15 +2427,16 @@ (cond ((and (null x-len) (null y-len)) ;; Both are unbounded, so result is unbounded. (specifier-type 'unsigned-byte)) + ((or (eql x-len 0) + (eql y-len 0)) + ;; One has zero length, so the result has zero length. + (specifier-type '(integer 0 0))) ((or (and x-len (null y-len)) (and y-len (null x-len))) ;; One is bounded, so the result is bounded. ;; The computed length here is a bit loose. (specifier-type `(unsigned-byte ,(max (or x-len 0) (or y-len 0))))) - ((or (zerop x-len) (zerop y-len)) - ;; One has zero length, so the result has zero length. - (specifier-type '(integer 0 0))) ((and (<= x-len 32) (<= y-len 32)) ;; If both args are unsigned 32-bit numbers, we ;; can compute better bounds, so we do. But if