g++ may fail to compile __packed structures
pavlin at icir.org
Tue Sep 7 13:32:33 PDT 2004
> On Mon, Sep 06, 2004 at 01:24:15PM -0700, Pavlin Radoslavov wrote:
> > It appears that the lastest g++ compiler that comes with FreeBSD may
> > fail to compile a __packed structure when one of its fields is
> > passed by reference. At the end of this email is a sample program
> > that demonstrates the problem. The compilation error is:
> > pavlin at carp g++34 test.cc
> > test.cc: In function `int main()':
> > test.cc:22: error: cannot bind packed field `f1.foo::f' to `int&'
> > Exit 1
> > The problem appears to exist only with the recent g++ compiler that
> > comes with FreeBSD:
> This change was made recently to gcc:
Yes, I am aware of that patch (when I did some search on the subject
before posting my email). However, again, when I use the vanilla g++
3.4.1 which is 2 months old, or even the vanilla 3.4.2 which was
just released today, I don't get the compilation error.
Hence, why the disparity between the vanilla gcc and the lastest
gcc that comes with FreeBSD?
> Apparently in C++, you are not allowed to have non-const references
> to packed fields. See:
The above URL doesn't say anything about packed fields.
Please correct me if I am wrong, but I think that __packed is not
part of the C or C++ standart, hence this leaves some gray area for
interpretation. Anyway, this is a subject for the gcc ML...
However, I am trying to find-out why the FreeBSD gcc behaves
different from the vanilla gcc, and which compiler has the "right"
> Your testcase will compile if you change your copy_out function to:
> copy_out(const int& i)
> // i = 0x11223344;
> but your testcase will not be too useful.
> You might want to follow up on one of the GCC mailing lists.
> Craig Rodrigues
> rodrigc at crodrigues.org
More information about the freebsd-current