Commit ced2fb08 by Jason Merrill Committed by Jason Merrill

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
parent 5fb4d142
2014-08-06 Jason Merrill <jason@redhat.com> 2014-08-06 Jason Merrill <jason@redhat.com>
PR c++/60417
* init.c (build_vec_init): Reorganize earlier change a bit.
PR c++/61994 PR c++/61994
* init.c (build_vec_init): Leave atype an ARRAY_TYPE * init.c (build_vec_init): Leave atype an ARRAY_TYPE
if we're just returning an INIT_EXPR. if we're just returning an INIT_EXPR.
......
...@@ -3685,26 +3685,6 @@ build_vec_init (tree base, tree maxindex, tree init, ...@@ -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 /* 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 do that if a) the type does not need constructing, or b) we've
already initialized all the elements. already initialized all the elements.
...@@ -3736,6 +3716,26 @@ build_vec_init (tree base, tree maxindex, tree init, ...@@ -3736,6 +3716,26 @@ build_vec_init (tree base, tree maxindex, tree init,
to = build1 (INDIRECT_REF, type, base); 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) if (from_array)
{ {
tree from; tree from;
......
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