aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/array.c
diff options
context:
space:
mode:
authorHarald Anlauf <anlauf@gmx.de>2021-12-07 18:46:52 +0100
committerHarald Anlauf <anlauf@gmx.de>2021-12-07 18:46:52 +0100
commit652c28736209f10bac1aa7ecb31f9056b518dacf (patch)
tree19b8c7355a56680f15b2c8393cc57e77558cc33a /gcc/fortran/array.c
parentf47662204de27f7685699eeef89aa173ccf32d85 (diff)
downloadgcc-652c28736209f10bac1aa7ecb31f9056b518dacf.zip
gcc-652c28736209f10bac1aa7ecb31f9056b518dacf.tar.gz
gcc-652c28736209f10bac1aa7ecb31f9056b518dacf.tar.bz2
Fortran: catch failed simplification of bad stride expression
gcc/fortran/ChangeLog: PR fortran/103588 * array.c (gfc_ref_dimen_size): Do not generate internal error on failed simplification of stride expression; just return failure. gcc/testsuite/ChangeLog: PR fortran/103588 * gfortran.dg/pr103588.f90: New test.
Diffstat (limited to 'gcc/fortran/array.c')
-rw-r--r--gcc/fortran/array.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/gcc/fortran/array.c b/gcc/fortran/array.c
index 5762c8d..e5e2209 100644
--- a/gcc/fortran/array.c
+++ b/gcc/fortran/array.c
@@ -2403,12 +2403,11 @@ gfc_ref_dimen_size (gfc_array_ref *ar, int dimen, mpz_t *result, mpz_t *end)
{
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_cmp_ui (stride_expr->value.integer, 0) == 0)
+ if (!gfc_simplify_expr (stride_expr, 1)
+ || stride_expr->expr_type != EXPR_CONSTANT
+ || mpz_cmp_ui (stride_expr->value.integer, 0) == 0)
{
+ gfc_free_expr (stride_expr);
mpz_clear (stride);
return false;
}