diff options
author | Steve Kargl <kargl@gcc.gnu.org> | 2022-11-22 22:31:51 +0100 |
---|---|---|
committer | Harald Anlauf <anlauf@gmx.de> | 2022-11-23 19:10:42 +0100 |
commit | 2eaa0cc45e8eae0fc4a440d28c602964bcb1014d (patch) | |
tree | 353f712bcfcf57c6e103c63a3a060d60553a9fea | |
parent | 8a0fce6a51915c29584427fd376b40073c328090 (diff) | |
download | gcc-2eaa0cc45e8eae0fc4a440d28c602964bcb1014d.zip gcc-2eaa0cc45e8eae0fc4a440d28c602964bcb1014d.tar.gz gcc-2eaa0cc45e8eae0fc4a440d28c602964bcb1014d.tar.bz2 |
Fortran: error recovery on associate with bad selector [PR107577]
gcc/fortran/ChangeLog:
PR fortran/107577
* resolve.cc (find_array_spec): Choose appropriate locus either of
bad array reference or of non-array entity in error message.
gcc/testsuite/ChangeLog:
PR fortran/107577
* gfortran.dg/pr107577.f90: New test.
-rw-r--r-- | gcc/fortran/resolve.cc | 3 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/pr107577.f90 | 13 |
2 files changed, 15 insertions, 1 deletions
diff --git a/gcc/fortran/resolve.cc b/gcc/fortran/resolve.cc index 24e5aa0..3396c6c 100644 --- a/gcc/fortran/resolve.cc +++ b/gcc/fortran/resolve.cc @@ -5005,8 +5005,9 @@ find_array_spec (gfc_expr *e) case REF_ARRAY: if (as == NULL) { + locus loc = ref->u.ar.where.lb ? ref->u.ar.where : e->where; gfc_error ("Invalid array reference of a non-array entity at %L", - &ref->u.ar.where); + &loc); return false; } diff --git a/gcc/testsuite/gfortran.dg/pr107577.f90 b/gcc/testsuite/gfortran.dg/pr107577.f90 new file mode 100644 index 0000000..94e6620 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr107577.f90 @@ -0,0 +1,13 @@ +! { dg-do compile } +! PR fortran/107577 - ICE in find_array_spec +! Contributed by G.Steinmetz + +program p + implicit none + associate (y => f(4)) ! { dg-error "has no IMPLICIT type" } + if (lbound (y, 1) /= 1) stop 1 ! { dg-error "Invalid array reference" } + if (y(1) /= 1) stop 2 ! { dg-error "Invalid array reference" } + end associate +end + +! { dg-error "has no type" " " { target *-*-* } 7 } |