re PR fortran/90002 (ICE: free_expr0(): Bad expr type)
authorSteven G. Kargl <kargl@gcc.gnu.org>
Wed, 12 Jun 2019 18:28:32 +0000 (18:28 +0000)
committerSteven G. Kargl <kargl@gcc.gnu.org>
Wed, 12 Jun 2019 18:28:32 +0000 (18:28 +0000)
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

gcc/fortran/ChangeLog
gcc/fortran/array.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/pr90002.f90 [new file with mode: 0644]

index 35e575a8d70a536d1eaa41d49d64c18e8c9c7532..ee4dbea350e81e887ae090f0255f4c79e327bec0 100644 (file)
@@ -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
index 96732ecd2e81445ea08a15da06df99f1e178e61a..0aee220e68d071b8a1e4dec55d2260860d7cc18a 100644 (file)
@@ -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 d853d17a133efe187be602fb809a1f1ce8d17602..e5f1a56e6ff32a5c94a5a2c9a03ad06030b8bd02 100644 (file)
@@ -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 (file)
index 0000000..cb993a5
--- /dev/null
@@ -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