diff options
Diffstat (limited to 'llvm/lib/Object/ArchiveWriter.cpp')
-rw-r--r-- | llvm/lib/Object/ArchiveWriter.cpp | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/llvm/lib/Object/ArchiveWriter.cpp b/llvm/lib/Object/ArchiveWriter.cpp index dae0188a21e..1f304ccfb75 100644 --- a/llvm/lib/Object/ArchiveWriter.cpp +++ b/llvm/lib/Object/ArchiveWriter.cpp @@ -347,10 +347,10 @@ llvm::writeArchive(StringRef ArcName, MemberRef = Buffers.back()->getMemBufferRef(); } else { object::Archive::child_iterator OldMember = Member.getOld(); - assert((!Thin || OldMember->getParent()->isThin()) && + assert((!Thin || (*OldMember && (*OldMember)->getParent()->isThin())) && "Thin archives cannot refers to member of other archives"); ErrorOr<MemoryBufferRef> MemberBufferOrErr = - OldMember->getMemoryBufferRef(); + (*OldMember)->getMemoryBufferRef(); if (auto EC = MemberBufferOrErr.getError()) return std::make_pair("", EC); MemberRef = MemberBufferOrErr.get(); @@ -398,10 +398,10 @@ llvm::writeArchive(StringRef ArcName, Perms = Status.permissions(); } else { object::Archive::child_iterator OldMember = I.getOld(); - ModTime = OldMember->getLastModified(); - UID = OldMember->getUID(); - GID = OldMember->getGID(); - Perms = OldMember->getAccessMode(); + ModTime = (*OldMember)->getLastModified(); + UID = (*OldMember)->getUID(); + GID = (*OldMember)->getGID(); + Perms = (*OldMember)->getAccessMode(); } if (I.isNewMember()) { @@ -412,8 +412,11 @@ llvm::writeArchive(StringRef ArcName, Status.getSize()); } else { object::Archive::child_iterator OldMember = I.getOld(); + ErrorOr<uint32_t> Size = (*OldMember)->getSize(); + if (std::error_code EC = Size.getError()) + return std::make_pair("", EC); printMemberHeader(Out, Kind, Thin, I.getName(), StringMapIndexIter, - ModTime, UID, GID, Perms, OldMember->getSize()); + ModTime, UID, GID, Perms, Size.get()); } if (!Thin) |