summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_eoshift.f908
-rw-r--r--libgfortran/ChangeLog8
-rw-r--r--libgfortran/generated/eoshift3_4.c2
-rw-r--r--libgfortran/generated/eoshift3_8.c2
-rw-r--r--libgfortran/m4/eoshift3.m42
6 files changed, 25 insertions, 3 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 1794a3bd268..dfed3d3beb7 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2005-06-28 Thomas Koenig <Thomas.Koenig@online.de>
+
+ PR libfortran/22142
+ * gfortran.fortran-torture/execute/intrinsic_eoshift.f90:
+ Add testcase for PR 22142.
+
2005-06-28 Joseph S. Myers <joseph@codesourcery.com>
* g++.dg/ext/fpreg1.C, gcc.target/ia64/fpreg-1.c,
diff --git a/gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_eoshift.f90 b/gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_eoshift.f90
index 12edc630e50..a607baa5ba5 100644
--- a/gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_eoshift.f90
+++ b/gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_eoshift.f90
@@ -2,6 +2,7 @@
program intrinsic_eoshift
integer, dimension(3, 3) :: a
integer, dimension(3, 3, 2) :: b
+ integer, dimension(3) :: bo, sh
! Scalar shift and scalar bound.
a = reshape ((/1, 2, 3, 4, 5, 6, 7, 8, 9/), (/3, 3/))
@@ -47,6 +48,13 @@ program intrinsic_eoshift
if (any (a .ne. reshape ((/7, -1, 3, 99, -1, 6, 99, 2, 9/), (/3, 3/)))) &
call abort
+ a = reshape ((/1, 2, 3, 4, 5, 6, 7, 8, 9/), (/3, 3/))
+ sh = (/ 3, -1, -3 /)
+ bo = (/-999, -99, -9 /)
+ a = eoshift(a, shift=sh, boundary=bo)
+ if (any (a .ne. reshape ((/ -999, -999, -999, -99, 4, 5, -9, -9, -9 /), &
+ shape(a)))) call abort
+
! Test arrays > rank 2
b(:, :, 1) = reshape ((/1, 2, 3, 4, 5, 6, 7, 8, 9/), (/3, 3/))
b(:, :, 2) = 10 + reshape ((/1, 2, 3, 4, 5, 6, 7, 8, 9/), (/3, 3/))
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index 41a545f1df3..f7c2d5c3617 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -1,3 +1,11 @@
+2005-06-28 Thomas Koenig <Thomas.Koenig@online.de>
+
+ PR libfortran/22142
+ * m4/eoshift3.m4: Correct bstride (it needs to be multiplied
+ by size since it's a char pointer).
+ * m4/eoshift3_4.c: Regenerated.
+ * m4/eoshift3_8.c: Regenerated.
+
2005-06-28 Francois-Xavier Coudert <coudert@clipper.ens.fr>
PR libfortran/22170
diff --git a/libgfortran/generated/eoshift3_4.c b/libgfortran/generated/eoshift3_4.c
index 14c38b7bd6a..4ce66a3059a 100644
--- a/libgfortran/generated/eoshift3_4.c
+++ b/libgfortran/generated/eoshift3_4.c
@@ -135,7 +135,7 @@ eoshift3_4 (gfc_array_char *ret, gfc_array_char *array,
hstride[n] = h->dim[n].stride;
if (bound)
- bstride[n] = bound->dim[n].stride;
+ bstride[n] = bound->dim[n].stride * size;
else
bstride[n] = 0;
n++;
diff --git a/libgfortran/generated/eoshift3_8.c b/libgfortran/generated/eoshift3_8.c
index 77617b07417..7e9b911b1a6 100644
--- a/libgfortran/generated/eoshift3_8.c
+++ b/libgfortran/generated/eoshift3_8.c
@@ -135,7 +135,7 @@ eoshift3_8 (gfc_array_char *ret, gfc_array_char *array,
hstride[n] = h->dim[n].stride;
if (bound)
- bstride[n] = bound->dim[n].stride;
+ bstride[n] = bound->dim[n].stride * size;
else
bstride[n] = 0;
n++;
diff --git a/libgfortran/m4/eoshift3.m4 b/libgfortran/m4/eoshift3.m4
index 5001756df0c..24b21cd1531 100644
--- a/libgfortran/m4/eoshift3.m4
+++ b/libgfortran/m4/eoshift3.m4
@@ -136,7 +136,7 @@ eoshift3_`'atype_kind (gfc_array_char *ret, gfc_array_char *array,
hstride[n] = h->dim[n].stride;
if (bound)
- bstride[n] = bound->dim[n].stride;
+ bstride[n] = bound->dim[n].stride * size;
else
bstride[n] = 0;
n++;