Don't implicitly construct an Archive::child_iterator.

llvm-svn: 252166
This commit is contained in:
Rafael Espindola 2015-11-05 14:34:56 +00:00
parent 537b6090d1
commit 543f29d1a9
1 changed files with 5 additions and 6 deletions

View File

@ -74,15 +74,14 @@ void ArchiveFile::parse() {
// Returns a buffer pointing to a member file containing a given symbol.
// This function is thread-safe.
MemoryBufferRef ArchiveFile::getMember(const Archive::Symbol *Sym) {
auto ItOrErr = Sym->getMember();
error(ItOrErr,
Twine("Could not get the member for symbol ") + Sym->getName());
Archive::child_iterator It = *ItOrErr;
auto COrErr = Sym->getMember();
error(COrErr, Twine("Could not get the member for symbol ") + Sym->getName());
const Archive::Child &C = *COrErr;
// Return an empty buffer if we have already returned the same buffer.
if (Seen[It->getChildOffset()].test_and_set())
if (Seen[C.getChildOffset()].test_and_set())
return MemoryBufferRef();
ErrorOr<MemoryBufferRef> Ret = It->getMemoryBufferRef();
ErrorOr<MemoryBufferRef> Ret = C.getMemoryBufferRef();
error(Ret, Twine("Could not get the buffer for the member defining symbol ") +
Sym->getName());
return *Ret;