https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86367
--- Comment #7 from joseph at codesourcery dot com <joseph at codesourcery dot com> --- If you use __builtin_nansf128 (which returns _Float128) but __float128 is long double, it's possible the implicit conversion from storing the result of __builtin_nansq in y.value results in converting a signaling NaN to a quiet NaN (it's unspecified whether conversion by assignment to the same floating-point format is a convertFormat or copy operation). If that's what's going on, then, given that __builtin_nansq etc. correspond to the type name __float128 (not to _Float128), those built-in functions (all the *q ones) should be mapped to those for whatever type __float128 is equivalent to, to avoid such conversions of signaling to quiet NaNs. I.e., if the issue is such an implicit conversion of signaling to quiet NaN, the patch attached to this issue is using the right approach for a fix.