https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87390
--- Comment #22 from joseph at codesourcery dot com <joseph at codesourcery dot com> --- 6.3.1.8 specifies *types*. It only gives some partial information about *evaluation formats*, which is essentially a consequence of information elsewhere (it states the possibility of wider evaluation formats, while never requiring them to be used, and states that when they are used they don't affect the types). I think 5.2.4.2.2 has the main specification of when wider evaluation formats are used. I think the combined effect of 5.2.4.2.2 and 6.3.1.5 is that the particular form of implicit conversion involved in the usual arithmetic conversions does not *remove* excess range and precision from an operand to an operator that applies the usual arithmetic conversions, but that this does not result in excess precision being *introduced* by such an implicit conversion when the argument was of integer type, in the absence of any explicit wording providing for such conversions to result in a value with excess precision. There are places where it is unspecified even in C11 whether an implicit conversion does or does not result in a value with excess range and precision. For example, for function return in the absence of Annex F (when Annex F is implemented, function return is required to remove excess range and precision).