From ac4b1cc036b88ed7e82c1c755b39568064e9f2e0 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Mon, 11 Apr 2011 18:00:20 -0400 Subject: [PATCH] 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 --- gcc/cp/ChangeLog | 4 ++++ gcc/cp/tree.c | 2 +- gcc/testsuite/ChangeLog | 2 ++ gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this4.C | 13 +++++++++++++ 4 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this4.C 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; }; + } +}; -- 2.30.2