Skip to content

Commit d532e62

Browse files
authored
[clang-offload-bundler] Initialize member names in unbundled archive (#3049)
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 [email protected]
1 parent df049c2 commit d532e62

File tree

1 file changed

+7
-9
lines changed

1 file changed

+7
-9
lines changed

clang/tools/clang-offload-bundler/ClangOffloadBundler.cpp

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -993,8 +993,6 @@ class ArchiveFileHandler final : public FileHandler {
993993
}
994994

995995
// Extracted objects data for archive mode.
996-
SmallVector<std::string, 8u> ArNames;
997-
SmallVector<SmallVector<char, 0u>, 8u> ArData;
998996
SmallVector<NewArchiveMember, 8u> ArMembers;
999997

1000998
// Read all children.
@@ -1057,17 +1055,17 @@ class ArchiveFileHandler final : public FileHandler {
10571055
if (Error Err = OFH.ReadBundle(OS, *Buf))
10581056
return Err;
10591057
} else if (Mode == OutputType::Archive) {
1060-
auto &Name =
1061-
ArNames.emplace_back((TT + "." + *ChildNameOrErr).str());
1062-
auto &Data = ArData.emplace_back();
1058+
// Extract the bundle to a buffer.
1059+
SmallVector<char> Data;
10631060
raw_svector_ostream ChildOS{Data};
1064-
1065-
// Extract the bundle.
10661061
if (Error Err = OFH.ReadBundle(ChildOS, *Buf))
10671062
return Err;
10681063

1069-
ArMembers.emplace_back(
1070-
MemoryBufferRef{StringRef(Data.data(), Data.size()), Name});
1064+
// Add new archive member.
1065+
NewArchiveMember &Member = ArMembers.emplace_back();
1066+
std::string Name = (TT + "." + *ChildNameOrErr).str();
1067+
Member.Buf = MemoryBuffer::getMemBufferCopy(ChildOS.str(), Name);
1068+
Member.MemberName = Member.Buf->getBufferIdentifier();
10711069
}
10721070
if (Error Err = OFH.ReadBundleEnd(*Buf))
10731071
return Err;

0 commit comments

Comments
 (0)