diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/config/i386/i386-builtin-types.def | 2 | ||||
-rw-r--r-- | gcc/testsuite/c-c++-common/pr109884.c | 32 |
2 files changed, 33 insertions, 1 deletions
diff --git a/gcc/config/i386/i386-builtin-types.def b/gcc/config/i386/i386-builtin-types.def index 65fe070..cb2d0cd 100644 --- a/gcc/config/i386/i386-builtin-types.def +++ b/gcc/config/i386/i386-builtin-types.def @@ -73,7 +73,7 @@ DEF_PRIMITIVE_TYPE (BFLOAT16, ix86_bf16_type_node) DEF_PRIMITIVE_TYPE (FLOAT, float_type_node) DEF_PRIMITIVE_TYPE (DOUBLE, double_type_node) DEF_PRIMITIVE_TYPE (FLOAT80, float80_type_node) -DEF_PRIMITIVE_TYPE (FLOAT128, float128_type_node) +DEF_PRIMITIVE_TYPE (FLOAT128, float128t_type_node) DEF_PRIMITIVE_TYPE (CONST_STRING, const_string_type_node) # MMX vectors diff --git a/gcc/testsuite/c-c++-common/pr109884.c b/gcc/testsuite/c-c++-common/pr109884.c new file mode 100644 index 0000000..2625c87 --- /dev/null +++ b/gcc/testsuite/c-c++-common/pr109884.c @@ -0,0 +1,32 @@ +/* PR c++/109884 */ +/* PowerPC doesn't define these as builtins, but macros expanding to + *f128 builtins. */ +/* { dg-do compile { target { __float128 && { { c || c++11 } && { ! powerpc*-*-* } } } } } */ +/* { dg-add-options __float128 } */ + +#ifdef __cplusplus +template <typename T, typename U> +struct is_same { + static const bool value = false; +}; + +template <typename T> +struct is_same <T, T> { + static const bool value = true; +}; +#define HAS_TYPE(E, U) static_assert (is_same <decltype (E), U>::value, "") +#else +#define HAS_TYPE(E, U) _Static_assert (_Generic (E, default : 0, U : 1), "") +#endif + +void +foo () +{ + __float128 a = 0; + HAS_TYPE (__builtin_infq (), __float128); + HAS_TYPE (__builtin_huge_valq (), __float128); + HAS_TYPE (__builtin_nanq (""), __float128); + HAS_TYPE (__builtin_nansq (""), __float128); + HAS_TYPE (__builtin_fabsq (a), __float128); + HAS_TYPE (__builtin_copysignq (a, a), __float128); +} |