From: burnus Date: Sun, 4 Dec 2011 16:33:15 +0000 (+0000) Subject: 2011-12-04 Tobias Burnus X-Git-Url: http://git.sourceforge.jp/view?a=commitdiff_plain;h=3794f7ca2ec61b72c2c5f9fc398e2c083c4298a8;p=pf3gnuchains%2Fgcc-fork.git 2011-12-04 Tobias Burnus 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 PR fortran/51383 * gfortran.dg/associate_10.f90: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@181992 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index fbe15b03218..4b553db9011 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2011-12-04 Tobias Burnus + + PR fortran/51383 + * resolve.c (find_array_spec): Use ref->u.c.component + directly without starting from ts.u.derived. + 2011-12-03 Tobias Burnus PR fortran/48887 diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 6baeff44fa7..2e50f04e5cd 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) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ab8534e0984..5691a032b73 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-12-04 Tobias Burnus + + PR fortran/51383 + * gfortran.dg/associate_10.f90: New. + 2011-12-04 Ira Rosen PR middle-end/51285 diff --git a/gcc/testsuite/gfortran.dg/associate_10.f90 b/gcc/testsuite/gfortran.dg/associate_10.f90 new file mode 100644 index 00000000000..53b055447b1 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/associate_10.f90 @@ -0,0 +1,23 @@ +! { dg-do compile } +! +! PR fortran/51383 +! +! Contributed by kaiserkarl31@yahoo.com +! +! Was failing before at the ref resolution of y1(1)%i. +! +program extend + type :: a + integer :: i + end type a + type, extends (a) :: b + integer :: j + end type b + type (a) :: x(2) + type (b) :: y(2) + associate (x1 => x, y1 => y) + x1(1)%i = 1 + ! Commenting out the following line will avoid the error + y1(1)%i = 2 + end associate +end program extend