[Bug fortran/45828] [4.6 Regression] No default initialization of derived type members?

janus at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Thu Sep 30 21:27:00 GMT 2010


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45828

--- Comment #6 from janus at gcc dot gnu.org 2010-09-30 19:23:11 UTC ---
(In reply to comment #5)
> To fix it I propose the following patch (not regtested yet):

Regtesting showed that the patch in comment #5 fails on common_10.f90 (due to
the fact that the 'initializer' field may be set also for components without
default initialization). Here is a better patch, which avoids the use of
'gfc_has_default_initializer':


Index: gcc/fortran/resolve.c
===================================================================
--- gcc/fortran/resolve.c    (revision 164755)
+++ gcc/fortran/resolve.c    (working copy)
@@ -6708,6 +6708,7 @@ resolve_allocate_expr (gfc_expr *e, gfc_code *code
     {
       /* Set up default initializer if needed.  */
       gfc_typespec ts;
+      gfc_expr *init_e;

       if (code->ext.alloc.ts.type == BT_DERIVED)
     ts = code->ext.alloc.ts;
@@ -6717,9 +6718,8 @@ resolve_allocate_expr (gfc_expr *e, gfc_code *code
       if (ts.type == BT_CLASS)
     ts = ts.u.derived->components->ts;

-      if (ts.type == BT_DERIVED && gfc_has_default_initializer(ts.u.derived))
+      if (ts.type == BT_DERIVED && (init_e = gfc_default_initializer (&ts)))
     {
-      gfc_expr *init_e = gfc_default_initializer (&ts);
       gfc_code *init_st = gfc_get_code ();
       init_st->loc = code->loc;
       init_st->op = EXEC_INIT_ASSIGN;



More information about the Gcc-bugs mailing list