https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101002
--- Comment #6 from Peter Bergner <bergner at gcc dot gnu.org> --- (In reply to Peter Bergner from comment #5) > The creation of the __ibm128 type is guarded by: > > if (TARGET_LONG_DOUBLE_128 && (!TARGET_IEEEQUAD || TARGET_FLOAT128_TYPE)) > > Since the __ibm128 type is independent of what long double defaults to, I > assume the fix is to just remove the TARGET_LONG_DOUBLE_128 test giving us: > > if (!TARGET_IEEEQUAD || TARGET_FLOAT128_TYPE) I'm going to test the following to see whether anything bad falls out: --- a/gcc/config/rs6000/rs6000-builtin.cc +++ b/gcc/config/rs6000/rs6000-builtin.cc @@ -710,9 +710,9 @@ rs6000_init_builtins (void) For IEEE 128-bit floating point, always create the type __ieee128. If the user used -mfloat128, rs6000-c.cc will create a define from __float128 to __ieee128. */ - if (TARGET_LONG_DOUBLE_128 && (!TARGET_IEEEQUAD || TARGET_FLOAT128_TYPE)) + if (!TARGET_IEEEQUAD || TARGET_FLOAT128_TYPE) { - if (!TARGET_IEEEQUAD) + if (TARGET_LONG_DOUBLE_128 && !TARGET_IEEEQUAD) ibm128_float_type_node = long_double_type_node; else {