diff options
author | Tobias Burnus <burnus@net-b.de> | 2011-12-04 17:33:15 +0100 |
---|---|---|
committer | Tobias Burnus <burnus@gcc.gnu.org> | 2011-12-04 17:33:15 +0100 |
commit | 021396710f334405addcabe1b09c274bc123c262 (patch) | |
tree | 10f115327210b8d210c20b20be9f6ad8a71d2809 /gcc/fortran/resolve.c | |
parent | 8f90394af7c8ed289fed2ad86d7925e0a16df2bf (diff) | |
download | gcc-021396710f334405addcabe1b09c274bc123c262.zip gcc-021396710f334405addcabe1b09c274bc123c262.tar.gz gcc-021396710f334405addcabe1b09c274bc123c262.tar.bz2 |
re PR fortran/51383 ([OOP] arrays of extended types break when associated)
2011-12-04 Tobias Burnus <burnus@net-b.de>
PR fortran/51383
* resolve.c (find_array_spec): Use ref->u.c.component
directly without starting from ts.u.derived.
2011-12-04 Tobias Burnus <burnus@net-b.de>
PR fortran/51383
* gfortran.dg/associate_10.f90: New.
From-SVN: r181992
Diffstat (limited to 'gcc/fortran/resolve.c')
-rw-r--r-- | gcc/fortran/resolve.c | 23 |
1 files changed, 1 insertions, 22 deletions
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 6baeff44..2e50f04 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -4515,14 +4515,12 @@ find_array_spec (gfc_expr *e) { gfc_array_spec *as; gfc_component *c; - gfc_symbol *derived; gfc_ref *ref; if (e->symtree->n.sym->ts.type == BT_CLASS) as = CLASS_DATA (e->symtree->n.sym)->as; else as = e->symtree->n.sym->as; - derived = NULL; for (ref = e->ref; ref; ref = ref->next) switch (ref->type) @@ -4536,26 +4534,7 @@ find_array_spec (gfc_expr *e) break; case REF_COMPONENT: - if (derived == NULL) - derived = e->symtree->n.sym->ts.u.derived; - - if (derived->attr.is_class) - derived = derived->components->ts.u.derived; - - c = derived->components; - - for (; c; c = c->next) - if (c == ref->u.c.component) - { - /* Track the sequence of component references. */ - if (c->ts.type == BT_DERIVED) - derived = c->ts.u.derived; - break; - } - - if (c == NULL) - gfc_internal_error ("find_array_spec(): Component not found"); - + c = ref->u.c.component; if (c->attr.dimension) { if (as != NULL) |