I think the following "invalid conversion" error, which is believe is wrong. When I remove the bitfield, the program compile fine. In any case, the error message isn't really optimal. :) (sid)4502:tbm@test: ~/src] cat test.cpp class Ast { enum AstKind { }; const AstKind kind : 8; void foo(AstKind k) { } void bar(void) { foo(kind); } }; [with gcc 4.2 20060508] (sid)4503:tbm@test: ~/src] /usr/lib/gcc-snapshot/bin/g++ -c test.cpp test.cpp: In member function 'void Ast::bar()': test.cpp:6: error: invalid conversion from 'unsigned char' to 'Ast::AstKind' test.cpp:6: error: initializing argument 1 of 'void Ast::foo(Ast::AstKind)' zsh: exit 1 /usr/lib/gcc-snapshot/bin/g++ -c test.cpp [with gcc 4.2 20060530] (sid)4504:tbm@test: ~/src] /usr/lib/gcc-snapshot/bin/g++ -c test.cpp test.cpp: In member function 'void Ast::bar()': test.cpp:6: error: invalid conversion from 'Ast::AstKind' to 'Ast::AstKind' test.cpp:6: error: initializing argument 1 of 'void Ast::foo(Ast::AstKind)' zsh: exit 1 /usr/lib/gcc-snapshot/bin/g++ -c test.cpp (sid)4505:tbm@test: ~/src]
Confirmed, 4.1.0 accepted this code.
The following, related example, fails with gcc 4.2 20060508 but works with 20060530. It would be great if whoever works on this PR could check what change was responsible to get this working, and if it was just an accidental change, whether the following test case should be added to the test suite: enum EBorderStyle { BNATIVE, BNONE, BHIDDEN }; class BorderValue { public: EBorderStyle style : 8; }; class bar { BorderValue *border; EBorderStyle foo() { return border ? border->style : BHIDDEN; } };
It wasn't accidentally fixed. It was fixed by Mark Mitchell for PR c++/27506, which contain the same test case as my 2nd example. In any case, the first test case wasn't fixed by the fix for PR 27506.
Subject: Bug 27979 Author: mmitchel Date: Fri Jun 16 23:12:08 2006 New Revision: 114733 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=114733 Log: PR c++/27979 * call.c (standard_conversion): Strip cv-qualifiers from bitfield types. PR c++/27979 * g++.dg/expr/bitfield2.C: New test. Added: trunk/gcc/testsuite/g++.dg/expr/bitfield2.C Modified: trunk/gcc/cp/ChangeLog trunk/gcc/cp/call.c trunk/gcc/testsuite/ChangeLog
Fixed in 4.2.0.