mirror of git://gcc.gnu.org/git/gcc.git
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
This commit is contained in:
parent
d6df811e5d
commit
f026530a85
|
|
@ -1,5 +1,10 @@
|
||||||
2018-04-30 Jason Merrill <jason@redhat.com>
|
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.
|
PR c++/61982 - dead stores to destroyed objects.
|
||||||
* call.c (build_trivial_dtor_call): New, assigns a clobber.
|
* call.c (build_trivial_dtor_call): New, assigns a clobber.
|
||||||
(build_over_call, build_special_member_call): Use it.
|
(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
|
static void cp_parser_function_body
|
||||||
(cp_parser *, bool);
|
(cp_parser *, bool);
|
||||||
static tree cp_parser_initializer
|
static tree cp_parser_initializer
|
||||||
(cp_parser *, bool *, bool *);
|
(cp_parser *, bool *, bool *, bool = false);
|
||||||
static cp_expr cp_parser_initializer_clause
|
static cp_expr cp_parser_initializer_clause
|
||||||
(cp_parser *, bool *);
|
(cp_parser *, bool *);
|
||||||
static cp_expr cp_parser_braced_list
|
static cp_expr cp_parser_braced_list
|
||||||
|
|
@ -10358,7 +10358,7 @@ cp_parser_lambda_introducer (cp_parser* parser, tree lambda_expr)
|
||||||
"lambda capture initializers "
|
"lambda capture initializers "
|
||||||
"only available with -std=c++14 or -std=gnu++14");
|
"only available with -std=c++14 or -std=gnu++14");
|
||||||
capture_init_expr = cp_parser_initializer (parser, &direct,
|
capture_init_expr = cp_parser_initializer (parser, &direct,
|
||||||
&non_constant);
|
&non_constant, true);
|
||||||
explicit_init_p = true;
|
explicit_init_p = true;
|
||||||
if (capture_init_expr == NULL_TREE)
|
if (capture_init_expr == NULL_TREE)
|
||||||
{
|
{
|
||||||
|
|
@ -21860,7 +21860,7 @@ cp_parser_ctor_initializer_opt_and_function_body (cp_parser *parser,
|
||||||
|
|
||||||
static tree
|
static tree
|
||||||
cp_parser_initializer (cp_parser* parser, bool* is_direct_init,
|
cp_parser_initializer (cp_parser* parser, bool* is_direct_init,
|
||||||
bool* non_constant_p)
|
bool* non_constant_p, bool subexpression_p)
|
||||||
{
|
{
|
||||||
cp_token *token;
|
cp_token *token;
|
||||||
tree init;
|
tree init;
|
||||||
|
|
@ -21907,7 +21907,7 @@ cp_parser_initializer (cp_parser* parser, bool* is_direct_init,
|
||||||
init = error_mark_node;
|
init = error_mark_node;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (check_for_bare_parameter_packs (init))
|
if (!subexpression_p && check_for_bare_parameter_packs (init))
|
||||||
init = error_mark_node;
|
init = error_mark_node;
|
||||||
|
|
||||||
return init;
|
return init;
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
// PR c++/85305
|
||||||
|
// { dg-additional-options -std=c++17 }
|
||||||
|
|
||||||
|
template <int... Is>
|
||||||
|
void foo()
|
||||||
|
{
|
||||||
|
([i = Is]{}(), ...);
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue