The following invalid code is erroneously accepted by ifort 2021.4.0:
type :: bad_pdt (k,l) integer, kind, len :: k = 1 integer, len, kind :: l = 1 character(kind=k,len=l) :: c end type bad_pdt end
The Fortran 2018 standard (and similarly 2003+) state:
F2018: 22.214.171.124 Type parameter definition statement R732 type-param-def-stmt is integer-type-spec, type-param-attr-spec :: type-param-decl-list R734 type-param-attr-spec is KIND or LEN (3) The type-param-attr-spec explicitly specifies whether a type parameter is a kind parameter or a length parameter. Thus the KIND and LEN attributes are mutually exclusive.
The correct solution would be to reject the code sample.
I was talking about F2003 parameterized derived types. I wouldn't call that "old/legacy" yet. Maybe you are thinking of some old/legacy DEC/Intel extension?
The compiler should provide a means to reject non-standard-conforming code. The above sample violates F2018:R734. "ifort -stand" remains quiet.