[Patch, fortran] PR70071

Harald Anlauf anlauf@gmx.de
Thu May 4 15:33:00 GMT 2017


While trying to clean up my working copy, I found that the trivial
patch for the ICE-on-invalid as described in the PR regtests cleanly
for 7-release on i686-pc-linux-gnu.

Here's the cleaned-up version (diffs attached).


2017-05-04  Harald Anlauf  <anlauf@gmx.de>

	PR fortran/70071
	* array.c (gfc_ref_dimen_size): Handle bad subscript triplets.



2017-05-04  Harald Anlauf  <anlauf@gmx.de>

	PR fortran/70071
	* gfortran.dg/coarray_44.f90: New testcase.


If somebody wants to forward port this to 8-trunk, please go ahead.

Thanks,
Harald
-------------- next part --------------
Index: gcc/fortran/array.c
===================================================================
--- gcc/fortran/array.c	(revision 247015)
+++ gcc/fortran/array.c	(working copy)
@@ -2202,9 +2202,15 @@ gfc_ref_dimen_size (gfc_array_ref *ar, int dimen,
   mpz_t diff;
   bool t;
 
-  if (dimen < 0 || ar == NULL || dimen > ar->dimen - 1)
+  if (dimen < 0 || ar == NULL)
     gfc_internal_error ("gfc_ref_dimen_size(): Bad dimension");
 
+  if (dimen > ar->dimen - 1)
+    {
+      gfc_error ("Bad array dimension at %L", &ar->c_where[dimen]);
+      return false;
+    }
+
   switch (ar->dimen_type[dimen])
     {
     case DIMEN_ELEMENT:
-------------- next part --------------
Index: gcc/testsuite/gfortran.dg/coarray_44.f90
===================================================================
--- gcc/testsuite/gfortran.dg/coarray_44.f90	(revision 0)
+++ gcc/testsuite/gfortran.dg/coarray_44.f90	(revision 0)
@@ -0,0 +1,12 @@
+! { dg-do compile }
+! { dg-options "-fcoarray=single" }
+!
+! PR fortran/70071
+! Based on testcases by Gerhard Steinmetz
+
+program pr70071
+  implicit none
+  integer, allocatable :: z(:)[:,:]
+  allocate (z(2)[1::2,*])  ! { dg-error "Bad array dimension" }
+  allocate (z(1::2)[2,*])  ! { dg-error "Bad array specification in ALLOCATE" }
+end program pr70071


More information about the Gcc-patches mailing list