diff options
author | Joseph Myers <joseph@codesourcery.com> | 2017-06-28 16:43:50 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2017-06-28 16:43:50 +0000 |
commit | 0908a38adc6e479d4c52713b09417769282e2db0 (patch) | |
tree | 7fc7b5fd4641e22199599a1e96b55fe4f10e39cc | |
parent | d12a22c5d351cd1cc125a6345a949dfbc20f6f91 (diff) | |
download | glibc-0908a38adc6e479d4c52713b09417769282e2db0.zip glibc-0908a38adc6e479d4c52713b09417769282e2db0.tar.gz glibc-0908a38adc6e479d4c52713b09417769282e2db0.tar.bz2 |
Use clog10 not __clog10 in tgmath.h log10 macro.
As a GNU extension, for _GNU_SOURCE glibc's complex.h provides a
clog10 function and tgmath.h supports complex arguments to the log10
macro. However, tgmath.h uses __clog10 not clog10 in defining the
macro.
There is no namespace reason (ignoring the block-scope namespace
issues that would apply equally to *every* function called by tgmath.h
macros) for using __clog10 here, since this is only for _GNU_SOURCE so
clog10 is always visible when this macro definition is used.
Furthermore, __clog10f128 is not exported, so supporting _Float128 in
tgmath.h implies using clog10 not __clog10 there. (__clog10 and
clog10 aren't used in libstdc++ either, although that library would
have a good case for using the __clog10 reserved-namespace export: the
standard C++ library includes log10 of a complex number.) This patch
duly changes the header to use clog10, and enables tests of the macro
for complex arguments.
Tested for x86_64.
* math/tgmath.h [__USE_GNU] (log10): Use clog10 not __clog10.
* math/gen-tgmath-tests.py (Tests.add_all_tests): Test log10 for
complex arguments.
-rw-r--r-- | ChangeLog | 4 | ||||
-rwxr-xr-x | math/gen-tgmath-tests.py | 4 | ||||
-rw-r--r-- | math/tgmath.h | 2 |
3 files changed, 8 insertions, 2 deletions
@@ -1,5 +1,9 @@ 2017-06-28 Joseph Myers <joseph@codesourcery.com> + * math/tgmath.h [__USE_GNU] (log10): Use clog10 not __clog10. + * math/gen-tgmath-tests.py (Tests.add_all_tests): Test log10 for + complex arguments. + [BZ #21687] * math/tgmath.h (__TGMATH_BINARY_REAL_RET_ONLY): New macro. (totalorder): Use it. diff --git a/math/gen-tgmath-tests.py b/math/gen-tgmath-tests.py index db6553e..31a3bd2 100755 --- a/math/gen-tgmath-tests.py +++ b/math/gen-tgmath-tests.py @@ -497,7 +497,9 @@ class Tests(object): self.add_tests('lgamma', 'r', ['r']) self.add_tests('llrint', 'long long int', ['r']) self.add_tests('llround', 'long long int', ['r']) - self.add_tests('log10', 'r', ['r']) + # log10 is real-only in ISO C, but supports complex arguments + # as a GNU extension. + self.add_tests('log10', 'g', ['g']) self.add_tests('log1p', 'r', ['r']) self.add_tests('log2', 'r', ['r']) self.add_tests('logb', 'r', ['r']) diff --git a/math/tgmath.h b/math/tgmath.h index a0da104..7afe41e 100644 --- a/math/tgmath.h +++ b/math/tgmath.h @@ -319,7 +319,7 @@ /* Base-ten logarithm of X. */ #ifdef __USE_GNU -# define log10(Val) __TGMATH_UNARY_REAL_IMAG (Val, log10, __clog10) +# define log10(Val) __TGMATH_UNARY_REAL_IMAG (Val, log10, clog10) #else # define log10(Val) __TGMATH_UNARY_REAL_ONLY (Val, log10) #endif |