From: Tomasz Miąsko Date: Fri, 15 Oct 2021 18:43:27 +0000 (+0200) Subject: [llvm-cxxfilt] Use nonMicrosoftDemangle for demangling NFC X-Git-Tag: upstream/15.0.7~28448 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a3813438ae1c2d688f7bccc4501a172f17b7a505;p=platform%2Fupstream%2Fllvm.git [llvm-cxxfilt] Use nonMicrosoftDemangle for demangling NFC Reviewed By: dblaikie, jhenderson Part of https://reviews.llvm.org/D110664 --- diff --git a/llvm/tools/llvm-cxxfilt/llvm-cxxfilt.cpp b/llvm/tools/llvm-cxxfilt/llvm-cxxfilt.cpp index 0a6d4b5..ccfaaa9 100644 --- a/llvm/tools/llvm-cxxfilt/llvm-cxxfilt.cpp +++ b/llvm/tools/llvm-cxxfilt/llvm-cxxfilt.cpp @@ -65,34 +65,27 @@ static void error(const Twine &Message) { } static std::string demangle(const std::string &Mangled) { - int Status; - std::string Prefix; - const char *DecoratedStr = Mangled.c_str(); if (StripUnderscore) if (DecoratedStr[0] == '_') ++DecoratedStr; - size_t DecoratedLength = strlen(DecoratedStr); + std::string Result; + if (nonMicrosoftDemangle(DecoratedStr, Result)) + return Result; + + std::string Prefix; char *Undecorated = nullptr; - if (Types || - ((DecoratedLength >= 2 && strncmp(DecoratedStr, "_Z", 2) == 0) || - (DecoratedLength >= 4 && strncmp(DecoratedStr, "___Z", 4) == 0))) - Undecorated = itaniumDemangle(DecoratedStr, nullptr, nullptr, &Status); + if (Types) + Undecorated = itaniumDemangle(DecoratedStr, nullptr, nullptr, nullptr); - if (!Undecorated && - (DecoratedLength > 6 && strncmp(DecoratedStr, "__imp_", 6) == 0)) { + if (!Undecorated && strncmp(DecoratedStr, "__imp_", 6) == 0) { Prefix = "import thunk for "; - Undecorated = itaniumDemangle(DecoratedStr + 6, nullptr, nullptr, &Status); - } - - if (!Undecorated && - (DecoratedLength >= 2 && strncmp(DecoratedStr, "_R", 2) == 0)) { - Undecorated = rustDemangle(DecoratedStr, nullptr, nullptr, &Status); + Undecorated = itaniumDemangle(DecoratedStr + 6, nullptr, nullptr, nullptr); } - std::string Result(Undecorated ? Prefix + Undecorated : Mangled); + Result = Undecorated ? Prefix + Undecorated : Mangled; free(Undecorated); return Result; }