The attached patch fixes an ICE when freeing an array-spec that involves an assumed-shaped coarray (see testcase). The patch regression tests cleanly. I don't use coarrays, so cannot say whether the testcase is valid Fortran. I simply fixed the ICE. OK to commit?
2019-06-11 Steven G. Kargl <ka...@gcc.gnu.org> PR fortran/90002 * array.c (gfc_free_array_spec): When freeing an array-spec, avoid an ICE for assumed-shape coarrays 2019-06-11 Steven G. Kargl <ka...@gcc.gnu.org> PR fortran/90002 * gfortran.dg/pr90002.f90: New test. -- Steve
Index: gcc/fortran/array.c =================================================================== --- gcc/fortran/array.c (revision 272173) +++ gcc/fortran/array.c (working copy) @@ -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); Index: gcc/testsuite/gfortran.dg/pr90002.f90 =================================================================== --- gcc/testsuite/gfortran.dg/pr90002.f90 (nonexistent) +++ gcc/testsuite/gfortran.dg/pr90002.f90 (working copy) @@ -0,0 +1,6 @@ +! { dg-do compile } +! { dg-options "-fcoarray=single" } +! Contributed by Arseny Solokha <asolokha at gmx dot de> +module pc + integer, dimension(1) :: zw[1:1,1:*] +end module pc