+ (ignore-errors
+ (eval '(loop for i from 1 repeat 7 of-type fixnum collect i)))
+ (assert (null result))
+ (assert (typep error 'program-error)))
+
+(assert (equal
+ (ignore-errors (loop for i from 1 repeat 6.5 collect i))
+ (ignore-errors (loop for i from 1 repeat (eval '6.5) collect i))))
+
+(assert (eq (block nil
+ (loop named foo do (loop-finish) finally (return :good))
+ :bad)
+ :good))
+
+(assert (= (loop with (a nil) = '(1 2) return a) 1))
+(assert (= (loop with (nil a) = '(1 2) return a) 2))
+(assert (= (loop with (a . nil) = '(1 2) return a) 1))
+(assert (equal (loop with (nil . a) = '(1 2) return a) '(2)))
+
+(multiple-value-bind (result error)
+ (ignore-errors
+ (loop for i in '(1 2 3) collect i always (< i 4)))
+ (assert (null result))
+ (assert (typep error 'program-error)))
+(assert (equal
+ (loop for i in '(1 2 3) collect i into foo always (< i 4)
+ finally (return foo))
+ '(1 2 3)))
+(assert (equal
+ (loop for i in '(1 2 3) collect i into foo always (= i 4)
+ finally (return foo))
+ nil))
+(multiple-value-bind (result error)
+ (ignore-errors
+ (loop for i in '(1 2 3) always (< i 4) collect i))
+ (assert (null result))
+ (assert (typep error 'program-error)))
+(assert (equal
+ (loop for i in '(1 2 3) always (< i 4) collect i into foo
+ finally (return foo))
+ '(1 2 3)))
+(assert (equal
+ (loop for i in '(1 2 3) always (= i 4) collect i into foo
+ finally (return foo))
+ nil))
+(multiple-value-bind (result error)
+ (ignore-errors
+ (loop for i in '(1 2 3) thereis (= i 3) collect i))
+ (assert (null result))
+ (assert (typep error 'program-error)))
+
+(multiple-value-bind (result error)
+ (ignore-errors
+ (loop with i = 1 for x from 1 to 3 collect x into i))
+ (assert (null result))
+ (assert (typep error 'program-error)))
+(multiple-value-bind (result error)
+ ;; this one has a plausible interpretation in terms of LET*, but
+ ;; ANSI seems specifically to disallow it
+ (ignore-errors
+ (loop with i = 1 with i = (1+ i)
+ for x from 1 to 3
+ collect (+ x i)))