re PR c++/51818 ([C++0x] Name mangling error using lambda expressions in GCC47)

PR c++/51818
	* mangle.c (find_substitution): A type is only a substitution
	match if we're looking for a type.
	(write_nested_name): Use decl_mangling_context.

From-SVN: r183107
This commit is contained in:
Jason Merrill 2012-01-11 15:26:44 -05:00 committed by Jason Merrill
parent faf00d3c16
commit b34e0e6fc8
4 changed files with 27 additions and 2 deletions

View File

@ -1,5 +1,10 @@
2012-01-11 Jason Merrill <jason@redhat.com>
PR c++/51818
* mangle.c (find_substitution): A type is only a substitution
match if we're looking for a type.
(write_nested_name): Use decl_mangling_context.
* decl.c (decls_match): Assert that the arguments are decls.
PR c++/51613

View File

@ -615,7 +615,7 @@ find_substitution (tree node)
/* NODE is a matched to a candidate if it's the same decl node or
if it's the same type. */
if (decl == candidate
|| (TYPE_P (candidate) && type && TYPE_P (type)
|| (TYPE_P (candidate) && type && TYPE_P (node)
&& same_type_p (type, candidate))
|| NESTED_TEMPLATE_MATCH (node, candidate))
{
@ -949,7 +949,7 @@ write_nested_name (const tree decl)
else
{
/* No, just use <prefix> */
write_prefix (CP_DECL_CONTEXT (decl));
write_prefix (decl_mangling_context (decl));
write_unqualified_name (decl);
}
write_char ('E');

View File

@ -1,3 +1,8 @@
2012-01-11 Jason Merrill <jason@redhat.com>
PR c++/51818
* g++.dg/cpp0x/lambda/lambda-mangle3.C: New.
2012-01-11 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/array19.ad[sb]: New test.

View File

@ -0,0 +1,15 @@
// PR c++/51818
// { dg-options -std=c++0x }
// { dg-final { scan-assembler "_ZN1AC1IN3foo3barMUlvE_EEET_" } }
struct A
{
template <class T> A(T) { }
};
struct foo
{
A bar = []{};
};
foo f;