c/7284: incorrectly simplifies leftshift followed by signed power-of-2 division

Al Grant AlGrant@myrealbox.com
Fri Jul 12 08:14:00 GMT 2002


On 12/07/2002 15:12:01 nathan wrote:
>Synopsis: incorrectly simplifies leftshift followed by signed power-of-2
>division
>
>State-Changed-From-To: open->closed
>State-Changed-By: nathan
>State-Changed-When: Fri Jul 12 07:12:01 2002
>State-Changed-Why:
>not a bug. for signed types, if 'n << c' overflows, the
>behaviour is undefined.

There is no "overflow" in my sample code.  The operation of shifting 128 24 bits to the left on a
32-bit machine produces the bit pattern 0x80000000.
No bits overflow.

The fact that a positive number may become negative when left-shifted is a property of the twos complement representation.  The standard does not define signed left shift in terms of multiplication and certainly doesn't say that it is undefined when the apparently equivalent multiplication would be undefined.




More information about the Gcc-bugs mailing list