public inbox for gcc-help@gcc.gnu.org
 help / color / mirror / Atom feed
* long bit-fields with g++ 4.4.1
@ 2010-03-11 20:31 Vineet Soni
  2010-03-12 13:49 ` Cedric Roux
  2010-03-16 14:56 ` Ian Lance Taylor
  0 siblings, 2 replies; 5+ messages in thread
From: Vineet Soni @ 2010-03-11 20:31 UTC (permalink / raw)
  To: gcc-help

The integral promotion behavior of long bit-fields has changed with g++ 4.4.1 on
x86_64-linux, and appears broken.  Consider:

#include <stdio.h>
#define T unsigned long
int main()
{
  struct { T f : 33; } s = { 1UL << 32 };
  printf("%lx %lx %lx\n", (T)s.f, (T)(s.f << 1), (T)((s.f << 1) >> 1));

  struct { T f : 16; } t = { 1UL << 15 };
  printf("%lx %lx %lx\n", (T)t.f, (T)(t.f << 17), (T)((t.f << 17) >> 17));

  return 0;
}

Based on my interpretation of the C++ standard, the expected output is:

    100000000 200000000 100000000
    8000 100000000 8000

The actual output is:

    $ g++-4.4.1 -Wall -pedantic x.c; ./a.out
    100000000 200000000 100000000
    8000 0 0

Is this a bug?

Note that 4.0.2 matches the expected output:

    $ g++-4.0.2 -Wall -pedantic x.c; ./a.out
    100000000 200000000 100000000
    8000 100000000 8000

GCC versions used:

$ gcc-4.0.2 -v
Using built-in specs.
Target: x86_64-unknown-linux-gnu
Configured with: ../../src/gcc-4.0.2/configure
--prefix=/home/global/Linux-x86_64-rhel3/encap/gcc-4.0.2 --disable-libgcj
--enable-languages=c,c++
Thread model: posix
gcc version 4.0.2

$ gcc-4.4.1 -v
Using built-in specs.
Target: x86_64-unknown-linux-gnu
Configured with: ./configure
--prefix=/home/global/Linux-x86_64-rhel5/encap/gcc-4.4.1 --disable-libgcj
--enable-languages=c,c++
--with-mpfr=/home/global/Linux-x86_64-rhel5/encap/mpfr-2.4.1
Thread model: posix
gcc version 4.4.1 (GCC)


-- Vineet


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2010-03-16 17:59 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-03-11 20:31 long bit-fields with g++ 4.4.1 Vineet Soni
2010-03-12 13:49 ` Cedric Roux
2010-03-12 16:17   ` Vineet Soni
2010-03-16 14:56 ` Ian Lance Taylor
2010-03-16 18:17   ` Vineet Soni

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