nickdesaulniers created this revision. Herald added a subscriber: hiraditya. Herald added a reviewer: jhenderson. Herald added a reviewer: MaskRay. Herald added a project: All. nickdesaulniers requested review of this revision. Herald added projects: LLDB, LLVM. Herald added subscribers: llvm-commits, lldb-commits.
This should be last of the "bottom-up conversions" of various demanglers to accept std::string_view. After this, D149104 <https://reviews.llvm.org/D149104> may be revisited. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D152176 Files: lldb/source/Core/Mangled.cpp llvm/include/llvm/Demangle/Demangle.h llvm/lib/DebugInfo/Symbolize/Symbolize.cpp llvm/lib/Demangle/MicrosoftDemangle.cpp llvm/tools/llvm-objdump/COFFDump.cpp llvm/tools/llvm-undname/llvm-undname.cpp
Index: llvm/tools/llvm-undname/llvm-undname.cpp =================================================================== --- llvm/tools/llvm-undname/llvm-undname.cpp +++ llvm/tools/llvm-undname/llvm-undname.cpp @@ -75,7 +75,7 @@ Flags = MSDemangleFlags(Flags | MSDF_NoVariableType); size_t NRead; - char *ResultBuf = microsoftDemangle(S.c_str(), &NRead, &Status, Flags); + char *ResultBuf = microsoftDemangle(S, &NRead, &Status, Flags); if (Status == llvm::demangle_success) { outs() << ResultBuf << "\n"; outs().flush(); Index: llvm/tools/llvm-objdump/COFFDump.cpp =================================================================== --- llvm/tools/llvm-objdump/COFFDump.cpp +++ llvm/tools/llvm-objdump/COFFDump.cpp @@ -852,7 +852,7 @@ << Name; if (Demangle && Name.startswith("?")) { int Status = -1; - char *DemangledSymbol = microsoftDemangle(Name.data(), nullptr, &Status); + char *DemangledSymbol = microsoftDemangle(Name, nullptr, &Status); if (Status == 0 && DemangledSymbol) { outs() << " (" << StringRef(DemangledSymbol) << ")"; Index: llvm/lib/Demangle/MicrosoftDemangle.cpp =================================================================== --- llvm/lib/Demangle/MicrosoftDemangle.cpp +++ llvm/lib/Demangle/MicrosoftDemangle.cpp @@ -2397,14 +2397,14 @@ std::printf("\n"); } -char *llvm::microsoftDemangle(const char *MangledName, size_t *NMangled, +char *llvm::microsoftDemangle(std::string_view MangledName, size_t *NMangled, int *Status, MSDemangleFlags Flags) { Demangler D; std::string_view Name{MangledName}; SymbolNode *AST = D.parse(Name); if (!D.Error && NMangled) - *NMangled = Name.empty() ? 0 : &*Name.begin() - MangledName; + *NMangled = Name.empty() ? 0 : &*Name.begin() - &*MangledName.begin(); if (Flags & MSDF_DumpBackrefs) D.dumpBackReferences(); Index: llvm/lib/DebugInfo/Symbolize/Symbolize.cpp =================================================================== --- llvm/lib/DebugInfo/Symbolize/Symbolize.cpp +++ llvm/lib/DebugInfo/Symbolize/Symbolize.cpp @@ -686,7 +686,7 @@ // Only do MSVC C++ demangling on symbols starting with '?'. int status = 0; char *DemangledName = microsoftDemangle( - Name.c_str(), nullptr, &status, + Name, nullptr, &status, MSDemangleFlags(MSDF_NoAccessSpecifier | MSDF_NoCallingConvention | MSDF_NoMemberType | MSDF_NoReturnType)); if (status != 0) Index: llvm/include/llvm/Demangle/Demangle.h =================================================================== --- llvm/include/llvm/Demangle/Demangle.h +++ llvm/include/llvm/Demangle/Demangle.h @@ -51,8 +51,8 @@ /// bytes of the input string were consumed. /// status receives one of the demangle_ enum entries above if it's not nullptr. /// Flags controls various details of the demangled representation. -char *microsoftDemangle(const char *mangled_name, size_t *n_read, int *status, - MSDemangleFlags Flags = MSDF_None); +char *microsoftDemangle(std::string_view mangled_name, size_t *n_read, + int *status, MSDemangleFlags Flags = MSDF_None); // Demangles a Rust v0 mangled symbol. char *rustDemangle(std::string_view MangledName); Index: lldb/source/Core/Mangled.cpp =================================================================== --- lldb/source/Core/Mangled.cpp +++ lldb/source/Core/Mangled.cpp @@ -107,7 +107,7 @@ } // Local helpers for different demangling implementations. -static char *GetMSVCDemangledStr(const char *M) { +static char *GetMSVCDemangledStr(std::string_view M) { char *demangled_cstr = llvm::microsoftDemangle( M, nullptr, nullptr, llvm::MSDemangleFlags( @@ -116,9 +116,9 @@ if (Log *log = GetLog(LLDBLog::Demangle)) { if (demangled_cstr && demangled_cstr[0]) - LLDB_LOGF(log, "demangled msvc: %s -> \"%s\"", M, demangled_cstr); + LLDB_LOGF(log, "demangled msvc: %s -> \"%s\"", M.data(), demangled_cstr); else - LLDB_LOGF(log, "demangled msvc: %s -> error", M); + LLDB_LOGF(log, "demangled msvc: %s -> error", M.data()); } return demangled_cstr; @@ -204,7 +204,7 @@ // We have no rich mangling for MSVC-mangled names yet, so first try to // demangle it if necessary. if (!m_demangled && !m_mangled.GetMangledCounterpart(m_demangled)) { - if (char *d = GetMSVCDemangledStr(m_mangled.GetCString())) { + if (char *d = GetMSVCDemangledStr(m_mangled)) { // Without the rich mangling info we have to demangle the full name. // Copy it to string pool and connect the counterparts to accelerate // later access in GetDemangledName().
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits