diff --git a/ansi-tests/do.lsp b/ansi-tests/do.lsp
index 4074b0597d3e55fd40cb0369902815f7eb344497..5a7b29b028404d8dbaabd280c56e12827b47f0ac 100644
--- a/ansi-tests/do.lsp
+++ b/ansi-tests/do.lsp
@@ -121,5 +121,45 @@
 	      (push #'(lambda () i) x))))
   (5 5 5 5 5))
 
+;;; Scope of free declarations
+
+(deftest do.16
+  (block done
+    (let ((x :bad))
+      (declare (special x))
+      (let ((x :good))
+	(do ((i (return-from done x) 0))
+	    (t nil)
+	  (declare (special x))))))
+  :good)
+
+(deftest do.17
+  (block done
+    (let ((x :good))
+      (declare (special x))
+      (let ((x :bad))
+	(do ((i 0 (return-from done x)))
+	    (nil nil)
+	  (declare (special x))))))
+  :good)
+
+(deftest do.18
+  (block done
+    (let ((x :good))
+      (declare (special x))
+      (let ((x :bad))
+	(do ((i 0 0))
+	    ((return-from done x) nil)
+	  (declare (special x))))))
+  :good)
+
+(deftest do.19
+  (let ((x :good))
+    (declare (special x))
+    (let ((x :bad))
+      (do () (t x)
+	(declare (special x)))))
+  :good)
+
 (def-macro-test do.error.1
   (do ((i 0 (1+ i))) ((= i 5) 'a)))
diff --git a/ansi-tests/dolist.lsp b/ansi-tests/dolist.lsp
index c5a049e4bdeb99c592b0c2a885d3d76ff791b759..307d6bc41002a9d81f3fc8cccc44a1e5bf890f6f 100644
--- a/ansi-tests/dolist.lsp
+++ b/ansi-tests/dolist.lsp
@@ -112,6 +112,25 @@
       (when (eq e 'c) (return x))))
   (c b a))
 
+;;; Scope of free declarations
+
+(deftest dolist.16
+  (block done
+    (let ((x :bad))
+      (declare (special x))
+      (let ((x :good))
+	(dolist (e (return-from done x))
+	  (declare (special x))))))
+  :good)
+
+(deftest dolist.17
+  (let ((x :good))
+    (declare (special x))
+    (let ((x :bad))
+      (dolist (e nil x)
+	(declare (special x)))))
+  :good)
+
 (def-macro-test dolist.error.1
   (dolist (x nil)))
 
diff --git a/ansi-tests/dostar.lsp b/ansi-tests/dostar.lsp
index dcc51b50414eb8edbfdd91664b132d61d1884410..f426af90d4e4891b7074db96648e61e3ebd9f26c 100644
--- a/ansi-tests/dostar.lsp
+++ b/ansi-tests/dostar.lsp
@@ -121,5 +121,45 @@
 	      (push #'(lambda () i) x))))
   (5 5 5 5 5))
 
+;;; Scope of free declarations
+
+(deftest do*.16
+  (block done
+    (let ((x :bad))
+      (declare (special x))
+      (let ((x :good))
+	(do* ((i (return-from done x) 0))
+	    (t nil)
+	  (declare (special x))))))
+  :good)
+
+(deftest do*.17
+  (block done
+    (let ((x :good))
+      (declare (special x))
+      (let ((x :bad))
+	(do* ((i 0 (return-from done x)))
+	    (nil nil)
+	  (declare (special x))))))
+  :good)
+
+(deftest do*.18
+  (block done
+    (let ((x :good))
+      (declare (special x))
+      (let ((x :bad))
+	(do* ((i 0 0))
+	    ((return-from done x) nil)
+	  (declare (special x))))))
+  :good)
+
+(deftest do*.19
+  (let ((x :good))
+    (declare (special x))
+    (let ((x :bad))
+      (do* () (t x)
+	(declare (special x)))))
+  :good)
+
 (def-macro-test do*.error.1
   (do* ((i 0 (1+ i))) ((= i 5) 'a)))
diff --git a/ansi-tests/dotimes.lsp b/ansi-tests/dotimes.lsp
index 70c7c7d1becccb67885e9e2d3b6dce63e7d27a5a..8501dd2fcb304157114fec5c39d93465cba36a47 100644
--- a/ansi-tests/dotimes.lsp
+++ b/ansi-tests/dotimes.lsp
@@ -147,5 +147,24 @@
       (incf x)))
   0 0)
 
+;;; Scope of free declarations
+
+(deftest dotimes.22
+  (block done
+    (let ((x :bad))
+      (declare (special x))
+      (let ((x :good))
+	(dotimes (i (return-from done x))
+	  (declare (special x))))))
+  :good)
+
+(deftest dotimes.23
+  (let ((x :good))
+    (declare (special x))
+    (let ((x :bad))
+      (dotimes (i 10 x)
+	(declare (special x)))))
+  :good)
+
 (def-macro-test dotimes.error.1
   (dotimes (i 10)))