------- Comment #1 from janus at gcc dot gnu dot org 2009-07-27 21:05 ------- Here is a preliminary patch which makes the test case compile:
Index: gcc/fortran/trans-types.c =================================================================== --- gcc/fortran/trans-types.c (revision 150133) +++ gcc/fortran/trans-types.c (working copy) @@ -1894,7 +1894,12 @@ gfc_get_ppc_type (gfc_component* c) { tree t; if (c->attr.function && !c->attr.dimension) - t = gfc_typenode_for_spec (&c->ts); + { + if (c->ts.type == BT_DERIVED) + t = c->ts.derived->backend_decl; + else + t = gfc_typenode_for_spec (&c->ts); + } else t = void_type_node; /* TODO: Build argument list. */ @@ -1974,7 +1979,8 @@ gfc_get_derived_type (gfc_symbol * deriv if (c->ts.type != BT_DERIVED) continue; - if (!c->attr.pointer || c->ts.derived->backend_decl == NULL) + if ((!c->attr.pointer && !c->attr.proc_pointer) + || c->ts.derived->backend_decl == NULL) c->ts.derived->backend_decl = gfc_get_derived_type (c->ts.derived); if (c->ts.derived && c->ts.derived->attr.is_iso_c) @@ -2003,10 +2009,10 @@ gfc_get_derived_type (gfc_symbol * deriv fieldlist = NULL_TREE; for (c = derived->components; c; c = c->next) { - if (c->ts.type == BT_DERIVED) - field_type = c->ts.derived->backend_decl; - else if (c->attr.proc_pointer) + if (c->attr.proc_pointer) field_type = gfc_get_ppc_type (c); + else if (c->ts.type == BT_DERIVED) + field_type = c->ts.derived->backend_decl; else { if (c->ts.type == BT_CHARACTER) -- janus at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- AssignedTo|unassigned at gcc dot gnu |janus at gcc dot gnu dot org |dot org | Status|UNCONFIRMED |ASSIGNED Ever Confirmed|0 |1 Last reconfirmed|0000-00-00 00:00:00 |2009-07-27 21:05:09 date| | http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40882