summaryrefslogtreecommitdiff
path: root/lld/ELF/SymbolTable.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lld/ELF/SymbolTable.cpp')
-rw-r--r--lld/ELF/SymbolTable.cpp15
1 files changed, 9 insertions, 6 deletions
diff --git a/lld/ELF/SymbolTable.cpp b/lld/ELF/SymbolTable.cpp
index f09d0d7f9095..c5ef6d3f0cbf 100644
--- a/lld/ELF/SymbolTable.cpp
+++ b/lld/ELF/SymbolTable.cpp
@@ -145,13 +145,16 @@ 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.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();
+ 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();
+ }
(*demangledSyms)[demangled].push_back(sym);
}
}