diff options
author | Jason Merrill <jason@redhat.com> | 2016-01-21 15:26:09 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2016-01-21 15:26:09 -0500 |
commit | 2f3932b910c7e450e0ac75e607dfb7229b9429cc (patch) | |
tree | 108d2774d7fb373ff3da1675d088df1d8f457698 | |
parent | 97ca3d0d59208beb76920dcfe33aeb921e396042 (diff) | |
download | gcc-2f3932b910c7e450e0ac75e607dfb7229b9429cc.zip gcc-2f3932b910c7e450e0ac75e607dfb7229b9429cc.tar.gz gcc-2f3932b910c7e450e0ac75e607dfb7229b9429cc.tar.bz2 |
re PR c++/40751 (G++ never packs typedef'd enums)
PR c++/40751
PR c++/64987
* decl.c (copy_type_enum): Respect TYPE_USER_ALIGN.
From-SVN: r232702
-rw-r--r-- | gcc/cp/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cp/decl.c | 8 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/alignas5.C | 6 |
3 files changed, 16 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index f516216..c592cbf 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2016-01-21 Jason Merrill <jason@redhat.com> + PR c++/40751 + PR c++/64987 + * decl.c (copy_type_enum): Respect TYPE_USER_ALIGN. + PR c++/43407 * decl.c (start_enum): Add attributes parameter. * parser.c (cp_parser_enum_specifier): Pass it. diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index d995654..020e9bd 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -13030,8 +13030,12 @@ copy_type_enum (tree dst, tree src) TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (src); SET_TYPE_MODE (dst, TYPE_MODE (src)); TYPE_PRECISION (t) = TYPE_PRECISION (src); - TYPE_ALIGN (t) = TYPE_ALIGN (src); - TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (src); + unsigned valign = TYPE_ALIGN (src); + if (TYPE_USER_ALIGN (t)) + valign = MAX (valign, TYPE_ALIGN (t)); + else + TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (src); + TYPE_ALIGN (t) = valign; TYPE_UNSIGNED (t) = TYPE_UNSIGNED (src); } } diff --git a/gcc/testsuite/g++.dg/cpp0x/alignas5.C b/gcc/testsuite/g++.dg/cpp0x/alignas5.C new file mode 100644 index 0000000..2820ca7 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/alignas5.C @@ -0,0 +1,6 @@ +// { dg-do compile { target c++11 } } + +#define SA(X) static_assert(X,#X) + +enum alignas(16) E {}; +SA(alignof(E) == 16); |