From: Steven G. Kargl Date: Fri, 21 Jun 2019 00:38:13 +0000 (+0000) Subject: backport: re PR fortran/90002 (ICE: free_expr0(): Bad expr type) X-Git-Tag: releases/gcc-9.2.0~216 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2c5e6cf9cec1ac6fca5765edcffc5b544826e76b;p=thirdparty%2Fgcc.git backport: re PR fortran/90002 (ICE: free_expr0(): Bad expr type) 2019-06-20 Steven G. Kargl Backport from mainline PR fortran/90002 * array.c (gfc_free_array_spec): When freeing an array-spec, avoid an ICE for assumed-shape coarrays 2019-06-20 Steven G. Kargl Backport from mainline PR fortran/90002 * gfortran.dg/pr90002.f90: New test. From-SVN: r272540 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index c5a86631a12d..8fad5e8afb15 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2019-06-20 Steven G. Kargl + + Backport from mainline + PR fortran/90002 + * array.c (gfc_free_array_spec): When freeing an array-spec, avoid + an ICE for assumed-shape coarrays + 2019-06-20 Steven G. Kargl Backport from mainline diff --git a/gcc/fortran/array.c b/gcc/fortran/array.c index 96732ecd2e81..0aee220e68d0 100644 --- a/gcc/fortran/array.c +++ b/gcc/fortran/array.c @@ -324,10 +324,22 @@ gfc_free_array_spec (gfc_array_spec *as) if (as == NULL) return; - for (i = 0; i < as->rank + as->corank; i++) + if (as->corank == 0) { - gfc_free_expr (as->lower[i]); - gfc_free_expr (as->upper[i]); + for (i = 0; i < as->rank; i++) + { + gfc_free_expr (as->lower[i]); + gfc_free_expr (as->upper[i]); + } + } + else + { + int n = as->rank + as->corank - (as->cotype == AS_EXPLICIT ? 1 : 0); + for (i = 0; i < n; i++) + { + gfc_free_expr (as->lower[i]); + gfc_free_expr (as->upper[i]); + } } free (as); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f5466c0d3d3a..fd0afe0828eb 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2019-06-20 Steven G. Kargl + + Backport from mainline + PR fortran/90002 + * gfortran.dg/pr90002.f90: New test. + 2019-06-20 Steven G. Kargl Backport from mainline diff --git a/gcc/testsuite/gfortran.dg/pr90002.f90 b/gcc/testsuite/gfortran.dg/pr90002.f90 new file mode 100644 index 000000000000..cb993a5d5cce --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr90002.f90 @@ -0,0 +1,6 @@ +! { dg-do compile } +! { dg-options "-fcoarray=single" } +! Contributed by Arseny Solokha +module pc + integer, dimension(1) :: zw[1:1,1:*] +end module pc