From 314fcbb7de94709b92edf1b68f62ca6aed8d4dbc Mon Sep 17 00:00:00 2001 From: Eric Blake Date: Fri, 12 Sep 2008 06:52:41 -0600 Subject: [PATCH] frexp: test for NetBSD failure on -0.0 * m4/frexp.m4 (gl_FUNC_FREXP_WORKS): Enhance test, since some, but not all, bugs from NetBSD 3.0 have been fixed. * doc/posix-functions/frexp.texi (frexp): Document bug. Reported by Thomas Klausner. Signed-off-by: Eric Blake --- ChangeLog | 6 ++++++ doc/posix-functions/frexp.texi | 3 +++ m4/frexp.m4 | 19 ++++++++++++++++--- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index bf7fcc9dd3..414b8e403f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,11 @@ 2008-09-12 Eric Blake + frexp: test for NetBSD failure on -0.0 + * m4/frexp.m4 (gl_FUNC_FREXP_WORKS): Enhance test, since some, but + not all, bugs from NetBSD 3.0 have been fixed. + * doc/posix-functions/frexp.texi (frexp): Document bug. + Reported by Thomas Klausner. + signbit: work around bug of HP-UX 10.20 cc with -0.0 literal * m4/signbit.m4 (gl_SIGNBIT_TEST_PROGRAM): Rewrite test to avoid literal -0.0. diff --git a/doc/posix-functions/frexp.texi b/doc/posix-functions/frexp.texi index f0a791ca08..345ce74a1a 100644 --- a/doc/posix-functions/frexp.texi +++ b/doc/posix-functions/frexp.texi @@ -12,6 +12,9 @@ Portability problems fixed by Gnulib: This function does not work on denormalized numbers on some platforms: NetBSD 3.0. @item +This function does not work on negative zero on some platforms: +NetBSD 4.99. +@item This function does not work on infinite numbers on some platforms: IRIX 6.5, mingw. @end itemize diff --git a/m4/frexp.m4 b/m4/frexp.m4 index ce031e701b..11ed05946b 100644 --- a/m4/frexp.m4 +++ b/m4/frexp.m4 @@ -1,5 +1,5 @@ -# frexp.m4 serial 5 -dnl Copyright (C) 2007 Free Software Foundation, Inc. +# frexp.m4 serial 6 +dnl Copyright (C) 2007, 2008 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -88,7 +88,8 @@ AC_DEFUN([gl_FUNC_FREXP_NO_LIBM], ]) dnl Test whether frexp() works also on denormalized numbers (this fails e.g. on -dnl NetBSD 3.0) and on infinite numbers (this fails e.g. on IRIX 6.5 and mingw). +dnl NetBSD 3.0), on infinite numbers (this fails e.g. on IRIX 6.5 and mingw), +dnl and on negative zero (this fails e.g. on NetBSD 4.99). AC_DEFUN([gl_FUNC_FREXP_WORKS], [ AC_REQUIRE([AC_PROG_CC]) @@ -98,10 +99,14 @@ AC_DEFUN([gl_FUNC_FREXP_WORKS], AC_TRY_RUN([ #include #include +#include int main() { int i; volatile double x; +/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. + So we use -zero instead. */ + double zero = 0.0; /* Test on denormalized numbers. */ for (i = 1, x = 1.0; i >= DBL_MIN_EXP; i--, x *= 0.5) ; @@ -122,6 +127,14 @@ int main() if (y != x) return 1; } + /* Test on negative zero. */ + x = -zero; + { + int exp; + double y = frexp (x, &exp); + if (memcmp (&y, &x, sizeof x)) + return 1; + } return 0; }], [gl_cv_func_frexp_works=yes], [gl_cv_func_frexp_works=no], [case "$host_os" in -- 2.30.2