From: Jason Merrill Date: Fri, 15 Feb 2013 18:31:52 +0000 (-0500) Subject: re PR c++/55710 ([C++11] Linkage errors with lambdas) X-Git-Tag: releases/gcc-4.7.3~194 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3d6122bb772c9ecfc248bef378f869df5481626a;p=thirdparty%2Fgcc.git re PR c++/55710 ([C++11] Linkage errors with lambdas) PR c++/55710 * semantics.c (maybe_add_lambda_conv_op): Mark static thunk TREE_USED. From-SVN: r196086 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index bd1d17ef2c9b..794cc153d03f 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2013-02-15 Jason Merrill + PR c++/55710 + * semantics.c (maybe_add_lambda_conv_op): Mark static thunk + TREE_USED. + PR c++/56135 * pt.c (tsubst_copy_and_build): Don't forget any new captures that arose from use of dependent names. diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index da0b48faed17..13ea6a5c9763 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -9410,6 +9410,8 @@ maybe_add_lambda_conv_op (tree type) body = begin_function_body (); compound_stmt = begin_compound_stmt (0); + /* decl_needed_p needs to see that it's used. */ + TREE_USED (statfn) = 1; finish_return_stmt (decay_conversion (statfn)); finish_compound_stmt (compound_stmt); diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv7.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv7.C new file mode 100644 index 000000000000..89e4e4babf57 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv7.C @@ -0,0 +1,20 @@ +// PR c++/55710 +// { dg-do link { target c++11 } } + +template +struct X { + static void (*code) (); +}; + +template +void (*X::code) () = []{}; // Line 7 + +struct Y { + void (*code) () = []{} ; // Line 10 + void operator()() { code(); } +}; + +int main () { + X::code(); + Y()(); +}