X-Git-Url: http://git.sourceforge.jp/view?p=pf3gnuchains%2Fgcc-fork.git;a=blobdiff_plain;f=libgfortran%2Fintrinsics%2Feoshift0.c;h=6152e9fccbd8ab2e0943ce2960ba966302412756;hp=b1fbd1a516ade639c6646e3c6b9e912f2519e2d4;hb=4eef4aad9a4e3edbe01a61f69887a0c9692c95ab;hpb=7b49b59fb52ea8e809812b003ad6d5d18861f5d4 diff --git a/libgfortran/intrinsics/eoshift0.c b/libgfortran/intrinsics/eoshift0.c index b1fbd1a516a..6152e9fccbd 100644 --- a/libgfortran/intrinsics/eoshift0.c +++ b/libgfortran/intrinsics/eoshift0.c @@ -131,10 +131,19 @@ eoshift0 (gfc_array_char * ret, const gfc_array_char * array, sstride0 = sstride[0]; rptr = ret->data; sptr = array->data; - if (shift > 0) - len = len - shift; + + if ((shift >= 0 ? shift : -shift) > len) + { + shift = len; + len = 0; + } else - len = len + shift; + { + if (shift > 0) + len = len - shift; + else + len = len + shift; + } while (rptr) {