diff options
author | Jason Merrill <jason@redhat.com> | 2017-05-09 16:38:03 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2017-05-09 16:38:03 -0400 |
commit | c0aad6778c5c5c9bf262b89edb91655a1df7da0e (patch) | |
tree | 89c6c8fd26b0b242fabfcf96a73edfc6e55bb10c /gcc | |
parent | 824c3184d7364aa92e9990b4f23cd5ede4ca53df (diff) | |
download | gcc-c0aad6778c5c5c9bf262b89edb91655a1df7da0e.zip gcc-c0aad6778c5c5c9bf262b89edb91655a1df7da0e.tar.gz gcc-c0aad6778c5c5c9bf262b89edb91655a1df7da0e.tar.bz2 |
* class.c (check_bases): Ignore empty bases.
From-SVN: r247816
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 2 | ||||
-rw-r--r-- | gcc/cp/class.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/ext/is_std_layout1.C | 12 |
3 files changed, 17 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 3a12217..7c63318 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,7 @@ 2017-05-09 Jason Merrill <jason@redhat.com> + * class.c (check_bases): Ignore empty bases. + PR c++/70979 - literal class and closure types * class.c (finalize_literal_type_property): Handle closures specifically. diff --git a/gcc/cp/class.c b/gcc/cp/class.c index fc71766..085dbc3 100644 --- a/gcc/cp/class.c +++ b/gcc/cp/class.c @@ -1860,7 +1860,9 @@ check_bases (tree t, members */ for (basefield = TYPE_FIELDS (basetype); basefield; basefield = DECL_CHAIN (basefield)) - if (TREE_CODE (basefield) == FIELD_DECL) + if (TREE_CODE (basefield) == FIELD_DECL + && DECL_SIZE (basefield) + && !integer_zerop (DECL_SIZE (basefield))) { if (field) CLASSTYPE_NON_STD_LAYOUT (t) = 1; diff --git a/gcc/testsuite/g++.dg/ext/is_std_layout1.C b/gcc/testsuite/g++.dg/ext/is_std_layout1.C new file mode 100644 index 0000000..007c94a --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/is_std_layout1.C @@ -0,0 +1,12 @@ +// { dg-do compile { target c++11 } } + +template <int> struct E { }; + +struct E1: E<0>, E<1> { }; +struct E2: E<2>, E<3> { }; + +struct A1x { int n; }; +struct D2: A1x, E1, E2 { }; + +#define SA(X) static_assert((X),#X) +SA(__is_standard_layout (D2)); |