From: Jason Merrill Date: Mon, 11 Apr 2011 22:00:20 +0000 (-0400) Subject: re PR c++/48523 ([C++0x] lambda cannot capture 'this' in class template) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=ac4b1cc036b88ed7e82c1c755b39568064e9f2e0;p=gcc.git re PR c++/48523 ([C++0x] lambda cannot capture 'this' in class template) PR c++/48523 * tree.c (maybe_dummy_object): Use build_x_indirect_ref rather than cp_build_indirect_ref. From-SVN: r172283 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 10400516965..7a087c52ddc 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2011-04-11 Jason Merrill + PR c++/48523 + * tree.c (maybe_dummy_object): Use build_x_indirect_ref rather + than cp_build_indirect_ref. + PR c++/48457, Core 1238 * call.c (reference_binding): Allow rvalue reference to bind to function lvalue. diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index d6b6197cbe2..ad004bba28e 100644 --- a/gcc/cp/tree.c +++ b/gcc/cp/tree.c @@ -2423,7 +2423,7 @@ maybe_dummy_object (tree type, tree* binfop) else if (current != current_class_type && context == nonlambda_method_basetype ()) /* In a lambda, need to go through 'this' capture. */ - decl = (cp_build_indirect_ref + decl = (build_x_indirect_ref ((lambda_expr_this_capture (CLASSTYPE_LAMBDA_EXPR (current_class_type))), RO_NULL, tf_warning_or_error)); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 3812feff89a..05beba02a41 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,7 @@ 2011-04-11 Jason Merrill + * g++.dg/cpp0x/lambda/lambda-this4.C: New. + * g++.dg/cpp0x/rv-func.C: New. 2011-04-11 Rainer Orth diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this4.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this4.C new file mode 100644 index 00000000000..29cd2a97b3f --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this4.C @@ -0,0 +1,13 @@ +// PR c++/48523 +// { dg-options -std=c++0x } + +template +struct X +{ + bool b; + + void f() + { + [this]{ return b; }; + } +};