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
This commit is contained in:
Jason Merrill 2009-07-21 23:32:39 -04:00 committed by Jason Merrill
parent bd1f11bec9
commit 40b125d799
4 changed files with 19 additions and 1 deletions

View File

@ -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

View File

@ -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++;

View File

@ -1,3 +1,7 @@
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

View File

@ -0,0 +1,7 @@
struct A
{
int i;
};
A a1 = { 1 }; // ok
A a2 = { a1 }; // { dg-error "cannot convert" }