diff --git a/src/code/print.lisp b/src/code/print.lisp
index 999bc943cb5debdca46d8a4f05d4f7da4b3a68e7..f2a1205db7697da2e7f5c00dec7d14a1b7d52253 100644
--- a/src/code/print.lisp
+++ b/src/code/print.lisp
@@ -1297,7 +1297,7 @@
       (write-char #\. stream)))
 
 (defun sub-output-integer (integer stream)
-  (declare (type (and fixnum unsigned-byte) integer))
+  (declare (type (integer 0 #.(- most-negative-fixnum)) integer))
   (let ((quotient 0)
 	(remainder 0))
     (declare (fixnum quotient remainder))
diff --git a/tests/printer.lisp b/tests/printer.lisp
index b511f0bc5a93ddc1c1e0861787760346a725beb0..5c958448a5dcd8d62a765f2339a4820051b9acad 100644
--- a/tests/printer.lisp
+++ b/tests/printer.lisp
@@ -111,3 +111,5 @@
     (assert-equal "Scale factor  6: | 314159.0e-05|" (test-scale 11))
     (assert-equal "Scale factor  7: | 3141590.e-06|" (test-scale 12))))
 
+(define-test sub-output-integer.1
+    (assert-prints "-536870912" (princ most-negative-fixnum)))