[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