OK.
On Sun, Feb 5, 2017 at 11:52 PM, Patrick Palka <ppalka...@gmail.com> wrote: > This patch fixes PR c++/79360, a regression from PR c++/70347. > > The TYPE_FIELDS of a type may contain TYPE_DECLs and CONST_DECLs as well > as FIELD_DECLs, but when looking for an NSDMI we are only interested in > the FIELD_DECLs. Otherwise we may try to initialize the union with the > DECL_INITIAL of a nested CONST_DECL. Does this look OK to commit after > bootstrap + regtest? > > gcc/cp/ChangeLog: > > PR c++/79360 > * typeck2.c (process_init_constructor_union): Consider only > FIELD_DECLs when looking for an NSDMI. > > gcc/testsuite/ChangeLog: > > PR c++/79360 > * g++.dg/cpp1y/nsdmi-union2.C: New test. > --- > gcc/cp/typeck2.c | 3 ++- > gcc/testsuite/g++.dg/cpp1y/nsdmi-union2.C | 12 ++++++++++++ > 2 files changed, 14 insertions(+), 1 deletion(-) > create mode 100644 gcc/testsuite/g++.dg/cpp1y/nsdmi-union2.C > > diff --git a/gcc/cp/typeck2.c b/gcc/cp/typeck2.c > index 014de5c..1e0354d 100644 > --- a/gcc/cp/typeck2.c > +++ b/gcc/cp/typeck2.c > @@ -1510,7 +1510,8 @@ process_init_constructor_union (tree type, tree init, > { > for (tree field = TYPE_FIELDS (type); field; field = TREE_CHAIN > (field)) > { > - if (DECL_INITIAL (field)) > + if (TREE_CODE (field) == FIELD_DECL > + && DECL_INITIAL (field) != NULL_TREE) > { > CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (init), > field, > diff --git a/gcc/testsuite/g++.dg/cpp1y/nsdmi-union2.C > b/gcc/testsuite/g++.dg/cpp1y/nsdmi-union2.C > new file mode 100644 > index 0000000..08217d7 > --- /dev/null > +++ b/gcc/testsuite/g++.dg/cpp1y/nsdmi-union2.C > @@ -0,0 +1,12 @@ > +// PR c++/79360 > +// { dg-do compile { target c++14 } } > + > +union U > +{ > + enum E { e }; > +}; > + > +struct A > +{ > + U u{}; > +}; > -- > 2.10.1.456.g9cf5127