summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-ar/llvm-ar.cpp
diff options
context:
space:
mode:
authorLang Hames <lhames@gmail.com>2016-07-14 02:24:01 +0000
committerLang Hames <lhames@gmail.com>2016-07-14 02:24:01 +0000
commitfc209623e976118cf016c0d3c1dccacb6bfa27c1 (patch)
tree407a60990972f87acb6c6aed9c218ac6ab4b203a /llvm/tools/llvm-ar/llvm-ar.cpp
parentaf7e8465e1fabdfff6c3a08a14cdb83ed79a10dc (diff)
downloadbcm5719-llvm-fc209623e976118cf016c0d3c1dccacb6bfa27c1.tar.gz
bcm5719-llvm-fc209623e976118cf016c0d3c1dccacb6bfa27c1.zip
[Object] Re-apply r275316 now that I have the corresponding LLD patch ready.
llvm-svn: 275361
Diffstat (limited to 'llvm/tools/llvm-ar/llvm-ar.cpp')
-rw-r--r--llvm/tools/llvm-ar/llvm-ar.cpp68
1 files changed, 36 insertions, 32 deletions
diff --git a/llvm/tools/llvm-ar/llvm-ar.cpp b/llvm/tools/llvm-ar/llvm-ar.cpp
index d52355216b0..865152b6af8 100644
--- a/llvm/tools/llvm-ar/llvm-ar.cpp
+++ b/llvm/tools/llvm-ar/llvm-ar.cpp
@@ -405,35 +405,37 @@ static void performReadOperation(ArchiveOperation Operation,
fail("extracting from a thin archive is not supported");
bool Filter = !Members.empty();
- for (auto &ChildOrErr : OldArchive->children()) {
- failIfError(ChildOrErr.getError());
- const object::Archive::Child &C = *ChildOrErr;
-
- ErrorOr<StringRef> NameOrErr = C.getName();
- failIfError(NameOrErr.getError());
- StringRef Name = NameOrErr.get();
-
- if (Filter) {
- auto I = std::find(Members.begin(), Members.end(), Name);
- if (I == Members.end())
- continue;
- Members.erase(I);
- }
+ {
+ Error Err;
+ for (auto &C : OldArchive->children(Err)) {
+ ErrorOr<StringRef> NameOrErr = C.getName();
+ failIfError(NameOrErr.getError());
+ StringRef Name = NameOrErr.get();
- switch (Operation) {
- default:
- llvm_unreachable("Not a read operation");
- case Print:
- doPrint(Name, C);
- break;
- case DisplayTable:
- doDisplayTable(Name, C);
- break;
- case Extract:
- doExtract(Name, C);
- break;
+ if (Filter) {
+ auto I = std::find(Members.begin(), Members.end(), Name);
+ if (I == Members.end())
+ continue;
+ Members.erase(I);
+ }
+
+ switch (Operation) {
+ default:
+ llvm_unreachable("Not a read operation");
+ case Print:
+ doPrint(Name, C);
+ break;
+ case DisplayTable:
+ doDisplayTable(Name, C);
+ break;
+ case Extract:
+ doExtract(Name, C);
+ break;
+ }
}
+ failIfError(std::move(Err));
}
+
if (Members.empty())
return;
for (StringRef Name : Members)
@@ -531,9 +533,8 @@ computeNewArchiveMembers(ArchiveOperation Operation,
int InsertPos = -1;
StringRef PosName = sys::path::filename(RelPos);
if (OldArchive) {
- for (auto &ChildOrErr : OldArchive->children()) {
- failIfError(ChildOrErr.getError());
- auto &Child = ChildOrErr.get();
+ Error Err;
+ for (auto &Child : OldArchive->children(Err)) {
int Pos = Ret.size();
ErrorOr<StringRef> NameOrErr = Child.getName();
failIfError(NameOrErr.getError());
@@ -568,6 +569,7 @@ computeNewArchiveMembers(ArchiveOperation Operation,
if (MemberI != Members.end())
Members.erase(MemberI);
}
+ failIfError(std::move(Err));
}
if (Operation == Delete)
@@ -764,9 +766,11 @@ static void runMRIScript() {
"Could not parse library");
Archives.push_back(std::move(*LibOrErr));
object::Archive &Lib = *Archives.back();
- for (auto &MemberOrErr : Lib.children()) {
- failIfError(MemberOrErr.getError());
- addMember(NewMembers, *MemberOrErr);
+ {
+ Error Err;
+ for (auto &Member : Lib.children(Err))
+ addMember(NewMembers, Member);
+ failIfError(std::move(Err));
}
break;
}
OpenPOWER on IntegriCloud