mirror of
git://sourceware.org/git/glibc.git
synced 2025-01-24 12:25:35 +08:00
Fix tgmath.h totalorder, totalordermag return type (bug 21687).
The tgmath.h totalorder and totalordermag macros wrongly return a floating-point type. They should return int, like the underlying functions. This patch fixes them accordingly, updating tests including enabling tests of those functions from gen-tgmath-tests.py. Tested for x86_64. [BZ #21687] * math/tgmath.h (__TGMATH_BINARY_REAL_RET_ONLY): New macro. (totalorder): Use it. (totalordermag): Likewise. * math/gen-tgmath-tests.py (Tests.add_all_tests): Enable tests of totalorder and totalordermag. * math/test-tgmath.c (F(compile_test)): Do not call totalorder or totalordermag in arguments of calls to those functions. (NCALLS): Change to 134.
This commit is contained in:
parent
cfa4434523
commit
d12a22c5d3
10
ChangeLog
10
ChangeLog
@ -1,5 +1,15 @@
|
||||
2017-06-28 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
[BZ #21687]
|
||||
* math/tgmath.h (__TGMATH_BINARY_REAL_RET_ONLY): New macro.
|
||||
(totalorder): Use it.
|
||||
(totalordermag): Likewise.
|
||||
* math/gen-tgmath-tests.py (Tests.add_all_tests): Enable tests of
|
||||
totalorder and totalordermag.
|
||||
* math/test-tgmath.c (F(compile_test)): Do not call totalorder or
|
||||
totalordermag in arguments of calls to those functions.
|
||||
(NCALLS): Change to 134.
|
||||
|
||||
* math/tgmath.h (__TGMATH_UNARY_REAL_RET_ONLY): Do not take or
|
||||
cast to return type argument.
|
||||
(__TGMATH_TERNARY_FIRST_REAL_RET_ONLY): Likewise.
|
||||
|
@ -549,8 +549,8 @@ class Tests(object):
|
||||
self.add_tests('fromfpx', 'intmax_t', ['r', 'int', 'unsigned int'])
|
||||
self.add_tests('ufromfp', 'uintmax_t', ['r', 'int', 'unsigned int'])
|
||||
self.add_tests('ufromfpx', 'uintmax_t', ['r', 'int', 'unsigned int'])
|
||||
#self.add_tests('totalorder', 'int', ['r', 'r'])
|
||||
#self.add_tests('totalordermag', 'int', ['r', 'r'])
|
||||
self.add_tests('totalorder', 'int', ['r', 'r'])
|
||||
self.add_tests('totalordermag', 'int', ['r', 'r'])
|
||||
# The functions that round their result to a narrower type,
|
||||
# and the associated type-generic macros, are not yet
|
||||
# supported by this script or by glibc.
|
||||
|
@ -52,7 +52,7 @@ int count_cdouble;
|
||||
int count_cfloat;
|
||||
int count_cldouble;
|
||||
|
||||
#define NCALLS 138
|
||||
#define NCALLS 134
|
||||
#define NCALLS_INT 4
|
||||
#define NCCALLS 47
|
||||
|
||||
@ -295,8 +295,8 @@ F(compile_test) (void)
|
||||
b = fmaxmag (fmaxmag (a, x), fmaxmag (c, b));
|
||||
a = fminmag (fminmag (x, a), fminmag (c, b));
|
||||
b = fma (sin (a), sin (x), sin (c));
|
||||
a = totalorder (totalorder (x, b), totalorder (c, x));
|
||||
b = totalordermag (totalordermag (x, a), totalordermag (c, x));
|
||||
a = totalorder (x, b);
|
||||
b = totalordermag (x, a);
|
||||
|
||||
#ifdef TEST_INT
|
||||
a = atan2 (i, b);
|
||||
|
@ -112,6 +112,18 @@
|
||||
+ (__tgmath_real_type (Val2)) 0)) \
|
||||
Fct##f (Val1, Val2)))
|
||||
|
||||
# define __TGMATH_BINARY_REAL_RET_ONLY(Val1, Val2, Fct) \
|
||||
(__extension__ (((sizeof (Val1) > sizeof (double) \
|
||||
|| sizeof (Val2) > sizeof (double)) \
|
||||
&& __builtin_classify_type ((Val1) + (Val2)) == 8) \
|
||||
? __tgml(Fct) (Val1, Val2) \
|
||||
: (sizeof (Val1) == sizeof (double) \
|
||||
|| sizeof (Val2) == sizeof (double) \
|
||||
|| __builtin_classify_type (Val1) != 8 \
|
||||
|| __builtin_classify_type (Val2) != 8) \
|
||||
? Fct (Val1, Val2) \
|
||||
: Fct##f (Val1, Val2)))
|
||||
|
||||
# define __TGMATH_TERNARY_FIRST_SECOND_REAL_ONLY(Val1, Val2, Val3, Fct) \
|
||||
(__extension__ (((sizeof (Val1) > sizeof (double) \
|
||||
|| sizeof (Val2) > sizeof (double)) \
|
||||
@ -471,12 +483,12 @@
|
||||
# define fminmag(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, fminmag)
|
||||
|
||||
/* Total order operation. */
|
||||
# define totalorder(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, \
|
||||
totalorder)
|
||||
# define totalorder(Val1, Val2) \
|
||||
__TGMATH_BINARY_REAL_RET_ONLY (Val1, Val2, totalorder)
|
||||
|
||||
/* Total order operation on absolute values. */
|
||||
# define totalordermag(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, \
|
||||
totalordermag)
|
||||
# define totalordermag(Val1, Val2) \
|
||||
__TGMATH_BINARY_REAL_RET_ONLY (Val1, Val2, totalordermag)
|
||||
#endif
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user