diff options
author | Nick Desaulniers <ndesaulniers@google.com> | 2023-06-05 14:59:46 -0700 |
---|---|---|
committer | Nick Desaulniers <ndesaulniers@google.com> | 2023-06-06 10:18:06 -0700 |
commit | 8abbc17ff3b1390581600d1b9b37888f4b8ba50e (patch) | |
tree | f05dbd639a413d2e6237f614a576c91422b3d2a9 /llvm/tools/llvm-objdump/llvm-objdump.cpp | |
parent | 78de45fd4a902066617fcc9bb88efee11f743bc6 (diff) | |
download | llvm-8abbc17ff3b1390581600d1b9b37888f4b8ba50e.zip llvm-8abbc17ff3b1390581600d1b9b37888f4b8ba50e.tar.gz llvm-8abbc17ff3b1390581600d1b9b37888f4b8ba50e.tar.bz2 |
reland: [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.
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 4267ce6..7b6edb3 100644 --- a/llvm/tools/llvm-objdump/llvm-objdump.cpp +++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp @@ -1545,7 +1545,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(), @@ -1906,9 +1906,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) { @@ -2508,10 +2507,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), @@ -2565,10 +2562,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); |