Commit b71836b0 by Jason Merrill Committed by Jason Merrill

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
parent 08df5d3e
2008-07-27 Jason Merrill <jason@redhat.com>
PR c++/36943
* decl.c (reshape_init_r): Allow C++0x initializer lists.
2008-07-28 Richard Guenther <rguenther@suse.de> 2008-07-28 Richard Guenther <rguenther@suse.de>
Merge from gimple-tuples-branch. Merge from gimple-tuples-branch.
......
...@@ -4786,15 +4786,20 @@ reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p) ...@@ -4786,15 +4786,20 @@ reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p)
if (!CP_AGGREGATE_TYPE_P (type)) if (!CP_AGGREGATE_TYPE_P (type))
{ {
/* It is invalid to initialize a non-aggregate type with a /* 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 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 of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
a CONSTRUCTOR (with a record type). */ a CONSTRUCTOR (with a record type). */
if (TREE_CODE (init) == CONSTRUCTOR if (TREE_CODE (init) == CONSTRUCTOR
&& BRACE_ENCLOSED_INITIALIZER_P (init)) /* p7626.C */ && BRACE_ENCLOSED_INITIALIZER_P (init)) /* p7626.C */
{ {
error ("braces around scalar initializer for type %qT", type); if (SCALAR_TYPE_P (type))
init = error_mark_node; {
error ("braces around scalar initializer for type %qT", type);
init = error_mark_node;
}
else
maybe_warn_cpp0x ("extended initializer lists");
} }
d->cur++; d->cur++;
......
...@@ -56,6 +56,9 @@ void i(initializer_list<int> l) ...@@ -56,6 +56,9 @@ void i(initializer_list<int> l)
if (p != l.end()) abort(); if (p != l.end()) abort();
} }
struct U { U(int, int) {} };
U ua[] = { { 3, 2 } };
int main() int main()
{ {
g({1,2,3}); g({1,2,3});
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment