[lld] r373076 - [LLD] Convert demangleItanium to use the higher level llvm::demangle function. NFC.

Martin Storsjo via llvm-commits llvm-commits at lists.llvm.org
Fri Sep 27 05:24:03 PDT 2019


Author: mstorsjo
Date: Fri Sep 27 05:24:03 2019
New Revision: 373076

URL: http://llvm.org/viewvc/llvm-project?rev=373076&view=rev
Log:
[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

Modified:
    lld/trunk/Common/Strings.cpp
    lld/trunk/test/ELF/undef.s

Modified: lld/trunk/Common/Strings.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/Common/Strings.cpp?rev=373076&r1=373075&r2=373076&view=diff
==============================================================================
--- lld/trunk/Common/Strings.cpp (original)
+++ lld/trunk/Common/Strings.cpp Fri Sep 27 05:24:03 2019
@@ -22,18 +22,16 @@ using namespace lld;
 Optional<std::string> 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<StringRef> pat) {

Modified: lld/trunk/test/ELF/undef.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/undef.s?rev=373076&r1=373075&r2=373076&view=diff
==============================================================================
--- lld/trunk/test/ELF/undef.s (original)
+++ lld/trunk/test/ELF/undef.s Fri Sep 27 05:24:03 2019
@@ -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




More information about the llvm-commits mailing list