From 66051b6074a5641299738aa1d698fc63175ca0de Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Fri, 11 Jun 2010 03:42:38 +0200 Subject: re PR fortran/44207 (ICE with ALLOCATABLE components and SOURCE) 2010-06-10 Janus Weil PR fortran/44207 * resolve.c (conformable_arrays): Handle allocatable components. 2010-06-10 Janus Weil PR fortran/44207 * gfortran.dg/allocate_alloc_opt_7.f90: New test. From-SVN: r160589 --- gcc/fortran/ChangeLog | 5 +++++ gcc/fortran/resolve.c | 13 ++++++++----- 2 files changed, 13 insertions(+), 5 deletions(-) (limited to 'gcc/fortran') diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 5988845..6cf60ee 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,8 @@ +2010-06-10 Janus Weil + + PR fortran/44207 + * resolve.c (conformable_arrays): Handle allocatable components. + 2010-06-10 Francois-Xavier Coudert PR fortran/38273 diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 226c2f9..4b4c505 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -6146,8 +6146,11 @@ gfc_expr_to_initialize (gfc_expr *e) static gfc_try conformable_arrays (gfc_expr *e1, gfc_expr *e2) { + gfc_ref *tail; + for (tail = e2->ref; tail && tail->next; tail = tail->next); + /* First compare rank. */ - if (e2->ref && e1->rank != e2->ref->u.ar.as->rank) + if (tail && e1->rank != tail->u.ar.as->rank) { gfc_error ("Source-expr at %L must be scalar or have the " "same rank as the allocate-object at %L", @@ -6164,15 +6167,15 @@ conformable_arrays (gfc_expr *e1, gfc_expr *e2) for (i = 0; i < e1->rank; i++) { - if (e2->ref->u.ar.end[i]) + if (tail->u.ar.end[i]) { - mpz_set (s, e2->ref->u.ar.end[i]->value.integer); - mpz_sub (s, s, e2->ref->u.ar.start[i]->value.integer); + mpz_set (s, tail->u.ar.end[i]->value.integer); + mpz_sub (s, s, tail->u.ar.start[i]->value.integer); mpz_add_ui (s, s, 1); } else { - mpz_set (s, e2->ref->u.ar.start[i]->value.integer); + mpz_set (s, tail->u.ar.start[i]->value.integer); } if (mpz_cmp (e1->shape[i], s) != 0) -- cgit v1.1