https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82622
kargl at gcc dot gnu.org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |pault at gcc dot gnu.org --- Comment #5 from kargl at gcc dot gnu.org --- (In reply to G. Steinmetz from comment #0) > This one is an interesting case ... > (... and the last PR derived from this search) > > > $ cat z1.f90 > program p > type t(a) > integer, len :: a > end type > type t2(b) > integer, len :: b > type(t(1)) :: r(b) > end type > type(t2(:)), allocatable :: x > allocate (t2(3) :: x) > end BTW, I don't know the semantics of PDT's. Is this valid code and should compile. Is so, this patch "fixes" the problem. %--- cut here --- Index: trans-array.c =================================================================== --- trans-array.c (revision 254051) +++ trans-array.c (working copy) @@ -8960,7 +8960,7 @@ structure_alloc_comps (gfc_symbol * der_type, tree dec gfc_actual_arglist *param = pdt_param_list; gfc_init_se (&tse, NULL); for (; param; param = param->next) - if (!strcmp (c->name, param->name)) + if (!param->name || !strcmp (c->name, param->name)) c_expr = param->expr; if (!c_expr) %--- cut here --- (gdb) b trans-array.c:8963 Breakpoint 1 at 0x76f388: file ../../gcc/gcc/fortran/trans-array.c, line 8963. (gdb) run a.f90 Starting program: /mnt/sgk/work/libexec/gcc/x86_64-unknown-freebsd12.0/8.0.0/f951 a.f90 p Breakpoint 1, structure_alloc_comps (der_type=<optimized out>, decl=<optimized out>, dest=<optimized out>, dest@entry=0x0, rank=0, purpose=purpose@entry=6, caf_mode=caf_mode@entry=0) at ../../gcc/gcc/fortran/trans-array.c:8963 8963 if (!param->name || !strcmp (c->name, param->name)) (gdb) p c->name $1 = 0x203c2d068 "b" (gdb) p param->name $2 = 0x203c2d068 "b" (gdb) c Continuing. Breakpoint 1, structure_alloc_comps (der_type=der_type@entry=0x201da2f00, decl=<optimized out>, decl@entry=0x203a95428, dest=<optimized out>, dest@entry=0x0, rank=rank@entry=1, purpose=purpose@entry=6, caf_mode=caf_mode@entry=0) at ../../gcc/gcc/fortran/trans-array.c:8963 8963 if (!param->name || !strcmp (c->name, param->name)) (gdb) p c->name $3 = 0x203c2d040 "a" (gdb) p param->name $4 = 0x0 Paul, should param->name = NULL be caught somewhere in resolve.c?