diff options
author | Nick Desaulniers <ndesaulniers@google.com> | 2023-05-02 11:10:43 -0700 |
---|---|---|
committer | Nick Desaulniers <ndesaulniers@google.com> | 2023-05-02 11:20:15 -0700 |
commit | c117c2c8ba4afd45a006043ec6dd858652b2ffcc (patch) | |
tree | eaf2bca8cf17d405cadb6ad2d34bf7c20b9912db /llvm/tools/llvm-objdump/llvm-objdump.cpp | |
parent | 1f74964b403c615c121c0adbd06661adaae14667 (diff) | |
download | llvm-c117c2c8ba4afd45a006043ec6dd858652b2ffcc.zip llvm-c117c2c8ba4afd45a006043ec6dd858652b2ffcc.tar.gz llvm-c117c2c8ba4afd45a006043ec6dd858652b2ffcc.tar.bz2 |
[Demangle] make llvm::demangle take std::string_view rather than const std::string&
As suggested by @erichkeane in
https://reviews.llvm.org/D141451#inline-1429549
There's potential for a lot more cleanups around these APIs. This is
just a start.
Callers need to be more careful about sub-expressions producing strings
that don't outlast the expression using ``llvm::demangle``. Add a
release note.
Reviewed By: MaskRay, #lld-macho
Differential Revision: https://reviews.llvm.org/D149104
Diffstat (limited to 'llvm/tools/llvm-objdump/llvm-objdump.cpp')
-rw-r--r-- | llvm/tools/llvm-objdump/llvm-objdump.cpp | 18 |
1 files changed, 6 insertions, 12 deletions
diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp index 5abcdcc..9d4a2d4 100644 --- a/llvm/tools/llvm-objdump/llvm-objdump.cpp +++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp @@ -1548,7 +1548,7 @@ static void disassembleObject(const Target *TheTarget, ObjectFile &Obj, if (Demangle) { // Fetch the demangled names and store them locally. for (const SymbolInfoTy &Symbol : SymbolsHere) - DemangledSymNamesHere.push_back(demangle(Symbol.Name.str())); + DemangledSymNamesHere.push_back(demangle(Symbol.Name)); // Now we've finished modifying that vector, it's safe to make // a vector of StringRefs pointing into it. SymNamesHere.insert(SymNamesHere.begin(), DemangledSymNamesHere.begin(), @@ -1909,9 +1909,8 @@ static void disassembleObject(const Target *TheTarget, ObjectFile &Obj, if (TargetSym != nullptr) { uint64_t TargetAddress = TargetSym->Addr; uint64_t Disp = Target - TargetAddress; - std::string TargetName = TargetSym->Name.str(); - if (Demangle) - TargetName = demangle(TargetName); + std::string TargetName = Demangle ? demangle(TargetSym->Name) + : TargetSym->Name.str(); *TargetOS << " <"; if (!Disp) { @@ -2511,10 +2510,8 @@ void objdump::printSymbol(const ObjectFile &O, const SymbolRef &Symbol, if (NameOrErr) { outs() << " (csect:"; - std::string SymName(NameOrErr.get()); - - if (Demangle) - SymName = demangle(SymName); + std::string SymName = + Demangle ? demangle(*NameOrErr) : NameOrErr->str(); if (SymbolDescription) SymName = getXCOFFSymbolDescription(createSymbolInfo(O, *SymRef), @@ -2568,10 +2565,7 @@ void objdump::printSymbol(const ObjectFile &O, const SymbolRef &Symbol, outs() << " .hidden"; } - std::string SymName(Name); - if (Demangle) - SymName = demangle(SymName); - + std::string SymName = Demangle ? demangle(Name) : Name.str(); if (O.isXCOFF() && SymbolDescription) SymName = getXCOFFSymbolDescription(createSymbolInfo(O, Symbol), SymName); |