]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR fortran/50130 (ICE with invalid array slice)
authorThomas Koenig <tkoenig@gcc.gnu.org>
Sun, 21 Aug 2011 12:02:12 +0000 (12:02 +0000)
committerThomas Koenig <tkoenig@gcc.gnu.org>
Sun, 21 Aug 2011 12:02:12 +0000 (12:02 +0000)
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.

From-SVN: r177940

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

index 2e2a714dd2530bed1541fd122f2fe938b2e56503..0f1f44c53fcca87448b1f561d0cfab9d4a044e89 100644 (file)
@@ -1,3 +1,9 @@
+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-20  Janus Weil  <janus@gcc.gnu.org>
 
        PR fortran/49638
index ea184a23f0db7ccb048324bdd038b6d1e40d1558..85d2091dc88f18313c7db430ee645a582e6c2e5c 100644 (file)
@@ -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;
 
index d54fd2bd9bb8f00306feb5a083a5aa582b5e1ed2..8a3d3f2a8a807fc563991f8acba26fcefe57111f 100644 (file)
@@ -1,3 +1,8 @@
+2011-08-21  Thomas Koenig  <tkoenig@gcc.gnu.org>
+
+       PR fortran/50130
+       * gfortran.dg/zero_stride_1.f90:  New test.
+
 2011-08-20  Janus Weil  <janus@gcc.gnu.org>
 
        PR fortran/49638
diff --git a/gcc/testsuite/gfortran.dg/zero_stride_1.f90 b/gcc/testsuite/gfortran.dg/zero_stride_1.f90
new file mode 100644 (file)
index 0000000..c5f6cc7
--- /dev/null
@@ -0,0 +1,7 @@
+! { 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
+