On 12/2/19 7:31 PM, Marek Polacek wrote:
@@ -1967,8 +1978,23 @@ expand_default_init (tree binfo, tree true_exp, tree
exp, tree init, int flags,
tree ctor_name = (true_exp == exp
? complete_ctor_identifier : base_ctor_identifier);
+ /* Given class A,
+
+ A a(1, 2);
+
+ can mean a call to a constructor A::A(int, int), if present. If not,
+ but A is an aggregate, we will try aggregate initialization. */
rval = build_special_member_call (exp, ctor_name, &parms, binfo, flags,
complain);
+ if (BRACE_ENCLOSED_INITIALIZER_P (rval))
+ {
+ gcc_assert (cxx_dialect >= cxx2a);
+ rval = digest_init (type, rval, tf_warning_or_error);
+ rval = build2 (INIT_EXPR, type, exp, rval);
+ /* So that we do finish_expr_stmt below. Don't return here, we
+ need to release PARMS. */
+ TREE_SIDE_EFFECTS (rval) = 1;
+ }
Can we still get a CONSTRUCTOR here after the change to
build_new_method_call_1?
Jason