Index: lld/trunk/COFF/SymbolTable.h =================================================================== --- lld/trunk/COFF/SymbolTable.h +++ lld/trunk/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/trunk/COFF/SymbolTable.cpp =================================================================== --- lld/trunk/COFF/SymbolTable.cpp +++ lld/trunk/COFF/SymbolTable.cpp @@ -272,7 +272,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) { @@ -281,11 +281,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; @@ -308,7 +313,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; Index: lld/trunk/test/COFF/thinlto-archives.ll =================================================================== --- lld/trunk/test/COFF/thinlto-archives.ll +++ lld/trunk/test/COFF/thinlto-archives.ll @@ -6,9 +6,17 @@ ; RUN: opt -thinlto-bc -o %T/thinlto-archives/b/bar.obj %S/Inputs/bar.ll ; RUN: llvm-ar crs %T/thinlto-archives/a.lib %T/thinlto-archives/a/bar.obj ; RUN: llvm-ar crs %T/thinlto-archives/b.lib %T/thinlto-archives/b/bar.obj -; RUN: lld-link /out:%T/thinlto-archives/main.exe -entry:main \ -; RUN: -subsystem:console %T/thinlto-archives/main.obj \ +; RUN: lld-link -out:%T/thinlto-archives/main.exe -entry:main \ +; RUN: -lldsavetemps -subsystem:console %T/thinlto-archives/main.obj \ ; RUN: %T/thinlto-archives/a.lib %T/thinlto-archives/b.lib +; RUN: FileCheck %s < %T/thinlto-archives/main.exe.resolution.txt + +; CHECK: {{/thinlto-archives/main.obj$}} +; CHECK: {{^-r=.*/thinlto-archives/main.obj,main,px$}} +; CHECK: {{/thinlto-archives/a.libbar.obj$}} +; CHECK-NEXT: {{^-r=.*/thinlto-archives/a.libbar.obj,foo,p$}} +; CHECK-NEXT: {{/thinlto-archives/b.libbar.obj$}} +; CHECK-NEXT: {{^-r=.*/thinlto-archives/b.libbar.obj,bar,p$}} target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-pc-windows-msvc"