diff options
author | Thomas Koenig <Thomas.Koenig@online.de> | 2005-04-17 20:26:57 +0000 |
---|---|---|
committer | Thomas Koenig <tkoenig@gcc.gnu.org> | 2005-04-17 20:26:57 +0000 |
commit | 5f9bfaf2bcc4f12f5ee6ac33c2bab1a752db1f4d (patch) | |
tree | 1a445a241116927659a4a5309a238451e2b7d33f | |
parent | 29dc5138c3af990d84d312ac52954021b0ac8c3c (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/reshape_rank7.f90 | 27 | ||||
-rw-r--r-- | libgfortran/ChangeLog | 10 | ||||
-rw-r--r-- | libgfortran/generated/reshape_i4.c | 18 | ||||
-rw-r--r-- | libgfortran/generated/reshape_i8.c | 18 | ||||
-rw-r--r-- | libgfortran/intrinsics/reshape_generic.c | 18 | ||||
-rw-r--r-- | libgfortran/m4/reshape.m4 | 18 |
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; |