diff options
author | Joseph Myers <joseph@codesourcery.com> | 2017-08-02 20:16:05 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2017-08-02 20:16:05 +0000 |
commit | 42df8d5921d9ce28f44694ae943efb432b5e9aa7 (patch) | |
tree | 26f13b7bb504926987ad82ac279ddd1896b5fd77 /math/gen-tgmath-tests.py | |
parent | b7f95f493b47abfd8f6320b3492b25a2beaa6aa1 (diff) | |
download | glibc-42df8d5921d9ce28f44694ae943efb432b5e9aa7.tar glibc-42df8d5921d9ce28f44694ae943efb432b5e9aa7.tar.gz glibc-42df8d5921d9ce28f44694ae943efb432b5e9aa7.tar.bz2 glibc-42df8d5921d9ce28f44694ae943efb432b5e9aa7.zip |
Fix tgmath.h for __int128 (bug 21686).
When a tgmath.h macro is passed a double argument and an argument of
type __int128, it generates a call to a long double function (although
the result still gets converted to type double). __int128 is similar
enough to integer types that it should be handled consistently like
them, so always like double for these macros rather than sometimes
like double and sometimes like long double. This patch fixes the
logic accordingly and makes gen-tgmath-tests.py generate tests for
__int128.
Tested for x86_64 and x86.
[BZ #21686]
* math/tgmath.h (__TGMATH_BINARY_REAL_ONLY): Add arguments before
comparing size with that of double.
(__TGMATH_BINARY_REAL_STD_ONLY): Likewise.
(__TGMATH_BINARY_REAL_RET_ONLY): Likewise.
(__TGMATH_TERNARY_FIRST_SECOND_REAL_ONLY): Likewise.
(__TGMATH_TERNARY_REAL_ONLY): Likewise.
(__TGMATH_BINARY_REAL_IMAG): Likewise.
* math/gen-tgmath-tests.py (Type.init_types): Create __int128 and
unsigned __int128 types.
Diffstat (limited to 'math/gen-tgmath-tests.py')
-rwxr-xr-x | math/gen-tgmath-tests.py | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/math/gen-tgmath-tests.py b/math/gen-tgmath-tests.py index e749e3d8b0..9044670326 100755 --- a/math/gen-tgmath-tests.py +++ b/math/gen-tgmath-tests.py @@ -195,6 +195,10 @@ class Type(object): Type.create_type('unsigned long int', integer=True) Type.create_type('long long int', integer=True) Type.create_type('unsigned long long int', integer=True) + Type.create_type('__int128', integer=True, + condition='defined __SIZEOF_INT128__') + Type.create_type('unsigned __int128', integer=True, + condition='defined __SIZEOF_INT128__') Type.create_type('enum e', integer=True, complex_ok=False) Type.create_type('_Bool', integer=True, complex_ok=False) Type.create_type('bit_field', integer=True, complex_ok=False) |