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.
}
}
- /* 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.
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;