005-04-17 Thomas Koenig <Thomas.Koenig@online.de>
authortkoenig <tkoenig@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 17 Apr 2005 20:26:57 +0000 (20:26 +0000)
committertkoenig <tkoenig@138bc75d-0d04-0410-961f-82ee72b054a4>
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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@98288 138bc75d-0d04-0410-961f-82ee72b054a4

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 73501f2..b683caf 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 9c083ad..045f8ce 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 454613f..fbe16f2 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 f58e9b2..6d835ff 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 80a31af..c0339ca 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 90a23e3..22e2536 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;