This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

c/8148: simple bit shifting does not work


>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:


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]