https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96600
Bug ID: 96600 Summary: __builtin_modfl returns incorrect value Product: gcc Version: 10.1.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: kretz at kde dot org Target Milestone: --- Target: powerpc64le-*-* Test case: int e = 69; int main() { long double a = -__builtin_ldexpl( 1.9446689187403240306919491832695730985733566864714824565497322973045558e+00l, e); long double b = -__builtin_ldexpl( 1.9446689187403240306919491832695730985733566864714824565497322973045558e+00l, 69); long double tmp; long double aa = __builtin_modfl(a, &tmp); long double bb = __builtin_modfl(b, &tmp); if (aa != bb) { if (a == b) return 2; else return 1; } return 0; } This returns 2, i.e. the internal representation of a and b differ in such a way that modf gets broken. GCC was built with `--target=powerpc64le-linux-gnu --disable-nls --without-headers --with-long-double-128`