Hi all, here is a small patch for an F08 extension: Allocatable components don't have to be specified in structure constructors any more.
Regtested on x86_64-unknown-linux-gnu. Ok for trunk? Cheers, Janus 2014-12-27 Janus Weil <ja...@gcc.gnu.org> PR fortran/60357 * array.c (check_constructor): Ignore empty expressions. * expr.c (check_alloc_comp_init): Check if constructor expression exists. * primary.c (build_actual_constructor): Warn for absent alloc-comp initializers in pre-2008 standards. 2014-12-27 Janus Weil <ja...@gcc.gnu.org> PR fortran/60357 * gfortran.dg/alloc_comp_constructor_7.f90: New.
Index: gcc/fortran/array.c =================================================================== --- gcc/fortran/array.c (Revision 219082) +++ gcc/fortran/array.c (Arbeitskopie) @@ -1309,6 +1309,9 @@ check_constructor (gfc_constructor_base ctor, bool { e = c->expr; + if (!e) + continue; + if (e->expr_type != EXPR_ARRAY) { if (!(*check_function)(e)) Index: gcc/fortran/expr.c =================================================================== --- gcc/fortran/expr.c (Revision 219082) +++ gcc/fortran/expr.c (Arbeitskopie) @@ -2201,7 +2201,7 @@ check_alloc_comp_init (gfc_expr *e) ctor = gfc_constructor_first (e->value.constructor); comp; comp = comp->next, ctor = gfc_constructor_next (ctor)) { - if (comp->attr.allocatable + if (comp->attr.allocatable && ctor->expr && ctor->expr->expr_type != EXPR_NULL) { gfc_error ("Invalid initialization expression for ALLOCATABLE " Index: gcc/fortran/primary.c =================================================================== --- gcc/fortran/primary.c (Revision 219082) +++ gcc/fortran/primary.c (Arbeitskopie) @@ -2367,6 +2367,13 @@ build_actual_constructor (gfc_structure_ctor_compo return false; value = gfc_copy_expr (comp->initializer); } + else if (comp->attr.allocatable) + { + if (!gfc_notify_std (GFC_STD_F2008, "No initializer for " + "allocatable component '%s' given in the structure " + "constructor at %C", comp->name)) + return false; + } else if (!comp->attr.deferred_parameter) { gfc_error ("No initializer for component %qs given in the"
! { dg-do compile } ! ! PR 60357: [F08] structure constructor with unspecified values for allocatable components ! ! Contributed by Antony Lewis <ant...@cosmologist.info> Type A integer :: X = 1 integer, allocatable :: y end type A Type(A) :: Me = A(X=1) end