Steven L. Zook wrote:
When I compile this using gcc rev 3.4.5 (m68k-elf):
struct A { char B;
unsigned char & C; } __attribute__((packed));
unsigned char D;
A E = { 'F', D };
I get:
testpp.cpp:2: warning: ignoring packed attribute on unpacked non-POD
field `unsigned char&A::C'
sizeof( E ) == 6 (B, a byte of pad since m68k uses 16 bit alignment, and
C).
This construct compiled without warning under 3.3.3 and gave sizeof( E )
== 5.
Is this behavior under 3.4.5 (both the warning and the ignoring of the
packed attribute on the reference member) proper (justified, necessary,
good)?
It is bad to pack non-pod structs, because of alignment assumptions of member
functions thereof. The checking code just checks the non-podness of the type,
as non-pod is a well defined term. This could be relaxed. File a bug report if
needed.
nathan
--
Nathan Sidwell :: http://www.codesourcery.com :: CodeSourcery LLC
[EMAIL PROTECTED] :: http://www.planetfall.pwp.blueyonder.co.uk