summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Demangle/Demangle.cpp
diff options
context:
space:
mode:
authorJames Henderson <jh7370@my.bristol.ac.uk>2019-01-18 13:58:41 +0000
committerJames Henderson <jh7370@my.bristol.ac.uk>2019-01-18 13:58:41 +0000
commitf5356944a18a4c209248d9f4af4ae6c4ec1ac347 (patch)
treee4e9c1289e83037fd4bd480026569be43f681b9e /llvm/lib/Demangle/Demangle.cpp
parent63efa3bd08c8139268f72e9b570dc61796182119 (diff)
downloadbcm5719-llvm-f5356944a18a4c209248d9f4af4ae6c4ec1ac347.tar.gz
bcm5719-llvm-f5356944a18a4c209248d9f4af4ae6c4ec1ac347.zip
Add __[_[_]]Z demangling to new common demangle function
This is a follow-up to r351448. It adds support for other _*Z extensions of the Itanium demanling, to the newly available demangle function heuristic. Reviewed by: erik.pilkington, rupprecht, grimar Differential Revision: https://reviews.llvm.org/D56855 llvm-svn: 351551
Diffstat (limited to 'llvm/lib/Demangle/Demangle.cpp')
-rw-r--r--llvm/lib/Demangle/Demangle.cpp8
1 files changed, 7 insertions, 1 deletions
diff --git a/llvm/lib/Demangle/Demangle.cpp b/llvm/lib/Demangle/Demangle.cpp
index 8a37b92fc35..a2804dfc2c1 100644
--- a/llvm/lib/Demangle/Demangle.cpp
+++ b/llvm/lib/Demangle/Demangle.cpp
@@ -13,9 +13,15 @@
#include "llvm/Demangle/Demangle.h"
+static bool isItaniumEncoding(const std::string &MangledName) {
+ size_t Pos = MangledName.find_first_not_of('_');
+ // A valid Itanium encoding requires 1-4 leading underscores, followed by 'Z'.
+ return Pos > 0 && Pos <= 4 && MangledName[Pos] == 'Z';
+}
+
std::string llvm::demangle(const std::string &MangledName) {
char *Demangled;
- if (MangledName.compare(0, 2, "_Z") == 0)
+ if (isItaniumEncoding(MangledName))
Demangled = itaniumDemangle(MangledName.c_str(), nullptr, nullptr, nullptr);
else
Demangled =
OpenPOWER on IntegriCloud