https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70117
Bug ID: 70117 Summary: ppc long double isinf() is wrong? Product: gcc Version: 5.3.0 Status: UNCONFIRMED Keywords: wrong-code Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: rguenth at gcc dot gnu.org CC: meissner at gcc dot gnu.org Target Milestone: --- Appearantly gnulib has its own idea of LDBL_MAX and with recent glibc changing isinf to use GCC builtins we end up with the following failing test which may be because GCC folds the isinf() call to do effectively if (islessequal (fabsl (gl_LDBL_MAX.ld), 1.79769313486231580793728971405301199252069012264752390332e+308)) which may or may not be valid for IBM long double (double double) which is said to have "many" LDBL_MAX? #include <float.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 } }; int main() { if (__builtin_isinfl (gl_LDBL_MAX.ld)) __builtin_abort (); if (__builtin_isinfl (-gl_LDBL_MAX.ld)) __builtin_abort (); return 0; }