http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45516
janus at gcc dot gnu.org changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2011.02.03 22:03:06 Ever Confirmed|0 |1 --- Comment #3 from janus at gcc dot gnu.org 2011-02-03 22:03:06 UTC --- (In reply to comment #2) > (In reply to comment #1) > > Here is a patch to accept the type declaration in comment #0: > > Well, you at least need to use gfc_notify_std(GFC_STD_F2008, ... This variant keeps the old error message for -std=f2003: Index: gcc/fortran/decl.c =================================================================== --- gcc/fortran/decl.c (revision 169519) +++ gcc/fortran/decl.c (working copy) @@ -1515,14 +1515,20 @@ build_struct (const char *name, gfc_charlen *cl, g gfc_component *c; gfc_try t = SUCCESS; - /* F03:C438/C439. If the current symbol is of the same derived type that we're - constructing, it must have the pointer attribute. */ + /* F03:C438/C439, F08:C440. If the current symbol is of the same derived type + that we're constructing, it must be POINTER or ALLOCATABLE. */ if ((current_ts.type == BT_DERIVED || current_ts.type == BT_CLASS) && current_ts.u.derived == gfc_current_block () && current_attr.pointer == 0) { - gfc_error ("Component at %C must have the POINTER attribute"); - return FAILURE; + if (gfc_notify_std (GFC_STD_F2008, "Component at %C must have the " + "POINTER attribute") == FAILURE) + return FAILURE; + else if (current_attr.allocatable == 0) + { + gfc_error ("Component at %C must be POINTER or ALLOCATABLE"); + return FAILURE; + } } if (gfc_current_block ()->attr.pointer && (*as)->rank != 0)