https://gcc.gnu.org/bugzilla/show_bug.cgi?id=124598

--- Comment #3 from Steve Kargl <kargl at gcc dot gnu.org> ---
(In reply to Steve Kargl from comment #2)
> (In reply to anlauf from comment #1)
> > I do not get an ICE with 16-trunk; the testcase gets (correctly) rejected:
> > 
> > pr124958.f90:18:14:
> > 
> >    18 |    type(t_baz(n)) :: baz ! <- REMOVE THIS LINE AND THIS PROGRAM
> > COMPILES
> >       |              1
> > Error: The type parameter expression at (1) must be of INTEGER type and not
> > UNKNOWN
> > 
> > 
> > Intel also rejects it:
> > 
> > pr124958.f90(18): error #6219: This variable, used in a specification
> > expression, must be a dummy argument, a COMMON block object, or an object
> > accessible through host or use association.   [N]
> >    type(t_baz(n)) :: baz ! <- REMOVE THIS LINE AND THIS PROGRAM COMPILES
> > --------------^
> > pr124958.f90(18): error #6591: An automatic object is invalid in a main
> > program.   [BAZ]
> >    type(t_baz(n)) :: baz ! <- REMOVE THIS LINE AND THIS PROGRAM COMPILES
> > ---------------------^
> > compilation aborted for pr124958.f90 (code 1)
> 
> 'n' is a type-param-name in 'type(t_baz(n)) :: baz'.  OP's code is likely
> invalid because 'n' does not appear in an specification expression.
> 
> However, if one changes the code to 
> 
>    type(t_baz) :: baz ! <- REMOVE THIS LINE AND THIS PROGRAM COMPILES
> 
> or 
> 
>    type(t_baz(n=10)) :: baz ! <- REMOVE THIS LINE AND THIS PROGRAM COMPILES
> 
> you get an ICE.  In the former case, one uses the initialization value of '1'
> 
>    type t_baz(n)
>       integer, len :: n = 1
>       type(t_bar(n)) :: bar(n)
>    end type t_baz
> 
> and in the latter one has 'n=10'.  If I expand what I think is intended
> with 'n=10', one has 'baz(1:10)%foo(1:10)%c' where I'm showing the array
> section notation.

Small correction:  baz%bar(1:10)%foo(1:10)%c

Reply via email to