005-04-17 Thomas Koenig <Thomas.Koenig@online.de>
authorThomas Koenig <Thomas.Koenig@online.de>
Sun, 17 Apr 2005 20:26:57 +0000 (20:26 +0000)
committerThomas Koenig <tkoenig@gcc.gnu.org>
Sun, 17 Apr 2005 20:26:57 +0000 (20:26 +0000)
        PR libfortran/21075
        * m4/reshape.m4 (reshape_`'rtype_kind):  Change dimension
        of auxiliary arrays from GFC_MAX_DIMENSIONS - 1 to
        GFC_MAX_DIMENSIONS.
        * intrinsics/reshape_generic.c (reshape_generic):  Likewise.
        * generated/reshape_i4.c:  Regenerated.
        * generated/reshape_i8.c:  Regenerated.

2005-04-17  Thomas Koenig  <Thomas.Koenig@online.de>

        PR libfortran/21075
        * gfortran.dg/reshape_rank7.f90: New test.

From-SVN: r98288

gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/reshape_rank7.f90 [new file with mode: 0644]
libgfortran/ChangeLog
libgfortran/generated/reshape_i4.c
libgfortran/generated/reshape_i8.c
libgfortran/intrinsics/reshape_generic.c
libgfortran/m4/reshape.m4

index 73501f20909615eb257292cb84a80ef8447e2d54..b683caf41102fc62f8db418e9423ea32863eefcf 100644 (file)
@@ -1,3 +1,8 @@
+2005-04-17  Thomas Koenig  <Thomas.Koenig@online.de>
+
+       PR libfortran/21075
+       * gfortran.dg/reshape_rank7.f90: New test.
+
 2005-04-17 Paul Thomas <pault@gcc.gnu.org>
 
        PR libfortran/12884 gfortran.dg/pr12884.f: New test
diff --git a/gcc/testsuite/gfortran.dg/reshape_rank7.f90 b/gcc/testsuite/gfortran.dg/reshape_rank7.f90
new file mode 100644 (file)
index 0000000..d8f84f7
--- /dev/null
@@ -0,0 +1,27 @@
+! { dg-do run}
+! PR 21075:  Reshape with rank 7 used to segfault.
+program main
+  integer :: a(256), b(2,2,2,2,2,2,2)
+  do i=1,256
+     a(i) = i
+  end do
+  b = reshape(a(1:256:2), shape(b))
+  do i1=1,2
+     do i2=1,2
+        do i3=1,2
+           do i4=1,2
+              do i5=1,2
+                 do i6=1,2
+                    do i7=1,2
+                       if (b(i1,i2,i3,i4,i5,i6,i7) /= &
+                            2*((i1-1)+(i2-1)*2+(i3-1)*4+(i4-1)*8+&
+                            (i5-1)*16+(i6-1)*32+(i7-1)*64)+1) &
+                            call abort
+              end do
+            end do
+          end do
+        end do
+      end do
+    end do
+  end do
+end program main
index 9c083ad8d99ff2e0d917f9aeedbec99dda1bf1a0..045f8ce1e75728e1e0d23f873c49a7060a9b759c 100644 (file)
@@ -1,3 +1,13 @@
+2005-04-17  Thomas Koenig  <Thomas.Koenig@online.de>
+
+       PR libfortran/21075
+       * m4/reshape.m4 (reshape_`'rtype_kind):  Change dimension
+       of auxiliary arrays from GFC_MAX_DIMENSIONS - 1 to
+       GFC_MAX_DIMENSIONS.
+       * intrinsics/reshape_generic.c (reshape_generic):  Likewise.
+       * generated/reshape_i4.c:  Regenerated.
+       * generated/reshape_i8.c:  Regenerated.
+
 2005-04-17 Paul Thomas <pault@gcc.gnu.org>
 
 * io/list_read.c (eat_separator): at_eol = 1 replaced(zapped at some time?).
index 454613f06b60c3dc0ac09daebe0a74e019c842be..fbe16f293a5beb557bcf3dc4fb5b36df66cdadd7 100644 (file)
@@ -47,25 +47,25 @@ reshape_4 (gfc_array_i4 * ret, gfc_array_i4 * source, shape_type * shape,
                       gfc_array_i4 * pad, shape_type * order)
 {
   /* r.* indicates the return array.  */
-  index_type rcount[GFC_MAX_DIMENSIONS - 1];
-  index_type rextent[GFC_MAX_DIMENSIONS - 1];
-  index_type rstride[GFC_MAX_DIMENSIONS - 1];
+  index_type rcount[GFC_MAX_DIMENSIONS];
+  index_type rextent[GFC_MAX_DIMENSIONS];
+  index_type rstride[GFC_MAX_DIMENSIONS];
   index_type rstride0;
   index_type rdim;
   index_type rsize;
   GFC_INTEGER_4 *rptr;
   /* s.* indicates the source array.  */
-  index_type scount[GFC_MAX_DIMENSIONS - 1];
-  index_type sextent[GFC_MAX_DIMENSIONS - 1];
-  index_type sstride[GFC_MAX_DIMENSIONS - 1];
+  index_type scount[GFC_MAX_DIMENSIONS];
+  index_type sextent[GFC_MAX_DIMENSIONS];
+  index_type sstride[GFC_MAX_DIMENSIONS];
   index_type sstride0;
   index_type sdim;
   index_type ssize;
   const GFC_INTEGER_4 *sptr;
   /* p.* indicates the pad array.  */
-  index_type pcount[GFC_MAX_DIMENSIONS - 1];
-  index_type pextent[GFC_MAX_DIMENSIONS - 1];
-  index_type pstride[GFC_MAX_DIMENSIONS - 1];
+  index_type pcount[GFC_MAX_DIMENSIONS];
+  index_type pextent[GFC_MAX_DIMENSIONS];
+  index_type pstride[GFC_MAX_DIMENSIONS];
   index_type pdim;
   index_type psize;
   const GFC_INTEGER_4 *pptr;
index f58e9b28ad374f2876e2847d1b6da166811741f9..6d835ff580b39ce9ad1dba90f3882ebfa3ea9c41 100644 (file)
@@ -47,25 +47,25 @@ reshape_8 (gfc_array_i8 * ret, gfc_array_i8 * source, shape_type * shape,
                       gfc_array_i8 * pad, shape_type * order)
 {
   /* r.* indicates the return array.  */
-  index_type rcount[GFC_MAX_DIMENSIONS - 1];
-  index_type rextent[GFC_MAX_DIMENSIONS - 1];
-  index_type rstride[GFC_MAX_DIMENSIONS - 1];
+  index_type rcount[GFC_MAX_DIMENSIONS];
+  index_type rextent[GFC_MAX_DIMENSIONS];
+  index_type rstride[GFC_MAX_DIMENSIONS];
   index_type rstride0;
   index_type rdim;
   index_type rsize;
   GFC_INTEGER_8 *rptr;
   /* s.* indicates the source array.  */
-  index_type scount[GFC_MAX_DIMENSIONS - 1];
-  index_type sextent[GFC_MAX_DIMENSIONS - 1];
-  index_type sstride[GFC_MAX_DIMENSIONS - 1];
+  index_type scount[GFC_MAX_DIMENSIONS];
+  index_type sextent[GFC_MAX_DIMENSIONS];
+  index_type sstride[GFC_MAX_DIMENSIONS];
   index_type sstride0;
   index_type sdim;
   index_type ssize;
   const GFC_INTEGER_8 *sptr;
   /* p.* indicates the pad array.  */
-  index_type pcount[GFC_MAX_DIMENSIONS - 1];
-  index_type pextent[GFC_MAX_DIMENSIONS - 1];
-  index_type pstride[GFC_MAX_DIMENSIONS - 1];
+  index_type pcount[GFC_MAX_DIMENSIONS];
+  index_type pextent[GFC_MAX_DIMENSIONS];
+  index_type pstride[GFC_MAX_DIMENSIONS];
   index_type pdim;
   index_type psize;
   const GFC_INTEGER_8 *pptr;
index 80a31afc6e19bb1ba2e3abd02277ea93d5e2fd4b..c0339cad6338052c32cc1f7e11b1d87e67618a0a 100644 (file)
@@ -48,25 +48,25 @@ reshape (parray *ret, parray *source, shape_type *shape,
         parray *pad, shape_type *order)
 {
   /* r.* indicates the return array.  */
-  index_type rcount[GFC_MAX_DIMENSIONS - 1];
-  index_type rextent[GFC_MAX_DIMENSIONS - 1];
-  index_type rstride[GFC_MAX_DIMENSIONS - 1];
+  index_type rcount[GFC_MAX_DIMENSIONS];
+  index_type rextent[GFC_MAX_DIMENSIONS];
+  index_type rstride[GFC_MAX_DIMENSIONS];
   index_type rstride0;
   index_type rdim;
   index_type rsize;
   char *rptr;
   /* s.* indicates the source array.  */
-  index_type scount[GFC_MAX_DIMENSIONS - 1];
-  index_type sextent[GFC_MAX_DIMENSIONS - 1];
-  index_type sstride[GFC_MAX_DIMENSIONS - 1];
+  index_type scount[GFC_MAX_DIMENSIONS];
+  index_type sextent[GFC_MAX_DIMENSIONS];
+  index_type sstride[GFC_MAX_DIMENSIONS];
   index_type sstride0;
   index_type sdim;
   index_type ssize;
   const char *sptr;
   /* p.* indicates the pad array.  */
-  index_type pcount[GFC_MAX_DIMENSIONS - 1];
-  index_type pextent[GFC_MAX_DIMENSIONS - 1];
-  index_type pstride[GFC_MAX_DIMENSIONS - 1];
+  index_type pcount[GFC_MAX_DIMENSIONS];
+  index_type pextent[GFC_MAX_DIMENSIONS];
+  index_type pstride[GFC_MAX_DIMENSIONS];
   index_type pdim;
   index_type psize;
   const char *pptr;
index 90a23e3850be820079459eff9ccefc1426dbe8bb..22e2536ecb7d6be4b6beb24feefbd6ca608224d3 100644 (file)
@@ -49,25 +49,25 @@ reshape_`'rtype_kind (rtype * ret, rtype * source, shape_type * shape,
                       rtype * pad, shape_type * order)
 {
   /* r.* indicates the return array.  */
-  index_type rcount[GFC_MAX_DIMENSIONS - 1];
-  index_type rextent[GFC_MAX_DIMENSIONS - 1];
-  index_type rstride[GFC_MAX_DIMENSIONS - 1];
+  index_type rcount[GFC_MAX_DIMENSIONS];
+  index_type rextent[GFC_MAX_DIMENSIONS];
+  index_type rstride[GFC_MAX_DIMENSIONS];
   index_type rstride0;
   index_type rdim;
   index_type rsize;
   rtype_name *rptr;
   /* s.* indicates the source array.  */
-  index_type scount[GFC_MAX_DIMENSIONS - 1];
-  index_type sextent[GFC_MAX_DIMENSIONS - 1];
-  index_type sstride[GFC_MAX_DIMENSIONS - 1];
+  index_type scount[GFC_MAX_DIMENSIONS];
+  index_type sextent[GFC_MAX_DIMENSIONS];
+  index_type sstride[GFC_MAX_DIMENSIONS];
   index_type sstride0;
   index_type sdim;
   index_type ssize;
   const rtype_name *sptr;
   /* p.* indicates the pad array.  */
-  index_type pcount[GFC_MAX_DIMENSIONS - 1];
-  index_type pextent[GFC_MAX_DIMENSIONS - 1];
-  index_type pstride[GFC_MAX_DIMENSIONS - 1];
+  index_type pcount[GFC_MAX_DIMENSIONS];
+  index_type pextent[GFC_MAX_DIMENSIONS];
+  index_type pstride[GFC_MAX_DIMENSIONS];
   index_type pdim;
   index_type psize;
   const rtype_name *pptr;