https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95450
Bug ID: 95450 Summary: [10 regression] Wrong long double folding Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: sch...@linux-m68k.org Target Milestone: --- Target: powerpc-*.* $ cat test-float.c #include <float.h> #include <assert.h> union gl_long_double_union { struct { double hi; double lo; } dd; long double ld; }; const union gl_long_double_union gl_LDBL_MAX = { { DBL_MAX, DBL_MAX / (double)134217728UL / (double)134217728UL } }; # undef LDBL_MAX # define LDBL_MAX (gl_LDBL_MAX.ld) int main () { volatile long double m = LDBL_MAX; assert (m + m > m); } $ gcc -O2 test-float.c $ ./a.out a.out: test-float.c:20: main: Assertion `m + m > m' failed. Aborted test-float.c.234t.optimized contains: m ={v} 1.79769313486231580793728971405302307166001572487e+308; but that evaluates to Inf. DBL_MAX is 1.79769313486231570814527423731704e+308L.