From f49afcb009a548aa46c36344d8ebe4d0648ae429 Mon Sep 17 00:00:00 2001 From: Mikael Morin Date: Thu, 3 Nov 2011 23:28:25 +0000 Subject: [PATCH] trans-array.c (set_vector_loop_bounds): Loop over the parents. * trans-array.c (set_vector_loop_bounds): Loop over the parents. From-SVN: r180892 --- gcc/fortran/ChangeLog | 4 ++++ gcc/fortran/trans-array.c | 14 +++++++++----- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 196f3dae126f..47c4938f8e04 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,7 @@ +2011-11-03 Mikael Morin + + * trans-array.c (set_vector_loop_bounds): Loop over the parents. + 2011-11-03 Mikael Morin * trans-array.c (gfc_trans_array_constructor): Loop over the parents. diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c index 463a0a2cf6f6..25d9a37675c1 100644 --- a/gcc/fortran/trans-array.c +++ b/gcc/fortran/trans-array.c @@ -2197,14 +2197,18 @@ set_vector_loop_bounds (gfc_ss * ss) int dim; info = &ss->info->data.array; - loop = ss->loop; - for (n = 0; n < loop->dimen; n++) + for (; ss; ss = ss->parent) { - dim = ss->dim[n]; - if (info->ref->u.ar.dimen_type[dim] == DIMEN_VECTOR - && loop->to[n] == NULL) + loop = ss->loop; + + for (n = 0; n < loop->dimen; n++) { + dim = ss->dim[n]; + if (info->ref->u.ar.dimen_type[dim] != DIMEN_VECTOR + || loop->to[n] != NULL) + continue; + /* Loop variable N indexes vector dimension DIM, and we don't yet know the upper bound of loop variable N. Set it to the difference between the vector's upper and lower bounds. */ -- 2.47.3