]> git.ipfire.org Git - thirdparty/glibc.git/commit
Provide a C++ version of iseqsig (bug 22377)
authorGabriel F. T. Gomes <gabriel@inconstante.eti.br>
Fri, 3 Nov 2017 12:44:36 +0000 (10:44 -0200)
committerGabriel F. T. Gomes <gabriel@inconstante.eti.br>
Mon, 29 Jan 2018 16:50:18 +0000 (14:50 -0200)
commit38e08dc3e00fc27d127701175018cac4ddaf998e
tree09b9e40f4b6f66f2f83391e4bf52f8fef26ffda8
parenta5db85df69dce7fcf793fefc60c764c684e0c272
Provide a C++ version of iseqsig (bug 22377)

In C++ mode, __MATH_TG cannot be used for defining iseqsig, because
__MATH_TG relies on __builtin_types_compatible_p, which is a C-only
builtin.  This is true when float128 is provided as an ABI-distinct type
from long double.

Moreover, the comparison macros from ISO C take two floating-point
arguments, which need not have the same type.  Choosing what underlying
function to call requires evaluating the formats of the arguments, then
selecting which is wider.  The macro __MATH_EVAL_FMT2 provides this
information, however, only the type of the macro expansion is relevant
(actually evaluating the expression would be incorrect).

This patch provides a C++ version of iseqsig, in which only the type of
__MATH_EVAL_FMT2 (__typeof or decltype) is used as a template parameter
for __iseqsig_type.  This function calls the appropriate underlying
function.

Tested for powerpc64le and x86_64.

[BZ #22377]
* math/Makefile [C++] (tests): Add test for iseqsig.
* math/math.h [C++] (iseqsig): New implementation, which does
not rely on __MATH_TG/__builtin_types_compatible_p.
* math/test-math-iseqsig.cc: New file.
* sysdeps/powerpc/powerpc64le/Makefile
(CFLAGS-test-math-iseqsig.cc): New variable.

(cherry picked from commit c85e54ac6cef0faed7b7ffc722f52523dec59bf5)
ChangeLog
NEWS
math/Makefile
math/math.h
math/test-math-iseqsig.cc [new file with mode: 0644]
sysdeps/powerpc/powerpc64le/Makefile