diff options
author | Thomas Koenig <Thomas.Koenig@online.de> | 2005-07-07 22:01:41 +0000 |
---|---|---|
committer | Thomas Koenig <tkoenig@gcc.gnu.org> | 2005-07-07 22:01:41 +0000 |
commit | 47b3a403a5b5424d15829d47abd4cb1a8a87e93e (patch) | |
tree | 6e619479081b13e187d8cae04afbb290a97762a8 /libgfortran/intrinsics/eoshift2.c | |
parent | 5a29b385acaae4c85403081e38ce0876ae423524 (diff) | |
download | gcc-47b3a403a5b5424d15829d47abd4cb1a8a87e93e.tar.gz |
re PR fortran/21594 ([4.0 only] FAIL: gfortran.dg/eoshift.f90 -O0 execution test)
2005-07-07 Thomas Koenig <Thomas.Koenig@online.de>
PR libfortran/21594
* intrinsics/eoshift0.c: If abs(shift) > len, fill the
the whole array with the boundary value, but don't overrun it.
* intrinsics/eoshift2.c: Likewise.
* m4/eoshift1.m4: Likewise.
* m4/eoshift3.m4: Likewise.
* generated/eoshift1_4.c: Regenerated.
* generated/eoshift1_8.c: Regenerated.
* generated/eoshift3_4.c: Regenerated.
* generated/eoshift3_8.c: Regenerated.
2005-07-07 Thomas Koenig <Thomas.Koenig@online.de>
PR libfortran/21594
* gfortran.fortran-torture/execute/intrinsic_eoshift.f90:
Add test cases where the shift length is greater than the
array length.
From-SVN: r101738
Diffstat (limited to 'libgfortran/intrinsics/eoshift2.c')
-rw-r--r-- | libgfortran/intrinsics/eoshift2.c | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/libgfortran/intrinsics/eoshift2.c b/libgfortran/intrinsics/eoshift2.c index 70baf3c18d1..4e2b41ba7d3 100644 --- a/libgfortran/intrinsics/eoshift2.c +++ b/libgfortran/intrinsics/eoshift2.c @@ -139,16 +139,25 @@ eoshift2 (gfc_array_char *ret, const gfc_array_char *array, bstride0 = bstride[0]; rptr = ret->data; sptr = array->data; + + if ((shift >= 0 ? shift : -shift ) > len) + { + shift = len; + len = 0; + } + else + { + if (shift > 0) + len = len - shift; + else + len = len + shift; + } + if (bound) bptr = bound->data; else bptr = zeros; - if (shift > 0) - len = len - shift; - else - len = len + shift; - while (rptr) { /* Do the shift for this dimension. */ |