From 974b8e618b52dd1d30ca067e75995fe9fc8e6895 Mon Sep 17 00:00:00 2001 From: "Steven G. Kargl" Date: Wed, 12 Jun 2019 18:28:32 +0000 Subject: re PR fortran/90002 (ICE: free_expr0(): Bad expr type) 2019-06-12 Steven G. Kargl PR fortran/90002 * array.c (gfc_free_array_spec): When freeing an array-spec, avoid an ICE for assumed-shape coarrays 2019-06-12 Steven G. Kargl PR fortran/90002 * gfortran.dg/pr90002.f90: New test. From-SVN: r272201 --- gcc/fortran/array.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) (limited to 'gcc/fortran/array.c') diff --git a/gcc/fortran/array.c b/gcc/fortran/array.c index 96732ecd..0aee220 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); -- cgit v1.1