@@ -91,10 +91,14 @@ extern "C" void LLVMRemoveReturnAttribute(LLVMValueRef Fn, LLVMAttribute PA) {
9191 AttributeSet::get (A->getContext (), AttributeSet::ReturnIndex, B));
9292}
9393
94+ #if LLVM_VERSION_MINOR >= 5
9495extern " C" void LLVMAddColdAttribute (LLVMValueRef Fn) {
9596 Function *A = unwrap<Function>(Fn);
9697 A->addAttribute (AttributeSet::FunctionIndex, Attribute::Cold);
9798}
99+ #else
100+ extern " C" void LLVMAddColdAttribute (LLVMValueRef Fn) {}
101+ #endif
98102
99103extern " C" LLVMValueRef LLVMBuildAtomicLoad (LLVMBuilderRef B,
100104 LLVMValueRef source,
@@ -156,7 +160,11 @@ DIT unwrapDI(LLVMValueRef ref) {
156160 return DIT (ref ? unwrap<MDNode>(ref) : NULL );
157161}
158162
163+ #if LLVM_VERSION_MINOR >= 5
159164extern " C" const uint32_t LLVMRustDebugMetadataVersion = DEBUG_METADATA_VERSION;
165+ #else
166+ extern " C" const uint32_t LLVMRustDebugMetadataVersion = 1 ;
167+ #endif
160168
161169extern " C" void LLVMRustAddModuleFlag (LLVMModuleRef M,
162170 const char *name,
@@ -278,8 +286,12 @@ extern "C" LLVMValueRef LLVMDIBuilderCreateStructType(
278286 unwrapDI<DIType>(DerivedFrom),
279287 unwrapDI<DIArray>(Elements),
280288 RunTimeLang,
281- unwrapDI<DIType>(VTableHolder),
282- UniqueId));
289+ unwrapDI<DIType>(VTableHolder)
290+ #if LLVM_VERSION_MINOR >= 5
291+ ,UniqueId));
292+ #else
293+ ));
294+ #endif
283295}
284296
285297extern " C" LLVMValueRef LLVMDIBuilderCreateMemberType (
@@ -440,8 +452,12 @@ extern "C" LLVMValueRef LLVMDIBuilderCreateUnionType(
440452 AlignInBits,
441453 Flags,
442454 unwrapDI<DIArray>(Elements),
443- RunTimeLang,
444- UniqueId));
455+ RunTimeLang
456+ #if LLVM_VERSION_MINOR >= 5
457+ ,UniqueId));
458+ #else
459+ ));
460+ #endif
445461}
446462
447463extern " C" void LLVMSetUnnamedAddr (LLVMValueRef Value, LLVMBool Unnamed) {
@@ -541,6 +557,7 @@ extern "C" char *LLVMValueToString(LLVMValueRef Value) {
541557 return strdup (os.str ().data ());
542558}
543559
560+ #if LLVM_VERSION_MINOR >= 5
544561extern " C" bool
545562LLVMRustLinkInExternalBitcode (LLVMModuleRef dst, char *bc, size_t len) {
546563 Module *Dst = unwrap (dst);
@@ -559,6 +576,26 @@ LLVMRustLinkInExternalBitcode(LLVMModuleRef dst, char *bc, size_t len) {
559576 }
560577 return true ;
561578}
579+ #else
580+ extern " C" bool
581+ LLVMRustLinkInExternalBitcode (LLVMModuleRef dst, char *bc, size_t len) {
582+ Module *Dst = unwrap (dst);
583+ MemoryBuffer* buf = MemoryBuffer::getMemBufferCopy (StringRef (bc, len));
584+ std::string Err;
585+ Module *Src = llvm::getLazyBitcodeModule (buf, Dst->getContext (), &Err);
586+ if (!Src) {
587+ LLVMRustError = Err.c_str ();
588+ delete buf;
589+ return false ;
590+ }
591+
592+ if (Linker::LinkModules (Dst, Src, Linker::DestroySource, &Err)) {
593+ LLVMRustError = Err.c_str ();
594+ return false ;
595+ }
596+ return true ;
597+ }
598+ #endif
562599
563600extern " C" void *
564601LLVMRustOpenArchive (char *path) {
@@ -578,9 +615,14 @@ LLVMRustOpenArchive(char *path) {
578615
579616extern " C" const char *
580617LLVMRustArchiveReadSection (Archive *ar, char *name, size_t *size) {
581- for (Archive::child_iterator child = ar->child_begin (),
582- end = ar->child_end ();
583- child != end; ++child) {
618+ #if LLVM_VERSION_MINOR >= 5
619+ Archive::child_iterator child = ar->child_begin (),
620+ end = ar->child_end ();
621+ #else
622+ Archive::child_iterator child = ar->begin_children (),
623+ end = ar->end_children ();
624+ #endif
625+ for (; child != end; ++child) {
584626 StringRef sect_name;
585627 error_code err = child->getName (sect_name);
586628 if (err) continue ;
@@ -598,8 +640,15 @@ LLVMRustDestroyArchive(Archive *ar) {
598640 delete ar;
599641}
600642
643+ #if LLVM_VERSION_MINOR >= 5
601644extern " C" void
602645LLVMRustSetDLLExportStorageClass (LLVMValueRef Value) {
603646 GlobalValue *V = unwrap<GlobalValue>(Value);
604647 V->setDLLStorageClass (GlobalValue::DLLExportStorageClass);
605648}
649+ #else
650+ extern " C" void
651+ LLVMRustSetDLLExportStorageClass (LLVMValueRef Value) {
652+ LLVMSetLinkage (Value, LLVMDLLExportLinkage);
653+ }
654+ #endif
0 commit comments