From 45c3e69bb74bf1342737233a21833181686c72e1 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Thu, 3 Mar 2016 17:43:14 -0500 Subject: [PATCH] * call.c (build_aggr_conv): Use get_nsdmi. From-SVN: r233947 --- gcc/cp/ChangeLog | 2 ++ gcc/cp/call.c | 2 ++ gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr4.C | 13 +++++++++++++ 3 files changed, 17 insertions(+) create mode 100644 gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr4.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index a7ae483c33d..6eae6fd9197 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,7 @@ 2016-03-03 Jason Merrill + * call.c (build_aggr_conv): Use get_nsdmi. + PR c++/51406 * typeck.c (build_static_cast_1): Avoid folding back to lvalue. diff --git a/gcc/cp/call.c b/gcc/cp/call.c index 8d5582a5191..3ad3bd52d9d 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -897,6 +897,8 @@ build_aggr_conv (tree type, tree ctor, int flags, tsubst_flags_t complain) if (i < CONSTRUCTOR_NELTS (ctor)) val = CONSTRUCTOR_ELT (ctor, i)->value; + else if (DECL_INITIAL (field)) + val = get_nsdmi (field, /*ctor*/false); else if (TREE_CODE (ftype) == REFERENCE_TYPE) /* Value-initialization of reference is ill-formed. */ return NULL; diff --git a/gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr4.C b/gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr4.C new file mode 100644 index 00000000000..71830cdab03 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr4.C @@ -0,0 +1,13 @@ +// { dg-do compile { target c++14 } } + +struct A +{ + A(int); +}; + +struct B +{ + A a{42}; +}; + +B f() { return {}; } -- 2.30.2