| Summary: | [3.3 regression] Wrong value after assignment in initialize list using bit-fields | ||
|---|---|---|---|
| Product: | gcc | Reporter: | Bjoern Seebeck <bjoern.seebeck> |
| Component: | rtl-optimization | Assignee: | Eric Botcazou <ebotcazou> |
| Status: | RESOLVED FIXED | ||
| Severity: | critical | CC: | gcc-bugs |
| Priority: | P2 | Keywords: | wrong-code |
| Version: | 3.3.2 | ||
| Target Milestone: | 3.3.3 | ||
| Host: | sparc-sun-solaris2.7 | Target: | sparc-sun-solaris2.7 |
| Build: | sparc-sun-solaris2.7 | Known to work: | |
| Known to fail: | Last reconfirmed: | 2003-11-10 15:03:02 | |
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