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

--- Comment #5 from janus at gcc dot gnu.org 2010-12-28 12:51:22 UTC ---
(In reply to comment #4)
> Here's a patch:

The patch in comment #4 had a few regressions (e.g. on alloc_comp_basics_1.f90
etc), but the following version regtests cleanly:


Index: gcc/fortran/expr.c
===================================================================
--- gcc/fortran/expr.c    (revision 168293)
+++ gcc/fortran/expr.c    (working copy)
@@ -3648,7 +3648,8 @@ gfc_default_initializer (gfc_typespec *ts)
   /* See if we have a default initializer in this, but not in nested
      types (otherwise we could use gfc_has_default_initializer()).  */
   for (comp = ts->u.derived->components; comp; comp = comp->next)
-    if (comp->initializer || comp->attr.allocatable)
+    if (comp->initializer || comp->attr.allocatable
+    || (comp->ts.type == BT_CLASS && CLASS_DATA (comp)->attr.allocatable))
       break;

   if (!comp)
@@ -3665,7 +3666,8 @@ gfc_default_initializer (gfc_typespec *ts)
       if (comp->initializer)
     ctor->expr = gfc_copy_expr (comp->initializer);

-      if (comp->attr.allocatable)
+      if (comp->attr.allocatable
+      || (comp->ts.type == BT_CLASS && CLASS_DATA (comp)->attr.allocatable))
     {
       ctor->expr = gfc_get_expr ();
       ctor->expr->expr_type = EXPR_NULL;

Reply via email to