[COFF] Fix to not add archive name to buffer identifiers when they come
authorAmy Huang <akhuang@google.com>
Thu, 12 Sep 2019 22:04:56 +0000 (22:04 +0000)
committerAmy Huang <akhuang@google.com>
Thu, 12 Sep 2019 22:04:56 +0000 (22:04 +0000)
from thin archives.

Currently lld adds the archive name to MemoryBufferRef identifiers in order to
ensure they are unique. For thin archives, since the file name is already unique and we
want to keep the original path to the file, don't add the archive name.

Differential Revision: https://reviews.llvm.org/D67295

llvm-svn: 371778

lld/COFF/Driver.cpp
lld/test/COFF/thinlto-index-only.ll

index 882313a..b445733 100644 (file)
@@ -310,9 +310,10 @@ void LinkerDriver::enqueueArchiveMember(const Archive::Child &c,
     auto mbOrErr = future->get();
     if (mbOrErr.second)
       reportBufferError(errorCodeToError(mbOrErr.second), childName);
+    // Pass empty string as archive name so that the original filename is
+    // used as the buffer identifier.
     driver->addArchiveBuffer(takeBuffer(std::move(mbOrErr.first)),
-                             toCOFFString(sym), parentName,
-                             /*OffsetInArchive=*/0);
+                             toCOFFString(sym), "", /*OffsetInArchive=*/0);
   });
 }
 
index db41309..996c888 100644 (file)
 ; BACKEND2-NEXT: <COMBINED
 ; BACKEND2-NEXT: </GLOBALVAL_SUMMARY_BLOCK
 
+; Thin archive tests. Check that the module paths point to the original files.
+; RUN: rm -rf %t
+; RUN: mkdir %t
+; RUN: opt -thinlto-bc -o %t/foo.obj < %s
+; RUN: opt -thinlto-bc -o %t/bar.obj < %p/Inputs/thinlto.ll
+; RUN: llvm-ar rcsT %t5.lib %t/bar.obj %t3.obj
+; RUN: lld-link -thinlto-index-only -entry:main %t/foo.obj %t5.lib
+; RUN: llvm-dis -o - %t/foo.obj.thinlto.bc | FileCheck %s --check-prefix=THINARCHIVE
+; THINARCHIVE: ^0 = module: (path: "{{.*}}foo.obj",
+; THINARCHIVE: ^1 = module: (path: "{{.*}}bar.obj",
+
 target datalayout = "e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
 target triple = "x86_64-pc-windows-msvc19.0.24215"