mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-26 00:34:06 +00:00
Auto merge of #34178 - shepmaster:llvm-3.7-and-up, r=alexcrichton
Reflect supporting only LLVM 3.7+ in the LLVM wrappers
Based on 12abddb06b
, it appears we can drop support for these older LLVM versions. Hopefully, this will make it slightly easier to support the changes needed for LLVM 3.9.
r? @nagisa
/cc @brson
This commit is contained in:
commit
68241f00ad
@ -11,10 +11,7 @@
|
||||
#include "rustllvm.h"
|
||||
|
||||
#include "llvm/Object/Archive.h"
|
||||
|
||||
#if LLVM_VERSION_MINOR >= 7
|
||||
#include "llvm/Object/ArchiveWriter.h"
|
||||
#endif
|
||||
|
||||
using namespace llvm;
|
||||
using namespace llvm::object;
|
||||
@ -34,13 +31,7 @@ struct LLVMRustArchiveMember {
|
||||
~LLVMRustArchiveMember() {}
|
||||
};
|
||||
|
||||
#if LLVM_VERSION_MINOR >= 6
|
||||
typedef OwningBinary<Archive> RustArchive;
|
||||
#define GET_ARCHIVE(a) ((a)->getBinary())
|
||||
#else
|
||||
typedef Archive RustArchive;
|
||||
#define GET_ARCHIVE(a) (a)
|
||||
#endif
|
||||
|
||||
extern "C" void*
|
||||
LLVMRustOpenArchive(char *path) {
|
||||
@ -52,7 +43,6 @@ LLVMRustOpenArchive(char *path) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
#if LLVM_VERSION_MINOR >= 6
|
||||
ErrorOr<std::unique_ptr<Archive>> archive_or =
|
||||
Archive::create(buf_or.get()->getMemBufferRef());
|
||||
|
||||
@ -63,14 +53,6 @@ LLVMRustOpenArchive(char *path) {
|
||||
|
||||
OwningBinary<Archive> *ret = new OwningBinary<Archive>(
|
||||
std::move(archive_or.get()), std::move(buf_or.get()));
|
||||
#else
|
||||
std::error_code err;
|
||||
Archive *ret = new Archive(std::move(buf_or.get()), err);
|
||||
if (err) {
|
||||
LLVMRustSetLastError(err.message().c_str());
|
||||
return nullptr;
|
||||
}
|
||||
#endif
|
||||
|
||||
return ret;
|
||||
}
|
||||
@ -87,7 +69,7 @@ struct RustArchiveIterator {
|
||||
|
||||
extern "C" RustArchiveIterator*
|
||||
LLVMRustArchiveIteratorNew(RustArchive *ra) {
|
||||
Archive *ar = GET_ARCHIVE(ra);
|
||||
Archive *ar = ra->getBinary();
|
||||
RustArchiveIterator *rai = new RustArchiveIterator();
|
||||
rai->cur = ar->child_begin();
|
||||
rai->end = ar->child_end();
|
||||
@ -137,16 +119,12 @@ LLVMRustArchiveChildName(const Archive::Child *child, size_t *size) {
|
||||
extern "C" const char*
|
||||
LLVMRustArchiveChildData(Archive::Child *child, size_t *size) {
|
||||
StringRef buf;
|
||||
#if LLVM_VERSION_MINOR >= 7
|
||||
ErrorOr<StringRef> buf_or_err = child->getBuffer();
|
||||
if (buf_or_err.getError()) {
|
||||
LLVMRustSetLastError(buf_or_err.getError().message().c_str());
|
||||
return NULL;
|
||||
}
|
||||
buf = buf_or_err.get();
|
||||
#else
|
||||
buf = child->getBuffer();
|
||||
#endif
|
||||
*size = buf.size();
|
||||
return buf.data();
|
||||
}
|
||||
@ -172,7 +150,6 @@ LLVMRustWriteArchive(char *Dst,
|
||||
const LLVMRustArchiveMember **NewMembers,
|
||||
bool WriteSymbtab,
|
||||
Archive::Kind Kind) {
|
||||
#if LLVM_VERSION_MINOR >= 7
|
||||
std::vector<NewArchiveIterator> Members;
|
||||
|
||||
for (size_t i = 0; i < NumMembers; i++) {
|
||||
@ -196,8 +173,5 @@ LLVMRustWriteArchive(char *Dst,
|
||||
if (!pair.second)
|
||||
return 0;
|
||||
LLVMRustSetLastError(pair.second.message().c_str());
|
||||
#else
|
||||
LLVMRustSetLastError("writing archives not supported with this LLVM version");
|
||||
#endif
|
||||
return -1;
|
||||
}
|
||||
|
@ -90,13 +90,8 @@ extern "C" LLVMExecutionEngineRef LLVMBuildExecutionEngine(LLVMModuleRef mod)
|
||||
RustJITMemoryManager *mm = new RustJITMemoryManager;
|
||||
|
||||
ExecutionEngine *ee =
|
||||
#if LLVM_VERSION_MINOR >= 6
|
||||
EngineBuilder(std::unique_ptr<Module>(unwrap(mod)))
|
||||
.setMCJITMemoryManager(std::unique_ptr<RustJITMemoryManager>(mm))
|
||||
#else
|
||||
EngineBuilder(unwrap(mod))
|
||||
.setMCJITMemoryManager(mm)
|
||||
#endif
|
||||
.setEngineKind(EngineKind::JIT)
|
||||
.setErrorStr(&error_str)
|
||||
.setTargetOptions(options)
|
||||
|
@ -15,12 +15,8 @@
|
||||
#include "llvm/Support/CBindingWrapping.h"
|
||||
#include "llvm/Support/FileSystem.h"
|
||||
#include "llvm/Support/Host.h"
|
||||
#if LLVM_VERSION_MINOR >= 7
|
||||
#include "llvm/Analysis/TargetLibraryInfo.h"
|
||||
#include "llvm/Analysis/TargetTransformInfo.h"
|
||||
#else
|
||||
#include "llvm/Target/TargetLibraryInfo.h"
|
||||
#endif
|
||||
#include "llvm/Target/TargetMachine.h"
|
||||
#include "llvm/Target/TargetSubtargetInfo.h"
|
||||
#include "llvm/Transforms/IPO/PassManagerBuilder.h"
|
||||
@ -49,7 +45,7 @@ LLVMInitializePasses() {
|
||||
initializeVectorization(Registry);
|
||||
initializeIPO(Registry);
|
||||
initializeAnalysis(Registry);
|
||||
#if LLVM_VERSION_MINOR <= 7
|
||||
#if LLVM_VERSION_MINOR == 7
|
||||
initializeIPA(Registry);
|
||||
#endif
|
||||
initializeTransformUtils(Registry);
|
||||
@ -223,17 +219,8 @@ LLVMRustAddAnalysisPasses(LLVMTargetMachineRef TM,
|
||||
LLVMPassManagerRef PMR,
|
||||
LLVMModuleRef M) {
|
||||
PassManagerBase *PM = unwrap(PMR);
|
||||
#if LLVM_VERSION_MINOR >= 7
|
||||
PM->add(createTargetTransformInfoWrapperPass(
|
||||
unwrap(TM)->getTargetIRAnalysis()));
|
||||
#else
|
||||
#if LLVM_VERSION_MINOR == 6
|
||||
PM->add(new DataLayoutPass());
|
||||
#else
|
||||
PM->add(new DataLayoutPass(unwrap(M)));
|
||||
#endif
|
||||
unwrap(TM)->addAnalysisPasses(*PM);
|
||||
#endif
|
||||
}
|
||||
|
||||
extern "C" void
|
||||
@ -242,10 +229,8 @@ LLVMRustConfigurePassManagerBuilder(LLVMPassManagerBuilderRef PMB,
|
||||
bool MergeFunctions,
|
||||
bool SLPVectorize,
|
||||
bool LoopVectorize) {
|
||||
#if LLVM_VERSION_MINOR >= 6
|
||||
// Ignore mergefunc for now as enabling it causes crashes.
|
||||
//unwrap(PMB)->MergeFunctions = MergeFunctions;
|
||||
#endif
|
||||
unwrap(PMB)->SLPVectorize = SLPVectorize;
|
||||
unwrap(PMB)->OptLevel = OptLevel;
|
||||
unwrap(PMB)->LoopVectorize = LoopVectorize;
|
||||
@ -258,11 +243,7 @@ LLVMRustAddBuilderLibraryInfo(LLVMPassManagerBuilderRef PMB,
|
||||
LLVMModuleRef M,
|
||||
bool DisableSimplifyLibCalls) {
|
||||
Triple TargetTriple(unwrap(M)->getTargetTriple());
|
||||
#if LLVM_VERSION_MINOR >= 7
|
||||
TargetLibraryInfoImpl *TLI = new TargetLibraryInfoImpl(TargetTriple);
|
||||
#else
|
||||
TargetLibraryInfo *TLI = new TargetLibraryInfo(TargetTriple);
|
||||
#endif
|
||||
if (DisableSimplifyLibCalls)
|
||||
TLI->disableAllFunctions();
|
||||
unwrap(PMB)->LibraryInfo = TLI;
|
||||
@ -275,17 +256,10 @@ LLVMRustAddLibraryInfo(LLVMPassManagerRef PMB,
|
||||
LLVMModuleRef M,
|
||||
bool DisableSimplifyLibCalls) {
|
||||
Triple TargetTriple(unwrap(M)->getTargetTriple());
|
||||
#if LLVM_VERSION_MINOR >= 7
|
||||
TargetLibraryInfoImpl TLII(TargetTriple);
|
||||
if (DisableSimplifyLibCalls)
|
||||
TLII.disableAllFunctions();
|
||||
unwrap(PMB)->add(new TargetLibraryInfoWrapperPass(TLII));
|
||||
#else
|
||||
TargetLibraryInfo *TLI = new TargetLibraryInfo(TargetTriple);
|
||||
if (DisableSimplifyLibCalls)
|
||||
TLI->disableAllFunctions();
|
||||
unwrap(PMB)->add(TLI);
|
||||
#endif
|
||||
}
|
||||
|
||||
// Unfortunately, the LLVM C API doesn't provide an easy way of iterating over
|
||||
@ -323,25 +297,16 @@ LLVMRustWriteOutputFile(LLVMTargetMachineRef Target,
|
||||
PassManager *PM = unwrap<PassManager>(PMR);
|
||||
|
||||
std::string ErrorInfo;
|
||||
#if LLVM_VERSION_MINOR >= 6
|
||||
std::error_code EC;
|
||||
raw_fd_ostream OS(path, EC, sys::fs::F_None);
|
||||
if (EC)
|
||||
ErrorInfo = EC.message();
|
||||
#else
|
||||
raw_fd_ostream OS(path, ErrorInfo, sys::fs::F_None);
|
||||
#endif
|
||||
if (ErrorInfo != "") {
|
||||
LLVMRustSetLastError(ErrorInfo.c_str());
|
||||
return false;
|
||||
}
|
||||
|
||||
#if LLVM_VERSION_MINOR >= 7
|
||||
unwrap(Target)->addPassesToEmitFile(*PM, OS, FileType, false);
|
||||
#else
|
||||
formatted_raw_ostream FOS(OS);
|
||||
unwrap(Target)->addPassesToEmitFile(*PM, FOS, FileType, false);
|
||||
#endif
|
||||
PM->run(*unwrap(M));
|
||||
|
||||
// Apparently `addPassesToEmitFile` adds a pointer to our on-the-stack output
|
||||
@ -358,14 +323,10 @@ LLVMRustPrintModule(LLVMPassManagerRef PMR,
|
||||
PassManager *PM = unwrap<PassManager>(PMR);
|
||||
std::string ErrorInfo;
|
||||
|
||||
#if LLVM_VERSION_MINOR >= 6
|
||||
std::error_code EC;
|
||||
raw_fd_ostream OS(path, EC, sys::fs::F_None);
|
||||
if (EC)
|
||||
ErrorInfo = EC.message();
|
||||
#else
|
||||
raw_fd_ostream OS(path, ErrorInfo, sys::fs::F_None);
|
||||
#endif
|
||||
|
||||
formatted_raw_ostream FOS(OS);
|
||||
|
||||
@ -428,22 +389,10 @@ extern "C" void
|
||||
LLVMRustSetDataLayoutFromTargetMachine(LLVMModuleRef Module,
|
||||
LLVMTargetMachineRef TMR) {
|
||||
TargetMachine *Target = unwrap(TMR);
|
||||
#if LLVM_VERSION_MINOR >= 7
|
||||
unwrap(Module)->setDataLayout(Target->createDataLayout());
|
||||
#elif LLVM_VERSION_MINOR >= 6
|
||||
if (const DataLayout *DL = Target->getSubtargetImpl()->getDataLayout())
|
||||
unwrap(Module)->setDataLayout(DL);
|
||||
#else
|
||||
if (const DataLayout *DL = Target->getDataLayout())
|
||||
unwrap(Module)->setDataLayout(DL);
|
||||
#endif
|
||||
}
|
||||
|
||||
extern "C" LLVMTargetDataRef
|
||||
LLVMRustGetModuleDataLayout(LLVMModuleRef M) {
|
||||
#if LLVM_VERSION_MINOR >= 7
|
||||
return wrap(&unwrap(M)->getDataLayout());
|
||||
#else
|
||||
return wrap(unwrap(M)->getDataLayout());
|
||||
#endif
|
||||
}
|
||||
|
@ -243,7 +243,6 @@ extern "C" LLVMValueRef LLVMInlineAsm(LLVMTypeRef Ty,
|
||||
|
||||
typedef DIBuilder* DIBuilderRef;
|
||||
|
||||
#if LLVM_VERSION_MINOR >= 6
|
||||
typedef struct LLVMOpaqueMetadata *LLVMMetadataRef;
|
||||
|
||||
namespace llvm {
|
||||
@ -253,29 +252,15 @@ inline Metadata **unwrap(LLVMMetadataRef *Vals) {
|
||||
return reinterpret_cast<Metadata**>(Vals);
|
||||
}
|
||||
}
|
||||
#else
|
||||
typedef LLVMValueRef LLVMMetadataRef;
|
||||
#endif
|
||||
|
||||
template<typename DIT>
|
||||
DIT* unwrapDIptr(LLVMMetadataRef ref) {
|
||||
return (DIT*) (ref ? unwrap<MDNode>(ref) : NULL);
|
||||
}
|
||||
|
||||
#if LLVM_VERSION_MINOR <= 6
|
||||
template<typename DIT>
|
||||
DIT unwrapDI(LLVMMetadataRef ref) {
|
||||
return DIT(ref ? unwrap<MDNode>(ref) : NULL);
|
||||
}
|
||||
#else
|
||||
#define DIDescriptor DIScope
|
||||
#define DIArray DINodeArray
|
||||
#define unwrapDI unwrapDIptr
|
||||
#endif
|
||||
|
||||
#if LLVM_VERSION_MINOR <= 5
|
||||
#define DISubroutineType DICompositeType
|
||||
#endif
|
||||
|
||||
extern "C" uint32_t LLVMRustDebugMetadataVersion() {
|
||||
return DEBUG_METADATA_VERSION;
|
||||
@ -339,16 +324,10 @@ extern "C" LLVMMetadataRef LLVMDIBuilderCreateSubroutineType(
|
||||
LLVMMetadataRef File,
|
||||
LLVMMetadataRef ParameterTypes) {
|
||||
return wrap(Builder->createSubroutineType(
|
||||
#if LLVM_VERSION_MINOR <= 7
|
||||
#if LLVM_VERSION_MINOR == 7
|
||||
unwrapDI<DIFile>(File),
|
||||
#endif
|
||||
#if LLVM_VERSION_MINOR >= 7
|
||||
DITypeRefArray(unwrap<MDTuple>(ParameterTypes))));
|
||||
#elif LLVM_VERSION_MINOR >= 6
|
||||
unwrapDI<DITypeArray>(ParameterTypes)));
|
||||
#else
|
||||
unwrapDI<DIArray>(ParameterTypes)));
|
||||
#endif
|
||||
}
|
||||
|
||||
extern "C" LLVMMetadataRef LLVMDIBuilderCreateFunction(
|
||||
@ -435,11 +414,7 @@ extern "C" LLVMMetadataRef LLVMDIBuilderCreateStructType(
|
||||
AlignInBits,
|
||||
Flags,
|
||||
unwrapDI<DIType>(DerivedFrom),
|
||||
#if LLVM_VERSION_MINOR >= 7
|
||||
DINodeArray(unwrapDI<MDTuple>(Elements)),
|
||||
#else
|
||||
unwrapDI<DIArray>(Elements),
|
||||
#endif
|
||||
RunTimeLang,
|
||||
unwrapDI<DIType>(VTableHolder),
|
||||
UniqueId
|
||||
@ -473,9 +448,6 @@ extern "C" LLVMMetadataRef LLVMDIBuilderCreateLexicalBlock(
|
||||
return wrap(Builder->createLexicalBlock(
|
||||
unwrapDI<DIDescriptor>(Scope),
|
||||
unwrapDI<DIFile>(File), Line, Col
|
||||
#if LLVM_VERSION_MINOR == 5
|
||||
, 0
|
||||
#endif
|
||||
));
|
||||
}
|
||||
|
||||
@ -490,11 +462,7 @@ extern "C" LLVMMetadataRef LLVMDIBuilderCreateStaticVariable(
|
||||
bool isLocalToUnit,
|
||||
LLVMValueRef Val,
|
||||
LLVMMetadataRef Decl = NULL) {
|
||||
#if LLVM_VERSION_MINOR >= 6
|
||||
return wrap(Builder->createGlobalVariable(unwrapDI<DIDescriptor>(Context),
|
||||
#else
|
||||
return wrap(Builder->createStaticVariable(unwrapDI<DIDescriptor>(Context),
|
||||
#endif
|
||||
Name,
|
||||
LinkageName,
|
||||
unwrapDI<DIFile>(File),
|
||||
@ -518,25 +486,6 @@ extern "C" LLVMMetadataRef LLVMDIBuilderCreateVariable(
|
||||
int64_t* AddrOps,
|
||||
unsigned AddrOpsCount,
|
||||
unsigned ArgNo) {
|
||||
#if LLVM_VERSION_MINOR == 5
|
||||
if (AddrOpsCount > 0) {
|
||||
SmallVector<llvm::Value *, 16> addr_ops;
|
||||
llvm::Type *Int64Ty = Type::getInt64Ty(unwrap<MDNode>(Scope)->getContext());
|
||||
for (unsigned i = 0; i < AddrOpsCount; ++i)
|
||||
addr_ops.push_back(ConstantInt::get(Int64Ty, AddrOps[i]));
|
||||
|
||||
return wrap(Builder->createComplexVariable(
|
||||
Tag,
|
||||
unwrapDI<DIDescriptor>(Scope),
|
||||
Name,
|
||||
unwrapDI<DIFile>(File),
|
||||
LineNo,
|
||||
unwrapDI<DIType>(Ty),
|
||||
addr_ops,
|
||||
ArgNo
|
||||
));
|
||||
}
|
||||
#endif
|
||||
#if LLVM_VERSION_MINOR >= 8
|
||||
if (Tag == 0x100) { // DW_TAG_auto_variable
|
||||
return wrap(Builder->createAutoVariable(
|
||||
@ -568,11 +517,7 @@ extern "C" LLVMMetadataRef LLVMDIBuilderCreateArrayType(
|
||||
LLVMMetadataRef Subscripts) {
|
||||
return wrap(Builder->createArrayType(Size, AlignInBits,
|
||||
unwrapDI<DIType>(Ty),
|
||||
#if LLVM_VERSION_MINOR >= 7
|
||||
DINodeArray(unwrapDI<MDTuple>(Subscripts))
|
||||
#else
|
||||
unwrapDI<DIArray>(Subscripts)
|
||||
#endif
|
||||
));
|
||||
}
|
||||
|
||||
@ -584,11 +529,7 @@ extern "C" LLVMMetadataRef LLVMDIBuilderCreateVectorType(
|
||||
LLVMMetadataRef Subscripts) {
|
||||
return wrap(Builder->createVectorType(Size, AlignInBits,
|
||||
unwrapDI<DIType>(Ty),
|
||||
#if LLVM_VERSION_MINOR >= 7
|
||||
DINodeArray(unwrapDI<MDTuple>(Subscripts))
|
||||
#else
|
||||
unwrapDI<DIArray>(Subscripts)
|
||||
#endif
|
||||
));
|
||||
}
|
||||
|
||||
@ -603,18 +544,9 @@ extern "C" LLVMMetadataRef LLVMDIBuilderGetOrCreateArray(
|
||||
DIBuilderRef Builder,
|
||||
LLVMMetadataRef* Ptr,
|
||||
unsigned Count) {
|
||||
#if LLVM_VERSION_MINOR >= 7
|
||||
Metadata **DataValue = unwrap(Ptr);
|
||||
return wrap(Builder->getOrCreateArray(
|
||||
ArrayRef<Metadata*>(DataValue, Count)).get());
|
||||
#else
|
||||
return wrap(Builder->getOrCreateArray(
|
||||
#if LLVM_VERSION_MINOR >= 6
|
||||
ArrayRef<Metadata*>(unwrap(Ptr), Count)));
|
||||
#else
|
||||
ArrayRef<Value*>(reinterpret_cast<Value**>(Ptr), Count)));
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
extern "C" LLVMValueRef LLVMDIBuilderInsertDeclareAtEnd(
|
||||
@ -627,18 +559,10 @@ extern "C" LLVMValueRef LLVMDIBuilderInsertDeclareAtEnd(
|
||||
LLVMBasicBlockRef InsertAtEnd) {
|
||||
return wrap(Builder->insertDeclare(
|
||||
unwrap(Val),
|
||||
#if LLVM_VERSION_MINOR >= 7
|
||||
unwrap<DILocalVariable>(VarInfo),
|
||||
#else
|
||||
unwrapDI<DIVariable>(VarInfo),
|
||||
#endif
|
||||
#if LLVM_VERSION_MINOR >= 6
|
||||
Builder->createExpression(
|
||||
llvm::ArrayRef<int64_t>(AddrOps, AddrOpsCount)),
|
||||
#endif
|
||||
#if LLVM_VERSION_MINOR >= 7
|
||||
DebugLoc(cast<MDNode>(unwrap<MetadataAsValue>(DL)->getMetadata())),
|
||||
#endif
|
||||
unwrap(InsertAtEnd)));
|
||||
}
|
||||
|
||||
@ -650,22 +574,12 @@ extern "C" LLVMValueRef LLVMDIBuilderInsertDeclareBefore(
|
||||
unsigned AddrOpsCount,
|
||||
LLVMValueRef DL,
|
||||
LLVMValueRef InsertBefore) {
|
||||
#if LLVM_VERSION_MINOR >= 6
|
||||
#endif
|
||||
return wrap(Builder->insertDeclare(
|
||||
unwrap(Val),
|
||||
#if LLVM_VERSION_MINOR >= 7
|
||||
unwrap<DILocalVariable>(VarInfo),
|
||||
#else
|
||||
unwrapDI<DIVariable>(VarInfo),
|
||||
#endif
|
||||
#if LLVM_VERSION_MINOR >= 6
|
||||
Builder->createExpression(
|
||||
llvm::ArrayRef<int64_t>(AddrOps, AddrOpsCount)),
|
||||
#endif
|
||||
#if LLVM_VERSION_MINOR >= 7
|
||||
DebugLoc(cast<MDNode>(unwrap<MetadataAsValue>(DL)->getMetadata())),
|
||||
#endif
|
||||
unwrap<Instruction>(InsertBefore)));
|
||||
}
|
||||
|
||||
@ -695,11 +609,7 @@ extern "C" LLVMMetadataRef LLVMDIBuilderCreateEnumerationType(
|
||||
LineNumber,
|
||||
SizeInBits,
|
||||
AlignInBits,
|
||||
#if LLVM_VERSION_MINOR >= 7
|
||||
DINodeArray(unwrapDI<MDTuple>(Elements)),
|
||||
#else
|
||||
unwrapDI<DIArray>(Elements),
|
||||
#endif
|
||||
unwrapDI<DIType>(ClassType)));
|
||||
}
|
||||
|
||||
@ -724,11 +634,7 @@ extern "C" LLVMMetadataRef LLVMDIBuilderCreateUnionType(
|
||||
SizeInBits,
|
||||
AlignInBits,
|
||||
Flags,
|
||||
#if LLVM_VERSION_MINOR >= 7
|
||||
DINodeArray(unwrapDI<MDTuple>(Elements)),
|
||||
#else
|
||||
unwrapDI<DIArray>(Elements),
|
||||
#endif
|
||||
RunTimeLang,
|
||||
UniqueId
|
||||
));
|
||||
@ -747,12 +653,6 @@ extern "C" LLVMMetadataRef LLVMDIBuilderCreateTemplateTypeParameter(
|
||||
unwrapDI<DIDescriptor>(Scope),
|
||||
Name,
|
||||
unwrapDI<DIType>(Ty)
|
||||
#if LLVM_VERSION_MINOR <= 6
|
||||
,
|
||||
unwrapDI<MDNode*>(File),
|
||||
LineNo,
|
||||
ColumnNo
|
||||
#endif
|
||||
));
|
||||
}
|
||||
|
||||
@ -785,15 +685,8 @@ extern "C" void LLVMDICompositeTypeSetTypeArray(
|
||||
LLVMMetadataRef CompositeType,
|
||||
LLVMMetadataRef TypeArray)
|
||||
{
|
||||
#if LLVM_VERSION_MINOR >= 7
|
||||
DICompositeType *tmp = unwrapDI<DICompositeType>(CompositeType);
|
||||
Builder->replaceArrays(tmp, DINodeArray(unwrap<MDTuple>(TypeArray)));
|
||||
#elif LLVM_VERSION_MINOR >= 6
|
||||
DICompositeType tmp = unwrapDI<DICompositeType>(CompositeType);
|
||||
Builder->replaceArrays(tmp, unwrapDI<DIArray>(TypeArray));
|
||||
#else
|
||||
unwrapDI<DICompositeType>(CompositeType).setTypeArray(unwrapDI<DIArray>(TypeArray));
|
||||
#endif
|
||||
}
|
||||
|
||||
extern "C" LLVMValueRef LLVMDIBuilderCreateDebugLocation(
|
||||
@ -810,15 +703,7 @@ extern "C" LLVMValueRef LLVMDIBuilderCreateDebugLocation(
|
||||
unwrapDIptr<MDNode>(Scope),
|
||||
unwrapDIptr<MDNode>(InlinedAt));
|
||||
|
||||
#if LLVM_VERSION_MINOR >= 6
|
||||
return wrap(MetadataAsValue::get(context, debug_loc.getAsMDNode(
|
||||
#if LLVM_VERSION_MINOR <= 6
|
||||
context
|
||||
#endif
|
||||
)));
|
||||
#else
|
||||
return wrap(debug_loc.getAsMDNode(context));
|
||||
#endif
|
||||
return wrap(MetadataAsValue::get(context, debug_loc.getAsMDNode()));
|
||||
}
|
||||
|
||||
extern "C" void LLVMWriteTypeToString(LLVMTypeRef Type, RustStringRef str) {
|
||||
@ -838,40 +723,22 @@ extern "C" void LLVMWriteValueToString(LLVMValueRef Value, RustStringRef str) {
|
||||
extern "C" bool
|
||||
LLVMRustLinkInExternalBitcode(LLVMModuleRef dst, char *bc, size_t len) {
|
||||
Module *Dst = unwrap(dst);
|
||||
#if LLVM_VERSION_MINOR >= 6
|
||||
std::unique_ptr<MemoryBuffer> buf = MemoryBuffer::getMemBufferCopy(StringRef(bc, len));
|
||||
#if LLVM_VERSION_MINOR >= 7
|
||||
ErrorOr<std::unique_ptr<Module>> Src =
|
||||
llvm::getLazyBitcodeModule(std::move(buf), Dst->getContext());
|
||||
#else
|
||||
ErrorOr<Module *> Src = llvm::getLazyBitcodeModule(std::move(buf), Dst->getContext());
|
||||
#endif
|
||||
#else
|
||||
MemoryBuffer* buf = MemoryBuffer::getMemBufferCopy(StringRef(bc, len));
|
||||
ErrorOr<Module *> Src = llvm::getLazyBitcodeModule(buf, Dst->getContext());
|
||||
#endif
|
||||
if (!Src) {
|
||||
LLVMRustSetLastError(Src.getError().message().c_str());
|
||||
#if LLVM_VERSION_MINOR == 5
|
||||
delete buf;
|
||||
#endif
|
||||
return false;
|
||||
}
|
||||
|
||||
std::string Err;
|
||||
|
||||
#if LLVM_VERSION_MINOR >= 6
|
||||
raw_string_ostream Stream(Err);
|
||||
DiagnosticPrinterRawOStream DP(Stream);
|
||||
#if LLVM_VERSION_MINOR >= 8
|
||||
if (Linker::linkModules(*Dst, std::move(Src.get()))) {
|
||||
#elif LLVM_VERSION_MINOR >= 7
|
||||
#else
|
||||
if (Linker::LinkModules(Dst, Src->get(), [&](const DiagnosticInfo &DI) { DI.print(DP); })) {
|
||||
#else
|
||||
if (Linker::LinkModules(Dst, *Src, [&](const DiagnosticInfo &DI) { DI.print(DP); })) {
|
||||
#endif
|
||||
#else
|
||||
if (Linker::LinkModules(Dst, *Src, Linker::DestroySource, &Err)) {
|
||||
#endif
|
||||
LLVMRustSetLastError(Err.c_str());
|
||||
return false;
|
||||
@ -975,11 +842,7 @@ extern "C" void LLVMWriteDebugLocToString(
|
||||
RustStringRef str)
|
||||
{
|
||||
raw_rust_string_ostream os(str);
|
||||
#if LLVM_VERSION_MINOR >= 7
|
||||
unwrap(dl)->print(os);
|
||||
#else
|
||||
unwrap(dl)->print(*unwrap(C), os);
|
||||
#endif
|
||||
}
|
||||
|
||||
DEFINE_SIMPLE_CONVERSION_FUNCTIONS(SMDiagnostic, LLVMSMDiagnosticRef)
|
||||
|
Loading…
Reference in New Issue
Block a user