From: Harald Anlauf Date: Tue, 23 Aug 2022 20:16:14 +0000 (+0200) Subject: Fortran: improve error recovery while simplifying size of bad array [PR103694] X-Git-Tag: release-12.2.mpacbti-rel1~478 X-Git-Url: https://gcc.gnu.org/git/?a=commitdiff_plain;h=1f682c96048456379729d495b41551a00eac5a3f;p=gcc.git Fortran: improve error recovery while simplifying size of bad array [PR103694] gcc/fortran/ChangeLog: PR fortran/103694 * simplify.cc (simplify_size): The size expression of an array cannot be simplified if an error occurs while resolving the array spec. gcc/testsuite/ChangeLog: PR fortran/103694 * gfortran.dg/pr103694.f90: New test. (cherry picked from commit 55d8c5409325001c89c35c3d04d425dec9127146) --- diff --git a/gcc/fortran/simplify.cc b/gcc/fortran/simplify.cc index 2f4f13b6a830..1d74cf35a25d 100644 --- a/gcc/fortran/simplify.cc +++ b/gcc/fortran/simplify.cc @@ -7498,8 +7498,9 @@ simplify_size (gfc_expr *array, gfc_expr *dim, int k) } for (ref = array->ref; ref; ref = ref->next) - if (ref->type == REF_ARRAY && ref->u.ar.as) - gfc_resolve_array_spec (ref->u.ar.as, 0); + if (ref->type == REF_ARRAY && ref->u.ar.as + && !gfc_resolve_array_spec (ref->u.ar.as, 0)) + return NULL; if (dim == NULL) { diff --git a/gcc/testsuite/gfortran.dg/pr103694.f90 b/gcc/testsuite/gfortran.dg/pr103694.f90 new file mode 100644 index 000000000000..3ed8b2088da8 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr103694.f90 @@ -0,0 +1,11 @@ +! { dg-do compile } +! PR fortran/103694 - ICE in gfc_conv_expr_op +! Contributed by G.Steinmetz + +subroutine s + type t + integer :: a(2) + end type + type(t) :: x((0.)/0) + integer :: n = size(x(1)%a) ! { dg-error "does not reduce to a constant expression" } +end