https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99708
--- Comment #13 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
I see
if (TARGET_FLOAT128_TYPE)
{
if (!TARGET_IEEEQUAD && TARGET_LONG_DOUBLE_128)
ibm128_float_type_node = long_double_type_node;
else
{
ibm128_float_type_node = make_node (REAL_TYPE);
TYPE_PRECISION (ibm128_float_type_node) = 128;
SET_TYPE_MODE (ibm128_float_type_node, IFmode);
layout_type (ibm128_float_type_node);
}
t = build_qualified_type (ibm128_float_type_node, TYPE_QUAL_CONST);
ptr_ibm128_float_type_node = build_pointer_type (t);
lang_hooks.types.register_builtin_type (ibm128_float_type_node,
"__ibm128");
if (TARGET_IEEEQUAD && TARGET_LONG_DOUBLE_128)
ieee128_float_type_node = long_double_type_node;
else
ieee128_float_type_node = float128_type_node;
t = build_qualified_type (ieee128_float_type_node, TYPE_QUAL_CONST);
ptr_ieee128_float_type_node = build_pointer_type (t);
lang_hooks.types.register_builtin_type (ieee128_float_type_node,
"__ieee128");
}
else
ieee128_float_type_node = ibm128_float_type_node = long_double_type_node;
Doesn't this mean that ieee128_float_type_node and ibm128_float_type_node is
always non-NULL?
So, maybe we shouldn't test whether those are non-NULL, but whether the name
of say ieee128_float_type_node is __ieee128 and similarly if
ibm128_float_type_node's name is __ibm128?
Though, __SIZEOF_FLOAT128__ macro talks about __float128 which is on ppc64 a
macro, so
probably it needs to be that plus whether __float128 is defined to __ieee128.