summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog13
-rwxr-xr-xmath/gen-tgmath-tests.py4
-rw-r--r--math/tgmath.h20
3 files changed, 24 insertions, 13 deletions
diff --git a/ChangeLog b/ChangeLog
index 2125236df8..a3bc654f65 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2017-08-02 Joseph Myers <joseph@codesourcery.com>
+
+ [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.
+
2017-08-02 Steve Ellcey <sellcey@cavium.com>
* localedata/Makefile (CFLAGS-tst_iswalnum.c, CFLAGS-tst_iswalpha.c
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)
diff --git a/math/tgmath.h b/math/tgmath.h
index 211948c2e4..019f072e3e 100644
--- a/math/tgmath.h
+++ b/math/tgmath.h
@@ -129,8 +129,7 @@
: (__tgmath_real_type (Val1)) __tgml(Fct) (Val1, Val2)))
# define __TGMATH_BINARY_REAL_ONLY(Val1, Val2, Fct) \
- (__extension__ (((sizeof (+(Val1)) > sizeof (double) \
- || sizeof (+(Val2)) > sizeof (double)) \
+ (__extension__ ((sizeof ((Val1) + (Val2)) > sizeof (double) \
&& __builtin_classify_type ((Val1) + (Val2)) == 8) \
? __TGMATH_F128 ((Val1) + (Val2), \
(__typeof \
@@ -152,8 +151,7 @@
Fct##f (Val1, Val2)))
# define __TGMATH_BINARY_REAL_STD_ONLY(Val1, Val2, Fct) \
- (__extension__ (((sizeof (+(Val1)) > sizeof (double) \
- || sizeof (+(Val2)) > sizeof (double)) \
+ (__extension__ ((sizeof ((Val1) + (Val2)) > sizeof (double) \
&& __builtin_classify_type ((Val1) + (Val2)) == 8) \
? (__typeof ((__tgmath_real_type (Val1)) 0 \
+ (__tgmath_real_type (Val2)) 0)) \
@@ -170,8 +168,7 @@
Fct##f (Val1, Val2)))
# define __TGMATH_BINARY_REAL_RET_ONLY(Val1, Val2, Fct) \
- (__extension__ (((sizeof (+(Val1)) > sizeof (double) \
- || sizeof (+(Val2)) > sizeof (double)) \
+ (__extension__ ((sizeof ((Val1) + (Val2)) > sizeof (double) \
&& __builtin_classify_type ((Val1) + (Val2)) == 8) \
? __TGMATH_F128 ((Val1) + (Val2), Fct, (Val1, Val2)) \
__tgml(Fct) (Val1, Val2) \
@@ -183,8 +180,7 @@
: Fct##f (Val1, Val2)))
# define __TGMATH_TERNARY_FIRST_SECOND_REAL_ONLY(Val1, Val2, Val3, Fct) \
- (__extension__ (((sizeof (+(Val1)) > sizeof (double) \
- || sizeof (+(Val2)) > sizeof (double)) \
+ (__extension__ ((sizeof ((Val1) + (Val2)) > sizeof (double) \
&& __builtin_classify_type ((Val1) + (Val2)) == 8) \
? __TGMATH_F128 ((Val1) + (Val2), \
(__typeof \
@@ -206,9 +202,7 @@
Fct##f (Val1, Val2, Val3)))
# define __TGMATH_TERNARY_REAL_ONLY(Val1, Val2, Val3, Fct) \
- (__extension__ (((sizeof (+(Val1)) > sizeof (double) \
- || sizeof (+(Val2)) > sizeof (double) \
- || sizeof (+(Val3)) > sizeof (double)) \
+ (__extension__ ((sizeof ((Val1) + (Val2) + (Val3)) > sizeof (double) \
&& __builtin_classify_type ((Val1) + (Val2) + (Val3)) \
== 8) \
? __TGMATH_F128 ((Val1) + (Val2) + (Val3), \
@@ -312,8 +306,8 @@
/* XXX This definition has to be changed as soon as the compiler understands
the imaginary keyword. */
# define __TGMATH_BINARY_REAL_IMAG(Val1, Val2, Fct, Cfct) \
- (__extension__ (((sizeof (+__real__ (Val1)) > sizeof (double) \
- || sizeof (+__real__ (Val2)) > sizeof (double)) \
+ (__extension__ ((sizeof (__real__ (Val1) \
+ + __real__ (Val2)) > sizeof (double) \
&& __builtin_classify_type (__real__ (Val1) \
+ __real__ (Val2)) == 8) \
? __TGMATH_CF128 ((Val1) + (Val2), \