On Jan 14, 2008, Richard Guenther <[EMAIL PROTECTED]> wrote:

> The question arises when computing the value of say long : 33 i;
> i << 16 >> 16.  Is the shift performed in long : 33 type?  Is an
> out-of-range value truncated?

If truncation makes any difference, then there must have been
overflow, which invokes undefined behavior, which means we don't need
to worry about reducing the bitfield regardless of promotion.

If you make it 'unsigned long i:33', then promotion becomes relevant.
It might still be the case that the shift is performed on the
full-width unsigned long, and then converted back to the narrower
bitfield type for the assignment.

>   i.0 = (<unnamed-unsigned:24>) i;

This triggers precisely the error described in
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33887#c18

-- 
Alexandre Oliva         http://www.lsd.ic.unicamp.br/~oliva/
FSF Latin America Board Member         http://www.fsfla.org/
Red Hat Compiler Engineer   [EMAIL PROTECTED], gcc.gnu.org}
Free Software Evangelist  [EMAIL PROTECTED], gnu.org}

Reply via email to