diff options
Diffstat (limited to 'lld')
-rw-r--r-- | lld/COFF/Symbols.cpp | 4 | ||||
-rw-r--r-- | lld/ELF/SymbolTable.cpp | 15 | ||||
-rw-r--r-- | lld/ELF/Symbols.cpp | 4 | ||||
-rw-r--r-- | lld/MachO/Symbols.cpp | 2 | ||||
-rw-r--r-- | lld/wasm/Symbols.cpp | 2 |
5 files changed, 13 insertions, 14 deletions
diff --git a/lld/COFF/Symbols.cpp b/lld/COFF/Symbols.cpp index f4efcf2266cd..c042386e0106 100644 --- a/lld/COFF/Symbols.cpp +++ b/lld/COFF/Symbols.cpp @@ -38,9 +38,9 @@ static std::string maybeDemangleSymbol(const COFFLinkerContext &ctx, StringRef demangleInput = prefixless; if (ctx.config.machine == I386) demangleInput.consume_front("_"); - std::string demangled = demangle(demangleInput); + std::string demangled = demangle(demangleInput.str()); if (demangled != demangleInput) - return prefix + demangled; + return prefix + demangle(demangleInput.str()); return (prefix + prefixless).str(); } return std::string(symName); diff --git a/lld/ELF/SymbolTable.cpp b/lld/ELF/SymbolTable.cpp index c5ef6d3f0cbf..f09d0d7f9095 100644 --- a/lld/ELF/SymbolTable.cpp +++ b/lld/ELF/SymbolTable.cpp @@ -145,16 +145,13 @@ StringMap<SmallVector<Symbol *, 0>> &SymbolTable::getDemangledSyms() { if (canBeVersioned(*sym)) { StringRef name = sym->getName(); size_t pos = name.find('@'); - std::string substr; if (pos == std::string::npos) - demangled = demangle(name); - else if (pos + 1 == name.size() || name[pos + 1] == '@') { - substr = name.substr(0, pos); - demangled = demangle(substr); - } else { - substr = name.substr(0, pos); - demangled = (demangle(substr) + name.substr(pos)).str(); - } + demangled = demangle(name.str()); + else if (pos + 1 == name.size() || name[pos + 1] == '@') + demangled = demangle(name.substr(0, pos).str()); + else + demangled = + (demangle(name.substr(0, pos).str()) + name.substr(pos)).str(); (*demangledSyms)[demangled].push_back(sym); } } diff --git a/lld/ELF/Symbols.cpp b/lld/ELF/Symbols.cpp index 840385aabea3..62a8a3c30664 100644 --- a/lld/ELF/Symbols.cpp +++ b/lld/ELF/Symbols.cpp @@ -45,7 +45,9 @@ LLVM_ATTRIBUTE_UNUSED static inline void assertSymbols() { // Returns a symbol for an error message. static std::string maybeDemangleSymbol(StringRef symName) { - return elf::config->demangle ? demangle(symName.str()) : symName.str(); + if (elf::config->demangle) + return demangle(symName.str()); + return symName.str(); } std::string lld::toString(const elf::Symbol &sym) { diff --git a/lld/MachO/Symbols.cpp b/lld/MachO/Symbols.cpp index 660826edc4f8..cb3b271a1912 100644 --- a/lld/MachO/Symbols.cpp +++ b/lld/MachO/Symbols.cpp @@ -32,7 +32,7 @@ static_assert(sizeof(SymbolUnion) == sizeof(Defined), static std::string maybeDemangleSymbol(StringRef symName) { if (config->demangle) { symName.consume_front("_"); - return demangle(symName); + return demangle(symName.str()); } return symName.str(); } diff --git a/lld/wasm/Symbols.cpp b/lld/wasm/Symbols.cpp index 2adf72b6965c..567ff49dfa44 100644 --- a/lld/wasm/Symbols.cpp +++ b/lld/wasm/Symbols.cpp @@ -35,7 +35,7 @@ std::string maybeDemangleSymbol(StringRef name) { if (name == "__main_argc_argv") return "main"; if (wasm::config->demangle) - return demangle(name); + return demangle(name.str()); return name.str(); } |