nickdesaulniers created this revision. nickdesaulniers added reviewers: erichkeane, MaskRay. Herald added subscribers: pmatos, asb, hiraditya, arichardson, sbc100, emaste. Herald added a reviewer: jhenderson. Herald added projects: lld-macho, All. Herald added a reviewer: lld-macho. nickdesaulniers requested review of this revision. Herald added subscribers: llvm-commits, cfe-commits, aheejin. Herald added projects: clang, LLVM.
Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D148181 Files: clang/lib/CodeGen/CodeGenAction.cpp lld/COFF/Symbols.cpp lld/ELF/SymbolTable.cpp lld/ELF/Symbols.cpp lld/MachO/Symbols.cpp lld/wasm/Symbols.cpp llvm/include/llvm/Demangle/Demangle.h llvm/lib/DebugInfo/LogicalView/Readers/LVCodeViewVisitor.cpp llvm/lib/DebugInfo/Symbolize/MarkupFilter.cpp llvm/lib/Demangle/Demangle.cpp llvm/lib/IR/DiagnosticInfo.cpp llvm/tools/llvm-nm/llvm-nm.cpp llvm/tools/llvm-objdump/ELFDump.cpp llvm/tools/llvm-readobj/ELFDumper.cpp llvm/tools/llvm-tli-checker/llvm-tli-checker.cpp
Index: llvm/tools/llvm-tli-checker/llvm-tli-checker.cpp =================================================================== --- llvm/tools/llvm-tli-checker/llvm-tli-checker.cpp +++ llvm/tools/llvm-tli-checker/llvm-tli-checker.cpp @@ -107,7 +107,7 @@ std::string OutputName = "'"; OutputName += Name; OutputName += "'"; - std::string DemangledName(demangle(Name.str())); + std::string DemangledName(demangle(Name)); if (Name != DemangledName) { OutputName += " aka "; OutputName += DemangledName; Index: llvm/tools/llvm-readobj/ELFDumper.cpp =================================================================== --- llvm/tools/llvm-readobj/ELFDumper.cpp +++ llvm/tools/llvm-readobj/ELFDumper.cpp @@ -908,7 +908,7 @@ } static std::string maybeDemangle(StringRef Name) { - return opts::Demangle ? demangle(std::string(Name)) : Name.str(); + return opts::Demangle ? demangle(Name) : Name.str(); } template <typename ELFT> Index: llvm/tools/llvm-objdump/ELFDump.cpp =================================================================== --- llvm/tools/llvm-objdump/ELFDump.cpp +++ llvm/tools/llvm-objdump/ELFDump.cpp @@ -109,7 +109,7 @@ if (!SymName) return SymName.takeError(); if (Demangle) - Fmt << demangle(std::string(*SymName)); + Fmt << demangle(*SymName); else Fmt << *SymName; } Index: llvm/tools/llvm-nm/llvm-nm.cpp =================================================================== --- llvm/tools/llvm-nm/llvm-nm.cpp +++ llvm/tools/llvm-nm/llvm-nm.cpp @@ -646,10 +646,10 @@ static std::optional<std::string> demangleXCOFF(StringRef Name) { if (Name.empty() || Name[0] != '.') - return demangle(Name); + return ::demangle(Name); Name = Name.drop_front(); - std::optional<std::string> DemangledName = demangle(Name); + std::optional<std::string> DemangledName = ::demangle(Name); if (DemangledName) return "." + *DemangledName; return std::nullopt; @@ -658,7 +658,7 @@ static std::optional<std::string> demangleMachO(StringRef Name) { if (!Name.empty() && Name[0] == '_') Name = Name.drop_front(); - return demangle(Name); + return ::demangle(Name); } static bool symbolIsDefined(const NMSymbol &Sym) { Index: llvm/lib/IR/DiagnosticInfo.cpp =================================================================== --- llvm/lib/IR/DiagnosticInfo.cpp +++ llvm/lib/IR/DiagnosticInfo.cpp @@ -441,7 +441,7 @@ } void DiagnosticInfoDontCall::print(DiagnosticPrinter &DP) const { - DP << "call to " << demangle(getFunctionName().str()) + DP << "call to " << demangle(getFunctionName()) << " marked \"dontcall-"; if (getSeverity() == DiagnosticSeverity::DS_Error) DP << "error\""; Index: llvm/lib/Demangle/Demangle.cpp =================================================================== --- llvm/lib/Demangle/Demangle.cpp +++ llvm/lib/Demangle/Demangle.cpp @@ -26,9 +26,10 @@ MangledName[1] == 'D'; } -std::string llvm::demangle(const std::string &MangledName) { +std::string llvm::demangle(const StringRef MangledName) { std::string Result; - const char *S = MangledName.c_str(); + std::string Copy = MangledName.str(); + const char *S = Copy.data(); if (nonMicrosoftDemangle(S, Result)) return Result; @@ -43,7 +44,7 @@ return Result; } - return MangledName; + return Copy; } bool llvm::nonMicrosoftDemangle(const char *MangledName, std::string &Result) { Index: llvm/lib/DebugInfo/Symbolize/MarkupFilter.cpp =================================================================== --- llvm/lib/DebugInfo/Symbolize/MarkupFilter.cpp +++ llvm/lib/DebugInfo/Symbolize/MarkupFilter.cpp @@ -229,7 +229,7 @@ return true; highlight(); - OS << llvm::demangle(Node.Fields.front().str()); + OS << llvm::demangle(Node.Fields.front()); restoreColor(); return true; } Index: llvm/lib/DebugInfo/LogicalView/Readers/LVCodeViewVisitor.cpp =================================================================== --- llvm/lib/DebugInfo/LogicalView/Readers/LVCodeViewVisitor.cpp +++ llvm/lib/DebugInfo/LogicalView/Readers/LVCodeViewVisitor.cpp @@ -1605,7 +1605,7 @@ // We don't have a way to see if the symbol is compiler generated. Use // the linkage name, to detect `scalar deleting destructor' functions. - std::string DemangledSymbol = demangle(std::string(LinkageName)); + std::string DemangledSymbol = demangle(LinkageName); if (DemangledSymbol.find("scalar deleting dtor") != std::string::npos) { Function->setIsArtificial(); } else { Index: llvm/include/llvm/Demangle/Demangle.h =================================================================== --- llvm/include/llvm/Demangle/Demangle.h +++ llvm/include/llvm/Demangle/Demangle.h @@ -9,6 +9,8 @@ #ifndef LLVM_DEMANGLE_DEMANGLE_H #define LLVM_DEMANGLE_DEMANGLE_H +#include "llvm/ADT/StringRef.h" + #include <cstddef> #include <string> @@ -68,7 +70,7 @@ /// \param MangledName - reference to string to demangle. /// \returns - the demangled string, or a copy of the input string if no /// demangling occurred. -std::string demangle(const std::string &MangledName); +std::string demangle(const StringRef MangledName); bool nonMicrosoftDemangle(const char *MangledName, std::string &Result); Index: lld/wasm/Symbols.cpp =================================================================== --- lld/wasm/Symbols.cpp +++ lld/wasm/Symbols.cpp @@ -35,7 +35,7 @@ if (name == "__main_argc_argv") return "main"; if (wasm::config->demangle) - return demangle(name.str()); + return demangle(name); return name.str(); } Index: lld/MachO/Symbols.cpp =================================================================== --- lld/MachO/Symbols.cpp +++ lld/MachO/Symbols.cpp @@ -32,7 +32,7 @@ static std::string maybeDemangleSymbol(StringRef symName) { if (config->demangle) { symName.consume_front("_"); - return demangle(symName.str()); + return demangle(symName); } return symName.str(); } Index: lld/ELF/Symbols.cpp =================================================================== --- lld/ELF/Symbols.cpp +++ lld/ELF/Symbols.cpp @@ -46,7 +46,7 @@ // Returns a symbol for an error message. static std::string maybeDemangleSymbol(StringRef symName) { if (elf::config->demangle) - return demangle(symName.str()); + return demangle(symName); return symName.str(); } Index: lld/ELF/SymbolTable.cpp =================================================================== --- lld/ELF/SymbolTable.cpp +++ lld/ELF/SymbolTable.cpp @@ -146,12 +146,12 @@ StringRef name = sym->getName(); size_t pos = name.find('@'); if (pos == std::string::npos) - demangled = demangle(name.str()); + demangled = demangle(name); else if (pos + 1 == name.size() || name[pos + 1] == '@') - demangled = demangle(name.substr(0, pos).str()); + demangled = demangle(name.substr(0, pos)); else demangled = - (demangle(name.substr(0, pos).str()) + name.substr(pos)).str(); + (demangle(name.substr(0, pos)) + name.substr(pos)).str(); (*demangledSyms)[demangled].push_back(sym); } } Index: lld/COFF/Symbols.cpp =================================================================== --- lld/COFF/Symbols.cpp +++ lld/COFF/Symbols.cpp @@ -38,9 +38,9 @@ StringRef demangleInput = prefixless; if (ctx.config.machine == I386) demangleInput.consume_front("_"); - std::string demangled = demangle(demangleInput.str()); + std::string demangled = demangle(demangleInput); if (demangled != demangleInput) - return prefix + demangle(demangleInput.str()); + return prefix + demangle(demangleInput); return (prefix + prefixless).str(); } return std::string(symName); Index: clang/lib/CodeGen/CodeGenAction.cpp =================================================================== --- clang/lib/CodeGen/CodeGenAction.cpp +++ clang/lib/CodeGen/CodeGenAction.cpp @@ -634,7 +634,7 @@ Diags.Report(*Loc, diag::warn_fe_frame_larger_than) << D.getStackSize() << D.getStackLimit() - << llvm::demangle(D.getFunction().getName().str()); + << llvm::demangle(D.getFunction().getName()); return true; } @@ -648,7 +648,7 @@ Diags.Report(*Loc, DiagID) << D.getResourceName() << D.getResourceSize() << D.getResourceLimit() - << llvm::demangle(D.getFunction().getName().str()); + << llvm::demangle(D.getFunction().getName()); return true; } @@ -853,7 +853,7 @@ Diags.Report(LocCookie, D.getSeverity() == DiagnosticSeverity::DS_Error ? diag::err_fe_backend_error_attr : diag::warn_fe_backend_warning_attr) - << llvm::demangle(D.getFunctionName().str()) << D.getNote(); + << llvm::demangle(D.getFunctionName()) << D.getNote(); } void BackendConsumer::MisExpectDiagHandler(
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits