Skip to content

Commit bba47b3

Browse files
author
Dylan McKay
committed
Store a pointer to llvm::Archive::Child rather than by value
Recent changes to LLVM cause the constructor to Archive::Child to have the same signature, but require a parent archive (otherwise a segfault is hit). This is backwards compatible with the current LLVM. This will need to be done before the next LLVM upgrade.
1 parent 5045d4e commit bba47b3

File tree

1 file changed

+5
-11
lines changed

1 file changed

+5
-11
lines changed

src/rustllvm/ArchiveWrapper.cpp

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,9 @@ using namespace llvm::object;
1919
struct RustArchiveMember {
2020
const char *filename;
2121
const char *name;
22-
Archive::Child child;
22+
Archive::Child *child;
2323

24-
RustArchiveMember(): filename(NULL), name(NULL),
25-
#if LLVM_VERSION_GE(3, 8)
26-
child(NULL, NULL, NULL)
27-
#else
28-
child(NULL, NULL)
29-
#endif
30-
{}
24+
RustArchiveMember(): filename(NULL), name(NULL), child(NULL){ }
3125
~RustArchiveMember() {}
3226
};
3327

@@ -191,7 +185,7 @@ LLVMRustArchiveMemberNew(char *Filename, char *Name,
191185
Member->filename = Filename;
192186
Member->name = Name;
193187
if (child)
194-
Member->child = *child;
188+
Member->child = child;
195189
return Member;
196190
}
197191

@@ -232,9 +226,9 @@ LLVMRustWriteArchive(char *Dst,
232226
#endif
233227
} else {
234228
#if LLVM_VERSION_LE(3, 8)
235-
Members.push_back(NewArchiveIterator(Member->child, Member->name));
229+
Members.push_back(NewArchiveIterator(*Member->child, Member->name));
236230
#else
237-
Expected<NewArchiveMember> MOrErr = NewArchiveMember::getOldMember(Member->child, true);
231+
Expected<NewArchiveMember> MOrErr = NewArchiveMember::getOldMember(*Member->child, true);
238232
if (!MOrErr) {
239233
LLVMRustSetLastError(toString(MOrErr.takeError()).c_str());
240234
return LLVMRustResult::Failure;

0 commit comments

Comments
 (0)