summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2014-06-16 16:08:36 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2014-06-16 16:08:36 +0000
commit0659928fec02d5a953e528739cc036f7a68deb63 (patch)
treea1bfb3747233ad5bc9a52fc7321565997855a4ea /tools
parentd492c19894f41ca20d451e3e7ae5a7340728882b (diff)
downloadllvm-0659928fec02d5a953e528739cc036f7a68deb63.tar.gz
llvm-0659928fec02d5a953e528739cc036f7a68deb63.tar.bz2
llvm-0659928fec02d5a953e528739cc036f7a68deb63.tar.xz
Convert the Archive API to use ErrorOr.
Now that we have c++11, even things like ErrorOr<std::unique_ptr<...>> are easy to use. No intended functionality change. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@211033 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools')
-rw-r--r--tools/llvm-ar/llvm-ar.cpp15
-rw-r--r--tools/llvm-nm/llvm-nm.cpp27
-rw-r--r--tools/llvm-objdump/llvm-objdump.cpp6
-rw-r--r--tools/llvm-readobj/llvm-readobj.cpp6
-rw-r--r--tools/llvm-size/llvm-size.cpp8
5 files changed, 33 insertions, 29 deletions
diff --git a/tools/llvm-ar/llvm-ar.cpp b/tools/llvm-ar/llvm-ar.cpp
index f5f28cf8a1..196240a0c2 100644
--- a/tools/llvm-ar/llvm-ar.cpp
+++ b/tools/llvm-ar/llvm-ar.cpp
@@ -369,8 +369,9 @@ static void performReadOperation(ArchiveOperation Operation,
for (object::Archive::child_iterator I = OldArchive->child_begin(),
E = OldArchive->child_end();
I != E; ++I) {
- StringRef Name;
- failIfError(I->getName(Name));
+ ErrorOr<StringRef> NameOrErr = I->getName();
+ failIfError(NameOrErr.getError());
+ StringRef Name = NameOrErr.get();
if (!Members.empty() &&
std::find(Members.begin(), Members.end(), Name) == Members.end())
@@ -544,8 +545,9 @@ computeNewArchiveMembers(ArchiveOperation Operation,
E = OldArchive->child_end();
I != E; ++I) {
int Pos = Ret.size();
- StringRef Name;
- failIfError(I->getName(Name));
+ ErrorOr<StringRef> NameOrErr = I->getName();
+ failIfError(NameOrErr.getError());
+ StringRef Name = NameOrErr.get();
if (Name == PosName) {
assert(AddAfter || AddBefore);
if (AddBefore)
@@ -783,7 +785,10 @@ static void performWriteOperation(ArchiveOperation Operation,
} else {
object::Archive::child_iterator OldMember = Member.getOld();
- failIfError(OldMember->getMemoryBuffer(MemberBuffer));
+ ErrorOr<std::unique_ptr<MemoryBuffer>> MemberBufferOrErr =
+ OldMember->getMemoryBuffer();
+ failIfError(MemberBufferOrErr.getError());
+ MemberBuffer = std::move(MemberBufferOrErr.get());
}
MemberBuffers[I] = MemberBuffer.release();
}
diff --git a/tools/llvm-nm/llvm-nm.cpp b/tools/llvm-nm/llvm-nm.cpp
index 19d9888e8a..e605e6e430 100644
--- a/tools/llvm-nm/llvm-nm.cpp
+++ b/tools/llvm-nm/llvm-nm.cpp
@@ -733,16 +733,14 @@ static void dumpSymbolNamesFromFile(std::string &Filename) {
if (I != E) {
outs() << "Archive map\n";
for (; I != E; ++I) {
- Archive::child_iterator C;
- StringRef SymName;
- StringRef FileName;
- if (error(I->getMember(C)))
+ ErrorOr<Archive::child_iterator> C = I->getMember();
+ if (error(C.getError()))
return;
- if (error(I->getName(SymName)))
+ ErrorOr<StringRef> FileNameOrErr = C.get()->getName();
+ if (error(FileNameOrErr.getError()))
return;
- if (error(C->getName(FileName)))
- return;
- outs() << SymName << " in " << FileName << "\n";
+ StringRef SymName = I->getName();
+ outs() << SymName << " in " << FileNameOrErr.get() << "\n";
}
outs() << "\n";
}
@@ -750,10 +748,10 @@ static void dumpSymbolNamesFromFile(std::string &Filename) {
for (Archive::child_iterator I = A->child_begin(), E = A->child_end();
I != E; ++I) {
- std::unique_ptr<Binary> Child;
- if (I->getAsBinary(Child, &Context))
+ ErrorOr<std::unique_ptr<Binary>> ChildOrErr = I->getAsBinary(&Context);
+ if (ChildOrErr.getError())
continue;
- if (SymbolicFile *O = dyn_cast<SymbolicFile>(Child.get())) {
+ if (SymbolicFile *O = dyn_cast<SymbolicFile>(&*ChildOrErr.get())) {
outs() << O->getFileName() << ":\n";
dumpSymbolNamesFromObject(O);
}
@@ -773,10 +771,11 @@ static void dumpSymbolNamesFromFile(std::string &Filename) {
else if (!I->getAsArchive(A)) {
for (Archive::child_iterator AI = A->child_begin(), AE = A->child_end();
AI != AE; ++AI) {
- std::unique_ptr<Binary> Child;
- if (AI->getAsBinary(Child, &Context))
+ ErrorOr<std::unique_ptr<Binary>> ChildOrErr =
+ AI->getAsBinary(&Context);
+ if (ChildOrErr.getError())
continue;
- if (SymbolicFile *O = dyn_cast<SymbolicFile>(Child.get())) {
+ if (SymbolicFile *O = dyn_cast<SymbolicFile>(&*ChildOrErr.get())) {
outs() << A->getFileName() << ":";
outs() << O->getFileName() << ":\n";
dumpSymbolNamesFromObject(O);
diff --git a/tools/llvm-objdump/llvm-objdump.cpp b/tools/llvm-objdump/llvm-objdump.cpp
index e12ff3de2b..d98691b4b0 100644
--- a/tools/llvm-objdump/llvm-objdump.cpp
+++ b/tools/llvm-objdump/llvm-objdump.cpp
@@ -850,15 +850,15 @@ static void DumpObject(const ObjectFile *o) {
static void DumpArchive(const Archive *a) {
for (Archive::child_iterator i = a->child_begin(), e = a->child_end(); i != e;
++i) {
- std::unique_ptr<Binary> child;
- if (std::error_code EC = i->getAsBinary(child)) {
+ ErrorOr<std::unique_ptr<Binary>> ChildOrErr = i->getAsBinary();
+ if (std::error_code EC = ChildOrErr.getError()) {
// Ignore non-object files.
if (EC != object_error::invalid_file_type)
errs() << ToolName << ": '" << a->getFileName() << "': " << EC.message()
<< ".\n";
continue;
}
- if (ObjectFile *o = dyn_cast<ObjectFile>(child.get()))
+ if (ObjectFile *o = dyn_cast<ObjectFile>(&*ChildOrErr.get()))
DumpObject(o);
else
errs() << ToolName << ": '" << a->getFileName() << "': "
diff --git a/tools/llvm-readobj/llvm-readobj.cpp b/tools/llvm-readobj/llvm-readobj.cpp
index d66c02f413..52db0ebbef 100644
--- a/tools/llvm-readobj/llvm-readobj.cpp
+++ b/tools/llvm-readobj/llvm-readobj.cpp
@@ -242,15 +242,15 @@ static void dumpArchive(const Archive *Arc) {
for (Archive::child_iterator ArcI = Arc->child_begin(),
ArcE = Arc->child_end();
ArcI != ArcE; ++ArcI) {
- std::unique_ptr<Binary> child;
- if (std::error_code EC = ArcI->getAsBinary(child)) {
+ ErrorOr<std::unique_ptr<Binary>> ChildOrErr = ArcI->getAsBinary();
+ if (std::error_code EC = ChildOrErr.getError()) {
// Ignore non-object files.
if (EC != object_error::invalid_file_type)
reportError(Arc->getFileName(), EC.message());
continue;
}
- if (ObjectFile *Obj = dyn_cast<ObjectFile>(child.get()))
+ if (ObjectFile *Obj = dyn_cast<ObjectFile>(&*ChildOrErr.get()))
dumpObject(Obj);
else
reportError(Arc->getFileName(), readobj_error::unrecognized_file_format);
diff --git a/tools/llvm-size/llvm-size.cpp b/tools/llvm-size/llvm-size.cpp
index 1ea22a937a..ebd41a5280 100644
--- a/tools/llvm-size/llvm-size.cpp
+++ b/tools/llvm-size/llvm-size.cpp
@@ -245,12 +245,12 @@ static void PrintFileSectionSizes(StringRef file) {
// This is an archive. Iterate over each member and display its sizes.
for (object::Archive::child_iterator i = a->child_begin(),
e = a->child_end(); i != e; ++i) {
- std::unique_ptr<Binary> child;
- if (std::error_code ec = i->getAsBinary(child)) {
- errs() << ToolName << ": " << file << ": " << ec.message() << ".\n";
+ ErrorOr<std::unique_ptr<Binary>> ChildOrErr = i->getAsBinary();
+ if (std::error_code EC = ChildOrErr.getError()) {
+ errs() << ToolName << ": " << file << ": " << EC.message() << ".\n";
continue;
}
- if (ObjectFile *o = dyn_cast<ObjectFile>(child.get())) {
+ if (ObjectFile *o = dyn_cast<ObjectFile>(&*ChildOrErr.get())) {
if (OutputFormat == sysv)
outs() << o->getFileName() << " (ex " << a->getFileName()
<< "):\n";