From 3308ca32864e34c28c8813f7abf7e00d517d4e1d Mon Sep 17 00:00:00 2001 From: Bruno Haible <bruno@clisp.org> Date: Wed, 13 Apr 2022 23:43:05 +0200 Subject: [PATCH] math: Fix errors in C++ mode on glibc systems with clang. * lib/math.in.h (GNULIB_NAMESPACE_LACKS_ISFINITE, GNULIB_NAMESPACE_LACKS_ISINF, GNULIB_NAMESPACE_LACKS_ISNAN, GNULIB_NAMESPACE_LACKS_SIGNBIT): New macros. * tests/test-math-c++.cc (isfinite): Skip test if GNULIB_NAMESPACE_LACKS_ISFINITE is 1. (isinf): Skip test if GNULIB_NAMESPACE_LACKS_ISINF is 1. (isnan): Skip test if GNULIB_NAMESPACE_LACKS_ISNAN is 1. (signbit): Skip test if GNULIB_NAMESPACE_LACKS_SIGNBIT is 1. --- ChangeLog | 12 ++++++++++++ lib/math.in.h | 4 ++++ tests/test-math-c++.cc | 8 ++++++++ 3 files changed, 24 insertions(+) diff --git a/ChangeLog b/ChangeLog index c3723d255a..838a4cf351 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2022-04-13 Bruno Haible <bruno@clisp.org> + + math: Fix errors in C++ mode on glibc systems with clang. + * lib/math.in.h (GNULIB_NAMESPACE_LACKS_ISFINITE, + GNULIB_NAMESPACE_LACKS_ISINF, GNULIB_NAMESPACE_LACKS_ISNAN, + GNULIB_NAMESPACE_LACKS_SIGNBIT): New macros. + * tests/test-math-c++.cc (isfinite): Skip test if + GNULIB_NAMESPACE_LACKS_ISFINITE is 1. + (isinf): Skip test if GNULIB_NAMESPACE_LACKS_ISINF is 1. + (isnan): Skip test if GNULIB_NAMESPACE_LACKS_ISNAN is 1. + (signbit): Skip test if GNULIB_NAMESPACE_LACKS_SIGNBIT is 1. + 2022-04-08 Paul Eggert <eggert@cs.ucla.edu> libgmp: pacify Clang too diff --git a/lib/math.in.h b/lib/math.in.h index ccc3584802..a74a95da3e 100644 --- a/lib/math.in.h +++ b/lib/math.in.h @@ -2433,6 +2433,7 @@ _GL_MATH_CXX_REAL_FLOATING_DECL_1 (isfinite) functions. */ _GL_MATH_CXX_REAL_FLOATING_DECL_2 (isfinite, rpl_isfinite, bool) # define isfinite rpl_isfinite +# define GNULIB_NAMESPACE_LACKS_ISFINITE 1 # else _GL_MATH_CXX_REAL_FLOATING_DECL_2 (isfinite, isfinite, bool) # endif @@ -2467,6 +2468,7 @@ _GL_MATH_CXX_REAL_FLOATING_DECL_1 (isinf) functions. */ _GL_MATH_CXX_REAL_FLOATING_DECL_2 (isinf, rpl_isinf, bool) # define isinf rpl_isinf +# define GNULIB_NAMESPACE_LACKS_ISINF 1 # else _GL_MATH_CXX_REAL_FLOATING_DECL_2 (isinf, isinf, bool) # endif @@ -2594,6 +2596,7 @@ _GL_MATH_CXX_REAL_FLOATING_DECL_1 (isnan) functions. */ _GL_MATH_CXX_REAL_FLOATING_DECL_2 (isnan, rpl_isnan, bool) # define isnan rpl_isnan +# define GNULIB_NAMESPACE_LACKS_ISNAN 1 # else _GL_MATH_CXX_REAL_FLOATING_DECL_2 (isnan, isnan, bool) # endif @@ -2677,6 +2680,7 @@ _GL_MATH_CXX_REAL_FLOATING_DECL_1 (signbit) functions. */ _GL_MATH_CXX_REAL_FLOATING_DECL_2 (signbit, rpl_signbit, bool) # define signbit rpl_signbit +# define GNULIB_NAMESPACE_LACKS_SIGNBIT 1 # else _GL_MATH_CXX_REAL_FLOATING_DECL_2 (signbit, signbit, bool) # endif diff --git a/tests/test-math-c++.cc b/tests/test-math-c++.cc index e9a7bfa6a5..6749fa58a1 100644 --- a/tests/test-math-c++.cc +++ b/tests/test-math-c++.cc @@ -385,28 +385,36 @@ SIGNATURE_CHECK (GNULIB_NAMESPACE::truncl, long double, (long double)); # ifdef isfinite # warning "isfinite should not be a macro in C++" # endif +# if !GNULIB_NAMESPACE_LACKS_ISFINITE REAL_FLOATING_CHECK (isfinite, bool, (float), bool, (double), bool, (long double)); +# endif #endif #if GNULIB_TEST_ISINF # ifdef isinf # warning "isinf should not be a macro in C++" # endif +# if !GNULIB_NAMESPACE_LACKS_ISINF REAL_FLOATING_CHECK (isinf, bool, (float), bool, (double), bool, (long double)); +# endif #endif #if GNULIB_TEST_ISNAN # ifdef isnan # warning "isnan should not be a macro in C++" # endif +# if !GNULIB_NAMESPACE_LACKS_ISNAN REAL_FLOATING_CHECK (isnan, bool, (float), bool, (double), bool, (long double)); +# endif #endif #if GNULIB_TEST_SIGNBIT # ifdef signbit # warning "signbit should not be a macro in C++" # endif +# if !GNULIB_NAMESPACE_LACKS_SIGNBIT REAL_FLOATING_CHECK (signbit, bool, (float), bool, (double), bool, (long double)); +# endif #endif -- 2.39.5