[LLVM 4.0] New bitcode headers and API
This commit is contained in:
parent
b462e8fa61
commit
d5f6125fb3
2 changed files with 23 additions and 2 deletions
|
@ -892,19 +892,34 @@ extern "C" void LLVMRustWriteValueToString(LLVMValueRef Value, RustStringRef str
|
|||
extern "C" bool
|
||||
LLVMRustLinkInExternalBitcode(LLVMModuleRef dst, char *bc, size_t len) {
|
||||
Module *Dst = unwrap(dst);
|
||||
|
||||
std::unique_ptr<MemoryBuffer> buf = MemoryBuffer::getMemBufferCopy(StringRef(bc, len));
|
||||
|
||||
#if LLVM_VERSION_GE(4, 0)
|
||||
Expected<std::unique_ptr<Module>> SrcOrError =
|
||||
llvm::getLazyBitcodeModule(buf->getMemBufferRef(), Dst->getContext());
|
||||
if (!SrcOrError) {
|
||||
LLVMRustSetLastError(toString(SrcOrError.takeError()).c_str());
|
||||
return false;
|
||||
}
|
||||
|
||||
auto Src = std::move(*SrcOrError);
|
||||
#else
|
||||
ErrorOr<std::unique_ptr<Module>> Src =
|
||||
llvm::getLazyBitcodeModule(std::move(buf), Dst->getContext());
|
||||
if (!Src) {
|
||||
LLVMRustSetLastError(Src.getError().message().c_str());
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
std::string Err;
|
||||
|
||||
raw_string_ostream Stream(Err);
|
||||
DiagnosticPrinterRawOStream DP(Stream);
|
||||
#if LLVM_VERSION_GE(3, 8)
|
||||
#if LLVM_VERSION_GE(4, 0)
|
||||
if (Linker::linkModules(*Dst, std::move(Src))) {
|
||||
#elif LLVM_VERSION_GE(3, 8)
|
||||
if (Linker::linkModules(*Dst, std::move(Src.get()))) {
|
||||
#else
|
||||
if (Linker::LinkModules(Dst, Src->get(), [&](const DiagnosticInfo &DI) { DI.print(DP); })) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue