[libcxxabi] r351481 - [demangler] Ignore leading underscores if present

Erik Pilkington erik.pilkington at gmail.com
Thu Jan 17 13:37:36 PST 2019


Author: epilk
Date: Thu Jan 17 13:37:36 2019
New Revision: 351481

URL: http://llvm.org/viewvc/llvm-project?rev=351481&view=rev
Log:
[demangler] Ignore leading underscores if present

On MacOS, symbols start with a leading underscore, so just parse and
ignore it if present.

Modified:
    libcxxabi/trunk/src/demangle/ItaniumDemangle.h
    libcxxabi/trunk/test/test_demangle.pass.cpp

Modified: libcxxabi/trunk/src/demangle/ItaniumDemangle.h
URL: http://llvm.org/viewvc/llvm-project/libcxxabi/trunk/src/demangle/ItaniumDemangle.h?rev=351481&r1=351480&r2=351481&view=diff
==============================================================================
--- libcxxabi/trunk/src/demangle/ItaniumDemangle.h (original)
+++ libcxxabi/trunk/src/demangle/ItaniumDemangle.h Thu Jan 17 13:37:36 2019
@@ -5143,7 +5143,7 @@ AbstractManglingParser<Derived, Alloc>::
 // extension      ::= ___Z <encoding> _block_invoke_<decimal-digit>+
 template <typename Derived, typename Alloc>
 Node *AbstractManglingParser<Derived, Alloc>::parse() {
-  if (consumeIf("_Z")) {
+  if (consumeIf("_Z") || consumeIf("__Z")) {
     Node *Encoding = getDerived().parseEncoding();
     if (Encoding == nullptr)
       return nullptr;
@@ -5156,7 +5156,7 @@ Node *AbstractManglingParser<Derived, Al
     return Encoding;
   }
 
-  if (consumeIf("___Z")) {
+  if (consumeIf("___Z") || consumeIf("____Z")) {
     Node *Encoding = getDerived().parseEncoding();
     if (Encoding == nullptr || !consumeIf("_block_invoke"))
       return nullptr;

Modified: libcxxabi/trunk/test/test_demangle.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxxabi/trunk/test/test_demangle.pass.cpp?rev=351481&r1=351480&r2=351481&view=diff
==============================================================================
--- libcxxabi/trunk/test/test_demangle.pass.cpp (original)
+++ libcxxabi/trunk/test/test_demangle.pass.cpp Thu Jan 17 13:37:36 2019
@@ -29755,6 +29755,10 @@ const char* cases[][2] =
     {"_Z1fIJR1SS0_EEiDpOT_", "int f<S&, S>(S&, S&&)"},
 
     {"___Z3foo_block_invoke.25", "invocation function for block in foo"},
+
+    // Darwin adds leading underscores to symbols, just demangle them anyways.
+    {"____Z3foo_block_invoke.25", "invocation function for block in foo"},
+    {"__Z1fv", "f()"},
 };
 
 const unsigned N = sizeof(cases) / sizeof(cases[0]);




More information about the libcxx-commits mailing list