aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/trans-array.c
diff options
context:
space:
mode:
authorMikael Morin <mikael.morin@sfr.fr>2011-10-07 22:32:37 +0200
committerMikael Morin <mikael@gcc.gnu.org>2011-10-07 20:32:37 +0000
commit065c6f9de2d4a96bb09e17dcdfb0c98fb200426c (patch)
tree8bb7e132061e6aa4cf10bd5453f0f885e0354041 /gcc/fortran/trans-array.c
parent6cb0246c1bef48b03473e06697e2d22930c29df2 (diff)
downloadgcc-065c6f9de2d4a96bb09e17dcdfb0c98fb200426c.zip
gcc-065c6f9de2d4a96bb09e17dcdfb0c98fb200426c.tar.gz
gcc-065c6f9de2d4a96bb09e17dcdfb0c98fb200426c.tar.bz2
trans-array.c (gfc_conv_section_startstride): Remove coarray argument.
* trans-array.c (gfc_conv_section_startstride): Remove coarray argument. Remove conditions on coarray. (gfc_conv_ss_startstride): Update call to gfc_conv_section_startstride. (gfc_conv_expr_descriptor): Ditto. Add assertions before the call. From-SVN: r179693
Diffstat (limited to 'gcc/fortran/trans-array.c')
-rw-r--r--gcc/fortran/trans-array.c25
1 files changed, 14 insertions, 11 deletions
diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c
index 95ebf6c..a034886 100644
--- a/gcc/fortran/trans-array.c
+++ b/gcc/fortran/trans-array.c
@@ -3200,8 +3200,7 @@ evaluate_bound (stmtblock_t *block, tree *bounds, gfc_expr ** values,
/* Calculate the lower bound of an array section. */
static void
-gfc_conv_section_startstride (gfc_loopinfo * loop, gfc_ss * ss, int dim,
- bool coarray)
+gfc_conv_section_startstride (gfc_loopinfo * loop, gfc_ss * ss, int dim)
{
gfc_expr *stride = NULL;
tree desc;
@@ -3219,16 +3218,14 @@ gfc_conv_section_startstride (gfc_loopinfo * loop, gfc_ss * ss, int dim,
/* We use a zero-based index to access the vector. */
info->start[dim] = gfc_index_zero_node;
info->end[dim] = NULL;
- if (!coarray)
- info->stride[dim] = gfc_index_one_node;
+ info->stride[dim] = gfc_index_one_node;
return;
}
gcc_assert (ar->dimen_type[dim] == DIMEN_RANGE
|| ar->dimen_type[dim] == DIMEN_THIS_IMAGE);
desc = info->descriptor;
- if (!coarray)
- stride = ar->stride[dim];
+ stride = ar->stride[dim];
/* Calculate the start of the range. For vector subscripts this will
be the range of the vector. */
@@ -3240,9 +3237,9 @@ gfc_conv_section_startstride (gfc_loopinfo * loop, gfc_ss * ss, int dim,
evaluate_bound (&loop->pre, info->end, ar->end, desc, dim, false);
/* Calculate the stride. */
- if (!coarray && stride == NULL)
+ if (stride == NULL)
info->stride[dim] = gfc_index_one_node;
- else if (!coarray)
+ else
{
gfc_init_se (&se, NULL);
gfc_conv_expr_type (&se, stride, gfc_array_index_type);
@@ -3319,8 +3316,7 @@ done:
gfc_conv_ss_descriptor (&loop->pre, ss, !loop->array_parameter);
for (n = 0; n < ss->data.info.dimen; n++)
- gfc_conv_section_startstride (loop, ss, ss->data.info.dim[n],
- false);
+ gfc_conv_section_startstride (loop, ss, ss->data.info.dim[n]);
break;
case GFC_SS_INTRINSIC:
@@ -5975,7 +5971,14 @@ gfc_conv_expr_descriptor (gfc_se * se, gfc_expr * expr, gfc_ss * ss)
for (n = ss->data.info.dimen; n < ss->data.info.dimen + codim - 1;
n++)
{
- gfc_conv_section_startstride (&loop, ss, n, true);
+ /* Make sure we are not lost somehow. */
+ gcc_assert (info->ref->u.ar.dimen_type[n] == DIMEN_THIS_IMAGE);
+
+ /* Make sure the call to gfc_conv_section_startstride won't
+ generate unnecessary code to calculate stride. */
+ gcc_assert (info->ref->u.ar.stride[n] == NULL);
+
+ gfc_conv_section_startstride (&loop, ss, n);
loop.from[n] = info->start[n];
loop.to[n] = info->end[n];
}