This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: warning: right shift count >= width of type


On Nov 29, 2004, at 8:18 AM, Dave Korn wrote:
Afternoon all. Here's something that's piqued my curiosity; it's probably
owing to some language-lawyerly issue, but it isn't obvious to me. This is
on gcc-3.3.3, (cygwin variant, but that's probably not relevant):


-------------------------<snip!>-------------------------
dk@mace /test/shift-test> cat foo.c

unsigned int bar (unsigned int baz)
{
unsigned int quux;

quux = baz >> 32;
return quux;
}
Why isn't the shift operation optimised away and replaced with const_int
0?

Because that's not what it means. Shifts by >= word size are undefined behavior
and will give different results depending on optimization level and on whether
the shift count is constant or variable. Don't do that. (If you think it ought to be 0,
reflect that most popular CPUs have only 5 bit shift counts, and consider what the
code for x >> y would have to look like.)



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]