[Bug fortran/50410] [8/9/10/11 Regression] ICE in record_reference, pointer variable in data statement

anlauf at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Sat Jun 20 19:29:02 GMT 2020


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

anlauf at gcc dot gnu.org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |anlauf at gcc dot gnu.org

--- Comment #40 from anlauf at gcc dot gnu.org ---
(In reply to kargl from comment #39)
> The bug is not fixed.  The code from comment #3
> 
> % cat a.f90
>      type t
>        integer g
>       end type
>       type(t) :: u=t(1)
>       data u%g /2/
>       end

The patch

diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c
index b7c568e90e6..02caf992dfd 100644
--- a/gcc/fortran/trans-expr.c
+++ b/gcc/fortran/trans-expr.c
@@ -8543,7 +8543,7 @@ gfc_conv_structure (gfc_se * se, gfc_expr * expr, int
init)
   cm = expr->ts.u.derived->components;

   for (c = gfc_constructor_first (expr->value.constructor);
-       c; c = gfc_constructor_next (c), cm = cm->next)
+       c && cm; c = gfc_constructor_next (c), cm = cm->next)
     {
       /* Skip absent members in default initializers and allocatable
         components.  Although the latter have a default initializer

fixes the ICE, but does not detect the double initialization.

> The code in the first example in comment #9 also causes an ICE.

This one then works and produces the expected error.

> Codes z1.f90, z2.f90, and z3.f90 in comment #23 cause ICEs.

Only z1 ICEs, z2 and z3 produce error messages.


More information about the Gcc-bugs mailing list