From b71836b0e4cd71a729e805db2916a4752a13adfa Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Mon, 28 Jul 2008 20:06:08 -0400 Subject: [PATCH] re PR c++/36943 ([c++0x] Use of nested C++0x initializer list for non-aggregate rejected) PR c++/36943 * decl.c (reshape_init_r): Allow C++0x initializer lists. From-SVN: r138221 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/decl.c | 11 ++++++++--- gcc/testsuite/g++.dg/cpp0x/initlist1.C | 3 +++ 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index ad2964cf403..bbb23ee1976 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2008-07-27 Jason Merrill + + PR c++/36943 + * decl.c (reshape_init_r): Allow C++0x initializer lists. + 2008-07-28 Richard Guenther Merge from gimple-tuples-branch. diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 630faacb354..2d9ccba3a5c 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -4786,15 +4786,20 @@ reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p) if (!CP_AGGREGATE_TYPE_P (type)) { /* It is invalid to initialize a non-aggregate type with a - brace-enclosed initializer. + brace-enclosed initializer before C++0x. We need to check for BRACE_ENCLOSED_INITIALIZER_P here because of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is a CONSTRUCTOR (with a record type). */ if (TREE_CODE (init) == CONSTRUCTOR && BRACE_ENCLOSED_INITIALIZER_P (init)) /* p7626.C */ { - error ("braces around scalar initializer for type %qT", type); - init = error_mark_node; + if (SCALAR_TYPE_P (type)) + { + error ("braces around scalar initializer for type %qT", type); + init = error_mark_node; + } + else + maybe_warn_cpp0x ("extended initializer lists"); } d->cur++; diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist1.C b/gcc/testsuite/g++.dg/cpp0x/initlist1.C index b7583da7829..ff45f7176f6 100644 --- a/gcc/testsuite/g++.dg/cpp0x/initlist1.C +++ b/gcc/testsuite/g++.dg/cpp0x/initlist1.C @@ -56,6 +56,9 @@ void i(initializer_list l) if (p != l.end()) abort(); } +struct U { U(int, int) {} }; +U ua[] = { { 3, 2 } }; + int main() { g({1,2,3}); -- 2.30.2