diff --git a/code/loop.lisp b/code/loop.lisp
index d2c79d0397b64482012a5e1d646ff59b30a4b20d..01c63395d125b4d4771da7c13a93e7b1e4c8eb0c 100644
--- a/code/loop.lisp
+++ b/code/loop.lisp
@@ -1117,7 +1117,15 @@ collected result will be returned as the value of the LOOP."
 		;; type specifier is unambiguously, and without need of translation,
 		;; a common lisp type specifier or pattern (matching the variable) thereof.
 		(loop-pop-source)
-		(loop-pop-source))
+		#-cmu
+		(loop-pop-source)
+		#+cmu
+		(let* ((spec (loop-pop-source))
+		       (init (loop-typed-init spec)))
+		  (if (typep init spec)
+		      spec
+		      `(or (member ,init) spec))))
+		      
 	       ((symbolp z)
 		;;This is the (sort of) "old" syntax, even though we didn't used to support all of
 		;; these type symbols.