mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-09 23:00:07 +00: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>
|
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
|
* math/tgmath.h (__TGMATH_UNARY_REAL_RET_ONLY): Do not take or
|
||||||
cast to return type argument.
|
cast to return type argument.
|
||||||
(__TGMATH_TERNARY_FIRST_REAL_RET_ONLY): Likewise.
|
(__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('fromfpx', 'intmax_t', ['r', 'int', 'unsigned int'])
|
||||||
self.add_tests('ufromfp', 'uintmax_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('ufromfpx', 'uintmax_t', ['r', 'int', 'unsigned int'])
|
||||||
#self.add_tests('totalorder', 'int', ['r', 'r'])
|
self.add_tests('totalorder', 'int', ['r', 'r'])
|
||||||
#self.add_tests('totalordermag', 'int', ['r', 'r'])
|
self.add_tests('totalordermag', 'int', ['r', 'r'])
|
||||||
# The functions that round their result to a narrower type,
|
# The functions that round their result to a narrower type,
|
||||||
# and the associated type-generic macros, are not yet
|
# and the associated type-generic macros, are not yet
|
||||||
# supported by this script or by glibc.
|
# supported by this script or by glibc.
|
||||||
|
@ -52,7 +52,7 @@ int count_cdouble;
|
|||||||
int count_cfloat;
|
int count_cfloat;
|
||||||
int count_cldouble;
|
int count_cldouble;
|
||||||
|
|
||||||
#define NCALLS 138
|
#define NCALLS 134
|
||||||
#define NCALLS_INT 4
|
#define NCALLS_INT 4
|
||||||
#define NCCALLS 47
|
#define NCCALLS 47
|
||||||
|
|
||||||
@ -295,8 +295,8 @@ F(compile_test) (void)
|
|||||||
b = fmaxmag (fmaxmag (a, x), fmaxmag (c, b));
|
b = fmaxmag (fmaxmag (a, x), fmaxmag (c, b));
|
||||||
a = fminmag (fminmag (x, a), fminmag (c, b));
|
a = fminmag (fminmag (x, a), fminmag (c, b));
|
||||||
b = fma (sin (a), sin (x), sin (c));
|
b = fma (sin (a), sin (x), sin (c));
|
||||||
a = totalorder (totalorder (x, b), totalorder (c, x));
|
a = totalorder (x, b);
|
||||||
b = totalordermag (totalordermag (x, a), totalordermag (c, x));
|
b = totalordermag (x, a);
|
||||||
|
|
||||||
#ifdef TEST_INT
|
#ifdef TEST_INT
|
||||||
a = atan2 (i, b);
|
a = atan2 (i, b);
|
||||||
|
@ -112,6 +112,18 @@
|
|||||||
+ (__tgmath_real_type (Val2)) 0)) \
|
+ (__tgmath_real_type (Val2)) 0)) \
|
||||||
Fct##f (Val1, Val2)))
|
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) \
|
# define __TGMATH_TERNARY_FIRST_SECOND_REAL_ONLY(Val1, Val2, Val3, Fct) \
|
||||||
(__extension__ (((sizeof (Val1) > sizeof (double) \
|
(__extension__ (((sizeof (Val1) > sizeof (double) \
|
||||||
|| sizeof (Val2) > sizeof (double)) \
|
|| sizeof (Val2) > sizeof (double)) \
|
||||||
@ -471,12 +483,12 @@
|
|||||||
# define fminmag(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, fminmag)
|
# define fminmag(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, fminmag)
|
||||||
|
|
||||||
/* Total order operation. */
|
/* Total order operation. */
|
||||||
# define totalorder(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, \
|
# define totalorder(Val1, Val2) \
|
||||||
totalorder)
|
__TGMATH_BINARY_REAL_RET_ONLY (Val1, Val2, totalorder)
|
||||||
|
|
||||||
/* Total order operation on absolute values. */
|
/* Total order operation on absolute values. */
|
||||||
# define totalordermag(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, \
|
# define totalordermag(Val1, Val2) \
|
||||||
totalordermag)
|
__TGMATH_BINARY_REAL_RET_ONLY (Val1, Val2, totalordermag)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user