Skip to content

Commit 69f4902

Browse files
committed
[Object] Change Archive::findSym to return an Expected<Optional<Child>>.
As suggested by Rafael in review of D22079 - this was accidentally left out of the final commit (r275316). llvm-svn: 275469
1 parent 6f73588 commit 69f4902

File tree

4 files changed

+20
-22
lines changed

4 files changed

+20
-22
lines changed

llvm/include/llvm/Object/Archive.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#ifndef LLVM_OBJECT_ARCHIVE_H
1515
#define LLVM_OBJECT_ARCHIVE_H
1616

17+
#include "llvm/ADT/Optional.h"
1718
#include "llvm/ADT/StringRef.h"
1819
#include "llvm/ADT/iterator_range.h"
1920
#include "llvm/Object/Binary.h"
@@ -215,7 +216,7 @@ class Archive : public Binary {
215216
}
216217

217218
// check if a symbol is in the archive
218-
child_iterator findSym(Error &Err, StringRef name) const;
219+
Expected<Optional<Child>> findSym(StringRef name) const;
219220

220221
bool hasSymbolTable() const;
221222
StringRef getSymbolTable() const { return SymbolTable; }

llvm/lib/ExecutionEngine/MCJIT/MCJIT.cpp

+6-6
Original file line numberDiff line numberDiff line change
@@ -327,14 +327,14 @@ RuntimeDyld::SymbolInfo MCJIT::findSymbol(const std::string &Name,
327327
for (object::OwningBinary<object::Archive> &OB : Archives) {
328328
object::Archive *A = OB.getBinary();
329329
// Look for our symbols in each Archive
330-
Error Err;
331-
object::Archive::child_iterator ChildIt = A->findSym(Err, Name);
332-
if (Err)
333-
report_fatal_error(std::move(Err));
334-
if (ChildIt != A->child_end()) {
330+
auto OptionalChildOrErr = A->findSym(Name);
331+
if (!OptionalChildOrErr)
332+
report_fatal_error(OptionalChildOrErr.takeError());
333+
auto &OptionalChild = *OptionalChildOrErr;
334+
if (OptionalChild) {
335335
// FIXME: Support nested archives?
336336
Expected<std::unique_ptr<object::Binary>> ChildBinOrErr =
337-
ChildIt->getAsBinary();
337+
OptionalChild->getAsBinary();
338338
if (!ChildBinOrErr) {
339339
// TODO: Actually report errors helpfully.
340340
consumeError(ChildBinOrErr.takeError());

llvm/lib/ExecutionEngine/Orc/OrcMCJITReplacement.h

+6-6
Original file line numberDiff line numberDiff line change
@@ -258,14 +258,14 @@ class OrcMCJITReplacement : public ExecutionEngine {
258258
for (object::OwningBinary<object::Archive> &OB : Archives) {
259259
object::Archive *A = OB.getBinary();
260260
// Look for our symbols in each Archive
261-
Error Err;
262-
object::Archive::child_iterator ChildIt = A->findSym(Err, Name);
263-
if (Err)
264-
report_fatal_error(std::move(Err));
265-
if (ChildIt != A->child_end()) {
261+
auto OptionalChildOrErr = A->findSym(Name);
262+
if (!OptionalChildOrErr)
263+
report_fatal_error(OptionalChildOrErr.takeError());
264+
auto &OptionalChild = *OptionalChildOrErr;
265+
if (OptionalChild) {
266266
// FIXME: Support nested archives?
267267
Expected<std::unique_ptr<object::Binary>> ChildBinOrErr =
268-
ChildIt->getAsBinary();
268+
OptionalChild->getAsBinary();
269269
if (!ChildBinOrErr) {
270270
// TODO: Actually report errors helpfully.
271271
consumeError(ChildBinOrErr.takeError());

llvm/lib/Object/Archive.cpp

+6-9
Original file line numberDiff line numberDiff line change
@@ -667,23 +667,20 @@ uint32_t Archive::getNumberOfSymbols() const {
667667
return read32le(buf);
668668
}
669669

670-
Archive::child_iterator Archive::findSym(Error &Err, StringRef name) const {
670+
Expected<Optional<Archive::Child>> Archive::findSym(StringRef name) const {
671671
Archive::symbol_iterator bs = symbol_begin();
672672
Archive::symbol_iterator es = symbol_end();
673673

674674
for (; bs != es; ++bs) {
675675
StringRef SymName = bs->getName();
676676
if (SymName == name) {
677-
if (auto MemberOrErr = bs->getMember()) {
678-
return child_iterator(*MemberOrErr, &Err);
679-
} else {
680-
ErrorAsOutParameter ErrAsOutParam(Err);
681-
Err = errorCodeToError(MemberOrErr.getError());
682-
return child_end();
683-
}
677+
if (auto MemberOrErr = bs->getMember())
678+
return Child(*MemberOrErr);
679+
else
680+
return errorCodeToError(MemberOrErr.getError());
684681
}
685682
}
686-
return child_end();
683+
return Optional<Child>();
687684
}
688685

689686
bool Archive::hasSymbolTable() const { return !SymbolTable.empty(); }

0 commit comments

Comments
 (0)