On Tue, 19 Dec 2006, Robert Dewar wrote: > > GCC does not use the latitude given in C99 only to treat certain > > aspects of signed @samp{<<} as undefined, but this is subject to > > change. > > That hardly seems sufficient documentation, when documenting undefined, > you had better say what the semantics is. Saying it is not treated as > undefined, and then failing to define it is a bit of a contradiction > in terms :-)
That's documented in the previous paragraphs: @item @cite{The results of some bitwise operations on signed integers (C90 6.3, C99 6.5).} Bitwise operators act on the representation of the value including both the sign and value bits, where the sign bit is considered immediately above the highest-value value bit. Signed @samp{>>} acts on negative numbers by sign extension. > What is (a*2)/2 optimized to? certainly it has the value a if you wrap, so you > are not necessarily depending on undefined here. It's optimized to a (and has been since at least 2.7.2.3, the earliest version I have around - though it wasn't until 3.0 that this optimization was fixed to apply only to signed types and not unsigned types as well). But if you wrap, (INT_MIN*2)/2 would be 0 not INT_MIN, for example. -- Joseph S. Myers [EMAIL PROTECTED]