This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug fortran/57562] [OOP] ICE due to extended derived type with PARAMETER attribute
- From: "janus at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Fri, 02 Jan 2015 11:08:00 +0000
- Subject: [Bug fortran/57562] [OOP] ICE due to extended derived type with PARAMETER attribute
- Auto-submitted: auto-generated
- References: <bug-57562-4 at http dot gcc dot gnu dot org/bugzilla/>
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=57562
janus at gcc dot gnu.org changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |ASSIGNED
Assignee|unassigned at gcc dot gnu.org |janus at gcc dot gnu.org
--- Comment #7 from janus at gcc dot gnu.org ---
The patch in comment 5 is far from complete. Here is a new version, which
should be much better. It regtests cleanly and works with all three variants of
the test case in this PR.
Index: gcc/fortran/expr.c
===================================================================
--- gcc/fortran/expr.c (Revision 219140)
+++ gcc/fortran/expr.c (Arbeitskopie)
@@ -1270,12 +1270,23 @@ depart:
static gfc_constructor *
find_component_ref (gfc_constructor_base base, gfc_ref *ref)
{
- gfc_component *comp;
- gfc_component *pick;
+ gfc_component *pick = ref->u.c.component;
gfc_constructor *c = gfc_constructor_first (base);
- comp = ref->u.c.sym->components;
- pick = ref->u.c.component;
+ gfc_symbol *dt = ref->u.c.sym;
+ int ext = dt->attr.extension;
+
+ /* For extended types, check if the desired component is in one of the
+ * parent types. */
+ while (ext>0 && gfc_find_component (dt->components->ts.u.derived,
pick->name,
+ true, true))
+ {
+ dt = dt->components->ts.u.derived;
+ c = gfc_constructor_first (c->expr->value.constructor);
+ ext--;
+ }
+
+ gfc_component *comp = dt->components;
while (comp != pick)
{
comp = comp->next;