From 730400167ad2ce88bb48af3f36f3443ea4493d50 Mon Sep 17 00:00:00 2001 From: Robin Kruppe Date: Thu, 24 Nov 2016 17:33:47 +0100 Subject: Support LLVM 4.0 in OptimizationDiagnostic FFI - getMsg() changed to return std::string by-value. Fix: copy the data to a rust String during unpacking. - getPassName() changed to return StringRef --- src/rustllvm/RustWrapper.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'src/rustllvm/RustWrapper.cpp') diff --git a/src/rustllvm/RustWrapper.cpp b/src/rustllvm/RustWrapper.cpp index b035e134e37..7cde282444d 100644 --- a/src/rustllvm/RustWrapper.cpp +++ b/src/rustllvm/RustWrapper.cpp @@ -871,16 +871,21 @@ LLVMRustUnpackOptimizationDiagnostic( const char **pass_name_out, LLVMValueRef *function_out, LLVMDebugLocRef *debugloc_out, - LLVMTwineRef *message_out) + RustStringRef message_out) { // Undefined to call this not on an optimization diagnostic! llvm::DiagnosticInfoOptimizationBase *opt = static_cast(unwrap(di)); +#if LLVM_VERSION_GE(4, 0) + *pass_name_out = opt->getPassName().data(); +#else *pass_name_out = opt->getPassName(); +#endif *function_out = wrap(&opt->getFunction()); *debugloc_out = wrap(&opt->getDebugLoc()); - *message_out = wrap(&opt->getMsg()); + raw_rust_string_ostream os(message_out); + os << opt->getMsg(); } extern "C" void -- cgit 1.4.1-3-g733a5