diff options
Diffstat (limited to 'gcc/fortran/array.c')
-rw-r--r-- | gcc/fortran/array.c | 9 |
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 |