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
This commit is contained in:
parent
7c3297ce40
commit
c6334ca906
|
@ -1,3 +1,9 @@
|
|||
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)
|
||||
{
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
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
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
// 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 { };
|
Loading…
Reference in New Issue