Commit da4c5b24 by Jason Merrill Committed by Jason Merrill

re PR c++/54538 (Getting assembler messages when compiling)

	PR c++/54538
	PR c++/53783
	* pt.c (tsubst_copy_and_build) [LAMBDA_EXPR]: Go back to using RECUR
	for LAMBDA_EXPR_EXTRA_SCOPE except for function scope.

From-SVN: r191164
parent 05279bcd
2012-09-10 Jason Merrill <jason@redhat.com> 2012-09-10 Jason Merrill <jason@redhat.com>
PR c++/54538
PR c++/53783
* pt.c (tsubst_copy_and_build) [LAMBDA_EXPR]: Go back to using RECUR
for LAMBDA_EXPR_EXTRA_SCOPE except for function scope.
PR c++/54506 PR c++/54506
* decl.c (move_signature_fn_p): Split out from move_fn_p. * decl.c (move_signature_fn_p): Split out from move_fn_p.
* method.c (process_subob_fn): Use it. * method.c (process_subob_fn): Use it.
......
...@@ -14199,8 +14199,18 @@ tsubst_copy_and_build (tree t, ...@@ -14199,8 +14199,18 @@ tsubst_copy_and_build (tree t,
LAMBDA_EXPR_MUTABLE_P (r) = LAMBDA_EXPR_MUTABLE_P (t); LAMBDA_EXPR_MUTABLE_P (r) = LAMBDA_EXPR_MUTABLE_P (t);
LAMBDA_EXPR_DISCRIMINATOR (r) LAMBDA_EXPR_DISCRIMINATOR (r)
= (LAMBDA_EXPR_DISCRIMINATOR (t)); = (LAMBDA_EXPR_DISCRIMINATOR (t));
LAMBDA_EXPR_EXTRA_SCOPE (r) /* For a function scope, we want to use tsubst so that we don't
= tsubst (LAMBDA_EXPR_EXTRA_SCOPE (t), args, complain, in_decl); complain about referring to an auto function before its return
type has been deduced. Otherwise, we want to use tsubst_copy so
that we look up the existing field/parameter/variable rather
than build a new one. */
tree scope = LAMBDA_EXPR_EXTRA_SCOPE (t);
if (scope && TREE_CODE (scope) == FUNCTION_DECL)
scope = tsubst (LAMBDA_EXPR_EXTRA_SCOPE (t), args,
complain, in_decl);
else
scope = RECUR (scope);
LAMBDA_EXPR_EXTRA_SCOPE (r) = scope;
LAMBDA_EXPR_RETURN_TYPE (r) LAMBDA_EXPR_RETURN_TYPE (r)
= tsubst (LAMBDA_EXPR_RETURN_TYPE (t), args, complain, in_decl); = tsubst (LAMBDA_EXPR_RETURN_TYPE (t), args, complain, in_decl);
......
2012-09-10 Jason Merrill <jason@redhat.com>
PR c++/54538
* g++.dg/cpp0x/lambda/lambda-mangle4.C: New.
2012-09-10 Oleg Endo <olegendo@gcc.gnu.org> 2012-09-10 Oleg Endo <olegendo@gcc.gnu.org>
PR target/54089 PR target/54089
......
// PR c++/54538
// { dg-do compile { target c++11 } }
template <class T>
struct A
{
// { dg-final { scan-assembler "_ZNK1AIcE1pMUlvE_cvPFvvEEv" } }
// { dg-final { scan-assembler "_ZNK1AIiE1pMUlvE_cvPFvvEEv" } }
void (*p)() = []{};
};
A<int> a1;
A<char> a2;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment