(when (constant-continuation-p initial-element)
(let ((value (continuation-value initial-element)))
(cond
- ((not (csubtypep (ctype-of value)
- (saetp-ctype saetp)))
+ ((not (ctypep value (saetp-ctype saetp)))
;; this case will cause an error at runtime, so we'd
;; better WARN about it now.
(compiler-warn "~@<~S is not a ~S (which is the ~
value
(type-specifier (saetp-ctype saetp))
eltype))
- ((not (csubtypep (ctype-of value) eltype-type))
+ ((not (ctypep value eltype-type))
;; this case will not cause an error at runtime, but
;; it's still worth STYLE-WARNing about.
(compiler-style-warn "~S is not a ~S."
;;; If a simple array with known dimensions, then VECTOR-LENGTH is a
;;; compile-time constant.
-(deftransform vector-length ((vector) ((simple-array * (*))))
+(deftransform vector-length ((vector))
(let ((vtype (continuation-type vector)))
- (if (array-type-p vtype)
+ (if (and (array-type-p vtype)
+ (not (array-type-complexp vtype)))
(let ((dim (first (array-type-dimensions vtype))))
(when (eq dim '*) (give-up-ir1-transform))
dim)