From f3178c7d00e7bedf60396bcef57170bb31fb647f Mon Sep 17 00:00:00 2001 From: Sergey Dmitriev Date: Sun, 17 Jan 2021 20:08:27 -0800 Subject: [PATCH 1/2] [clang-offload-bundler] Initialize member names in unbundled archive Member names in the unbundled archive were not properly initialized which could lead to random problems for tools working with these archives later. This patch fixes this problem. There is no LIT test in this patch because it is impossible to create stable test which shows the problem. Signed-off-by: Sergey Dmitriev --- .../ClangOffloadBundler.cpp | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/clang/tools/clang-offload-bundler/ClangOffloadBundler.cpp b/clang/tools/clang-offload-bundler/ClangOffloadBundler.cpp index af4562e008dd5..40a078bffd4d4 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; From 11aea64934272ec92ee0669163fd07f6c5fe87f8 Mon Sep 17 00:00:00 2001 From: Sergey Dmitriev Date: Mon, 18 Jan 2021 17:45:35 -0800 Subject: [PATCH 2/2] Update clang/tools/clang-offload-bundler/ClangOffloadBundler.cpp Co-authored-by: kbobrovs --- clang/tools/clang-offload-bundler/ClangOffloadBundler.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/tools/clang-offload-bundler/ClangOffloadBundler.cpp b/clang/tools/clang-offload-bundler/ClangOffloadBundler.cpp index 40a078bffd4d4..94cffd6827322 100644 --- a/clang/tools/clang-offload-bundler/ClangOffloadBundler.cpp +++ b/clang/tools/clang-offload-bundler/ClangOffloadBundler.cpp @@ -1056,7 +1056,7 @@ class ArchiveFileHandler final : public FileHandler { return Err; } else if (Mode == OutputType::Archive) { // Extract the bundle to a buffer. - SmallVector Data; + SmallVector Data; raw_svector_ostream ChildOS{Data}; if (Error Err = OFH.ReadBundle(ChildOS, *Buf)) return Err;