diff --git a/lld/include/lld/Driver/DarwinInputGraph.h b/lld/include/lld/Driver/DarwinInputGraph.h index 27289c163067..d351d56c40ff 100644 --- a/lld/include/lld/Driver/DarwinInputGraph.h +++ b/lld/include/lld/Driver/DarwinInputGraph.h @@ -17,6 +17,7 @@ #ifndef LLD_DRIVER_DARWIN_INPUT_GRAPH_H #define LLD_DRIVER_DARWIN_INPUT_GRAPH_H +#include "lld/Core/ArchiveLibraryFile.h" #include "lld/Core/InputGraph.h" #include "lld/ReaderWriter/MachOLinkingContext.h" @@ -67,6 +68,7 @@ private: void narrowFatBuffer(StringRef filePath); MachOLinkingContext &_context; + std::unique_ptr _archiveFile; bool _isWholeArchive; bool _upwardDylib; }; diff --git a/lld/lib/Driver/DarwinInputGraph.cpp b/lld/lib/Driver/DarwinInputGraph.cpp index f5f086f84d3d..29466323b28d 100644 --- a/lld/lib/Driver/DarwinInputGraph.cpp +++ b/lld/lib/Driver/DarwinInputGraph.cpp @@ -88,7 +88,10 @@ std::error_code MachOFileNode::parse(const LinkingContext &ctx, // If file is an archive and -all_load, then add all members. if (ArchiveLibraryFile *archive = dyn_cast(pf.get())) { if (_isWholeArchive) { - // Note: the members are added to _files, but the archive is not. + // Have this node own the FileArchive object. + _archiveFile.reset(archive); + pf.release(); + // Add all members to _files vector return archive->parseAllMembers(_files); } }