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

Reply via email to