changeset 29213:8e137bc72061

Fix bug with -0.0L in previous patch. * lib/isnan.c (rpl_isnanl): Make robust to -0.0L and pad bits. * tests/test-isnan.c (main): Also test on zeroes. * tests/test-isnanf.c (main): Likewise. * tests/test-isnanl.h (main): Likewise. Signed-off-by: Eric Blake <ebb9@byu.net>
author Eric Blake <ebb9@byu.net>
date Tue, 11 Dec 2007 14:00:26 -0700
parents e5d57ef58316
children 320b0092c780
files ChangeLog lib/isnan.c tests/test-isnan.c tests/test-isnanf.c tests/test-isnanl.h
diffstat 5 files changed, 15 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Tue Dec 11 11:35:55 2007 -0700
+++ b/ChangeLog	Tue Dec 11 14:00:26 2007 -0700
@@ -1,5 +1,11 @@
 2007-12-11  Eric Blake  <ebb9@byu.net>
 
+	Fix bug with -0.0L in previous patch.
+	* lib/isnan.c (rpl_isnanl): Make robust to -0.0L and pad bits.
+	* tests/test-isnan.c (main): Also test on zeroes.
+	* tests/test-isnanf.c (main): Likewise.
+	* tests/test-isnanl.h (main): Likewise.
+
 	Detect pseudo-denormals on x86 even when cross-compiling.
 	* lib/isnan.c (rpl_isnanl) [!KNOWN_EXPBIT0_LOCATION
 	&& USE_LONG_DOUBLE && x86]: Add one more check to filter out
--- a/lib/isnan.c	Tue Dec 11 11:35:55 2007 -0700
+++ b/lib/isnan.c	Tue Dec 11 14:00:26 2007 -0700
@@ -146,8 +146,10 @@
       memory_double m1;
       memory_double m2;
 
+      memset (&m1.value, 0, SIZE);
+      memset (&m2.value, 0, SIZE);
       m1.value = x;
-      m2.value = x + 0;
+      m2.value = x + (x ? 0.0L : -0.0L);
       if (memcmp (&m1.value, &m2.value, SIZE) != 0)
         return 1;
 # endif
--- a/tests/test-isnan.c	Tue Dec 11 11:35:55 2007 -0700
+++ b/tests/test-isnan.c	Tue Dec 11 14:00:26 2007 -0700
@@ -57,6 +57,8 @@
   ASSERT (!isnan (-2.718));
   ASSERT (!isnan (-2.718e30));
   ASSERT (!isnan (-2.718e-30));
+  ASSERT (!isnan (0.0));
+  ASSERT (!isnan (-0.0));
   /* Infinite values.  */
   ASSERT (!isnan (1.0 / 0.0));
   ASSERT (!isnan (-1.0 / 0.0));
--- a/tests/test-isnanf.c	Tue Dec 11 11:35:55 2007 -0700
+++ b/tests/test-isnanf.c	Tue Dec 11 14:00:26 2007 -0700
@@ -57,6 +57,8 @@
   ASSERT (!isnanf (-2.718f));
   ASSERT (!isnanf (-2.718e30f));
   ASSERT (!isnanf (-2.718e-30f));
+  ASSERT (!isnanf (0.0f));
+  ASSERT (!isnanf (-0.0f));
   /* Infinite values.  */
   ASSERT (!isnanf (1.0f / 0.0f));
   ASSERT (!isnanf (-1.0f / 0.0f));
--- a/tests/test-isnanl.h	Tue Dec 11 11:35:55 2007 -0700
+++ b/tests/test-isnanl.h	Tue Dec 11 14:00:26 2007 -0700
@@ -47,6 +47,8 @@
   ASSERT (!isnanl (-2.718L));
   ASSERT (!isnanl (-2.718e30L));
   ASSERT (!isnanl (-2.718e-30L));
+  ASSERT (!isnanl (0.0L));
+  ASSERT (!isnanl (-0.0L));
   /* Infinite values.  */
   ASSERT (!isnanl (1.0L / 0.0L));
   ASSERT (!isnanl (-1.0L / 0.0L));