diff --git a/compiler/generic/vm-tran.lisp b/compiler/generic/vm-tran.lisp
index c93773ec4739c28a1e0a7c02fbcbf90e4efb5f7b..d40a251916901d4c6a157ac829918645fc12fe1d 100644
--- a/compiler/generic/vm-tran.lisp
+++ b/compiler/generic/vm-tran.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/generic/vm-tran.lisp,v 1.39 2000/01/14 19:48:43 dtc Exp $")
+  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/generic/vm-tran.lisp,v 1.40 2000/09/14 14:34:37 dtc Exp $")
 ;;;
 ;;; **********************************************************************
 ;;;
@@ -140,9 +140,11 @@
 
 (deftransform subseq ((string start &optional (end nil))
 		      (simple-string t &optional t))
-  '(let* ((length (- (or end (length string))
-		     start))
-	  (result (make-string length)))
+  '(let* ((length (length string))
+	  (end (if end (min end length) length))
+	  (start (min start end))
+	  (size (- end start))
+	  (result (make-string size)))
      (declare (optimize (safety 0)))
      (bit-bash-copy string
 		    (the index
@@ -150,7 +152,7 @@
 			    vector-data-bit-offset))
 		    result
 		    vector-data-bit-offset
-		    (the index (* length vm:byte-bits)))
+		    (the index (* size vm:byte-bits)))
      result))