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)?
BTW, the documentation for 3.4.5 (at
http://gcc.gnu.org/onlinedocs/gcc-3.4.5/gcc/Type-Attributes.html#Type-At
tributes) shows the example:
struct my_unpacked_struct
{
char c;
int i;
};
struct my_packed_struct __attribute__ ((__packed__))
{
char c;
int i;
struct my_unpacked_struct s;
};
This example, however, gives the error:
testpp.cpp:8: error: expected unqualified-id before '{' token
Changing to:
struct my_unpacked_struct
{
char c;
int i;
};
struct my_packed_struct
{
char c;
int i;
struct my_unpacked_struct s;
} __attribute__ ((__packed__));
Eliminates the error.