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).

Reply via email to