From: Jason Merrill Date: Thu, 28 Mar 2013 18:20:45 +0000 (-0400) Subject: re PR c++/56710 (Using reserved double underscore variable name in a lambda causes... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=fad882c6d9f520191ea301a023aa86e348049973;p=gcc.git re PR c++/56710 (Using reserved double underscore variable name in a lambda causes internal compiler error) PR c++/56710 * semantics.c (finish_member_declaration): Don't push closure members. From-SVN: r197211 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index b20415391f7..2b02880c63f 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2013-03-28 Jason Merrill + PR c++/56710 + * semantics.c (finish_member_declaration): Don't push closure + members. + * name-lookup.c (pushdecl_maybe_friend_1): Use nonlambda_method_basetype and current_nonlambda_class_type. diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index 0b8e2f74888..ad1c209b236 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -2719,8 +2719,10 @@ finish_member_declaration (tree decl) /*friend_p=*/0); } } - /* Enter the DECL into the scope of the class. */ - else if (pushdecl_class_level (decl)) + /* Enter the DECL into the scope of the class, if the class + isn't a closure (whose fields are supposed to be unnamed). */ + else if (CLASSTYPE_LAMBDA_EXPR (current_class_type) + || pushdecl_class_level (decl)) { if (TREE_CODE (decl) == USING_DECL) { diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-names1.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-names1.C new file mode 100644 index 00000000000..df2b03705ae --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-names1.C @@ -0,0 +1,9 @@ +// PR c++/56710 +// { dg-options "-std=c++11 -Wall" } + +int main() +{ + int t = 0; + return [&]() -> int {int __t; __t = t; return __t; }(); + return [&t]() -> int {int __t; __t = t; return __t; }(); +}