Commit f026530a by Jason Merrill Committed by Jason Merrill

PR c++/85305 - pack in lambda init-capture.

	* parser.c (cp_parser_initializer): Add subexpression_p parm; don't
	check_for_bare_parameter_packs in a subexpression.
	(cp_parser_lambda_introducer): Use it.

From-SVN: r259779
parent d6df811e
2018-04-30 Jason Merrill <jason@redhat.com>
PR c++/85305 - pack in lambda init-capture.
* parser.c (cp_parser_initializer): Add subexpression_p parm; don't
check_for_bare_parameter_packs in a subexpression.
(cp_parser_lambda_introducer): Use it.
PR c++/61982 - dead stores to destroyed objects.
* call.c (build_trivial_dtor_call): New, assigns a clobber.
(build_over_call, build_special_member_call): Use it.
......
......@@ -2243,7 +2243,7 @@ static tree cp_parser_default_argument
static void cp_parser_function_body
(cp_parser *, bool);
static tree cp_parser_initializer
(cp_parser *, bool *, bool *);
(cp_parser *, bool *, bool *, bool = false);
static cp_expr cp_parser_initializer_clause
(cp_parser *, bool *);
static cp_expr cp_parser_braced_list
......@@ -10358,7 +10358,7 @@ cp_parser_lambda_introducer (cp_parser* parser, tree lambda_expr)
"lambda capture initializers "
"only available with -std=c++14 or -std=gnu++14");
capture_init_expr = cp_parser_initializer (parser, &direct,
&non_constant);
&non_constant, true);
explicit_init_p = true;
if (capture_init_expr == NULL_TREE)
{
......@@ -21860,7 +21860,7 @@ cp_parser_ctor_initializer_opt_and_function_body (cp_parser *parser,
static tree
cp_parser_initializer (cp_parser* parser, bool* is_direct_init,
bool* non_constant_p)
bool* non_constant_p, bool subexpression_p)
{
cp_token *token;
tree init;
......@@ -21907,7 +21907,7 @@ cp_parser_initializer (cp_parser* parser, bool* is_direct_init,
init = error_mark_node;
}
if (check_for_bare_parameter_packs (init))
if (!subexpression_p && check_for_bare_parameter_packs (init))
init = error_mark_node;
return init;
// PR c++/85305
// { dg-additional-options -std=c++17 }
template <int... Is>
void foo()
{
([i = Is]{}(), ...);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment