http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55967
--- Comment #1 from JoeSoe <b1262178 at rmqkr dot net> 2013-01-14 12:53:24 UTC --- Of course I get warnings... go.c:146:3: warning: left shift count >= width of type [enabled by default] go.c:146:3: warning: right shift count >= width of type [enabled by default] And of course ((1U<<(32))) is also undefined behaviour, since the www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf#page=578 states on undefined behaviour: An expression is shifted by a negative number or by an amount greater than or equal to the width of the promoted expression (6.5.7). Bit even if this is undefined behaviour, I would like gcc to handle this gracefully, as is the case with (((1U<<(32))) ) >> 32U which "gracefully" yields 0. So the following should also do the graceful thing and yield 0, right? ((1U<<(32))) + 0x80000000U) >> 32U