diff options
| author | Keegan McAllister <kmcallister@mozilla.com> | 2014-09-12 08:17:58 -0700 |
|---|---|---|
| committer | Keegan McAllister <kmcallister@mozilla.com> | 2014-09-12 11:46:38 -0700 |
| commit | ad9a1daa819bbeb8e643a01167b3b69055b88d57 (patch) | |
| tree | 94cd15f43986278e477b85eb31ac3c60cebe8f3f /src/rustllvm/RustWrapper.cpp | |
| parent | 225353d8bbad5730c941fc88e854627004e74f2c (diff) | |
| download | rust-ad9a1daa819bbeb8e643a01167b3b69055b88d57.tar.gz rust-ad9a1daa819bbeb8e643a01167b3b69055b88d57.zip | |
Add -C remark for LLVM optimization remarks
Fixes #17116.
Diffstat (limited to 'src/rustllvm/RustWrapper.cpp')
| -rw-r--r-- | src/rustllvm/RustWrapper.cpp | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/src/rustllvm/RustWrapper.cpp b/src/rustllvm/RustWrapper.cpp index 5893b582cd8..7896ce2ba76 100644 --- a/src/rustllvm/RustWrapper.cpp +++ b/src/rustllvm/RustWrapper.cpp @@ -11,6 +11,8 @@ #include "rustllvm.h" #include "llvm/Object/Archive.h" #include "llvm/Object/ObjectFile.h" +#include "llvm/IR/DiagnosticInfo.h" +#include "llvm/IR/DiagnosticPrinter.h" #if LLVM_VERSION_MINOR >= 5 #include "llvm/IR/CallSite.h" @@ -823,3 +825,49 @@ extern "C" LLVMTypeRef LLVMRustArrayType(LLVMTypeRef ElementType, uint64_t ElementCount) { return wrap(ArrayType::get(unwrap(ElementType), ElementCount)); } + +DEFINE_SIMPLE_CONVERSION_FUNCTIONS(Twine, LLVMTwineRef) +DEFINE_SIMPLE_CONVERSION_FUNCTIONS(DebugLoc, LLVMDebugLocRef) + +extern "C" void +LLVMWriteTwineToString(LLVMTwineRef T, RustStringRef str) { + raw_rust_string_ostream os(str); + unwrap(T)->print(os); +} + +extern "C" void +LLVMUnpackOptimizationDiagnostic( + LLVMDiagnosticInfoRef di, + const char **pass_name_out, + LLVMValueRef *function_out, + LLVMDebugLocRef *debugloc_out, + LLVMTwineRef *message_out) +{ + // Undefined to call this not on an optimization diagnostic! + llvm::DiagnosticInfoOptimizationBase *opt + = static_cast<llvm::DiagnosticInfoOptimizationBase*>(unwrap(di)); + + *pass_name_out = opt->getPassName(); + *function_out = wrap(&opt->getFunction()); + *debugloc_out = wrap(&opt->getDebugLoc()); + *message_out = wrap(&opt->getMsg()); +} + +extern "C" void LLVMWriteDiagnosticInfoToString(LLVMDiagnosticInfoRef di, RustStringRef str) { + raw_rust_string_ostream os(str); + DiagnosticPrinterRawOStream dp(os); + unwrap(di)->print(dp); +} + +extern "C" int LLVMGetDiagInfoKind(LLVMDiagnosticInfoRef di) { + return unwrap(di)->getKind(); +} + +extern "C" void LLVMWriteDebugLocToString( + LLVMContextRef C, + LLVMDebugLocRef dl, + RustStringRef str) +{ + raw_rust_string_ostream os(str); + unwrap(dl)->print(*unwrap(C), os); +} |
