diff options
author | Harald Anlauf <anlauf@gmx.de> | 2021-09-07 20:51:49 +0200 |
---|---|---|
committer | Harald Anlauf <anlauf@gmx.de> | 2021-09-07 20:51:49 +0200 |
commit | 2a1537a19cb2fa85823cfa18ed40baa4b259b4e3 (patch) | |
tree | 92a691c3ad47e1b42ea7cf0d8109332a5890db28 /gcc/fortran/expr.c | |
parent | 849d5f5929fc1e480aa6d385976810d2b1319755 (diff) | |
download | gcc-2a1537a19cb2fa85823cfa18ed40baa4b259b4e3.zip gcc-2a1537a19cb2fa85823cfa18ed40baa4b259b4e3.tar.gz gcc-2a1537a19cb2fa85823cfa18ed40baa4b259b4e3.tar.bz2 |
Fortran - improve error recovery determining array element from constructor
gcc/fortran/ChangeLog:
PR fortran/101327
* expr.c (find_array_element): When bounds cannot be determined as
constant, return error instead of aborting.
gcc/testsuite/ChangeLog:
PR fortran/101327
* gfortran.dg/pr101327.f90: New test.
Diffstat (limited to 'gcc/fortran/expr.c')
-rw-r--r-- | gcc/fortran/expr.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/gcc/fortran/expr.c b/gcc/fortran/expr.c index 35563a7..dfecc30 100644 --- a/gcc/fortran/expr.c +++ b/gcc/fortran/expr.c @@ -1337,7 +1337,9 @@ find_array_element (gfc_constructor_base base, gfc_array_ref *ar, for (i = 0; i < ar->dimen; i++) { if (!gfc_reduce_init_expr (ar->as->lower[i]) - || !gfc_reduce_init_expr (ar->as->upper[i])) + || !gfc_reduce_init_expr (ar->as->upper[i]) + || ar->as->upper[i]->expr_type != EXPR_CONSTANT + || ar->as->lower[i]->expr_type != EXPR_CONSTANT) { t = false; cons = NULL; @@ -1351,9 +1353,6 @@ find_array_element (gfc_constructor_base base, gfc_array_ref *ar, goto depart; } - gcc_assert (ar->as->upper[i]->expr_type == EXPR_CONSTANT - && ar->as->lower[i]->expr_type == EXPR_CONSTANT); - /* Check the bounds. */ if ((ar->as->upper[i] && mpz_cmp (e->value.integer, |