From a9a740baf79d5a0883d567676256a4a2b29371e2 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Tue, 2 Aug 2011 17:09:26 -0400 Subject: [PATCH] re PR c++/43886 ([C++0x] name lookup failure on un-used local variable in lambda compound-statement) PR c++/43886 * parser.c (cp_parser_lambda_body): Clear local_variables_forbidden_p. From-SVN: r177216 --- gcc/cp/ChangeLog | 3 +++ gcc/cp/parser.c | 4 ++++ gcc/testsuite/ChangeLog | 3 +++ gcc/testsuite/g++.dg/cpp0x/lambda/lambda-defarg2.C | 7 +++++++ 4 files changed, 17 insertions(+) create mode 100644 gcc/testsuite/g++.dg/cpp0x/lambda/lambda-defarg2.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 4e64f1bae1d..1c50f0424ee 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2011-08-02 Jason Merrill + PR c++/43886 + * parser.c (cp_parser_lambda_body): Clear local_variables_forbidden_p. + PR c++/49577 * typeck2.c (check_narrowing): Check unsigned mismatch. * semantics.c (finish_compound_literal): check_narrowing. diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 2d8f457e737..9b3e56d07f4 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -7801,12 +7801,15 @@ static void cp_parser_lambda_body (cp_parser* parser, tree lambda_expr) { bool nested = (current_function_decl != NULL_TREE); + bool local_variables_forbidden_p = parser->local_variables_forbidden_p; if (nested) push_function_context (); else /* Still increment function_depth so that we don't GC in the middle of an expression. */ ++function_depth; + /* Clear this in case we're in the middle of a default argument. */ + parser->local_variables_forbidden_p = false; /* Finish the function call operator - class_specifier @@ -7904,6 +7907,7 @@ cp_parser_lambda_body (cp_parser* parser, tree lambda_expr) expand_or_defer_fn (finish_function (/*inline*/2)); } + parser->local_variables_forbidden_p = local_variables_forbidden_p; if (nested) pop_function_context(); else diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 6e91668b990..4c8f25cb9ef 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2011-08-02 Jason Merrill + PR c++/43886 + * g++.dg/cpp0x/lambda/lambda-defarg2.C: New. + PR c++/49577 * g++.dg/cpp0x/initlist5.C: Add additional cases. diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-defarg2.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-defarg2.C new file mode 100644 index 00000000000..f47c5ba27ae --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-defarg2.C @@ -0,0 +1,7 @@ +// PR c++/43886 +// { dg-options -std=c++0x } + +void f2() { + int i = 1; + void g5(int = ([]{ return sizeof i; })()); +} -- 2.30.2