aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/trans-array.c
diff options
context:
space:
mode:
authorMikael Morin <mikael@gcc.gnu.org>2011-10-18 14:42:21 +0000
committerMikael Morin <mikael@gcc.gnu.org>2011-10-18 14:42:21 +0000
commita04b23d8a4b8df18959c839795a59140689bb1f3 (patch)
tree0ac4083fa009b1767348d572f86c658ca468ebf1 /gcc/fortran/trans-array.c
parent7c5950bd7f9afd05ea528fc3d42ceb63af1fd8de (diff)
downloadgcc-a04b23d8a4b8df18959c839795a59140689bb1f3.zip
gcc-a04b23d8a4b8df18959c839795a59140689bb1f3.tar.gz
gcc-a04b23d8a4b8df18959c839795a59140689bb1f3.tar.bz2
re PR fortran/50420 ([Coarray] lcobound doesn't accept coarray subcomponents)
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
Diffstat (limited to 'gcc/fortran/trans-array.c')
-rw-r--r--gcc/fortran/trans-array.c19
1 files changed, 9 insertions, 10 deletions
diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c
index 0034b49..0da1720 100644
--- a/gcc/fortran/trans-array.c
+++ b/gcc/fortran/trans-array.c
@@ -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;