static const double coeff[] = { +854513.0l /138 }; compiles as C almost everywhere, except ppc* with -mlong-double-128 -mabi=ibmlongdouble. const_binop refuses to compute this: /* Don't constant fold this floating point operation if the result may dependent upon the run-time rounding mode and flag_rounding_math is set, or if GCC's software emulation is unable to accurately represent the result. */ if ((flag_rounding_math || (REAL_MODE_FORMAT_COMPOSITE_P (mode) && !flag_unsafe_math_optimizations)) && (inexact || !real_identical (&result, &value))) return NULL_TREE; Now, is the above valid ISO C99? I couldn't find anything that would say this is not a valid constant expression, certainly it fits into double's range. Perhaps we should differentiate here if we are evaluating an initializer or not.
This is a dup of bug 26374. *** This bug has been marked as a duplicate of 26374 ***