PassManager *PM = unwrap<PassManager>(PMR);
std::string ErrorInfo;
+#if LLVM_VERSION_MINOR >= 4
raw_fd_ostream OS(path, ErrorInfo, sys::fs::F_None);
+#else
+ raw_fd_ostream OS(path, ErrorInfo, raw_fd_ostream::F_Binary);
+#endif
if (ErrorInfo != "") {
LLVMRustError = ErrorInfo.c_str();
return false;
const char* path) {
PassManager *PM = unwrap<PassManager>(PMR);
std::string ErrorInfo;
+
+#if LLVM_VERSION_MINOR >= 4
raw_fd_ostream OS(path, ErrorInfo, sys::fs::F_None);
+#else
+ raw_fd_ostream OS(path, ErrorInfo, raw_fd_ostream::F_Binary);
+#endif
+
formatted_raw_ostream FOS(OS);
+
+#if LLVM_VERSION_MINOR >= 5
PM->add(createPrintModulePass(FOS));
+#else
+ PM->add(createPrintModulePass(&FOS));
+#endif
+
PM->run(*unwrap(M));
}
AttributeSet::get(A->getContext(), AttributeSet::ReturnIndex, B));
}
+#if LLVM_VERSION_MINOR >= 5
extern "C" void LLVMAddColdAttribute(LLVMValueRef Fn) {
Function *A = unwrap<Function>(Fn);
A->addAttribute(AttributeSet::FunctionIndex, Attribute::Cold);
}
+#else
+extern "C" void LLVMAddColdAttribute(LLVMValueRef Fn) {}
+#endif
extern "C" LLVMValueRef LLVMBuildAtomicLoad(LLVMBuilderRef B,
LLVMValueRef source,
return DIT(ref ? unwrap<MDNode>(ref) : NULL);
}
+#if LLVM_VERSION_MINOR >= 5
extern "C" const uint32_t LLVMRustDebugMetadataVersion = DEBUG_METADATA_VERSION;
+#else
+extern "C" const uint32_t LLVMRustDebugMetadataVersion = 1;
+#endif
extern "C" void LLVMRustAddModuleFlag(LLVMModuleRef M,
const char *name,
unwrapDI<DIType>(DerivedFrom),
unwrapDI<DIArray>(Elements),
RunTimeLang,
- unwrapDI<DIType>(VTableHolder),
- UniqueId));
+ unwrapDI<DIType>(VTableHolder)
+#if LLVM_VERSION_MINOR >= 5
+ ,UniqueId));
+#else
+ ));
+#endif
}
extern "C" LLVMValueRef LLVMDIBuilderCreateMemberType(
AlignInBits,
Flags,
unwrapDI<DIArray>(Elements),
- RunTimeLang,
- UniqueId));
+ RunTimeLang
+#if LLVM_VERSION_MINOR >= 5
+ ,UniqueId));
+#else
+ ));
+#endif
}
extern "C" void LLVMSetUnnamedAddr(LLVMValueRef Value, LLVMBool Unnamed) {
return strdup(os.str().data());
}
+#if LLVM_VERSION_MINOR >= 5
extern "C" bool
LLVMRustLinkInExternalBitcode(LLVMModuleRef dst, char *bc, size_t len) {
Module *Dst = unwrap(dst);
}
return true;
}
+#else
+extern "C" bool
+LLVMRustLinkInExternalBitcode(LLVMModuleRef dst, char *bc, size_t len) {
+ Module *Dst = unwrap(dst);
+ MemoryBuffer* buf = MemoryBuffer::getMemBufferCopy(StringRef(bc, len));
+ std::string Err;
+ Module *Src = llvm::getLazyBitcodeModule(buf, Dst->getContext(), &Err);
+ if (!Src) {
+ LLVMRustError = Err.c_str();
+ delete buf;
+ return false;
+ }
+
+ if (Linker::LinkModules(Dst, Src, Linker::DestroySource, &Err)) {
+ LLVMRustError = Err.c_str();
+ return false;
+ }
+ return true;
+}
+#endif
extern "C" void*
LLVMRustOpenArchive(char *path) {
extern "C" const char*
LLVMRustArchiveReadSection(Archive *ar, char *name, size_t *size) {
- for (Archive::child_iterator child = ar->child_begin(),
- end = ar->child_end();
- child != end; ++child) {
+#if LLVM_VERSION_MINOR >= 5
+ Archive::child_iterator child = ar->child_begin(),
+ end = ar->child_end();
+#else
+ Archive::child_iterator child = ar->begin_children(),
+ end = ar->end_children();
+#endif
+ for (; child != end; ++child) {
StringRef sect_name;
error_code err = child->getName(sect_name);
if (err) continue;
delete ar;
}
+#if LLVM_VERSION_MINOR >= 5
extern "C" void
LLVMRustSetDLLExportStorageClass(LLVMValueRef Value) {
GlobalValue *V = unwrap<GlobalValue>(Value);
V->setDLLStorageClass(GlobalValue::DLLExportStorageClass);
}
+#else
+extern "C" void
+LLVMRustSetDLLExportStorageClass(LLVMValueRef Value) {
+ LLVMSetLinkage(Value, LLVMDLLExportLinkage);
+}
+#endif
#include "llvm/PassManager.h"
#include "llvm/IR/InlineAsm.h"
#include "llvm/IR/LLVMContext.h"
-#include "llvm/IR/IRPrintingPasses.h"
#include "llvm/Analysis/Passes.h"
#include "llvm/Analysis/Lint.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm-c/ExecutionEngine.h"
#include "llvm-c/Object.h"
+#if LLVM_VERSION_MINOR >= 5
+#include "llvm/IR/IRPrintingPasses.h"
+#else
+#include "llvm/Assembly/PrintModulePass.h"
+#endif
+
// Used by RustMCJITMemoryManager::getPointerToNamedFunction()
// to get around glibc issues. See the function for more information.
#ifdef __linux__