From 40207b3988fa4d32146d30104ebd022a99dac6bd Mon Sep 17 00:00:00 2001 From: jason Date: Tue, 2 Aug 2011 21:09:26 +0000 Subject: [PATCH] PR c++/43886 * parser.c (cp_parser_lambda_body): Clear local_variables_forbidden_p. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@177216 138bc75d-0d04-0410-961f-82ee72b054a4 --- 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 4e64f1b..1c50f04 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 2d8f457..9b3e56d 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 6e91668..4c8f25c 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 0000000..f47c5ba --- /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.7.4