From f8deeca1b6c5d7316543197e5e331d44410fac2d Mon Sep 17 00:00:00 2001 From: jason Date: Mon, 12 Apr 2010 19:58:49 +0000 Subject: [PATCH] PR c++/43641 * semantics.c (maybe_add_lambda_conv_op): Use build_call_a and tweak return value directly. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@158241 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/cp/ChangeLog | 4 ++++ gcc/cp/semantics.c | 7 +++++-- gcc/testsuite/ChangeLog | 3 +++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 746011bd604..bd139b1d5c1 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2010-04-12 Jason Merrill + PR c++/43641 + * semantics.c (maybe_add_lambda_conv_op): Use build_call_a and tweak + return value directly. + * call.c (type_decays_to): Call cv_unqualified for non-class type. 2010-04-12 Fabien Chene diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index f89356ca26b..589241fd887 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -5959,9 +5959,12 @@ maybe_add_lambda_conv_op (tree type) VEC_quick_push (tree, argvec, arg); for (arg = DECL_ARGUMENTS (statfn); arg; arg = TREE_CHAIN (arg)) VEC_safe_push (tree, gc, argvec, arg); - call = build_cxx_call (callop, VEC_length (tree, argvec), - VEC_address (tree, argvec)); + call = build_call_a (callop, VEC_length (tree, argvec), + VEC_address (tree, argvec)); CALL_FROM_THUNK_P (call) = 1; + if (MAYBE_CLASS_TYPE_P (TREE_TYPE (call))) + call = build_cplus_new (TREE_TYPE (call), call); + call = convert_from_reference (call); finish_return_stmt (call); finish_compound_stmt (compound_stmt); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a091f0a9bf3..aeb80a1da5d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2010-04-12 Jason Merrill + PR c++/43641 + * g++.dg/cpp0x/lambda/lambda-conv4.C: New. + * g++.dg/cpp0x/lambda/lambda-deduce2.C: New. 2010-04-12 Fabien Chene -- 2.11.0