diff --git a/lldb/source/Core/Mangled.cpp b/lldb/source/Core/Mangled.cpp --- a/lldb/source/Core/Mangled.cpp +++ b/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(). diff --git a/llvm/include/llvm/Demangle/Demangle.h b/llvm/include/llvm/Demangle/Demangle.h --- a/llvm/include/llvm/Demangle/Demangle.h +++ b/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); diff --git a/llvm/lib/DebugInfo/Symbolize/Symbolize.cpp b/llvm/lib/DebugInfo/Symbolize/Symbolize.cpp --- a/llvm/lib/DebugInfo/Symbolize/Symbolize.cpp +++ b/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) diff --git a/llvm/lib/Demangle/MicrosoftDemangle.cpp b/llvm/lib/Demangle/MicrosoftDemangle.cpp --- a/llvm/lib/Demangle/MicrosoftDemangle.cpp +++ b/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(); diff --git a/llvm/tools/llvm-objdump/COFFDump.cpp b/llvm/tools/llvm-objdump/COFFDump.cpp --- a/llvm/tools/llvm-objdump/COFFDump.cpp +++ b/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) << ")"; diff --git a/llvm/tools/llvm-undname/llvm-undname.cpp b/llvm/tools/llvm-undname/llvm-undname.cpp --- a/llvm/tools/llvm-undname/llvm-undname.cpp +++ b/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();