]> Savannah Git Hosting - gnulib.git/commitdiff
isnanf, isnand: Fix conflict with Solaris <ieeefp.h>.
authorBruno Haible <bruno@clisp.org>
Fri, 13 Oct 2023 10:05:29 +0000 (12:05 +0200)
committerBruno Haible <bruno@clisp.org>
Fri, 13 Oct 2023 10:05:29 +0000 (12:05 +0200)
* lib/math.in.h (isnanf, isnand): On Solaris and IRIX, declare this
function, instead of defining it as a macro.

ChangeLog
lib/math.in.h

index 100179f0dd7366fb986cbeaee2764f544aa7226a..12dee61c16a4fc5936b3e1d16c457c515b36a1aa 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2023-10-13  Bruno Haible  <bruno@clisp.org>
+
+       isnanf, isnand: Fix conflict with Solaris <ieeefp.h>.
+       * lib/math.in.h (isnanf, isnand): On Solaris and IRIX, declare this
+       function, instead of defining it as a macro.
+
 2023-10-12  Bruno Haible  <bruno@clisp.org>
 
        *printf tests: Test printing of signalling NaNs.
index b18627ae0a28697af5776ee2d449c0024e8eaa07..202f843fc4eb0d1ebf002a06df8f6d7aa11bd177 100644 (file)
@@ -2545,16 +2545,22 @@ _GL_WARN_REAL_FLOATING_DECL (isinf);
 #if @GNULIB_ISNANF@
 /* Test for NaN for 'float' numbers.  */
 # if @HAVE_ISNANF@
+#  if defined __sun || defined __sgi
+/* Solaris and IRIX have isnanf() and declare it in <ieeefp.h>.  We cannot
+   define isnanf as a macro, because that would conflict with <ieeefp.h>.  */
+_GL_EXTERN_C int isnanf (float x);
+#  else
 /* The original <math.h> included above provides a declaration of isnan macro
    or (older) isnanf function.  */
-#  if (__GNUC__ >= 4) || (__clang_major__ >= 4)
+#   if (__GNUC__ >= 4) || (__clang_major__ >= 4)
     /* GCC >= 4.0 and clang provide a type-generic built-in for isnan.
        GCC >= 4.0 also provides __builtin_isnanf, but clang doesn't.  */
-#   undef isnanf
-#   define isnanf(x) __builtin_isnan ((float)(x))
-#  elif defined isnan
-#   undef isnanf
-#   define isnanf(x) isnan ((float)(x))
+#    undef isnanf
+#    define isnanf(x) __builtin_isnan ((float)(x))
+#   elif defined isnan
+#    undef isnanf
+#    define isnanf(x) isnan ((float)(x))
+#   endif
 #  endif
 # else
 /* Test whether X is a NaN.  */
@@ -2569,15 +2575,21 @@ _GL_EXTERN_C int isnanf (float x);
    This function is a gnulib extension, unlike isnan() which applied only
    to 'double' numbers earlier but now is a type-generic macro.  */
 # if @HAVE_ISNAND@
+#  if defined __sun || defined __sgi
+/* Solaris and IRIX have isnand() and declare it in <ieeefp.h>.  We cannot
+   define isnand as a macro, because that would conflict with <ieeefp.h>.  */
+_GL_EXTERN_C int isnand (double x);
+#  else
 /* The original <math.h> included above provides a declaration of isnan
    macro.  */
-#  if (__GNUC__ >= 4) || (__clang_major__ >= 4)
+#   if (__GNUC__ >= 4) || (__clang_major__ >= 4)
     /* GCC >= 4.0 and clang provide a type-generic built-in for isnan.  */
-#   undef isnand
-#   define isnand(x) __builtin_isnan ((double)(x))
-#  else
-#   undef isnand
-#   define isnand(x) isnan ((double)(x))
+#    undef isnand
+#    define isnand(x) __builtin_isnan ((double)(x))
+#   else
+#    undef isnand
+#    define isnand(x) isnan ((double)(x))
+#   endif
 #  endif
 # else
 /* Test whether X is a NaN.  */