Index: lld/trunk/ELF/SymbolTable.h =================================================================== --- lld/trunk/ELF/SymbolTable.h +++ lld/trunk/ELF/SymbolTable.h @@ -12,6 +12,7 @@ #include "InputFiles.h" #include "LTO.h" +#include "llvm/ADT/CachedHashString.h" #include "llvm/ADT/DenseMap.h" #include "llvm/Support/Regex.h" @@ -21,7 +22,7 @@ template class OutputSectionBase; struct Symbol; -typedef llvm::CachedHash SymName; +typedef llvm::CachedHashStringRef SymName; // SymbolTable is a bucket of all known symbols, including defined, // undefined, or lazy symbols (the last one is symbols in archive Index: lld/trunk/ELF/SymbolTable.cpp =================================================================== --- lld/trunk/ELF/SymbolTable.cpp +++ lld/trunk/ELF/SymbolTable.cpp @@ -140,7 +140,7 @@ // Set a flag for --trace-symbol so that we can print out a log message // if a new symbol with the same name is inserted into the symbol table. template void SymbolTable::trace(StringRef Name) { - Symtab.insert({Name, {-1, true}}); + Symtab.insert({CachedHashStringRef(Name), {-1, true}}); } // Rename SYM as __wrap_SYM. The original symbol is preserved as __real_SYM. @@ -201,7 +201,8 @@ // Find an existing symbol or create and insert a new one. template std::pair SymbolTable::insert(StringRef &Name) { - auto P = Symtab.insert({Name, SymIndex((int)SymVector.size(), false)}); + auto P = Symtab.insert( + {CachedHashStringRef(Name), SymIndex((int)SymVector.size(), false)}); SymIndex &V = P.first->second; bool IsNew = P.second; @@ -461,7 +462,7 @@ } template SymbolBody *SymbolTable::find(StringRef Name) { - auto It = Symtab.find(Name); + auto It = Symtab.find(CachedHashStringRef(Name)); if (It == Symtab.end()) return nullptr; SymIndex V = It->second;