aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteven G. Kargl <kargl@gcc.gnu.org>2019-06-12 18:28:32 +0000
committerSteven G. Kargl <kargl@gcc.gnu.org>2019-06-12 18:28:32 +0000
commit974b8e618b52dd1d30ca067e75995fe9fc8e6895 (patch)
treeb5896ea164223e31c79166f4fd93421515a68a6b
parente97bf6bbbdb43e65cca8509a0f9af681c2a01c2b (diff)
downloadgcc-974b8e618b52dd1d30ca067e75995fe9fc8e6895.zip
gcc-974b8e618b52dd1d30ca067e75995fe9fc8e6895.tar.gz
gcc-974b8e618b52dd1d30ca067e75995fe9fc8e6895.tar.bz2
re PR fortran/90002 (ICE: free_expr0(): Bad expr type)
2019-06-12 Steven G. Kargl <kargl@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-12 Steven G. Kargl <kargl@gcc.gnu.org> PR fortran/90002 * gfortran.dg/pr90002.f90: New test. From-SVN: r272201
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/array.c18
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/pr90002.f906
4 files changed, 32 insertions, 3 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 35e575a..ee4dbea 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2019-06-12 Steven G. Kargl <kargl@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-08 Paul Thomas <pault@gcc.gnu.org>
PR fortran/90786
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);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index d853d17..e5f1a56 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2019-06-12 Steven G. Kargl <kargl@gcc.gnu.org>
+
+ PR fortran/90002
+ * gfortran.dg/pr90002.f90: New test.
+
2019-06-12 Martin Sebor <msebor@redhat.com>
PR middle-end/90676
diff --git a/gcc/testsuite/gfortran.dg/pr90002.f90 b/gcc/testsuite/gfortran.dg/pr90002.f90
new file mode 100644
index 0000000..cb993a5
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr90002.f90
@@ -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