(loop for var in (lambda-vars fun)
do (let ((info (lambda-var-arg-info var)))
(when (and info (eq :rest (arg-info-kind info)))
- (propagate-to-refs var (specifier-type 'list)))))
+ (propagate-from-sets var (specifier-type 'list)))))
;; The normal case.
(let* ((vars (lambda-vars fun))
(union (mapcar (lambda (arg var)
(assert (eq 'list type))
(assert derivedp)))
+(with-test (:name :rest-list-type-derivation4)
+ (multiple-value-bind (type derivedp)
+ (funcall (funcall (compile nil `(lambda ()
+ (lambda (&optional x &rest args)
+ (declare (type (or null integer) x))
+ (when x (setf args x))
+ (ctu:compiler-derived-type args)))))
+ 42)
+ (assert (equal '(or cons null integer) type))
+ (assert derivedp)))
+
(with-test (:name :base-char-typep-elimination)
(assert (eq (funcall (lambda (ch)
(declare (type base-char ch) (optimize (speed 3) (safety 0)))
;;; checkins which aren't released. (And occasionally for internal
;;; versions, especially for internal versions off the main CVS
;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
-"1.0.43.72"
+"1.0.43.73"