diff options
-rw-r--r-- | lld/COFF/Driver.cpp | 3 | ||||
-rw-r--r-- | lld/test/COFF/thinlto-whole-archives.ll | 30 |
2 files changed, 32 insertions, 1 deletions
diff --git a/lld/COFF/Driver.cpp b/lld/COFF/Driver.cpp index 6e27edbecad..aaf0367e3b5 100644 --- a/lld/COFF/Driver.cpp +++ b/lld/COFF/Driver.cpp @@ -188,8 +188,9 @@ void LinkerDriver::addBuffer(std::unique_ptr<MemoryBuffer> mb, Archive *archive = file.get(); make<std::unique_ptr<Archive>>(std::move(file)); // take ownership + int memberIndex = 0; for (MemoryBufferRef m : getArchiveMembers(archive)) - addArchiveBuffer(m, "<whole-archive>", filename, 0); + addArchiveBuffer(m, "<whole-archive>", filename, memberIndex++); return; } symtab->addFile(make<ArchiveFile>(mbref)); diff --git a/lld/test/COFF/thinlto-whole-archives.ll b/lld/test/COFF/thinlto-whole-archives.ll new file mode 100644 index 00000000000..4ee95749d18 --- /dev/null +++ b/lld/test/COFF/thinlto-whole-archives.ll @@ -0,0 +1,30 @@ +; REQUIRES: x86 +; RUN: rm -fr %T/thinlto-whole-archives +; RUN: mkdir %T/thinlto-whole-archives %T/thinlto-whole-archives/a %T/thinlto-whole-archives/b +; RUN: opt -thinlto-bc -o %T/thinlto-whole-archives/main.obj %s +; RUN: opt -thinlto-bc -o %T/thinlto-whole-archives/a/bar.obj %S/Inputs/lto-dep.ll +; RUN: opt -thinlto-bc -o %T/thinlto-whole-archives/b/bar.obj %S/Inputs/bar.ll +; RUN: llvm-ar crs %T/thinlto-whole-archives/a.lib %T/thinlto-whole-archives/a/bar.obj %T/thinlto-whole-archives/b/bar.obj +; RUN: lld-link -out:%T/thinlto-whole-archives/main.exe -entry:main \ +; RUN: -wholearchive -lldsavetemps -subsystem:console %T/thinlto-whole-archives/main.obj \ +; RUN: %T/thinlto-whole-archives/a.lib +; RUN: FileCheck %s < %T/thinlto-whole-archives/main.exe.resolution.txt + +; CHECK: {{[/\\]thinlto-whole-archives[/\\]main.obj$}} +; CHECK: {{^-r=.*[/\\]thinlto-whole-archives[/\\]main.obj,main,px$}} +; CHECK: {{[/\\]thinlto-whole-archives[/\\]a.libbar.obj[0-9]+$}} +; CHECK-NEXT: {{^-r=.*[/\\]thinlto-whole-archives[/\\]a.libbar.obj[0-9]+,foo,p$}} +; CHECK-NEXT: {{[/\\]thinlto-whole-archives[/\\]a.libbar.obj[0-9]+$}} +; CHECK-NEXT: {{^-r=.*[/\\]thinlto-whole-archives[/\\]a.libbar.obj[0-9]+,bar,p$}} + +target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128" +target triple = "x86_64-pc-windows-msvc" + +declare void @bar() +declare void @foo() + +define i32 @main() { + call void @foo() + call void @bar() + ret i32 0 +} |