From: Harald Anlauf Date: Mon, 29 Nov 2021 21:56:30 +0000 (+0100) Subject: Fortran: error recovery when simplifying MINLOC/MAXLOC X-Git-Tag: basepoints/gcc-13~2678 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=36421e76a7150621f2a5c7060ddd3f80aa825a40;p=thirdparty%2Fgcc.git Fortran: error recovery when simplifying MINLOC/MAXLOC gcc/fortran/ChangeLog: PR fortran/103473 * simplify.c (simplify_minmaxloc_nodim): Avoid NULL pointer dereference when shape is not set. gcc/testsuite/ChangeLog: PR fortran/103473 * gfortran.dg/minmaxloc_15.f90: New test. --- diff --git a/gcc/fortran/simplify.c b/gcc/fortran/simplify.c index c9e13b59da92..fb7b78146039 100644 --- a/gcc/fortran/simplify.c +++ b/gcc/fortran/simplify.c @@ -5280,6 +5280,9 @@ simplify_minmaxloc_nodim (gfc_expr *result, gfc_expr *extremum, && !mask->value.logical) goto finish; + if (array->shape == NULL) + goto finish; + for (i = 0; i < array->rank; i++) { count[i] = 0; diff --git a/gcc/testsuite/gfortran.dg/minmaxloc_15.f90 b/gcc/testsuite/gfortran.dg/minmaxloc_15.f90 new file mode 100644 index 000000000000..e4eba3501d58 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/minmaxloc_15.f90 @@ -0,0 +1,11 @@ +! { dg-do compile } +! PR fortran/103473 - ICE in simplify_minmaxloc_nodim +! Test case by Gerhard Steinmetz. + +subroutine s + implicit none + integer, parameter :: a(+'1') = [1] ! { dg-error "unary numeric operator" } + print *, minloc (a) +end + +! { dg-prune-output "Parameter array" }