[llvm] b779f02 - [Demangle] Add support for D anonymous symbols
David Blaikie via llvm-commits
llvm-commits at lists.llvm.org
Mon Nov 29 16:06:33 PST 2021
Author: Luís Ferreira
Date: 2021-11-29T16:05:48-08:00
New Revision: b779f02a1cb73bb3885e2059e418dfc1c16d25e2
URL: https://github.com/llvm/llvm-project/commit/b779f02a1cb73bb3885e2059e418dfc1c16d25e2
DIFF: https://github.com/llvm/llvm-project/commit/b779f02a1cb73bb3885e2059e418dfc1c16d25e2.diff
LOG: [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
Added:
Modified:
llvm/lib/Demangle/DLangDemangle.cpp
llvm/unittests/Demangle/DLangDemangleTest.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Demangle/DLangDemangle.cpp b/llvm/lib/Demangle/DLangDemangle.cpp
index a877174f95207..faf91b2394901 100644
--- a/llvm/lib/Demangle/DLangDemangle.cpp
+++ b/llvm/lib/Demangle/DLangDemangle.cpp
@@ -200,6 +200,15 @@ const char *Demangler::parseQualified(OutputBuffer *Demangled,
// Whether it has more than one symbol
size_t NotFirst = false;
do {
+ // Skip over anonymous symbols.
+ if (*Mangled == '0') {
+ do
+ ++Mangled;
+ while (*Mangled == '0');
+
+ continue;
+ }
+
if (NotFirst)
*Demangled << '.';
NotFirst = true;
diff --git a/llvm/unittests/Demangle/DLangDemangleTest.cpp b/llvm/unittests/Demangle/DLangDemangleTest.cpp
index 750ce88424825..a3123601661ba 100644
--- a/llvm/unittests/Demangle/DLangDemangleTest.cpp
+++ b/llvm/unittests/Demangle/DLangDemangleTest.cpp
@@ -34,4 +34,6 @@ INSTANTIATE_TEST_SUITE_P(
std::make_pair("_D88", nullptr),
std::make_pair("_D8demangleZ", "demangle"),
std::make_pair("_D8demangle4testZ", "demangle.test"),
- std::make_pair("_D8demangle4test5test2Z", "demangle.test.test2")));
+ std::make_pair("_D8demangle4test5test2Z", "demangle.test.test2"),
+ std::make_pair("_D8demangle4test0Z", "demangle.test"),
+ std::make_pair("_D8demangle4test03fooZ", "demangle.test.foo")));
More information about the llvm-commits
mailing list