diff --git a/clang/tools/clang-offload-bundler/ClangOffloadBundler.cpp b/clang/tools/clang-offload-bundler/ClangOffloadBundler.cpp index af4562e008dd5..94cffd6827322 100644 --- a/clang/tools/clang-offload-bundler/ClangOffloadBundler.cpp +++ b/clang/tools/clang-offload-bundler/ClangOffloadBundler.cpp @@ -993,8 +993,6 @@ class ArchiveFileHandler final : public FileHandler { } // Extracted objects data for archive mode. - SmallVector ArNames; - SmallVector, 8u> ArData; SmallVector ArMembers; // Read all children. @@ -1057,17 +1055,17 @@ class ArchiveFileHandler final : public FileHandler { if (Error Err = OFH.ReadBundle(OS, *Buf)) return Err; } else if (Mode == OutputType::Archive) { - auto &Name = - ArNames.emplace_back((TT + "." + *ChildNameOrErr).str()); - auto &Data = ArData.emplace_back(); + // Extract the bundle to a buffer. + SmallVector Data; raw_svector_ostream ChildOS{Data}; - - // Extract the bundle. if (Error Err = OFH.ReadBundle(ChildOS, *Buf)) return Err; - ArMembers.emplace_back( - MemoryBufferRef{StringRef(Data.data(), Data.size()), Name}); + // Add new archive member. + NewArchiveMember &Member = ArMembers.emplace_back(); + std::string Name = (TT + "." + *ChildNameOrErr).str(); + Member.Buf = MemoryBuffer::getMemBufferCopy(ChildOS.str(), Name); + Member.MemberName = Member.Buf->getBufferIdentifier(); } if (Error Err = OFH.ReadBundleEnd(*Buf)) return Err;