https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87390
--- Comment #25 from Vincent Lefèvre <vincent-gcc at vinc17 dot net> --- (In reply to Joseph S. Myers from comment #24) > You note that "values subject to the usual arithmetic conversions can either > be floating-point values or integer values". Only in the floating-point > case is excess range and precision applicable to them; there is no such > concept for values with integer types (values *resulting* from the usual > arithmetic conversions are a separate matter, where the rules for implicit > conversions must apply to determine when there is excess range and > precision). (I don't think 5.2.4.2.2 is that well phrased, but I don't > think in C99 it requires excess precision for the results of such > conversions from floating-point to integer.) Yes, 5.2.4.2.2 is not well-written, but I think that it is something that is only on top of other clauses. For instance, 6.3.1.8p2 is more explicit: "The values of floating operands [...]", and 6.3.1.8 itself is applied only in the context of each particular operation that are based on these usual arithmetic conversions, as said at the beginning of 6.3: "The list in 6.3.1.8 summarizes the conversions performed by most ordinary operators; it is supplemented as required by the discussion of each operator in 6.5." For instance, in my example, I was using "==", and "6.5.9 Equality operators" says: "If both of the operands have arithmetic type, the usual arithmetic conversions are performed. [...]", i.e. it refers to 6.3.1.8. And for an operation with floating-point operands (which was the case for "==" in my example), additional information is given by 5.2.4.2.2. > The interpretation of C99 rules for excess precision used in GCC has been > explained at length from 2008 onwards. Could you cite where this bug is documented in GCC? Even if this was an old, incorrect interpretation in GCC, saying that the bug is fixed is misleading.