aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Koenig <Thomas.Koenig@online.de>2005-04-17 20:26:57 +0000
committerThomas Koenig <tkoenig@gcc.gnu.org>2005-04-17 20:26:57 +0000
commit5f9bfaf2bcc4f12f5ee6ac33c2bab1a752db1f4d (patch)
tree1a445a241116927659a4a5309a238451e2b7d33f
parent29dc5138c3af990d84d312ac52954021b0ac8c3c (diff)
downloadgcc-5f9bfaf2bcc4f12f5ee6ac33c2bab1a752db1f4d.zip
gcc-5f9bfaf2bcc4f12f5ee6ac33c2bab1a752db1f4d.tar.gz
gcc-5f9bfaf2bcc4f12f5ee6ac33c2bab1a752db1f4d.tar.bz2
005-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 Thomas Koenig <Thomas.Koenig@online.de> PR libfortran/21075 * gfortran.dg/reshape_rank7.f90: New test. From-SVN: r98288
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/reshape_rank7.f9027
-rw-r--r--libgfortran/ChangeLog10
-rw-r--r--libgfortran/generated/reshape_i4.c18
-rw-r--r--libgfortran/generated/reshape_i8.c18
-rw-r--r--libgfortran/intrinsics/reshape_generic.c18
-rw-r--r--libgfortran/m4/reshape.m418
7 files changed, 78 insertions, 36 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 73501f2..b683caf 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000..d8f84f7
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/reshape_rank7.f90
@@ -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
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index 9c083ad..045f8ce 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -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?).
diff --git a/libgfortran/generated/reshape_i4.c b/libgfortran/generated/reshape_i4.c
index 454613f..fbe16f2 100644
--- a/libgfortran/generated/reshape_i4.c
+++ b/libgfortran/generated/reshape_i4.c
@@ -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;
diff --git a/libgfortran/generated/reshape_i8.c b/libgfortran/generated/reshape_i8.c
index f58e9b2..6d835ff 100644
--- a/libgfortran/generated/reshape_i8.c
+++ b/libgfortran/generated/reshape_i8.c
@@ -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;
diff --git a/libgfortran/intrinsics/reshape_generic.c b/libgfortran/intrinsics/reshape_generic.c
index 80a31af..c0339ca 100644
--- a/libgfortran/intrinsics/reshape_generic.c
+++ b/libgfortran/intrinsics/reshape_generic.c
@@ -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;
diff --git a/libgfortran/m4/reshape.m4 b/libgfortran/m4/reshape.m4
index 90a23e3..22e2536 100644
--- a/libgfortran/m4/reshape.m4
+++ b/libgfortran/m4/reshape.m4
@@ -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;