[Bug fortran/82622] [PDT] ICE in structure_alloc_comps, at fortran/trans-array.c:8963
kargl at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue Oct 24 17:23:00 GMT 2017
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?
More information about the Gcc-bugs
mailing list