about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--NEWS3
-rw-r--r--math/libm-test.inc5
-rw-r--r--sysdeps/ieee754/ldbl-96/e_jnl.c3
4 files changed, 15 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index c368d11f51..92e8546d1a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2012-07-12  Marek Polacek  <polacek@redhat.com>
+
+	[BZ #14173]
+	* math/libm-test.inc (yn_test): Add test for BZ #14173.
+	* sysdeps/ieee754/ldbl-96/e_jnl.c (__ieee754_ynl): Correct
+	loop condition.
+
 2012-07-12  Joseph Myers  <joseph@codesourcery.com>
 
 	[BZ #13717]
diff --git a/NEWS b/NEWS
index d66da32ff8..320b56c2e7 100644
--- a/NEWS
+++ b/NEWS
@@ -9,7 +9,8 @@ Version 2.17
 
 * The following bugs are resolved with this release:
 
-  6778, 14042, 14151, 14154, 14157, 14283, 14328, 14331, 14337, 14347
+  6778, 14042, 14151, 14154, 14157, 14173, 14283, 14328, 14331, 14337,
+  14347
 
 
 Version 2.16
diff --git a/math/libm-test.inc b/math/libm-test.inc
index a9cc2bdca4..25a8f4111d 100644
--- a/math/libm-test.inc
+++ b/math/libm-test.inc
@@ -9015,8 +9015,11 @@ yn_test (void)
   TEST_ff_f (yn, 10, 2.0, -129184.542208039282635913145923304214L);
   TEST_ff_f (yn, 10, 10.0, -0.359814152183402722051986577343560609L);
 
-  END (yn);
+  /* Check whether yn returns correct value for LDBL_MIN, DBL_MIN,
+     and FLT_MIN.  See Bug 14173.  */
+  TEST_ff_f (yn, 10, min_value, minus_infty, OVERFLOW_EXCEPTION);
 
+  END (yn);
 }
 
 
diff --git a/sysdeps/ieee754/ldbl-96/e_jnl.c b/sysdeps/ieee754/ldbl-96/e_jnl.c
index 2e206e7e22..36b0d8ba44 100644
--- a/sysdeps/ieee754/ldbl-96/e_jnl.c
+++ b/sysdeps/ieee754/ldbl-96/e_jnl.c
@@ -360,7 +360,8 @@ __ieee754_ynl (int n, long double x)
       b = __ieee754_y1l (x);
       /* quit if b is -inf */
       GET_LDOUBLE_WORDS (se, i0, i1, b);
-      for (i = 1; i < n && se != 0xffff; i++)
+      /* Use 0xffffffff since GET_LDOUBLE_WORDS sign-extends SE.  */
+      for (i = 1; i < n && se != 0xffffffff; i++)
 	{
 	  temp = b;
 	  b = ((long double) (i + i) / x) * b - a;