diff options
author | Joseph Myers <joseph@codesourcery.com> | 2017-06-28 16:31:10 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2017-06-28 16:31:10 +0000 |
commit | d12a22c5d351cd1cc125a6345a949dfbc20f6f91 (patch) | |
tree | fb95acef62127f7ced4626637f49a141ea4f82de /math/tgmath.h | |
parent | cfa44345234e161cb59987ed70e04719ba155867 (diff) | |
download | glibc-d12a22c5d351cd1cc125a6345a949dfbc20f6f91.tar glibc-d12a22c5d351cd1cc125a6345a949dfbc20f6f91.tar.gz glibc-d12a22c5d351cd1cc125a6345a949dfbc20f6f91.tar.bz2 glibc-d12a22c5d351cd1cc125a6345a949dfbc20f6f91.zip |
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.
Diffstat (limited to 'math/tgmath.h')
-rw-r--r-- | math/tgmath.h | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/math/tgmath.h b/math/tgmath.h index a70dfe1f47..a0da104142 100644 --- a/math/tgmath.h +++ b/math/tgmath.h @@ -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 |