From: Jason Merrill Date: Thu, 7 Aug 2014 01:44:11 +0000 (-0400) Subject: re PR c++/60417 ([DR 1518] Bogus error on C++03 aggregate initialization) X-Git-Tag: upstream/12.2.0~61333 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ced2fb085c43bef21e863989129c54279b7c8e48;p=platform%2Fupstream%2Fgcc.git 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 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 9ffd746..a373ccf 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2014-08-06 Jason Merrill + 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. diff --git a/gcc/cp/init.c b/gcc/cp/init.c index 17e6c4b..777e0a9 100644 --- a/gcc/cp/init.c +++ b/gcc/cp/init.c @@ -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;