aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/array.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/fortran/array.c')
-rw-r--r--gcc/fortran/array.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/gcc/fortran/array.c b/gcc/fortran/array.c
index ec0c266..30656c1 100644
--- a/gcc/fortran/array.c
+++ b/gcc/fortran/array.c
@@ -2201,6 +2201,7 @@ gfc_ref_dimen_size (gfc_array_ref *ar, int dimen, mpz_t *result, mpz_t *end)
mpz_t upper, lower, stride;
mpz_t diff;
bool t;
+ gfc_expr *stride_expr = NULL;
if (dimen < 0 || ar == NULL || dimen > ar->dimen - 1)
gfc_internal_error ("gfc_ref_dimen_size(): Bad dimension");
@@ -2225,12 +2226,16 @@ gfc_ref_dimen_size (gfc_array_ref *ar, int dimen, mpz_t *result, mpz_t *end)
mpz_set_ui (stride, 1);
else
{
- if (ar->stride[dimen]->expr_type != EXPR_CONSTANT)
+ stride_expr = gfc_copy_expr(ar->stride[dimen]);
+ if(!gfc_simplify_expr(stride_expr, 1))
+ gfc_internal_error("Simplification error");
+ if (stride_expr->expr_type != EXPR_CONSTANT)
{
mpz_clear (stride);
return false;
}
- mpz_set (stride, ar->stride[dimen]->value.integer);
+ mpz_set (stride, stride_expr->value.integer);
+ gfc_free_expr(stride_expr);
}
/* Calculate the number of elements via gfc_dep_differce, but only if