Hi!

glibc <= 2.23 has buggy nextafterl/nexttowardl as can be seen on the
nextafter-2.c testcase.

Do we want to workaround this bug, e.g. with the following patch?

Regtested on x86_64-linux (with glibc 2.26).  Ok for trunk?

2018-05-09  Jakub Jelinek  <ja...@redhat.com>

        PR tree-optimization/85699
        * gcc.dg/nextafter-1.c (NO_LONG_DOUBLE): Define if not defined.  Use
        !NO_LONG_DOUBLE instead of __LDBL_MANT_DIG__ != 106.
        * gcc.dg/nextafter-2.c: Include stdlib.h.  For glibc < 2.24 define
        NO_LONG_DOUBLE to 1 before including nextafter-1.c.

--- gcc/testsuite/gcc.dg/nextafter-1.c.jj       2018-05-06 23:12:48.952619545 
+0200
+++ gcc/testsuite/gcc.dg/nextafter-1.c  2018-05-09 14:58:53.694198614 +0200
@@ -20,6 +20,9 @@ long double nexttowardl (long double, lo
 #ifndef NEED_EXC
 #define NEED_EXC 0
 #endif
+#ifndef NO_LONG_DOUBLE
+#define NO_LONG_DOUBLE (__LDBL_MANT_DIG__ == 106)
+#endif
 
 #define TEST(name, fn, type, L1, L2, l1, l2, MIN1,                          \
             MAX1, DENORM_MIN1, EPSILON1, MIN2, MAX2, DENORM_MIN2)           \
@@ -129,7 +132,7 @@ TEST (test1, nextafterf, float, F, F, f,
 TEST (test2, nextafter, double, , , , , __DBL_MIN__, __DBL_MAX__,
       __DBL_DENORM_MIN__, __DBL_EPSILON__, __DBL_MIN__, __DBL_MAX__,
       __DBL_DENORM_MIN__)
-#if __LDBL_MANT_DIG__ != 106
+#if !NO_LONG_DOUBLE
 TEST (test3, nextafterl, long double, L, L, l, l, __LDBL_MIN__, __LDBL_MAX__,
       __LDBL_DENORM_MIN__, __LDBL_EPSILON__, __LDBL_MIN__, __LDBL_MAX__,
       __LDBL_DENORM_MIN__)
@@ -149,7 +152,7 @@ main ()
 {
   test1 ();
   test2 ();
-#if __LDBL_MANT_DIG__ != 106
+#if !NO_LONG_DOUBLE
   test3 ();
   test4 ();
   test5 ();
--- gcc/testsuite/gcc.dg/nextafter-2.c.jj       2018-05-08 13:56:38.265930160 
+0200
+++ gcc/testsuite/gcc.dg/nextafter-2.c  2018-05-09 14:59:45.527245803 +0200
@@ -5,4 +5,13 @@
 /* { dg-add-options ieee } */
 /* { dg-add-options c99_runtime } */
 
+#include <stdlib.h>
+
+#if defined(__GLIBC__) && defined(__GLIBC_PREREQ)
+# if !__GLIBC_PREREQ (2, 24)
+/* Workaround buggy nextafterl in glibc 2.23 and earlier,
+   see https://sourceware.org/bugzilla/show_bug.cgi?id=20205  */
+#  define NO_LONG_DOUBLE 1
+# endif
+#endif
 #include "nextafter-1.c"

        Jakub

Reply via email to