diff options
author | Mikael Morin <mikael@gcc.gnu.org> | 2011-11-03 23:25:34 +0000 |
---|---|---|
committer | Mikael Morin <mikael@gcc.gnu.org> | 2011-11-03 23:25:34 +0000 |
commit | fa168d9ff4f07bde598f8d924f5c854127598f6e (patch) | |
tree | 35e7b8ad12bcffd188618648aa86051fd9b04f7b /gcc/fortran/trans-array.c | |
parent | 5125d6d5d76fa59b01ccbb83997ce8ca335a0036 (diff) | |
download | gcc-fa168d9ff4f07bde598f8d924f5c854127598f6e.zip gcc-fa168d9ff4f07bde598f8d924f5c854127598f6e.tar.gz gcc-fa168d9ff4f07bde598f8d924f5c854127598f6e.tar.bz2 |
trans-array.c (gfc_trans_array_constructor): Loop over the parents.
* trans-array.c (gfc_trans_array_constructor): Loop over the parents.
From-SVN: r180891
Diffstat (limited to 'gcc/fortran/trans-array.c')
-rw-r--r-- | gcc/fortran/trans-array.c | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c index 83542f6..463a0a2 100644 --- a/gcc/fortran/trans-array.c +++ b/gcc/fortran/trans-array.c @@ -1953,6 +1953,7 @@ trans_constant_array_constructor (gfc_ss * ss, tree type) } } + /* Helper routine of gfc_trans_array_constructor to determine if the bounds of the loop specified by LOOP are constant and simple enough to use with trans_constant_array_constructor. Returns the @@ -2010,6 +2011,7 @@ trans_array_constructor (gfc_ss * ss, locus * where) gfc_loopinfo *loop; gfc_ss_info *ss_info; gfc_expr *expr; + gfc_ss *s; /* Save the old values for nested checking. */ old_first_len = first_len; @@ -2078,16 +2080,20 @@ trans_array_constructor (gfc_ss * ss, locus * where) if (expr->shape && loop->dimen > 1 && loop->to[0] == NULL_TREE) { /* We have a multidimensional parameter. */ - int n; - for (n = 0; n < expr->rank; n++) - { - loop->from[n] = gfc_index_zero_node; - loop->to[n] = gfc_conv_mpz_to_tree (expr->shape [n], - gfc_index_integer_kind); - loop->to[n] = fold_build2_loc (input_location, MINUS_EXPR, - gfc_array_index_type, - loop->to[n], gfc_index_one_node); - } + for (s = ss; s; s = s->parent) + { + int n; + for (n = 0; n < s->loop->dimen; n++) + { + s->loop->from[n] = gfc_index_zero_node; + s->loop->to[n] = gfc_conv_mpz_to_tree (expr->shape[s->dim[n]], + gfc_index_integer_kind); + s->loop->to[n] = fold_build2_loc (input_location, MINUS_EXPR, + gfc_array_index_type, + s->loop->to[n], + gfc_index_one_node); + } + } } if (loop->to[0] == NULL_TREE) |