re PR c++/60417 ([DR 1518] Bogus error on C++03 aggregate initialization)

PR c++/60417
	* init.c (build_vec_init): Reorganize earlier change a bit.

From-SVN: r213689
This commit is contained in:
Jason Merrill 2014-08-06 21:44:11 -04:00 committed by Jason Merrill
parent 5fb4d142f0
commit ced2fb085c
2 changed files with 23 additions and 20 deletions

View File

@ -1,5 +1,8 @@
2014-08-06 Jason Merrill <jason@redhat.com>
PR c++/60417
* init.c (build_vec_init): Reorganize earlier change a bit.
PR c++/61994
* init.c (build_vec_init): Leave atype an ARRAY_TYPE
if we're just returning an INIT_EXPR.

View File

@ -3685,26 +3685,6 @@ build_vec_init (tree base, tree maxindex, tree init,
}
}
/* If the initializer is {}, then all elements are initialized from T{}.
But for non-classes, that's the same as value-initialization. */
if (empty_list)
{
if (cxx_dialect >= cxx11 && AGGREGATE_TYPE_P (type))
{
if (BRACE_ENCLOSED_INITIALIZER_P (init)
&& CONSTRUCTOR_NELTS (init) == 0)
/* Reuse it. */;
else
init = build_constructor (init_list_type_node, NULL);
CONSTRUCTOR_IS_DIRECT_INIT (init) = true;
}
else
{
init = NULL_TREE;
explicit_value_init_p = true;
}
}
/* Now, default-initialize any remaining elements. We don't need to
do that if a) the type does not need constructing, or b) we've
already initialized all the elements.
@ -3736,6 +3716,26 @@ build_vec_init (tree base, tree maxindex, tree init,
to = build1 (INDIRECT_REF, type, base);
/* If the initializer is {}, then all elements are initialized from T{}.
But for non-classes, that's the same as value-initialization. */
if (empty_list)
{
if (cxx_dialect >= cxx11 && AGGREGATE_TYPE_P (type))
{
if (BRACE_ENCLOSED_INITIALIZER_P (init)
&& CONSTRUCTOR_NELTS (init) == 0)
/* Reuse it. */;
else
init = build_constructor (init_list_type_node, NULL);
CONSTRUCTOR_IS_DIRECT_INIT (init) = true;
}
else
{
init = NULL_TREE;
explicit_value_init_p = true;
}
}
if (from_array)
{
tree from;