Commit 5625e747 by Paolo Carlini Committed by Paolo Carlini

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
parent 800916ab
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> 2018-03-05 Pádraig Brady <P@draigBrady.com>
Jason Merrill <jason@redhat.com> Jason Merrill <jason@redhat.com>
Nathan Sidwell <nathan@acm.org> Nathan Sidwell <nathan@acm.org>
......
...@@ -10377,13 +10377,13 @@ cp_parser_lambda_introducer (cp_parser* parser, tree lambda_expr) ...@@ -10377,13 +10377,13 @@ cp_parser_lambda_introducer (cp_parser* parser, tree lambda_expr)
unqualified_name_lookup_error (capture_id); unqualified_name_lookup_error (capture_id);
continue; continue;
} }
else if (DECL_P (capture_init_expr) else if (!VAR_P (capture_init_expr)
&& (!VAR_P (capture_init_expr) && TREE_CODE (capture_init_expr) != PARM_DECL)
&& TREE_CODE (capture_init_expr) != PARM_DECL))
{ {
error_at (capture_token->location, error_at (capture_token->location,
"capture of non-variable %qD ", "capture of non-variable %qE ",
capture_init_expr); capture_init_expr);
if (DECL_P (capture_init_expr))
inform (DECL_SOURCE_LOCATION (capture_init_expr), inform (DECL_SOURCE_LOCATION (capture_init_expr),
"%q#D declared here", capture_init_expr); "%q#D declared here", capture_init_expr);
continue; continue;
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> 2018-03-05 Olga Makhotina <olga.makhotina@intel.com>
* g++.dg/other/i386-2.C: Add -mpconfig and -mwbnoinvd. * g++.dg/other/i386-2.C: Add -mpconfig and -mwbnoinvd.
......
...@@ -5,7 +5,7 @@ void foo (int); ...@@ -5,7 +5,7 @@ void foo (int);
void foo (void) void foo (void)
{ {
[&foo] // { dg-error "cannot capture" } [&foo] // { dg-error "5:capture of non-variable" }
{ {
foo (0); foo (0);
}; };
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
template <typename T> template <typename T>
constexpr int r(T x) { 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; return 0;
} }
......
// 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" }
};
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