diff options
Diffstat (limited to 'llvm/tools')
-rw-r--r-- | llvm/tools/dsymutil/BinaryHolder.cpp | 5 | ||||
-rw-r--r-- | llvm/tools/llvm-ar/llvm-ar.cpp | 17 | ||||
-rw-r--r-- | llvm/tools/llvm-cxxdump/llvm-cxxdump.cpp | 4 | ||||
-rw-r--r-- | llvm/tools/llvm-nm/llvm-nm.cpp | 21 | ||||
-rw-r--r-- | llvm/tools/llvm-objdump/MachODump.cpp | 42 | ||||
-rw-r--r-- | llvm/tools/llvm-objdump/llvm-objdump.cpp | 5 | ||||
-rw-r--r-- | llvm/tools/llvm-readobj/llvm-readobj.cpp | 5 | ||||
-rw-r--r-- | llvm/tools/llvm-size/llvm-size.cpp | 31 |
8 files changed, 106 insertions, 24 deletions
diff --git a/llvm/tools/dsymutil/BinaryHolder.cpp b/llvm/tools/dsymutil/BinaryHolder.cpp index 7ff4fd69957..4c2c1d195c3 100644 --- a/llvm/tools/dsymutil/BinaryHolder.cpp +++ b/llvm/tools/dsymutil/BinaryHolder.cpp @@ -109,7 +109,10 @@ BinaryHolder::GetArchiveMemberBuffers(StringRef Filename, Buffers.reserve(CurrentArchives.size()); for (const auto &CurrentArchive : CurrentArchives) { - for (const auto &Child : CurrentArchive->children()) { + for (auto ChildOrErr : CurrentArchive->children()) { + if (std::error_code Err = ChildOrErr.getError()) + return Err; + const auto &Child = *ChildOrErr; if (auto NameOrErr = Child.getName()) { if (*NameOrErr == Filename) { if (Timestamp != sys::TimeValue::PosixZeroTime() && diff --git a/llvm/tools/llvm-ar/llvm-ar.cpp b/llvm/tools/llvm-ar/llvm-ar.cpp index f0e7284d9b9..093f7f9e35d 100644 --- a/llvm/tools/llvm-ar/llvm-ar.cpp +++ b/llvm/tools/llvm-ar/llvm-ar.cpp @@ -338,7 +338,9 @@ static void doDisplayTable(StringRef Name, const object::Archive::Child &C) { printMode(Mode & 007); outs() << ' ' << C.getUID(); outs() << '/' << C.getGID(); - outs() << ' ' << format("%6llu", C.getSize()); + ErrorOr<uint64_t> Size = C.getSize(); + failIfError(Size.getError()); + outs() << ' ' << format("%6llu", Size.get()); outs() << ' ' << C.getLastModified().str(); outs() << ' '; } @@ -403,7 +405,10 @@ static void performReadOperation(ArchiveOperation Operation, } bool Filter = !Members.empty(); - for (const object::Archive::Child &C : OldArchive->children()) { + 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(); @@ -523,7 +528,9 @@ computeNewArchiveMembers(ArchiveOperation Operation, int InsertPos = -1; StringRef PosName = sys::path::filename(RelPos); if (OldArchive) { - for (auto &Child : OldArchive->children()) { + for (auto &ChildOrErr : OldArchive->children()) { + failIfError(ChildOrErr.getError()); + auto &Child = ChildOrErr.get(); int Pos = Ret.size(); ErrorOr<StringRef> NameOrErr = Child.getName(); failIfError(NameOrErr.getError()); @@ -726,7 +733,9 @@ static void runMRIScript() { failIfError(LibOrErr.getError(), "Could not parse library"); Archives.push_back(std::move(*LibOrErr)); object::Archive &Lib = *Archives.back(); - for (auto &Member : Lib.children()) { + for (auto &MemberOrErr : Lib.children()) { + failIfError(MemberOrErr.getError()); + auto &Member = MemberOrErr.get(); ErrorOr<StringRef> NameOrErr = Member.getName(); failIfError(NameOrErr.getError()); addMember(NewMembers, Member, *NameOrErr); diff --git a/llvm/tools/llvm-cxxdump/llvm-cxxdump.cpp b/llvm/tools/llvm-cxxdump/llvm-cxxdump.cpp index d45a28a3b0f..3dda69266a2 100644 --- a/llvm/tools/llvm-cxxdump/llvm-cxxdump.cpp +++ b/llvm/tools/llvm-cxxdump/llvm-cxxdump.cpp @@ -482,7 +482,9 @@ static void dumpCXXData(const ObjectFile *Obj) { } static void dumpArchive(const Archive *Arc) { - for (const Archive::Child &ArcC : Arc->children()) { + for (auto &ErrorOrChild : Arc->children()) { + error(ErrorOrChild.getError()); + const Archive::Child &ArcC = *ErrorOrChild; ErrorOr<std::unique_ptr<Binary>> ChildOrErr = ArcC.getAsBinary(); if (std::error_code EC = ChildOrErr.getError()) { // Ignore non-object files. diff --git a/llvm/tools/llvm-nm/llvm-nm.cpp b/llvm/tools/llvm-nm/llvm-nm.cpp index 94866291899..770731fea9f 100644 --- a/llvm/tools/llvm-nm/llvm-nm.cpp +++ b/llvm/tools/llvm-nm/llvm-nm.cpp @@ -967,7 +967,10 @@ static void dumpSymbolNamesFromFile(std::string &Filename) { for (Archive::child_iterator I = A->child_begin(), E = A->child_end(); I != E; ++I) { - ErrorOr<std::unique_ptr<Binary>> ChildOrErr = I->getAsBinary(&Context); + if (error(I->getError())) + return; + auto &C = I->get(); + ErrorOr<std::unique_ptr<Binary>> ChildOrErr = C.getAsBinary(&Context); if (ChildOrErr.getError()) continue; if (SymbolicFile *O = dyn_cast<SymbolicFile>(&*ChildOrErr.get())) { @@ -1022,8 +1025,11 @@ static void dumpSymbolNamesFromFile(std::string &Filename) { for (Archive::child_iterator AI = A->child_begin(), AE = A->child_end(); AI != AE; ++AI) { + if (error(AI->getError())) + return; + auto &C = AI->get(); ErrorOr<std::unique_ptr<Binary>> ChildOrErr = - AI->getAsBinary(&Context); + C.getAsBinary(&Context); if (ChildOrErr.getError()) continue; if (SymbolicFile *O = @@ -1076,8 +1082,11 @@ static void dumpSymbolNamesFromFile(std::string &Filename) { for (Archive::child_iterator AI = A->child_begin(), AE = A->child_end(); AI != AE; ++AI) { + if (error(AI->getError())) + return; + auto &C = AI->get(); ErrorOr<std::unique_ptr<Binary>> ChildOrErr = - AI->getAsBinary(&Context); + C.getAsBinary(&Context); if (ChildOrErr.getError()) continue; if (SymbolicFile *O = @@ -1125,8 +1134,10 @@ static void dumpSymbolNamesFromFile(std::string &Filename) { std::unique_ptr<Archive> &A = *AOrErr; for (Archive::child_iterator AI = A->child_begin(), AE = A->child_end(); AI != AE; ++AI) { - ErrorOr<std::unique_ptr<Binary>> ChildOrErr = - AI->getAsBinary(&Context); + if (error(AI->getError())) + return; + auto &C = AI->get(); + ErrorOr<std::unique_ptr<Binary>> ChildOrErr = C.getAsBinary(&Context); if (ChildOrErr.getError()) continue; if (SymbolicFile *O = dyn_cast<SymbolicFile>(&*ChildOrErr.get())) { diff --git a/llvm/tools/llvm-objdump/MachODump.cpp b/llvm/tools/llvm-objdump/MachODump.cpp index b4a05df21e2..a5895ee3caa 100644 --- a/llvm/tools/llvm-objdump/MachODump.cpp +++ b/llvm/tools/llvm-objdump/MachODump.cpp @@ -1417,8 +1417,10 @@ static void printArchiveChild(const Archive::Child &C, bool verbose, outs() << format("%3d/", UID); unsigned GID = C.getGID(); outs() << format("%-3d ", GID); - uint64_t Size = C.getRawSize(); - outs() << format("%5" PRId64, Size) << " "; + ErrorOr<uint64_t> Size = C.getRawSize(); + if (std::error_code EC = Size.getError()) + report_fatal_error(EC.message()); + outs() << format("%5" PRId64, Size.get()) << " "; StringRef RawLastModified = C.getRawLastModified(); if (verbose) { @@ -1454,7 +1456,9 @@ static void printArchiveChild(const Archive::Child &C, bool verbose, static void printArchiveHeaders(Archive *A, bool verbose, bool print_offset) { for (Archive::child_iterator I = A->child_begin(false), E = A->child_end(); I != E; ++I) { - Archive::Child C = *I; + if (std::error_code EC = I->getError()) + report_fatal_error(EC.message()); + const Archive::Child &C = **I; printArchiveChild(C, verbose, print_offset); } } @@ -1491,7 +1495,13 @@ void llvm::ParseInputMachO(StringRef Filename) { printArchiveHeaders(A, !NonVerbose, ArchiveMemberOffsets); for (Archive::child_iterator I = A->child_begin(), E = A->child_end(); I != E; ++I) { - ErrorOr<std::unique_ptr<Binary>> ChildOrErr = I->getAsBinary(); + if (std::error_code EC = I->getError()) { + errs() << "llvm-objdump: '" << Filename << "': " << EC.message() + << ".\n"; + exit(1); + } + auto &C = I->get(); + ErrorOr<std::unique_ptr<Binary>> ChildOrErr = C.getAsBinary(); if (ChildOrErr.getError()) continue; if (MachOObjectFile *O = dyn_cast<MachOObjectFile>(&*ChildOrErr.get())) { @@ -1539,7 +1549,13 @@ void llvm::ParseInputMachO(StringRef Filename) { for (Archive::child_iterator AI = A->child_begin(), AE = A->child_end(); AI != AE; ++AI) { - ErrorOr<std::unique_ptr<Binary>> ChildOrErr = AI->getAsBinary(); + if (std::error_code EC = AI->getError()) { + errs() << "llvm-objdump: '" << Filename + << "': " << EC.message() << ".\n"; + exit(1); + } + auto &C = AI->get(); + ErrorOr<std::unique_ptr<Binary>> ChildOrErr = C.getAsBinary(); if (ChildOrErr.getError()) continue; if (MachOObjectFile *O = @@ -1581,7 +1597,13 @@ void llvm::ParseInputMachO(StringRef Filename) { for (Archive::child_iterator AI = A->child_begin(), AE = A->child_end(); AI != AE; ++AI) { - ErrorOr<std::unique_ptr<Binary>> ChildOrErr = AI->getAsBinary(); + if (std::error_code EC = AI->getError()) { + errs() << "llvm-objdump: '" << Filename << "': " << EC.message() + << ".\n"; + exit(1); + } + auto &C = AI->get(); + ErrorOr<std::unique_ptr<Binary>> ChildOrErr = C.getAsBinary(); if (ChildOrErr.getError()) continue; if (MachOObjectFile *O = @@ -1617,7 +1639,13 @@ void llvm::ParseInputMachO(StringRef Filename) { printArchiveHeaders(A.get(), !NonVerbose, ArchiveMemberOffsets); for (Archive::child_iterator AI = A->child_begin(), AE = A->child_end(); AI != AE; ++AI) { - ErrorOr<std::unique_ptr<Binary>> ChildOrErr = AI->getAsBinary(); + if (std::error_code EC = AI->getError()) { + errs() << "llvm-objdump: '" << Filename << "': " << EC.message() + << ".\n"; + exit(1); + } + auto &C = AI->get(); + ErrorOr<std::unique_ptr<Binary>> ChildOrErr = C.getAsBinary(); if (ChildOrErr.getError()) continue; if (MachOObjectFile *O = diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp index 15a6b9aa4ea..27a36c052cc 100644 --- a/llvm/tools/llvm-objdump/llvm-objdump.cpp +++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp @@ -1537,7 +1537,10 @@ static void DumpObject(const ObjectFile *o) { /// @brief Dump each object file in \a a; static void DumpArchive(const Archive *a) { - for (const Archive::Child &C : a->children()) { + for (auto &ErrorOrChild : a->children()) { + if (std::error_code EC = ErrorOrChild.getError()) + report_error(a->getFileName(), EC); + const Archive::Child &C = *ErrorOrChild; ErrorOr<std::unique_ptr<Binary>> ChildOrErr = C.getAsBinary(); if (std::error_code EC = ChildOrErr.getError()) if (EC != object_error::invalid_file_type) diff --git a/llvm/tools/llvm-readobj/llvm-readobj.cpp b/llvm/tools/llvm-readobj/llvm-readobj.cpp index cb0c9c6418e..63cec03438c 100644 --- a/llvm/tools/llvm-readobj/llvm-readobj.cpp +++ b/llvm/tools/llvm-readobj/llvm-readobj.cpp @@ -377,7 +377,10 @@ static void dumpObject(const ObjectFile *Obj) { /// @brief Dumps each object file in \a Arc; static void dumpArchive(const Archive *Arc) { - for (const auto &Child : Arc->children()) { + for (auto &ErrorOrChild : Arc->children()) { + if (std::error_code EC = ErrorOrChild.getError()) + reportError(Arc->getFileName(), EC.message()); + const auto &Child = *ErrorOrChild; ErrorOr<std::unique_ptr<Binary>> ChildOrErr = Child.getAsBinary(); if (std::error_code EC = ChildOrErr.getError()) { // Ignore non-object files. diff --git a/llvm/tools/llvm-size/llvm-size.cpp b/llvm/tools/llvm-size/llvm-size.cpp index bb299884f25..069cc621f61 100644 --- a/llvm/tools/llvm-size/llvm-size.cpp +++ b/llvm/tools/llvm-size/llvm-size.cpp @@ -428,7 +428,13 @@ static void PrintFileSectionSizes(StringRef file) { for (object::Archive::child_iterator i = a->child_begin(), e = a->child_end(); i != e; ++i) { - ErrorOr<std::unique_ptr<Binary>> ChildOrErr = i->getAsBinary(); + if (i->getError()) { + errs() << ToolName << ": " << file << ": " << i->getError().message() + << ".\n"; + exit(1); + } + auto &c = i->get(); + ErrorOr<std::unique_ptr<Binary>> ChildOrErr = c.getAsBinary(); if (std::error_code EC = ChildOrErr.getError()) { errs() << ToolName << ": " << file << ": " << EC.message() << ".\n"; continue; @@ -490,7 +496,13 @@ static void PrintFileSectionSizes(StringRef file) { for (object::Archive::child_iterator i = UA->child_begin(), e = UA->child_end(); i != e; ++i) { - ErrorOr<std::unique_ptr<Binary>> ChildOrErr = i->getAsBinary(); + if (std::error_code EC = i->getError()) { + errs() << ToolName << ": " << file << ": " << EC.message() + << ".\n"; + exit(1); + } + auto &c = i->get(); + ErrorOr<std::unique_ptr<Binary>> ChildOrErr = c.getAsBinary(); if (std::error_code EC = ChildOrErr.getError()) { errs() << ToolName << ": " << file << ": " << EC.message() << ".\n"; @@ -567,7 +579,13 @@ static void PrintFileSectionSizes(StringRef file) { for (object::Archive::child_iterator i = UA->child_begin(), e = UA->child_end(); i != e; ++i) { - ErrorOr<std::unique_ptr<Binary>> ChildOrErr = i->getAsBinary(); + if (std::error_code EC = i->getError()) { + errs() << ToolName << ": " << file << ": " << EC.message() + << ".\n"; + exit(1); + } + auto &c = i->get(); + ErrorOr<std::unique_ptr<Binary>> ChildOrErr = c.getAsBinary(); if (std::error_code EC = ChildOrErr.getError()) { errs() << ToolName << ": " << file << ": " << EC.message() << ".\n"; @@ -631,7 +649,12 @@ static void PrintFileSectionSizes(StringRef file) { for (object::Archive::child_iterator i = UA->child_begin(), e = UA->child_end(); i != e; ++i) { - ErrorOr<std::unique_ptr<Binary>> ChildOrErr = i->getAsBinary(); + if (std::error_code EC = i->getError()) { + errs() << ToolName << ": " << file << ": " << EC.message() << ".\n"; + exit(1); + } + auto &c = i->get(); + ErrorOr<std::unique_ptr<Binary>> ChildOrErr = c.getAsBinary(); if (std::error_code EC = ChildOrErr.getError()) { errs() << ToolName << ": " << file << ": " << EC.message() << ".\n"; continue; |