@@ -393,13 +393,12 @@ extern "C" LLVMValueRef LLVMDIBuilderCreateLexicalBlock(
393393 LLVMValueRef Scope,
394394 LLVMValueRef File,
395395 unsigned Line,
396- unsigned Col,
397- unsigned Discriminator) {
396+ unsigned Col) {
398397 return wrap (Builder->createLexicalBlock (
399398 unwrapDI<DIDescriptor>(Scope),
400399 unwrapDI<DIFile>(File), Line, Col
401- #if LLVM_VERSION_MINOR > = 5
402- , Discriminator
400+ #if LLVM_VERSION_MINOR = = 5
401+ , 0
403402#endif
404403 ));
405404}
@@ -415,7 +414,11 @@ extern "C" LLVMValueRef LLVMDIBuilderCreateStaticVariable(
415414 bool isLocalToUnit,
416415 LLVMValueRef Val,
417416 LLVMValueRef Decl = NULL ) {
417+ #if LLVM_VERSION_MINOR == 6
418+ return wrap (Builder->createGlobalVariable (unwrapDI<DIDescriptor>(Context),
419+ #else
418420 return wrap (Builder->createStaticVariable (unwrapDI<DIDescriptor>(Context),
421+ #endif
419422 Name,
420423 LinkageName,
421424 unwrapDI<DIFile>(File),
@@ -665,11 +668,18 @@ extern "C" void LLVMWriteValueToString(LLVMValueRef Value, RustStringRef str) {
665668extern " C" bool
666669LLVMRustLinkInExternalBitcode (LLVMModuleRef dst, char *bc, size_t len) {
667670 Module *Dst = unwrap (dst);
671+ #if LLVM_VERSION_MINOR == 5
668672 MemoryBuffer* buf = MemoryBuffer::getMemBufferCopy (StringRef (bc, len));
669673 ErrorOr<Module *> Src = llvm::getLazyBitcodeModule (buf, Dst->getContext ());
674+ #else
675+ std::unique_ptr<MemoryBuffer> buf = MemoryBuffer::getMemBufferCopy (StringRef (bc, len));
676+ ErrorOr<Module *> Src = llvm::getLazyBitcodeModule (std::move (buf), Dst->getContext ());
677+ #endif
670678 if (!Src) {
671679 LLVMRustSetLastError (Src.getError ().message ().c_str ());
680+ #if LLVM_VERSION_MINOR == 5
672681 delete buf;
682+ #endif
673683 return false ;
674684 }
675685
@@ -712,12 +722,26 @@ LLVMRustOpenArchive(char *path) {
712722 return nullptr ;
713723 }
714724
725+ #if LLVM_VERSION_MINOR >= 6
726+ ErrorOr<std::unique_ptr<Archive>> archive_or =
727+ Archive::create (buf_or.get ()->getMemBufferRef ());
728+
729+ if (!archive_or) {
730+ LLVMRustSetLastError (archive_or.getError ().message ().c_str ());
731+ return nullptr ;
732+ }
733+
734+ OwningBinary<Archive> *ret = new OwningBinary<Archive>(
735+ std::move (archive_or.get ()), std::move (buf_or.get ()));
736+ #else
715737 std::error_code err;
716738 Archive *ret = new Archive (std::move (buf_or.get ()), err);
717739 if (err) {
718740 LLVMRustSetLastError (err.message ().c_str ());
719- return NULL ;
741+ return nullptr ;
720742 }
743+ #endif
744+
721745 return ret;
722746}
723747#else
@@ -739,7 +763,14 @@ LLVMRustOpenArchive(char *path) {
739763#endif
740764
741765extern " C" const char *
766+ #if LLVM_VERSION_MINOR >= 6
767+ LLVMRustArchiveReadSection (OwningBinary<Archive> *ob, char *name, size_t *size) {
768+
769+ std::unique_ptr<Archive> &ar = ob->getBinary ();
770+ #else
742771LLVMRustArchiveReadSection (Archive *ar, char *name, size_t *size) {
772+ #endif
773+
743774#if LLVM_VERSION_MINOR >= 5
744775 Archive::child_iterator child = ar->child_begin (),
745776 end = ar->child_end ();
@@ -765,7 +796,11 @@ LLVMRustArchiveReadSection(Archive *ar, char *name, size_t *size) {
765796}
766797
767798extern " C" void
799+ #if LLVM_VERSION_MINOR >= 6
800+ LLVMRustDestroyArchive (OwningBinary<Archive> *ar) {
801+ #else
768802LLVMRustDestroyArchive (Archive *ar) {
803+ #endif
769804 delete ar;
770805}
771806
0 commit comments