public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
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

  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).