Skip to content

Commit b779f02

Browse files
ljmf00dwblaikie
authored andcommitted
[Demangle] Add support for D anonymous symbols
Anonymous symbols are represented by 0 in the mangled symbol. We should skip them in order to represent the demangled name correctly, otherwise demangled names like `demangle..anon` can happen. Reviewed By: dblaikie Differential Revision: https://reviews.llvm.org/D114307
1 parent 6e08abd commit b779f02

File tree

2 files changed

+12
-1
lines changed

2 files changed

+12
-1
lines changed

llvm/lib/Demangle/DLangDemangle.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,15 @@ const char *Demangler::parseQualified(OutputBuffer *Demangled,
200200
// Whether it has more than one symbol
201201
size_t NotFirst = false;
202202
do {
203+
// Skip over anonymous symbols.
204+
if (*Mangled == '0') {
205+
do
206+
++Mangled;
207+
while (*Mangled == '0');
208+
209+
continue;
210+
}
211+
203212
if (NotFirst)
204213
*Demangled << '.';
205214
NotFirst = true;

llvm/unittests/Demangle/DLangDemangleTest.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,6 @@ INSTANTIATE_TEST_SUITE_P(
3434
std::make_pair("_D88", nullptr),
3535
std::make_pair("_D8demangleZ", "demangle"),
3636
std::make_pair("_D8demangle4testZ", "demangle.test"),
37-
std::make_pair("_D8demangle4test5test2Z", "demangle.test.test2")));
37+
std::make_pair("_D8demangle4test5test2Z", "demangle.test.test2"),
38+
std::make_pair("_D8demangle4test0Z", "demangle.test"),
39+
std::make_pair("_D8demangle4test03fooZ", "demangle.test.foo")));

0 commit comments

Comments
 (0)