(macroexpand '(LOOP WITH A = 0 FOR A DOWNFROM 10 TO 0 DO (PRINT A))))
(declare (ignore _))
(assert (typep condition 'program-error)))
+
+;;; Loop variable with a range excluding 0, reported by Andras Simon.
+;;; (Used to signal an error during macroexpansion.)
+(assert (not (loop with foo of-type (single-float 1.0 2.0) = 1.5 do (return))))
+
+;;; 1.0.26.12 used to signal a bogus type error for this.
+(loop with x of-type (simple-vector 1) = (make-array '(1))
+ repeat 1
+ return x)
+
+(with-test (:name :bug-540186)
+ (let ((fun (compile nil `(lambda (x)
+ (loop for i from 0 below (length x)
+ for vec of-type vector = (aref x i)
+ collect vec)))))
+ (assert (equal '("foo" "bar")
+ (funcall fun
+ (vector "foo" "bar"))))))
+
+(with-test (:name :bug-lp613871)
+ (multiple-value-bind (function warnings-p failure-p)
+ (compile nil '(lambda () (loop with nil = 1 repeat 2 collect t)))
+ (assert (null warnings-p))
+ (assert (null failure-p))
+ (assert (equal '(t t) (funcall function))))
+ (multiple-value-bind (function warnings-p failure-p)
+ (compile nil '(lambda () (loop with nil repeat 2 collect t)))
+ (assert (null warnings-p))
+ (assert (null failure-p))
+ (assert (equal '(t t) (funcall function)))))