[llvm-lib] Detect duplicate input files

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

llvm-svn: 373426
This commit is contained in:
Rui Ueyama 2019-10-02 06:41:52 +00:00
parent c34a8ff4ee
commit 91acc6ee59
2 changed files with 26 additions and 0 deletions

View File

@ -13,6 +13,7 @@
#include "llvm/ToolDrivers/llvm-lib/LibDriver.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/StringSet.h"
#include "llvm/BinaryFormat/COFF.h"
#include "llvm/BinaryFormat/Magic.h"
#include "llvm/Bitcode/BitcodeReader.h"
@ -315,6 +316,7 @@ int llvm::libDriverMain(ArrayRef<const char *> ArgsArr) {
}
std::vector<std::unique_ptr<MemoryBuffer>> MBs;
StringSet<> Seen;
std::vector<NewArchiveMember> Members;
// Create a NewArchiveMember for each input file.
@ -326,6 +328,16 @@ int llvm::libDriverMain(ArrayRef<const char *> ArgsArr) {
return 1;
}
// Input files are uniquified by pathname. If you specify the exact same
// path more than once, all but the first one are ignored.
//
// Note that there's a loophole in the rule; you can prepend `.\` or
// something like that to a path to make it look different, and they are
// handled as if they were different files. This behavior is compatible with
// Microsoft lib.exe.
if (!Seen.insert(Path).second)
continue;
// Open a file.
ErrorOr<std::unique_ptr<MemoryBuffer>> MOrErr =
MemoryBuffer::getFile(Path, -1, false);

View File

@ -0,0 +1,14 @@
If the same file is specified more than once as an input file,
llvm-lib should ignore all but the first occurrence of the file.
RUN: rm -rf %t
RUN: mkdir -p %t
RUN: llvm-mc -triple=x86_64-pc-windows-msvc -filetype=obj -o %t/foo.o %S/Inputs/a.s
RUN: llvm-mc -triple=x86_64-pc-windows-msvc -filetype=obj -o %t/bar.o %S/Inputs/b.s
RUN: llvm-lib -out:%t/foo.lib %t/foo.o %t/foo.o %t/bar.o
RUN: llvm-ar t %t/foo.lib | FileCheck %s
CHECK: foo.o
CHECK-NOT: foo.o
CHECK: bar.o