From dd71b2d4c31c72cb58c95c07c1eb7175fe16e7a9 Mon Sep 17 00:00:00 2001 From: Martin Storsjo Date: Fri, 27 Sep 2019 12:24:03 +0000 Subject: [PATCH] [LLD] Convert demangleItanium to use the higher level llvm::demangle function. NFC. This avoids a few lines of boilerplate of dealing with C string allocations. Add a testcase for a case where demangling shouldn't happen. Differential Revision: https://reviews.llvm.org/D68014 llvm-svn: 373076 --- lld/Common/Strings.cpp | 10 ++++------ lld/test/ELF/undef.s | 5 +++++ 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/lld/Common/Strings.cpp b/lld/Common/Strings.cpp index 5cb44e9a8fea..4b40abeda5e6 100644 --- a/lld/Common/Strings.cpp +++ b/lld/Common/Strings.cpp @@ -22,18 +22,16 @@ using namespace lld; Optional lld::demangleItanium(StringRef name) { // itaniumDemangle can be used to demangle strings other than symbol // names which do not necessarily start with "_Z". Name can be - // either a C or C++ symbol. Don't call itaniumDemangle if the name + // either a C or C++ symbol. Don't call demangle if the name // does not look like a C++ symbol name to avoid getting unexpected // result for a C symbol that happens to match a mangled type name. if (!name.startswith("_Z")) return None; - char *buf = itaniumDemangle(name.str().c_str(), nullptr, nullptr, nullptr); - if (!buf) + std::string demangled = demangle(name); + if (demangled == name) return None; - std::string s(buf); - free(buf); - return s; + return demangled; } StringMatcher::StringMatcher(ArrayRef pat) { diff --git a/lld/test/ELF/undef.s b/lld/test/ELF/undef.s index e6277e36667d..3d432b097c97 100644 --- a/lld/test/ELF/undef.s +++ b/lld/test/ELF/undef.s @@ -23,6 +23,10 @@ # CHECK: error: undefined symbol: vtable for Foo # CHECK: the vtable symbol may be undefined because the class is missing its key function (see https://lld.llvm.org/missingkeyfunction) +# CHECK: error: undefined symbol: __Z3fooi +# CHECK: >>> referenced by undef.s +# CHECK: >>> {{.*}}:(.text+0x1A) + # CHECK: error: undefined symbol: zed2 # CHECK: >>> referenced by {{.*}}.o:(.text+0x0) in archive {{.*}}2.a @@ -64,3 +68,4 @@ _start: call zed1 call _Z3fooi call _ZTV3Foo + call __Z3fooi