summaryrefslogtreecommitdiffstats
path: root/gnu/llvm/lib/LibDriver/LibDriver.cpp
diff options
context:
space:
mode:
authorpatrick <patrick@openbsd.org>2017-01-14 19:55:43 +0000
committerpatrick <patrick@openbsd.org>2017-01-14 19:55:43 +0000
commitbd3306aecb3a15e8967143b8cdbbccf2b1b19b74 (patch)
tree309a8132b44564b9e634c0da6815187ce8eab27c /gnu/llvm/lib/LibDriver/LibDriver.cpp
parentkillp -a should not kill the window if only one pane. (diff)
downloadwireguard-openbsd-bd3306aecb3a15e8967143b8cdbbccf2b1b19b74.tar.xz
wireguard-openbsd-bd3306aecb3a15e8967143b8cdbbccf2b1b19b74.zip
Import LLVM 3.9.1 including clang and lld.
Diffstat (limited to 'gnu/llvm/lib/LibDriver/LibDriver.cpp')
-rw-r--r--gnu/llvm/lib/LibDriver/LibDriver.cpp20
1 files changed, 14 insertions, 6 deletions
diff --git a/gnu/llvm/lib/LibDriver/LibDriver.cpp b/gnu/llvm/lib/LibDriver/LibDriver.cpp
index 3ae54346074..ea6d921d0f8 100644
--- a/gnu/llvm/lib/LibDriver/LibDriver.cpp
+++ b/gnu/llvm/lib/LibDriver/LibDriver.cpp
@@ -57,10 +57,10 @@ public:
}
static std::string getOutputPath(llvm::opt::InputArgList *Args,
- const llvm::NewArchiveIterator &FirstMember) {
+ const llvm::NewArchiveMember &FirstMember) {
if (auto *Arg = Args->getLastArg(OPT_out))
return Arg->getValue();
- SmallString<128> Val = FirstMember.getNew();
+ SmallString<128> Val = StringRef(FirstMember.Buf->getBufferIdentifier());
llvm::sys::path::replace_extension(Val, ".lib");
return Val.str();
}
@@ -122,20 +122,28 @@ int llvm::libDriverMain(llvm::ArrayRef<const char*> ArgsArr) {
llvm::errs() << "ignoring unknown argument: " << Arg->getSpelling() << "\n";
if (Args.filtered_begin(OPT_INPUT) == Args.filtered_end()) {
- llvm::errs() << "no input files.\n";
- return 1;
+ // No input files. To match lib.exe, silently do nothing.
+ return 0;
}
std::vector<StringRef> SearchPaths = getSearchPaths(&Args, Saver);
- std::vector<llvm::NewArchiveIterator> Members;
+ std::vector<llvm::NewArchiveMember> Members;
for (auto *Arg : Args.filtered(OPT_INPUT)) {
Optional<std::string> Path = findInputFile(Arg->getValue(), SearchPaths);
if (!Path.hasValue()) {
llvm::errs() << Arg->getValue() << ": no such file or directory\n";
return 1;
}
- Members.emplace_back(Saver.save(*Path));
+ Expected<NewArchiveMember> MOrErr =
+ NewArchiveMember::getFile(Saver.save(*Path), /*Deterministic=*/true);
+ if (!MOrErr) {
+ handleAllErrors(MOrErr.takeError(), [&](const llvm::ErrorInfoBase &EIB) {
+ llvm::errs() << Arg->getValue() << ": " << EIB.message() << "\n";
+ });
+ return 1;
+ }
+ Members.emplace_back(std::move(*MOrErr));
}
std::pair<StringRef, std::error_code> Result =