Provide a C++ version of issignaling that does not use __MATH_TG
commita16e8bc08edca84d507715c66d6cddbbc7ed3b62
authorGabriel F. T. Gomes <gftg@linux.vnet.ibm.com>
Mon, 14 Aug 2017 16:46:15 +0000 (14 13:46 -0300)
committerGabriel F. T. Gomes <gftg@linux.vnet.ibm.com>
Tue, 22 Aug 2017 13:05:41 +0000 (22 10:05 -0300)
treef997f9780b600a0da3f0456162cc2405a0b19b1e
parent8d2ec553295a16ca94fe0285d6307e3b00a402d6
Provide a C++ version of issignaling that does not use __MATH_TG

The macro __MATH_TG contains the logic to select between long double and
_Float128, when these types are ABI-distinct.  This logic relies on
__builtin_types_compatible_p, which is not available in C++ mode.

On the other hand, C++ function overloading provides the means to
distinguish between the floating-point types.  The overloading
resolution will match the correct parameter regardless of type
qualifiers, i.e.: const and volatile.

Tested for powerpc64le, s390x, and x86_64.

* math/math.h [defined __cplusplus] (issignaling): Provide a C++
definition for issignaling that does not rely on __MATH_TG,
since __MATH_TG uses __builtin_types_compatible_p, which is only
available in C mode.
(CFLAGS-test-math-issignaling.cc): New variable.
* math/Makefile [CXX] (tests): Add test-math-issignaling.
* math/test-math-issignaling.cc: New test for C++ implementation
of type-generic issignaling.
* sysdeps/powerpc/powerpc64le/Makefile [subdir == math]
(CXXFLAGS-test-math-issignaling.cc): Add -mfloat128 to the build
options of test-math-issignaling on powerpc64le.
ChangeLog
math/Makefile
math/math.h
math/test-math-issignaling.cc [new file with mode: 0644]
sysdeps/powerpc/powerpc64le/Makefile