pub use self::OptimizationDiagnosticKind::*;
pub use self::Diagnostic::*;
-use libc::c_char;
+use libc::{c_char, c_uint};
+use std::ptr;
use {ValueRef, TwineRef, DebugLocRef, DiagnosticInfoRef};
}
}
+#[allow(raw_pointer_derive)]
+#[derive(Copy)]
pub struct OptimizationDiagnostic {
pub kind: OptimizationDiagnosticKind,
pub pass_name: *const c_char,
pub message: TwineRef,
}
-impl Copy for OptimizationDiagnostic {}
-
impl OptimizationDiagnostic {
unsafe fn unpack(kind: OptimizationDiagnosticKind, di: DiagnosticInfoRef)
-> OptimizationDiagnostic {
let mut opt = OptimizationDiagnostic {
kind: kind,
- pass_name: 0 as *const c_char,
- function: 0 as ValueRef,
- debug_loc: 0 as DebugLocRef,
- message: 0 as TwineRef,
+ pass_name: ptr::null(),
+ function: ptr::null_mut(),
+ debug_loc: ptr::null_mut(),
+ message: ptr::null_mut(),
};
super::LLVMUnpackOptimizationDiagnostic(di,
}
}
+pub struct InlineAsmDiagnostic {
+ pub cookie: c_uint,
+ pub message: TwineRef,
+ pub instruction: ValueRef,
+}
+
+impl Copy for InlineAsmDiagnostic {}
+
+impl InlineAsmDiagnostic {
+ unsafe fn unpack(di: DiagnosticInfoRef)
+ -> InlineAsmDiagnostic {
+
+ let mut opt = InlineAsmDiagnostic {
+ cookie: 0,
+ message: ptr::null_mut(),
+ instruction: ptr::null_mut(),
+ };
+
+ super::LLVMUnpackInlineAsmDiagnostic(di,
+ &mut opt.cookie,
+ &mut opt.message,
+ &mut opt.instruction);
+
+ opt
+ }
+}
+
#[derive(Copy)]
pub enum Diagnostic {
Optimization(OptimizationDiagnostic),
+ InlineAsm(InlineAsmDiagnostic),
/// LLVM has other types that we do not wrap here.
UnknownDiagnostic(DiagnosticInfoRef),
let kind = super::LLVMGetDiagInfoKind(di);
match kind {
+ super::DK_InlineAsm
+ => InlineAsm(InlineAsmDiagnostic::unpack(di)),
+
super::DK_OptimizationRemark
=> Optimization(OptimizationDiagnostic::unpack(OptimizationRemark, di)),