bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

ilogbl: work around Cygwin bug


From: Bruno Haible
Subject: ilogbl: work around Cygwin bug
Date: Thu, 12 Dec 2019 12:40:22 +0100
User-agent: KMail/5.1.3 (Linux/4.4.0-166-generic; KDE/5.18.0; x86_64; ; )

On Cygwin, the ilogbl test fails:

../../gltests/test-ilogb.h:60: assertion 'ILOGB (L_(0.0)) == FP_ILOGB0' failed

This patch fixes it.


2019-12-12  Bruno Haible  <address@hidden>

        ilogbl: Work around Cygwin bug.
        * m4/ilogbl.m4 (gl_FUNC_ILOGBL_WORKS): Test whether ilogbl(0.0L) is
        correct.
        * doc/posix-functions/ilogbl.texi: Mention the Cygwin bug.

diff --git a/doc/posix-functions/ilogbl.texi b/doc/posix-functions/ilogbl.texi
index 4161890..ed87110 100644
--- a/doc/posix-functions/ilogbl.texi
+++ b/doc/posix-functions/ilogbl.texi
@@ -12,6 +12,10 @@ Portability problems fixed by Gnulib:
 This function is missing on some platforms:
 FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 
6.5, Solaris 9, Cygwin, MSVC 9.
 @item
+This function returns a wrong result for a zero argument on some platforms:
+@c https://cygwin.com/ml/cygwin/2019-12/msg00074.html
+Cygwin 2.9.
+@item
 This function returns a wrong result for denormalized arguments on some 
platforms:
 Haiku 2017.
 @end itemize
diff --git a/m4/ilogbl.m4 b/m4/ilogbl.m4
index c8ba52a..ab27433 100644
--- a/m4/ilogbl.m4
+++ b/m4/ilogbl.m4
@@ -1,4 +1,4 @@
-# ilogbl.m4 serial 3
+# ilogbl.m4 serial 4
 dnl Copyright (C) 2010-2019 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -71,6 +71,7 @@ AC_DEFUN([gl_FUNC_ILOGBL],
 ])
 
 dnl Test whether ilogbl() works.
+dnl On Cygwin 2.9, ilogb(0.0L) is wrong.
 dnl On Haiku 2017, it returns i-2 instead of i-1 for values between
 dnl ca. 2^-16444 and ca. 2^-16382.
 AC_DEFUN([gl_FUNC_ILOGBL_WORKS],
@@ -108,13 +109,19 @@ int main (int argc, char *argv[])
 {
   int (* volatile my_ilogbl) (long double) = argc ? ilogbl : dummy;
   int result = 0;
+  /* This test fails on Cygwin 2.9.  */
+  {
+    x = 0.0L;
+    if (my_ilogbl (x) != FP_ILOGB0)
+      result |= 1;
+  }
   /* This test fails on Haiku 2017.  */
   {
     int i;
     for (i = 1, x = (long double)1.0; i >= LDBL_MIN_EXP-100 && x > (long 
double)0.0; i--, x *= (long double)0.5)
       if (my_ilogbl (x) != i - 1)
         {
-          result |= 1;
+          result |= 2;
           break;
         }
   }




reply via email to

[Prev in Thread] Current Thread [Next in Thread]