cp-demangle.c (d_abi_tags): Preserve di->last_name across any ABI tags.

* cp-demangle.c (d_abi_tags): Preserve di->last_name across any
	ABI tags.

From-SVN: r226910
This commit is contained in:
Ian Lance Taylor 2015-08-15 13:23:30 +00:00 committed by Ian Lance Taylor
parent 60349f15cc
commit 68bac64063
3 changed files with 19 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2015-08-15 Ian Lance Taylor <iant@google.com>
* cp-demangle.c (d_abi_tags): Preserve di->last_name across any
ABI tags.
2015-08-11 Iain Buclaw <ibuclaw@gdcproject.org> 2015-08-11 Iain Buclaw <ibuclaw@gdcproject.org>
* d-demangle.c (dlang_parse_real): Remove call to strtod. * d-demangle.c (dlang_parse_real): Remove call to strtod.

View File

@ -1306,7 +1306,12 @@ d_encoding (struct d_info *di, int top_level)
static struct demangle_component * static struct demangle_component *
d_abi_tags (struct d_info *di, struct demangle_component *dc) d_abi_tags (struct d_info *di, struct demangle_component *dc)
{ {
struct demangle_component *hold_last_name;
char peek; char peek;
/* Preserve the last name, so the ABI tag doesn't clobber it. */
hold_last_name = di->last_name;
while (peek = d_peek_char (di), while (peek = d_peek_char (di),
peek == 'B') peek == 'B')
{ {
@ -1315,6 +1320,9 @@ d_abi_tags (struct d_info *di, struct demangle_component *dc)
tag = d_source_name (di); tag = d_source_name (di);
dc = d_make_comp (di, DEMANGLE_COMPONENT_TAGGED_NAME, dc, tag); dc = d_make_comp (di, DEMANGLE_COMPONENT_TAGGED_NAME, dc, tag);
} }
di->last_name = hold_last_name;
return dc; return dc;
} }

View File

@ -4389,3 +4389,9 @@ f(std::string[abi:foo], std::string[abi:foo])
--format=gnu-v3 --format=gnu-v3
_Z18IndirectExternCallIPU7stdcallU7regparmILi3EEFviiEiEvT_T0_S3_ _Z18IndirectExternCallIPU7stdcallU7regparmILi3EEFviiEiEvT_T0_S3_
void IndirectExternCall<void ( regparm<3> stdcall*)(int, int), int>(void ( regparm<3> stdcall*)(int, int), int, void ( regparm<3> stdcall*)(int, int)) void IndirectExternCall<void ( regparm<3> stdcall*)(int, int), int>(void ( regparm<3> stdcall*)(int, int), int, void ( regparm<3> stdcall*)(int, int))
#
# ABI tags used to confuse the constructor name calculation.
--format=gnu-v3 --no-params
_ZNSt8ios_base7failureB5cxx11C1EPKcRKSt10error_code
std::ios_base::failure[abi:cxx11]::failure(char const*, std::error_code const&)
std::ios_base::failure[abi:cxx11]::failure