This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/12926] New: sparc-sun-solaris2.7 64BIT: Wrong value after assignment in initialize list using Bit Fields
- From: "bjoern dot seebeck at gmx dot de" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 6 Nov 2003 15:21:48 -0000
- Subject: [Bug c++/12926] New: sparc-sun-solaris2.7 64BIT: Wrong value after assignment in initialize list using Bit Fields
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
PLEASE REPLY TO gcc-bugzilla@gcc.gnu.org ONLY, *NOT* gcc-bugs@gcc.gnu.org.
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=12926
Summary: sparc-sun-solaris2.7 64BIT: Wrong value after assignment
in initialize list using Bit Fields
Product: gcc
Version: 3.3.2
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: bjoern dot seebeck at gmx dot de
CC: gcc-bugs at gcc dot gnu dot org
GCC host triplet: sparc-sun-solaris2.7
In the example below GCC seems to have problems with assignment
of types in the initialize list, which were declared using Bit Fields:
#include <iostream>
using namespace std;
struct A
{
enum Type {P, U, S};
A( const size_t size, const Type type ): mSize(size), mType(type)
{
cout << "type = " << type << endl;
cout << "mType = " << mType << endl;
}
const size_t mSize :CHAR_BIT*sizeof(size_t) - 3 ;
Type mType : 2;
};
int main()
{
A testa(2,A::S);
return testa.mType;
}
The output is:
type = 2
mType = 0
Note that the output after compiling with -O1 is correct:
type = 2
mType = 2
, with -O2 or -O3 it is wrong.
Release:
gcc version 3.3.2
Environment:
sparc-sun-solaris2.7
Verbose message g++:
g++ a.C -v -oa -O3 -m64
Reading specs from /sw/gcc3/lib/gcc-lib/sparc-sun-solaris2.7/3.3.2/specs
Configured with: ../gcc-3.3.2/configure --prefix=/sw/gcc3 --with-local-
prefix=/sw/local --enable-libgcj --with-ld=/usr/ccs/bin/ld --with-
as=/usr/ccs/bin/as
Thread model: posix
gcc version 3.3.2
/sw/gcc3/lib/gcc-lib/sparc-sun-solaris2.7/3.3.2/cc1plus -quiet -v -
D__GNUC__=3 -D__GNUC_MINOR__=3 -D__GNUC_PATCHLEVEL__=2 -Dsparc -D__sparc__ -
D__sparc -D__arch64__ -Acpu=sparc64 -Amachine=sparcv9 -D__sparcv9 a.C -
D__GNUG__=3 -mptr64 -mstack-bias -mno-v8plus -mcpu=v9 -quiet -dumpbase a.C -
m64 -auxbase a -O3 -version -o /var/tmp//ccnuC6vI.s
GNU C++ version 3.3.2 (sparc-sun-solaris2.7)
compiled by GNU C version 3.3.2.
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
ignoring nonexistent directory "/sw/gcc3/sparc-sun-solaris2.7/include"
#include "..." search starts here:
#include <...> search starts here:
/sw/gcc3/include/c++/3.3.2
/sw/gcc3/include/c++/3.3.2/sparc-sun-solaris2.7
/sw/gcc3/include/c++/3.3.2/backward
/sw/local/include
/sw/gcc3/include
/sw/gcc3/lib/gcc-lib/sparc-sun-solaris2.7/3.3.2/include
/usr/include
End of search list.
/usr/ccs/bin/as -V -Qy -s -xarch=v9 -
o /var/tmp//ccu1ZhGI.o /var/tmp//ccnuC6vI.s
/usr/ccs/bin/as: Sun WorkShop 6 99/08/18
/sw/gcc3/lib/gcc-lib/sparc-sun-solaris2.7/3.3.2/collect2 -V -Y
P,/usr/lib/sparcv9 -Qy -oa /sw/gcc3/lib/gcc-lib/sparc-sun-
solaris2.7/3.3.2/sparcv9/crt1.o /sw/gcc3/lib/gcc-lib/sparc-sun-
solaris2.7/3.3.2/sparcv9/crti.o /usr/ccs/lib/sparcv9/values-
Xa.o /sw/gcc3/lib/gcc-lib/sparc-sun-solaris2.7/3.3.2/sparcv9/crtbegin.o -
L/sw/gcc3/lib/gcc-lib/sparc-sun-solaris2.7/3.3.2/sparcv9 -L/sw/gcc3/lib/gcc-
lib/sparc-sun-solaris2.7/3.3.2 -L/sw/gcc3/lib/gcc-lib/sparc-sun-
solaris2.7/3.3.2/../../../../sparc-sun-solaris2.7/lib -L/usr/ccs/bin/sparcv9 -
L/usr/ccs/bin -L/usr/ccs/lib/sparcv9 -L/usr/ccs/lib -L/sw/gcc3/lib/gcc-
lib/sparc-sun-solaris2.7/3.3.2/../../../sparcv9 -L/sw/gcc3/lib/gcc-lib/sparc-
sun-solaris2.7/3.3.2/../../.. -L/lib/sparcv9 -
L/usr/lib/sparcv9 /var/tmp//ccu1ZhGI.o -lstdc++ -lm -lgcc_s_sparcv9 -lgcc -lc -
lgcc_s_sparcv9 -lgcc -lc /sw/gcc3/lib/gcc-lib/sparc-sun-
solaris2.7/3.3.2/sparcv9/crtend.o /sw/gcc3/lib/gcc-lib/sparc-sun-
solaris2.7/3.3.2/sparcv9/crtn.o
ld: Software Generation Utilities - Solaris Link Editors: 5.8-1.279