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)))