diff options
author | tkoenig <tkoenig@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-07-07 22:01:41 +0000 |
---|---|---|
committer | tkoenig <tkoenig@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-07-07 22:01:41 +0000 |
commit | 4eef4aad9a4e3edbe01a61f69887a0c9692c95ab (patch) | |
tree | 6e619479081b13e187d8cae04afbb290a97762a8 /libgfortran/generated/eoshift1_4.c | |
parent | a5558ca74b5e5f0c95f4c13a1d7f60b8a130c95b (diff) | |
download | gcc-4eef4aad9a4e3edbe01a61f69887a0c9692c95ab.tar.gz |
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@101738 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libgfortran/generated/eoshift1_4.c')
-rw-r--r-- | libgfortran/generated/eoshift1_4.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/libgfortran/generated/eoshift1_4.c b/libgfortran/generated/eoshift1_4.c index cb4dfb5547b..6012c3fe902 100644 --- a/libgfortran/generated/eoshift1_4.c +++ b/libgfortran/generated/eoshift1_4.c @@ -158,7 +158,14 @@ eoshift1_4 (gfc_array_char *ret, { /* Do the shift for this dimension. */ sh = *hptr; - delta = (sh >= 0) ? sh: -sh; + if (( sh >= 0 ? sh : -sh ) > len) + { + delta = len; + sh = len; + } + else + delta = (sh >= 0) ? sh: -sh; + if (sh > 0) { src = &sptr[delta * soffset]; |