From: Chris Jefferson <caj@cs.york.ac.uk>
To: Dave Korn <dk@artimi.com>
Cc: 'Dale Johannesen' <dalej@apple.com>,
gcc@gcc.gnu.org, 'Andrew Haley' <aph@redhat.com>,
'Nathan Sidwell' <nathan@codesourcery.com>
Subject: Re: warning: right shift count >= width of type
Date: Mon, 29 Nov 2004 17:38:00 -0000 [thread overview]
Message-ID: <41AB58B1.5030306@cs.york.ac.uk> (raw)
In-Reply-To: <NUTMEGvGPCNue2lHq6J000001b8@NUTMEG.CAM.ARTIMI.COM>
Dave Korn wrote:
>>-----Original Message-----
>>From: Dale Johannesen
>>Sent: 29 November 2004 16:31
>>
>>
>
>
>
>>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.)
>>
>>
>
>
> Absolutely so; my curiosity was piqued when I noticed that my
>cross-compiler was generating illegal assembler code with an out-of-range
>operand value that the assembler couldn't fit into the relevant opcode
>bitfield.
>
> So my question is really "Given that it's undefined, which means that
>whatever the compiler does is correct, and given that there's already code
>in there to detect the situation and issue a warning, which probably means
>that it would be very easy at such a point to replace the offending RTL with
>(const_int 0), is there any specific reason why not to?"
>
One reason (of course) not to would be if you are bit-shifting by a
variable. Adding a check at runtime to see if the value of this variable
is <32 and if not setting the variable to zero would be frowned upon by
many people, particuarily because the kind of people who undertake
bitshifting are doing it for performance-related reasons...
Chris
next prev parent reply other threads:[~2004-11-29 17:14 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-11-29 16:30 Dave Korn
2004-11-29 16:33 ` Nathan Sidwell
2004-11-29 17:01 ` Andrew Haley
2004-11-29 17:12 ` Dale Johannesen
2004-11-29 17:14 ` Dave Korn
2004-11-29 17:26 ` Andrew Haley
2004-11-29 18:29 ` Peter Barada
2004-11-29 18:53 ` Dave Korn
2004-11-29 18:52 ` Dave Korn
2004-11-29 19:09 ` Andrew Haley
2004-11-29 19:17 ` Dale Johannesen
2004-11-29 19:54 ` Dave Korn
2004-11-29 17:38 ` Chris Jefferson [this message]
2004-11-29 18:46 ` Dave Korn
2004-11-29 19:19 ` Chris Jefferson
2004-11-29 19:46 ` Dave Korn
2004-11-29 23:49 Paul Schlie
2004-11-30 1:50 ` Andreas Schwab
2004-11-30 4:23 Paul Schlie
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=41AB58B1.5030306@cs.york.ac.uk \
--to=caj@cs.york.ac.uk \
--cc=aph@redhat.com \
--cc=dalej@apple.com \
--cc=dk@artimi.com \
--cc=gcc@gcc.gnu.org \
--cc=nathan@codesourcery.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).