mirror of
https://gcc.gnu.org/git/gcc.git
synced 2025-01-18 02:14:31 +08:00
re PR c++/26670 (attribute((packed)) sometimes not ignored for non-PODs)
PR c++/26670 * class.c (check_field_decls): Unset TYPE_PACKED (t) if one of the fields can't be packed. From-SVN: r116555
This commit is contained in:
parent
bed02d8960
commit
4666cd0446
@ -2906,10 +2906,13 @@ check_field_decls (tree t, tree *access_decls,
|
||||
if (TYPE_PACKED (t))
|
||||
{
|
||||
if (!pod_type_p (type) && !TYPE_PACKED (type))
|
||||
warning
|
||||
(0,
|
||||
"ignoring packed attribute on unpacked non-POD field %q+#D",
|
||||
x);
|
||||
{
|
||||
warning
|
||||
(0,
|
||||
"ignoring packed attribute because of unpacked non-POD field %q+#D",
|
||||
x);
|
||||
TYPE_PACKED (t) = 0;
|
||||
}
|
||||
else if (TYPE_ALIGN (TREE_TYPE (x)) > BITS_PER_UNIT)
|
||||
DECL_PACKED (x) = 1;
|
||||
}
|
||||
|
13
gcc/testsuite/g++.dg/ext/packed11.C
Normal file
13
gcc/testsuite/g++.dg/ext/packed11.C
Normal file
@ -0,0 +1,13 @@
|
||||
// PR c++/26670
|
||||
|
||||
struct nonpod {
|
||||
nonpod();
|
||||
};
|
||||
|
||||
struct nonpod_pack {
|
||||
nonpod n; // { dg-warning "ignoring packed attribute" }
|
||||
} __attribute__ ((packed));
|
||||
|
||||
struct nonpod_pack2 {
|
||||
nonpod_pack p; // { dg-warning "ignoring packed attribute" }
|
||||
} __attribute__ ((packed));
|
Loading…
Reference in New Issue
Block a user