diff options
author | Harald Anlauf <anlauf@gmx.de> | 2021-10-26 20:51:46 +0200 |
---|---|---|
committer | Harald Anlauf <anlauf@gmx.de> | 2021-10-26 20:51:46 +0200 |
commit | 99af0b2f0fe1c0dc8c6d558157e700326d52816a (patch) | |
tree | 529c76432524a22c6076c68c0cc2466f7b894045 /gcc/fortran/resolve.c | |
parent | c9bf4d4354b942af00193924cb59c4c6ab9cc4b5 (diff) | |
download | gcc-99af0b2f0fe1c0dc8c6d558157e700326d52816a.zip gcc-99af0b2f0fe1c0dc8c6d558157e700326d52816a.tar.gz gcc-99af0b2f0fe1c0dc8c6d558157e700326d52816a.tar.bz2 |
Fortran: error recovery on initializing invalid derived type array component
gcc/fortran/ChangeLog:
PR fortran/102816
* resolve.c (resolve_structure_cons): Reject invalid array spec of
a DT component referenced in a structure constructor.
gcc/testsuite/ChangeLog:
PR fortran/102816
* gfortran.dg/pr102816.f90: New test.
Diffstat (limited to 'gcc/fortran/resolve.c')
-rw-r--r-- | gcc/fortran/resolve.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 5ccd907..af71b13 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -1463,8 +1463,15 @@ resolve_structure_cons (gfc_expr *expr, int init) mpz_init (len); for (int n = 0; n < rank; n++) { - gcc_assert (comp->as->upper[n]->expr_type == EXPR_CONSTANT - && comp->as->lower[n]->expr_type == EXPR_CONSTANT); + if (comp->as->upper[n]->expr_type != EXPR_CONSTANT + || comp->as->lower[n]->expr_type != EXPR_CONSTANT) + { + gfc_error ("Bad array spec of component %qs referenced in " + "structure constructor at %L", + comp->name, &cons->expr->where); + t = false; + break; + }; mpz_set_ui (len, 1); mpz_add (len, len, comp->as->upper[n]->value.integer); mpz_sub (len, len, comp->as->lower[n]->value.integer); |