]> git.ipfire.org Git - thirdparty/gcc.git/commit
PR c++/86943 - wrong code converting lambda to function pointer.
authorjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 30 Jan 2019 02:43:04 +0000 (02:43 +0000)
committerjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 30 Jan 2019 02:43:04 +0000 (02:43 +0000)
commit64e3499e2386103c6842ffdf0b8eeae1d3798d29
tree2014ffc7cf9d736a2f0e7a17bddbaa3c9087d660
parentbd5092043090e89d693cde98c619e8064f393893
PR c++/86943 - wrong code converting lambda to function pointer.

In this PR, instantiating the static thunk returned from the generic lambda
conversion function template was using normal overload resolution, which
meant calling an extra constructor when forwarding its argument.  Fixed by
special-casing thunk calls significantly more.

* lambda.c (maybe_add_lambda_conv_op): Use a template-id in the
call.  Only forward parms for decltype.
* pt.c (tsubst_copy_and_build) [CALL_EXPR]: Handle CALL_FROM_THUNK_P
specially.
* typeck.c (check_return_expr): Don't mess with a thunk call.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@268377 138bc75d-0d04-0410-961f-82ee72b054a4
gcc/cp/ChangeLog
gcc/cp/lambda.c
gcc/cp/pt.c
gcc/cp/typeck.c
gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv13.C [new file with mode: 0644]