Patchwork [fortran,committed] Fix PR 50130

login
register
mail settings
Submitter Thomas Koenig
Date Aug. 21, 2011, 12:04 p.m.
Message ID <4E50F452.3060203@netcologne.de>
Download mbox | patch
Permalink /patch/110829/
State New
Headers show

Comments

Thomas Koenig - Aug. 21, 2011, 12:04 p.m.
Hello world,

I committed the attached patch as obvious after regression-testing.
Revision is 177940.

Will commit to 4.6 in a few days.

	Thomas

2011-08-21  Thomas Koenig  <tkoenig@gcc.gnu.org>

         PR fortran/50130
         * resolve.c (resolve_array_ref):  Don't calculate upper bound
         if the stride is zero.

2011-08-21  Thomas Koenig  <tkoenig@gcc.gnu.org>

         PR fortran/50130
         * gfortran.dg/zero_stride_1.f90:  New test
! { dg-do compile }
!  PR 50130 - this caused an ICE.  Test case supplied by Joost
!  VandeVondele.
integer, parameter :: a(10)=0
integer, parameter :: b(10)=a(1:10:0) ! { dg-error "Illegal stride of zero" }
END

Patch

Index: resolve.c
===================================================================
--- resolve.c	(Revision 177746)
+++ resolve.c	(Arbeitskopie)
@@ -4569,10 +4569,11 @@  resolve_array_ref (gfc_array_ref *ar)
       /* Fill in the upper bound, which may be lower than the
 	 specified one for something like a(2:10:5), which is
 	 identical to a(2:7:5).  Only relevant for strides not equal
-	 to one.  */
+	 to one.  Don't try a division by zero.  */
       if (ar->dimen_type[i] == DIMEN_RANGE
 	  && ar->stride[i] != NULL && ar->stride[i]->expr_type == EXPR_CONSTANT
-	  && mpz_cmp_si (ar->stride[i]->value.integer, 1L) != 0)
+	  && mpz_cmp_si (ar->stride[i]->value.integer, 1L) != 0
+	  && mpz_cmp_si (ar->stride[i]->value.integer, 0L) != 0)
 	{
 	  mpz_t size, end;