Tested x86_64-pc-linux-gnu, applying to trunk. -- >8 --
We were already converting the result of expand_vec_init_expr to void; we need to do the same for split_nonconstant_init. The test that I noticed this with no longer fails without it. gcc/cp/ChangeLog: * cp-gimplify.cc (cp_genericize_init): Also convert the result of split_nonconstant_init to void. --- gcc/cp/cp-gimplify.cc | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/gcc/cp/cp-gimplify.cc b/gcc/cp/cp-gimplify.cc index 73548888783..cca3b9fea33 100644 --- a/gcc/cp/cp-gimplify.cc +++ b/gcc/cp/cp-gimplify.cc @@ -892,13 +892,9 @@ omp_cxx_notice_variable (struct cp_genericize_omp_taskreg *omp_ctx, tree decl) static void cp_genericize_init (tree *replace, tree from, tree to) { + tree init = NULL_TREE; if (TREE_CODE (from) == VEC_INIT_EXPR) - { - tree init = expand_vec_init_expr (to, from, tf_warning_or_error); - - /* Make cp_gimplify_init_expr call replace_decl. */ - *replace = fold_convert (void_type_node, init); - } + init = expand_vec_init_expr (to, from, tf_warning_or_error); else if (flag_exceptions && TREE_CODE (from) == CONSTRUCTOR && TREE_SIDE_EFFECTS (from) @@ -906,7 +902,16 @@ cp_genericize_init (tree *replace, tree from, tree to) { to = cp_stabilize_reference (to); replace_placeholders (from, to); - *replace = split_nonconstant_init (to, from); + init = split_nonconstant_init (to, from); + } + + if (init) + { + if (*replace == from) + /* Make cp_gimplify_init_expr call replace_decl on this + TARGET_EXPR_INITIAL. */ + init = fold_convert (void_type_node, init); + *replace = init; } } base-commit: aa360fbf68b11e54017e8fa5b1bdb87ce7c19188 -- 2.31.1