OSDN Git Service

* trans-array.c (gfc_trans_array_constructor): Loop over the parents.
authormikael <mikael@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 3 Nov 2011 23:25:34 +0000 (23:25 +0000)
committermikael <mikael@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 3 Nov 2011 23:25:34 +0000 (23:25 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@180891 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/fortran/ChangeLog
gcc/fortran/trans-array.c

index 7595d35..196f3da 100644 (file)
@@ -1,5 +1,9 @@
 2011-11-03  Mikael Morin  <mikael@gcc.gnu.org>
 
+       * trans-array.c (gfc_trans_array_constructor): Loop over the parents.
+
+2011-11-03  Mikael Morin  <mikael@gcc.gnu.org>
+
        * trans-array.c (gfc_set_loop_bounds_from_array_spec): Loop over the
        parents.
 
index 83542f6..463a0a2 100644 (file)
@@ -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)