From bed178575454b8173f49041606ff909f495ca283 Mon Sep 17 00:00:00 2001
From: pfdietz <pfdietz@localhost>
Date: Sat, 8 Jan 2005 14:16:53 +0000
Subject: [PATCH] Add free declaration scope tests for iteration forms

---
 ansi-tests/do.lsp      | 40 ++++++++++++++++++++++++++++++++++++++++
 ansi-tests/dolist.lsp  | 19 +++++++++++++++++++
 ansi-tests/dostar.lsp  | 40 ++++++++++++++++++++++++++++++++++++++++
 ansi-tests/dotimes.lsp | 19 +++++++++++++++++++
 4 files changed, 118 insertions(+)

diff --git a/ansi-tests/do.lsp b/ansi-tests/do.lsp
index 4074b059..5a7b29b0 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 c5a049e4..307d6bc4 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 dcc51b50..f426af90 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 70c7c7d1..8501dd2f 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)))
-- 
GitLab