Commit 40b125d7 by Jason Merrill Committed by Jason Merrill

decl.c (reshape_init_r): { T } is not an aggregate initializer for class T.

	* decl.c (reshape_init_r): { T } is not an aggregate initializer
	for class T.

From-SVN: r149874
parent bd1f11be
......@@ -5,6 +5,9 @@
(initialize_reference): Binding temporary to non-const && is fine.
* decl.c (grok_reference_init): Remove error for CONSTRUCTOR.
* decl.c (reshape_init_r): { T } is not an aggregate initializer
for class T.
2009-07-17 Richard Guenther <rguenther@suse.de>
PR c/40401
......
......@@ -4878,7 +4878,7 @@ reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p)
a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
iterator within the CONSTRUCTOR which points to the initializer to process.
FIRST_INITIALIZER_P is true if this is the first initializer of the
CONSTRUCTOR node. */
outermost CONSTRUCTOR node. */
static tree
reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p)
......@@ -4923,6 +4923,10 @@ reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p)
initializer is considered for the initialization of the first
member of the subaggregate. */
if (TREE_CODE (init) != CONSTRUCTOR
/* But don't try this for the first initializer, since that would be
looking through the outermost braces; A a2 = { a1 }; is not a
valid aggregate initialization. */
&& !first_initializer_p
&& can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL))
{
d->cur++;
......
2009-07-21 Jason Merrill <jason@redhat.com>
* g++.dg/init/aggr4.C: New.
2009-07-21 Jason Merrill <jason@redhat.com>
Core issue 934
* g++.dg/cpp0x/initlist22.C: New.
......
struct A
{
int i;
};
A a1 = { 1 }; // ok
A a2 = { a1 }; // { dg-error "cannot convert" }
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