Commit c6334ca9 by Jason Merrill Committed by Jason Merrill

re PR c++/50736 ([C++0x] ISO_IEC_14882-2011-5.1.2/10 - bug)

	PR c++/50736
	* parser.c (cp_parser_lambda_introducer): Check for more
	invalid captures.

From-SVN: r180105
parent 7c3297ce
2011-10-17 Jason Merrill <jason@redhat.com>
PR c++/50736
* parser.c (cp_parser_lambda_introducer): Check for more
invalid captures.
2011-10-17 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/44524
......
......@@ -7630,6 +7630,31 @@ cp_parser_lambda_introducer (cp_parser* parser, tree lambda_expr)
/*ambiguous_decls=*/NULL,
capture_token->location);
if (capture_init_expr == error_mark_node)
{
unqualified_name_lookup_error (capture_id);
continue;
}
else if (DECL_P (capture_init_expr)
&& (TREE_CODE (capture_init_expr) != VAR_DECL
&& TREE_CODE (capture_init_expr) != PARM_DECL))
{
error_at (capture_token->location,
"capture of non-variable %qD ",
capture_init_expr);
inform (0, "%q+#D declared here", capture_init_expr);
continue;
}
if (TREE_CODE (capture_init_expr) == VAR_DECL
&& decl_storage_duration (capture_init_expr) != dk_auto)
{
pedwarn (capture_token->location, 0, "capture of variable "
"%qD with non-automatic storage duration",
capture_init_expr);
inform (0, "%q+#D declared here", capture_init_expr);
continue;
}
capture_init_expr
= finish_id_expression
(capture_id,
......@@ -7647,10 +7672,6 @@ cp_parser_lambda_introducer (cp_parser* parser, tree lambda_expr)
capture_token->location);
}
if (TREE_CODE (capture_init_expr) == IDENTIFIER_NODE)
capture_init_expr
= unqualified_name_lookup_error (capture_init_expr);
if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda_expr) != CPLD_NONE
&& !explicit_init_p)
{
......
2011-10-17 Jason Merrill <jason@redhat.com>
PR c++/50736
* g++.dg/cpp0x/lambda/lambda-capture-neg.C: New.
2011-10-17 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/44524
......
// PR c++/50736
// { dg-options "-std=c++0x -pedantic-errors" }
int i;
void f();
typedef int T;
int main()
{
[i]{}; // { dg-error "non-automatic" }
[f]{}; // { dg-error "non-variable" }
[T]{}; // { dg-error "non-variable" }
}
struct A { };
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