re PR c++/84618 (ICE in build_capture_proxy, at cp/lambda.c:460)
/cp 2018-03-05 Paolo Carlini <paolo.carlini@oracle.com> PR c++/84618 * parser.c (cp_parser_lambda_introducer): Reject any capture not involving a VAR_DECL or a PARM_DECL. /testsuite 2018-03-05 Paolo Carlini <paolo.carlini@oracle.com> PR c++/84618 * g++.dg/cpp0x/lambda/lambda-ice29.C: New. * g++.dg/cpp0x/lambda/lambda-ice17.C: Adjust. * g++.dg/cpp0x/lambda/lambda-ice23.C: Likewise. From-SVN: r258250
This commit is contained in:
parent
800916ab50
commit
5625e74790
@ -1,3 +1,9 @@
|
||||
2018-03-05 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
PR c++/84618
|
||||
* parser.c (cp_parser_lambda_introducer): Reject any capture not
|
||||
involving a VAR_DECL or a PARM_DECL.
|
||||
|
||||
2018-03-05 Pádraig Brady <P@draigBrady.com>
|
||||
Jason Merrill <jason@redhat.com>
|
||||
Nathan Sidwell <nathan@acm.org>
|
||||
|
@ -10377,15 +10377,15 @@ cp_parser_lambda_introducer (cp_parser* parser, tree lambda_expr)
|
||||
unqualified_name_lookup_error (capture_id);
|
||||
continue;
|
||||
}
|
||||
else if (DECL_P (capture_init_expr)
|
||||
&& (!VAR_P (capture_init_expr)
|
||||
&& TREE_CODE (capture_init_expr) != PARM_DECL))
|
||||
else if (!VAR_P (capture_init_expr)
|
||||
&& TREE_CODE (capture_init_expr) != PARM_DECL)
|
||||
{
|
||||
error_at (capture_token->location,
|
||||
"capture of non-variable %qD ",
|
||||
"capture of non-variable %qE ",
|
||||
capture_init_expr);
|
||||
inform (DECL_SOURCE_LOCATION (capture_init_expr),
|
||||
"%q#D declared here", capture_init_expr);
|
||||
if (DECL_P (capture_init_expr))
|
||||
inform (DECL_SOURCE_LOCATION (capture_init_expr),
|
||||
"%q#D declared here", capture_init_expr);
|
||||
continue;
|
||||
}
|
||||
if (VAR_P (capture_init_expr)
|
||||
|
@ -1,3 +1,10 @@
|
||||
2018-03-05 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
PR c++/84618
|
||||
* g++.dg/cpp0x/lambda/lambda-ice29.C: New.
|
||||
* g++.dg/cpp0x/lambda/lambda-ice17.C: Adjust.
|
||||
* g++.dg/cpp0x/lambda/lambda-ice23.C: Likewise.
|
||||
|
||||
2018-03-05 Olga Makhotina <olga.makhotina@intel.com>
|
||||
|
||||
* g++.dg/other/i386-2.C: Add -mpconfig and -mwbnoinvd.
|
||||
|
@ -5,7 +5,7 @@ void foo (int);
|
||||
|
||||
void foo (void)
|
||||
{
|
||||
[&foo] // { dg-error "cannot capture" }
|
||||
[&foo] // { dg-error "5:capture of non-variable" }
|
||||
{
|
||||
foo (0);
|
||||
};
|
||||
|
@ -3,7 +3,7 @@
|
||||
|
||||
template <typename T>
|
||||
constexpr int r(T x) {
|
||||
auto f = [r,x]() { return r(x); }; // { dg-error "incomplete type" }
|
||||
auto f = [r,x]() { return r(x); }; // { dg-error "13:capture of non-variable" }
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
8
gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice29.C
Normal file
8
gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice29.C
Normal file
@ -0,0 +1,8 @@
|
||||
// PR c++/84618
|
||||
// { dg-do compile { target c++11 } }
|
||||
|
||||
template <int>
|
||||
struct S {
|
||||
void b() const;
|
||||
void b() { [b] {}; } // { dg-error "15:capture of non-variable" }
|
||||
};
|
Loading…
Reference in New Issue
Block a user