trans-array.c (gfc_conv_expr_descriptor): Add out-of-the-scalarizer cobounds evaluation.
authorMikael Morin <mikael.morin@sfr.fr>
Fri, 7 Oct 2011 19:47:07 +0000 (21:47 +0200)
committerMikael Morin <mikael@gcc.gnu.org>
Fri, 7 Oct 2011 19:47:07 +0000 (19:47 +0000)
* trans-array.c (gfc_conv_expr_descriptor): Add out-of-the-scalarizer
cobounds evaluation.

From-SVN: r179683

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

index 8657e59f8a1d853050b191b63ce60c6df2de4436..8bcaf58224cbf9e3082885961d0fb1f3beacb3c3 100644 (file)
@@ -1,3 +1,8 @@
+2011-10-07  Mikael Morin  <mikael.morin@sfr.fr>
+
+       * trans-array.c (gfc_conv_expr_descriptor): Add out-of-the-scalarizer
+       cobounds evaluation.
+
 2011-10-07  Mikael Morin  <mikael.morin@sfr.fr>
 
        * trans-array.c (gfc_conv_ss_startstride): Support zero rank loop.
index 067fe0b7fa34f4d83db1eb7918628b18f3d4ef5e..b132bf655bdbcbd788c08a30c8d88a9b3272e503 100644 (file)
@@ -5994,7 +5994,21 @@ gfc_conv_expr_descriptor (gfc_se * se, gfc_expr * expr, gfc_ss * ss)
       tree base;
 
       if (se->want_coarray)
-       codim = gfc_get_corank (expr);
+       {
+         codim = gfc_get_corank (expr);
+         for (n = ss->data.info.dimen; n < ss->data.info.dimen + codim - 1;
+              n++)
+           {
+             gfc_conv_section_startstride (&loop, ss, n, true, false);
+             loop.from[n] = info->start[n];
+             loop.to[n]   = info->end[n];
+           }
+
+         gcc_assert (n == ss->data.info.dimen + codim - 1);
+         evaluate_bound (&loop.pre, info->start, info->ref->u.ar.start,
+                         info->descriptor, n, true);
+         loop.from[n] = info->start[n];
+       }
       else
        codim = 0;