diff options
author | Joseph Myers <joseph@codesourcery.com> | 2015-10-23 21:37:33 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2015-10-23 21:37:33 +0000 |
commit | c643db8792102d1a2efad109f58139977d8608d6 (patch) | |
tree | 174813e539b6cdf509201237756ec2b02e2247ce /sysdeps/ieee754/ldbl-96/e_j1l.c | |
parent | 846d9a4a3acdb4939ca7bf6aed48f9f6f26911be (diff) | |
download | glibc-c643db8792102d1a2efad109f58139977d8608d6.zip glibc-c643db8792102d1a2efad109f58139977d8608d6.tar.gz glibc-c643db8792102d1a2efad109f58139977d8608d6.tar.bz2 |
Fix j1, jn missing errno setting on underflow (bug 18611).
j1 and jn can underflow for small arguments, but fail to set errno
when underflowing to 0. This patch fixes them to set errno in that
case.
Tested for x86_64, x86, mips64 and powerpc.
[BZ #18611]
* sysdeps/ieee754/dbl-64/e_j1.c (__ieee754_j1): Set errno and
avoid excess range and precision on underflow.
* sysdeps/ieee754/dbl-64/e_jn.c (__ieee754_jn): Likewise.
* sysdeps/ieee754/flt-32/e_j1f.c (__ieee754_j1f): Likewise.
* sysdeps/ieee754/flt-32/e_jnf.c (__ieee754_jnf): Likewise.
* sysdeps/ieee754/ldbl-128/e_j1l.c (__ieee754_j1l): Set errno on
underflow.
* sysdeps/ieee754/ldbl-128/e_jnl.c (__ieee754_jnl): Likewise.
* sysdeps/ieee754/ldbl-128ibm/e_jnl.c (__ieee754_jnl): Likewise.
* sysdeps/ieee754/ldbl-96/e_j1l.c (__ieee754_j1l): Likewise.
* sysdeps/ieee754/ldbl-96/e_jnl.c (__ieee754_jnl): Likewise.
* math/auto-libm-test-in: Do not allow missing errno setting for
tests of j1 and jn.
* math/auto-libm-test-out: Regenerated.
Diffstat (limited to 'sysdeps/ieee754/ldbl-96/e_j1l.c')
-rw-r--r-- | sysdeps/ieee754/ldbl-96/e_j1l.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/sysdeps/ieee754/ldbl-96/e_j1l.c b/sysdeps/ieee754/ldbl-96/e_j1l.c index 1bca949..e8a7349 100644 --- a/sysdeps/ieee754/ldbl-96/e_j1l.c +++ b/sysdeps/ieee754/ldbl-96/e_j1l.c @@ -155,6 +155,8 @@ __ieee754_j1l (long double x) { long double ret = 0.5 * x; math_check_force_underflow (ret); + if (ret == 0 && x != 0) + __set_errno (ERANGE); return ret; } } |