c/8148: simple bit shifting does not work

acme@us.ibm.com acme@us.ibm.com
Fri Oct 4 12:26:00 GMT 2002


>Number:         8148
>Category:       c
>Synopsis:       simple bit shifting does not work
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Fri Oct 04 12:26:00 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator:     Bryan Hunt
>Release:        3.2
>Organization:
>Environment:
System: Linux tritium.austin.ibm.com 2.4.9-34 #1 Sat Jun 1 06:25:16 EDT 2002 i686 unknown
Architecture: i686

        <machine, os, target, libraries (multiple lines)>
host: i686-pc-linux-gnu
build: i686-pc-linux-gnu
target: i686-pc-linux-gnu
configured with: /home/bhunt/gcc-3.2/configure --enable-languages=c,c++
>Description:
shifting a variable a number of bits greater or equal to its size produces incorrect results.  This problem has been verified with both unsigned and unsigned long long.  This problem has only been seen on x86 Linux.  Both gcc 3.0.3 and xlC 5.0 on AIX 4.3 produces correct results.
>How-To-Repeat:
#include <iostream>

using namespace std;

int main(int argc, char* argv[])
{
  unsigned x = 0xffffffff;
  x = x << 32;

  if(x != 0)
    cout << "Bit shifting is broken: expected 0x0, but got: " << hex << x << endl;
  else
    cout << "Bit shifting works" << endl;

  return 0;
}
>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:



More information about the Gcc-prs mailing list