From: Heiko G. <hg...@te...> - 2003-02-24 15:32:50
|
Hi, if accessing a bitfield member of a base class gcc returns the attached compile error. I think one should be able to access the base member even if it is a bitfield that can't be accessed by pointers. Is it a bug or does someone has an explanation. I'm using the newest mingw runtime and gcc 3.2.2. See compiler message and example below: --------------------------------- g++ -o bf.exe bf.cpp bf.cpp: In member function `void B::f()': bf.cpp:11: illegal pointer to bit-field `A::ib' make: *** [default] Error 1 --------------------------------- bf.cpp: class A { public: unsigned int ib:1 ; } ; class B : public A { public: unsigned int ib; void f() { A::ib = 1 ; } } ; int main () { B b; b.f(); return (0); } ---------------------------------- |
From: Oscar F. <of...@wa...> - 2003-02-24 17:28:34
|
"Heiko Gerdau" <hg...@te...> writes: > Hi, > > if accessing a bitfield member of a base class gcc returns the attached > compile error. I think one should be able to access the base member even > if it is a bitfield that can't be accessed by pointers. Is it a bug or > does someone has an explanation. I see no reason why your code shouldn't work. Comeau 4.3.0.1, Borland 5.5.1 and Intel 7.0 compiles ok. Seems to me that g++ gets confused by the internal machinery used to access the base class data. > I'm using the newest mingw runtime and gcc 3.2.2. See compiler message > and example below: > > --------------------------------- > g++ -o bf.exe bf.cpp > bf.cpp: In member function `void B::f()': > bf.cpp:11: illegal pointer to bit-field `A::ib' > make: *** [default] Error 1 > > --------------------------------- > > bf.cpp: > > class A > { > public: > unsigned int ib:1 ; > } ; > > class B : public A > { > public: > unsigned int ib; > void f() { A::ib = 1 ; } > } ; > > int main () > { > B b; > b.f(); > return (0); > } > ---------------------------------- -- Oscar |
From: Greg C. <chi...@mi...> - 2003-02-24 17:43:34
|
Heiko Gerdau wrote: > > if accessing a bitfield member of a base class gcc returns the attached > compile error. I think one should be able to access the base member even > if it is a bitfield that can't be accessed by pointers. Is it a bug or > does someone has an explanation. > > I'm using the newest mingw runtime and gcc 3.2.2. See compiler message > and example below: [snipped] Comeau accepts it: http://www.comeaucomputing.com/tryitout/ I don't think you're forming any pointer to a bitfield as gcc suggests. Looks like gcc is happier if you remove the 'A::' qualifier: void f() { ib = 1 ; } |
From: Oscar F. <of...@wa...> - 2003-02-24 19:08:29
|
Greg Chicares <chi...@mi...> writes: > Heiko Gerdau wrote: > > > > if accessing a bitfield member of a base class gcc returns the attached > > compile error. I think one should be able to access the base member even > > if it is a bitfield that can't be accessed by pointers. Is it a bug or > > does someone has an explanation. > > > > I'm using the newest mingw runtime and gcc 3.2.2. See compiler message > > and example below: [snipped] > > Comeau accepts it: > http://www.comeaucomputing.com/tryitout/ > I don't think you're forming any pointer to a > bitfield as gcc suggests. Looks like gcc is > happier if you remove the 'A::' qualifier: > void f() { ib = 1 ; } But then he is accessing B::ib :-) I suspect gcc produces, at some itermediate level: this->A::ib = 1; It is definitely a bug on gcc. Could somebody confirm the bug on a non-MinGW installation and then report it to GCC? -- Oscar |
From: Heiko G. <hg...@te...> - 2003-02-24 23:34:36
|
> It is definitely a bug on gcc. > > Could somebody confirm the bug on a non-MinGW installation and then > report it to GCC? Thanks for your confirmations. It happens on linux too, but it has been fixed in gcc 3.4 Greetings Heiko |