diff options
Diffstat (limited to 'llvm/lib/Demangle/Demangle.cpp')
| -rw-r--r-- | llvm/lib/Demangle/Demangle.cpp | 8 |
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 = |

