- (if (unknown-type-p (specifier-type spec))
- (error "undefined type: ~S" spec)
- (type-specifier (array-type-specialized-element-type
- (specifier-type `(array ,spec))))))
+ (handler-case
+ ;; Can't rely on SPECIFIER-TYPE to signal PARSE-UNKNOWN-TYPE in
+ ;; the case of (AND KNOWN UNKNOWN), since the result of the
+ ;; outter call to SPECIFIER-TYPE can be cached by the code that
+ ;; doesn't catch PARSE-UNKNOWN-TYPE signal.
+ (if (contains-unknown-type-p (specifier-type spec))
+ (error "Undefined type: ~S" spec)
+ (type-specifier (array-type-specialized-element-type
+ (specifier-type `(array ,spec)))))
+ (parse-unknown-type (c)
+ (error "Undefined type: ~S" (parse-unknown-type-specifier c)))))