Index: lld/COFF/SymbolTable.h =================================================================== --- lld/COFF/SymbolTable.h +++ lld/COFF/SymbolTable.h @@ -111,6 +111,9 @@ } private: + /// Inserts symbol if not already present. + std::pair insert(StringRef Name); + /// Same as insert(Name), but also sets IsUsedInRegularObj. std::pair insert(StringRef Name, InputFile *F); StringRef findByPrefix(StringRef Prefix); Index: lld/COFF/SymbolTable.cpp =================================================================== --- lld/COFF/SymbolTable.cpp +++ lld/COFF/SymbolTable.cpp @@ -255,7 +255,7 @@ } } -std::pair SymbolTable::insert(StringRef Name, InputFile *File) { +std::pair SymbolTable::insert(StringRef Name) { bool Inserted = false; Symbol *&Sym = SymMap[CachedHashStringRef(Name)]; if (!Sym) { @@ -264,11 +264,16 @@ Sym->PendingArchiveLoad = false; Inserted = true; } - if (!File || !isa(File)) - Sym->IsUsedInRegularObj = true; return {Sym, Inserted}; } +std::pair SymbolTable::insert(StringRef Name, InputFile *File) { + std::pair Result = insert(Name); + if (!File || !isa(File)) + Result.first->IsUsedInRegularObj = true; + return Result; +} + Symbol *SymbolTable::addUndefined(StringRef Name, InputFile *F, bool IsWeakAlias) { Symbol *S; @@ -291,7 +296,7 @@ StringRef Name = Sym.getName(); Symbol *S; bool WasInserted; - std::tie(S, WasInserted) = insert(Name, nullptr); + std::tie(S, WasInserted) = insert(Name); if (WasInserted) { replaceSymbol(S, F, Sym); return;