From: Bruno Haible Date: Fri, 13 Oct 2023 10:05:29 +0000 (+0200) Subject: isnanf, isnand: Fix conflict with Solaris . X-Git-Tag: v1.0~714 X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=13017f5c545c5952de75515c0dc483568eafa63c;p=gnulib.git isnanf, isnand: Fix conflict with Solaris . * lib/math.in.h (isnanf, isnand): On Solaris and IRIX, declare this function, instead of defining it as a macro. --- diff --git a/ChangeLog b/ChangeLog index 100179f0dd..12dee61c16 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2023-10-13 Bruno Haible + + isnanf, isnand: Fix conflict with Solaris . + * 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 *printf tests: Test printing of signalling NaNs. diff --git a/lib/math.in.h b/lib/math.in.h index b18627ae0a..202f843fc4 100644 --- a/lib/math.in.h +++ b/lib/math.in.h @@ -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 . We cannot + define isnanf as a macro, because that would conflict with . */ +_GL_EXTERN_C int isnanf (float x); +# else /* The original 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 . We cannot + define isnand as a macro, because that would conflict with . */ +_GL_EXTERN_C int isnand (double x); +# else /* The original 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. */