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.