The patch for PR fortran/36192 that I committed here:

https://gcc.gnu.org/ml/gcc-bugs/2015-10/msg02160.html

cured an ICE for a testcase that was reduced from the
originally submitted mutilated Fortran code.  The 
original code could in fact invoke another ICE.  This
patch cures that ICE.  The patch simply checks that
the array indices have INTEGER type before calling
GMP routines.  Tested om x86_64-*-freebsd.
OK to commit?

2015-10-29  Steven G. Kargl  <ka...@gcc.gnu.org>

        PR fortran/36192
        * interface.c (get_expr_storage_size):  Check for INTEGER type before
        calling gmp routines.

2015-10-29  Steven G. Kargl  <ka...@gcc.gnu.org>

        PR fortran/36192
        * gfortran.dg/pr36192_1.f90: New test.

-- 
Steve
Index: gcc/fortran/interface.c
===================================================================
--- gcc/fortran/interface.c	(revision 229542)
+++ gcc/fortran/interface.c	(working copy)
@@ -2455,7 +2455,9 @@ get_expr_storage_size (gfc_expr *e)
 	  {
 	    if (ref->u.ar.as->lower[i] && ref->u.ar.as->upper[i]
 		&& ref->u.ar.as->lower[i]->expr_type == EXPR_CONSTANT
-		&& ref->u.ar.as->upper[i]->expr_type == EXPR_CONSTANT)
+		&& ref->u.ar.as->lower[i]->ts.type == BT_INTEGER
+		&& ref->u.ar.as->upper[i]->expr_type == EXPR_CONSTANT
+		&& ref->u.ar.as->upper[i]->ts.type == BT_INTEGER)
 	      elements *= mpz_get_si (ref->u.ar.as->upper[i]->value.integer)
 			  - mpz_get_si (ref->u.ar.as->lower[i]->value.integer)
 			  + 1L;
Index: gcc/testsuite/gfortran.dg/pr36192_1.f90
===================================================================
--- gcc/testsuite/gfortran.dg/pr36192_1.f90	(revision 0)
+++ gcc/testsuite/gfortran.dg/pr36192_1.f90	(working copy)
@@ -0,0 +1,12 @@
+! { dg-do compile }
+! PR fortran/36192
+program three_body
+   real, parameter ::  n = 2, d = 2
+   real, dimension(n,d) :: x_hq ! { dg-error "of INTEGER type|of INTEGER type" }
+   call step(x_hq)
+   contains
+   subroutine step(x)
+      real, dimension(:,:), intent(in) :: x
+   end subroutine step
+end program three_body
+! { dg-prune-output "must have constant shape" }

Reply via email to