]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR fortran/50420 ([Coarray] lcobound doesn't accept coarray subcomponents)
authorMikael Morin <mikael@gcc.gnu.org>
Tue, 18 Oct 2011 14:42:21 +0000 (14:42 +0000)
committerMikael Morin <mikael@gcc.gnu.org>
Tue, 18 Oct 2011 14:42:21 +0000 (14:42 +0000)
PR fortran/50420
* trans-array.c (gfc_conv_expr_descriptor): Count codimensions starting
from zero, and add then the relevant offset (either ndim or loop.dimen)
depending on context.

From-SVN: r180142

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

index 6dc36b358cb19192356e24ae269ea36891b12c4d..06a65a4b475d7f0277e044d0451584316c3cfe63 100644 (file)
@@ -1,3 +1,10 @@
+2011-10-18  Mikael Morin  <mikael@gcc.gnu.org>
+
+       PR fortran/50420
+       * trans-array.c (gfc_conv_expr_descriptor): Count codimensions starting
+       from zero, and add then the relevant offset (either ndim or loop.dimen)
+       depending on context.
+
 2011-10-18  Mikael Morin  <mikael@gcc.gnu.org>
 
        * trans-array.c (gfc_conv_expr_descriptor): Save some horizontal space.
index 0034b49ffa89a69b80a08804fdb199a0b4db7187..0da1720c40b1c1325903937463fdbe78571a30e0 100644 (file)
@@ -5981,25 +5981,24 @@ gfc_conv_expr_descriptor (gfc_se * se, gfc_expr * expr, gfc_ss * ss)
          gfc_array_ref *ar = &info->ref->u.ar;
 
          codim = gfc_get_corank (expr);
-         for (n = ss->data.info.dimen; n < ss->data.info.dimen + codim - 1;
-              n++)
+         for (n = 0; n < codim - 1; n++)
            {
              /* Make sure we are not lost somehow.  */
-             gcc_assert (ar->dimen_type[n] == DIMEN_THIS_IMAGE);
+             gcc_assert (ar->dimen_type[n + ndim] == DIMEN_THIS_IMAGE);
 
              /* Make sure the call to gfc_conv_section_startstride won't
                 generate unnecessary code to calculate stride.  */
-             gcc_assert (ar->stride[n] == NULL);
+             gcc_assert (ar->stride[n + ndim] == NULL);
 
-             gfc_conv_section_startstride (&loop, ss, n);
-             loop.from[n] = info->start[n];
-             loop.to[n]   = info->end[n];
+             gfc_conv_section_startstride (&loop, ss, n + ndim);
+             loop.from[n + loop.dimen] = info->start[n + ndim];
+             loop.to[n + loop.dimen]   = info->end[n + ndim];
            }
 
-         gcc_assert (n == ss->data.info.dimen + codim - 1);
+         gcc_assert (n == codim - 1);
          evaluate_bound (&loop.pre, info->start, ar->start,
-                         info->descriptor, n, true);
-         loop.from[n] = info->start[n];
+                         info->descriptor, n + ndim, true);
+         loop.from[n + loop.dimen] = info->start[n + ndim];
        }
       else
        codim = 0;