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:
parent
5fb4d142f0
commit
ced2fb085c
@ -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.
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user