1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
use llvm_sys::comdat::{LLVMComdatSelectionKind, LLVMSetComdatSelectionKind, LLVMGetComdatSelectionKind};
use llvm_sys::prelude::LLVMComdatRef;
enum_rename!{
ComdatSelectionKind <=> LLVMComdatSelectionKind {
Any <=> LLVMAnyComdatSelectionKind,
ExactMatch <=> LLVMExactMatchComdatSelectionKind,
Largest <=> LLVMLargestComdatSelectionKind,
NoDuplicates <=> LLVMNoDuplicatesComdatSelectionKind,
SameSize <=> LLVMSameSizeComdatSelectionKind,
}
}
#[derive(Debug, PartialEq, Copy, Clone)]
pub struct Comdat(pub(crate) LLVMComdatRef);
impl Comdat {
pub(crate) fn new(comdat: LLVMComdatRef) -> Self {
debug_assert!(!comdat.is_null());
Comdat(comdat)
}
pub fn get_selection_kind(&self) -> ComdatSelectionKind {
let kind_ptr = unsafe {
LLVMGetComdatSelectionKind(self.0)
};
ComdatSelectionKind::new(kind_ptr)
}
pub fn set_selection_kind(&self, kind: ComdatSelectionKind) {
unsafe {
LLVMSetComdatSelectionKind(self.0, kind.as_llvm_enum())
}
}
}