1#![allow(non_camel_case_types)]
14
15use std::fmt::{self, Debug};
16use std::marker::PhantomData;
17use std::num::NonZero;
18use std::ptr;
19
20use bitflags::bitflags;
21use libc::{c_char, c_int, c_uchar, c_uint, c_ulonglong, c_void, size_t};
22
23use super::RustString;
24use super::debuginfo::{
25 DIArray, DIBuilder, DIDerivedType, DIDescriptor, DIFile, DIFlags, DILocation, DISPFlags,
26 DIScope, DISubprogram, DITemplateTypeParameter, DIType, DebugEmissionKind, DebugNameTableKind,
27};
28use crate::llvm::MetadataKindId;
29use crate::{TryFromU32, llvm};
30
31#[derive(#[automatically_derived]
impl ::core::clone::Clone for Bool {
#[inline]
fn clone(&self) -> Bool {
let _: ::core::clone::AssertParamIsClone<c_int>;
*self
}
}Clone, #[automatically_derived]
impl ::core::marker::Copy for Bool { }Copy)]
37#[repr(transparent)]
38pub(crate) struct Bool {
39 value: c_int,
40}
41
42pub(crate) const TRUE: Bool = Bool::TRUE;
43pub(crate) const FALSE: Bool = Bool::FALSE;
44
45impl Bool {
46 pub(crate) const TRUE: Self = Self { value: 1 };
47 pub(crate) const FALSE: Self = Self { value: 0 };
48
49 pub(crate) const fn from_bool(rust_bool: bool) -> Self {
50 if rust_bool { Self::TRUE } else { Self::FALSE }
51 }
52
53 pub(crate) fn is_true(self) -> bool {
55 self.value != Self::FALSE.value
58 }
59}
60
61impl Debug for Bool {
62 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
63 match self.value {
64 0 => f.write_str("FALSE"),
65 1 => f.write_str("TRUE"),
66 v => f.write_fmt(format_args!("TRUE ({0})", v))write!(f, "TRUE ({v})"),
68 }
69 }
70}
71
72pub(crate) trait ToLlvmBool: Copy {
77 fn to_llvm_bool(self) -> llvm::Bool;
78}
79
80impl ToLlvmBool for bool {
81 #[inline(always)]
82 fn to_llvm_bool(self) -> llvm::Bool {
83 llvm::Bool::from_bool(self)
84 }
85}
86
87#[repr(transparent)]
94pub(crate) struct RawEnum<T> {
95 value: u32,
96 _rust_side_type: PhantomData<fn() -> T>,
98}
99
100impl<T: TryFrom<u32>> RawEnum<T> {
101 #[track_caller]
102 pub(crate) fn to_rust(self) -> T
103 where
104 T::Error: Debug,
105 {
106 T::try_from(self.value).expect("enum value returned by LLVM should be known")
108 }
109}
110
111#[derive(#[automatically_derived]
#[allow(dead_code)]
impl ::core::marker::Copy for LLVMRustResult { }Copy, #[automatically_derived]
#[allow(dead_code)]
impl ::core::clone::Clone for LLVMRustResult {
#[inline]
fn clone(&self) -> LLVMRustResult { *self }
}Clone, #[automatically_derived]
#[allow(dead_code)]
impl ::core::cmp::PartialEq for LLVMRustResult {
#[inline]
fn eq(&self, other: &LLVMRustResult) -> bool {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
__self_discr == __arg1_discr
}
}PartialEq)]
112#[repr(C)]
113#[allow(dead_code)] pub(crate) enum LLVMRustResult {
115 Success,
116 Failure,
117}
118
119#[derive(#[automatically_derived]
impl ::core::marker::Copy for ModuleFlagMergeBehavior { }Copy, #[automatically_derived]
impl ::core::clone::Clone for ModuleFlagMergeBehavior {
#[inline]
fn clone(&self) -> ModuleFlagMergeBehavior { *self }
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for ModuleFlagMergeBehavior {
#[inline]
fn eq(&self, other: &ModuleFlagMergeBehavior) -> bool {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
__self_discr == __arg1_discr
}
}PartialEq)]
132#[repr(C)]
133pub(crate) enum ModuleFlagMergeBehavior {
134 Error = 1,
135 Warning = 2,
136 Require = 3,
137 Override = 4,
138 Append = 5,
139 AppendUnique = 6,
140 Max = 7,
141 Min = 8,
142}
143
144#[derive(#[automatically_derived]
#[allow(dead_code)]
impl ::core::marker::Copy for TailCallKind { }Copy, #[automatically_derived]
#[allow(dead_code)]
impl ::core::clone::Clone for TailCallKind {
#[inline]
fn clone(&self) -> TailCallKind { *self }
}Clone, #[automatically_derived]
#[allow(dead_code)]
impl ::core::cmp::PartialEq for TailCallKind {
#[inline]
fn eq(&self, other: &TailCallKind) -> bool {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
__self_discr == __arg1_discr
}
}PartialEq, #[automatically_derived]
#[allow(dead_code)]
impl ::core::fmt::Debug for TailCallKind {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::write_str(f,
match self {
TailCallKind::None => "None",
TailCallKind::Tail => "Tail",
TailCallKind::MustTail => "MustTail",
TailCallKind::NoTail => "NoTail",
})
}
}Debug)]
148#[repr(C)]
149#[allow(dead_code)]
150pub(crate) enum TailCallKind {
151 None = 0,
152 Tail = 1,
153 MustTail = 2,
154 NoTail = 3,
155}
156
157#[derive(#[automatically_derived]
impl ::core::marker::Copy for CallConv { }Copy, #[automatically_derived]
impl ::core::clone::Clone for CallConv {
#[inline]
fn clone(&self) -> CallConv { *self }
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for CallConv {
#[inline]
fn eq(&self, other: &CallConv) -> bool {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
__self_discr == __arg1_discr
}
}PartialEq, #[automatically_derived]
impl ::core::fmt::Debug for CallConv {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::write_str(f,
match self {
CallConv::CCallConv => "CCallConv",
CallConv::FastCallConv => "FastCallConv",
CallConv::ColdCallConv => "ColdCallConv",
CallConv::PreserveMost => "PreserveMost",
CallConv::PreserveAll => "PreserveAll",
CallConv::SwiftCallConv => "SwiftCallConv",
CallConv::Tail => "Tail",
CallConv::PreserveNone => "PreserveNone",
CallConv::X86StdcallCallConv => "X86StdcallCallConv",
CallConv::X86FastcallCallConv => "X86FastcallCallConv",
CallConv::ArmAapcsCallConv => "ArmAapcsCallConv",
CallConv::Msp430Intr => "Msp430Intr",
CallConv::X86_ThisCall => "X86_ThisCall",
CallConv::PtxKernel => "PtxKernel",
CallConv::X86_64_SysV => "X86_64_SysV",
CallConv::X86_64_Win64 => "X86_64_Win64",
CallConv::X86_VectorCall => "X86_VectorCall",
CallConv::X86_Intr => "X86_Intr",
CallConv::AvrNonBlockingInterrupt =>
"AvrNonBlockingInterrupt",
CallConv::AvrInterrupt => "AvrInterrupt",
CallConv::AmdgpuKernel => "AmdgpuKernel",
})
}
}Debug, impl ::core::convert::TryFrom<u32> for CallConv {
type Error = u32;
#[allow(deprecated)]
fn try_from(value: u32) -> ::core::result::Result<CallConv, Self::Error> {
if value == const { CallConv::CCallConv as u32 } {
return Ok(CallConv::CCallConv)
}
if value == const { CallConv::FastCallConv as u32 } {
return Ok(CallConv::FastCallConv)
}
if value == const { CallConv::ColdCallConv as u32 } {
return Ok(CallConv::ColdCallConv)
}
if value == const { CallConv::PreserveMost as u32 } {
return Ok(CallConv::PreserveMost)
}
if value == const { CallConv::PreserveAll as u32 } {
return Ok(CallConv::PreserveAll)
}
if value == const { CallConv::SwiftCallConv as u32 } {
return Ok(CallConv::SwiftCallConv)
}
if value == const { CallConv::Tail as u32 } {
return Ok(CallConv::Tail)
}
if value == const { CallConv::PreserveNone as u32 } {
return Ok(CallConv::PreserveNone)
}
if value == const { CallConv::X86StdcallCallConv as u32 } {
return Ok(CallConv::X86StdcallCallConv)
}
if value == const { CallConv::X86FastcallCallConv as u32 } {
return Ok(CallConv::X86FastcallCallConv)
}
if value == const { CallConv::ArmAapcsCallConv as u32 } {
return Ok(CallConv::ArmAapcsCallConv)
}
if value == const { CallConv::Msp430Intr as u32 } {
return Ok(CallConv::Msp430Intr)
}
if value == const { CallConv::X86_ThisCall as u32 } {
return Ok(CallConv::X86_ThisCall)
}
if value == const { CallConv::PtxKernel as u32 } {
return Ok(CallConv::PtxKernel)
}
if value == const { CallConv::X86_64_SysV as u32 } {
return Ok(CallConv::X86_64_SysV)
}
if value == const { CallConv::X86_64_Win64 as u32 } {
return Ok(CallConv::X86_64_Win64)
}
if value == const { CallConv::X86_VectorCall as u32 } {
return Ok(CallConv::X86_VectorCall)
}
if value == const { CallConv::X86_Intr as u32 } {
return Ok(CallConv::X86_Intr)
}
if value == const { CallConv::AvrNonBlockingInterrupt as u32 } {
return Ok(CallConv::AvrNonBlockingInterrupt)
}
if value == const { CallConv::AvrInterrupt as u32 } {
return Ok(CallConv::AvrInterrupt)
}
if value == const { CallConv::AmdgpuKernel as u32 } {
return Ok(CallConv::AmdgpuKernel)
}
Err(value)
}
}TryFromU32)]
161#[repr(C)]
162pub(crate) enum CallConv {
163 CCallConv = 0,
164 FastCallConv = 8,
165 ColdCallConv = 9,
166 PreserveMost = 14,
167 PreserveAll = 15,
168 SwiftCallConv = 16,
169 Tail = 18,
170 PreserveNone = 21,
171 X86StdcallCallConv = 64,
172 X86FastcallCallConv = 65,
173 ArmAapcsCallConv = 67,
174 Msp430Intr = 69,
175 X86_ThisCall = 70,
176 PtxKernel = 71,
177 X86_64_SysV = 78,
178 X86_64_Win64 = 79,
179 X86_VectorCall = 80,
180 X86_Intr = 83,
181 AvrNonBlockingInterrupt = 84,
182 AvrInterrupt = 85,
183 AmdgpuKernel = 91,
184}
185
186#[derive(#[automatically_derived]
impl ::core::marker::Copy for Linkage { }Copy, #[automatically_derived]
impl ::core::clone::Clone for Linkage {
#[inline]
fn clone(&self) -> Linkage { *self }
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for Linkage {
#[inline]
fn eq(&self, other: &Linkage) -> bool {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
__self_discr == __arg1_discr
}
}PartialEq, impl ::core::convert::TryFrom<u32> for Linkage {
type Error = u32;
#[allow(deprecated)]
fn try_from(value: u32) -> ::core::result::Result<Linkage, Self::Error> {
if value == const { Linkage::ExternalLinkage as u32 } {
return Ok(Linkage::ExternalLinkage)
}
if value == const { Linkage::AvailableExternallyLinkage as u32 } {
return Ok(Linkage::AvailableExternallyLinkage)
}
if value == const { Linkage::LinkOnceAnyLinkage as u32 } {
return Ok(Linkage::LinkOnceAnyLinkage)
}
if value == const { Linkage::LinkOnceODRLinkage as u32 } {
return Ok(Linkage::LinkOnceODRLinkage)
}
if value == const { Linkage::LinkOnceODRAutoHideLinkage as u32 } {
return Ok(Linkage::LinkOnceODRAutoHideLinkage)
}
if value == const { Linkage::WeakAnyLinkage as u32 } {
return Ok(Linkage::WeakAnyLinkage)
}
if value == const { Linkage::WeakODRLinkage as u32 } {
return Ok(Linkage::WeakODRLinkage)
}
if value == const { Linkage::AppendingLinkage as u32 } {
return Ok(Linkage::AppendingLinkage)
}
if value == const { Linkage::InternalLinkage as u32 } {
return Ok(Linkage::InternalLinkage)
}
if value == const { Linkage::PrivateLinkage as u32 } {
return Ok(Linkage::PrivateLinkage)
}
if value == const { Linkage::DLLImportLinkage as u32 } {
return Ok(Linkage::DLLImportLinkage)
}
if value == const { Linkage::DLLExportLinkage as u32 } {
return Ok(Linkage::DLLExportLinkage)
}
if value == const { Linkage::ExternalWeakLinkage as u32 } {
return Ok(Linkage::ExternalWeakLinkage)
}
if value == const { Linkage::GhostLinkage as u32 } {
return Ok(Linkage::GhostLinkage)
}
if value == const { Linkage::CommonLinkage as u32 } {
return Ok(Linkage::CommonLinkage)
}
if value == const { Linkage::LinkerPrivateLinkage as u32 } {
return Ok(Linkage::LinkerPrivateLinkage)
}
if value == const { Linkage::LinkerPrivateWeakLinkage as u32 } {
return Ok(Linkage::LinkerPrivateWeakLinkage)
}
Err(value)
}
}TryFromU32)]
188#[repr(C)]
189pub(crate) enum Linkage {
190 ExternalLinkage = 0,
191 AvailableExternallyLinkage = 1,
192 LinkOnceAnyLinkage = 2,
193 LinkOnceODRLinkage = 3,
194 #[deprecated = "marked obsolete by LLVM"]
195 LinkOnceODRAutoHideLinkage = 4,
196 WeakAnyLinkage = 5,
197 WeakODRLinkage = 6,
198 AppendingLinkage = 7,
199 InternalLinkage = 8,
200 PrivateLinkage = 9,
201 #[deprecated = "marked obsolete by LLVM"]
202 DLLImportLinkage = 10,
203 #[deprecated = "marked obsolete by LLVM"]
204 DLLExportLinkage = 11,
205 ExternalWeakLinkage = 12,
206 #[deprecated = "marked obsolete by LLVM"]
207 GhostLinkage = 13,
208 CommonLinkage = 14,
209 LinkerPrivateLinkage = 15,
210 LinkerPrivateWeakLinkage = 16,
211}
212
213#[repr(C)]
215#[derive(#[automatically_derived]
impl ::core::marker::Copy for Visibility { }Copy, #[automatically_derived]
impl ::core::clone::Clone for Visibility {
#[inline]
fn clone(&self) -> Visibility { *self }
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for Visibility {
#[inline]
fn eq(&self, other: &Visibility) -> bool {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
__self_discr == __arg1_discr
}
}PartialEq, impl ::core::convert::TryFrom<u32> for Visibility {
type Error = u32;
#[allow(deprecated)]
fn try_from(value: u32)
-> ::core::result::Result<Visibility, Self::Error> {
if value == const { Visibility::Default as u32 } {
return Ok(Visibility::Default)
}
if value == const { Visibility::Hidden as u32 } {
return Ok(Visibility::Hidden)
}
if value == const { Visibility::Protected as u32 } {
return Ok(Visibility::Protected)
}
Err(value)
}
}TryFromU32)]
216pub(crate) enum Visibility {
217 Default = 0,
218 Hidden = 1,
219 Protected = 2,
220}
221
222#[repr(C)]
224pub(crate) enum UnnamedAddr {
225 No,
226 #[expect(dead_code)]
227 Local,
228 Global,
229}
230
231#[derive(#[automatically_derived]
impl ::core::marker::Copy for DLLStorageClass { }Copy, #[automatically_derived]
impl ::core::clone::Clone for DLLStorageClass {
#[inline]
fn clone(&self) -> DLLStorageClass { *self }
}Clone)]
233#[repr(C)]
234pub(crate) enum DLLStorageClass {
235 #[allow(dead_code)]
236 Default = 0,
237 DllImport = 1, #[allow(dead_code)]
239 DllExport = 2, }
241
242#[derive(#[automatically_derived]
impl ::core::marker::Copy for UWTableKind { }Copy, #[automatically_derived]
impl ::core::clone::Clone for UWTableKind {
#[inline]
fn clone(&self) -> UWTableKind { *self }
}Clone)]
244#[repr(C)]
245pub(crate) enum UWTableKind {
246 None = 0,
248 Sync = 1,
250 Async = 2,
252}
253
254#[repr(C)]
256#[derive(#[automatically_derived]
impl ::core::marker::Copy for FramePointerKind { }Copy, #[automatically_derived]
impl ::core::clone::Clone for FramePointerKind {
#[inline]
fn clone(&self) -> FramePointerKind { *self }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for FramePointerKind {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::write_str(f,
match self {
FramePointerKind::None => "None",
FramePointerKind::NonLeaf => "NonLeaf",
FramePointerKind::All => "All",
FramePointerKind::Reserved => "Reserved",
FramePointerKind::NonLeafNoReserve => "NonLeafNoReserve",
})
}
}Debug)]
257#[expect(dead_code, reason = "Some variants are unused, but are kept to match LLVM")]
258pub(crate) enum FramePointerKind {
259 None = 0,
260 NonLeaf = 1,
261 All = 2,
262 Reserved = 3,
263 NonLeafNoReserve = 4,
264}
265
266#[repr(C)]
270#[derive(#[automatically_derived]
impl ::core::marker::Copy for AttributeKind { }Copy, #[automatically_derived]
impl ::core::clone::Clone for AttributeKind {
#[inline]
fn clone(&self) -> AttributeKind { *self }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for AttributeKind {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::write_str(f,
match self {
AttributeKind::AlwaysInline => "AlwaysInline",
AttributeKind::ByVal => "ByVal",
AttributeKind::Cold => "Cold",
AttributeKind::InlineHint => "InlineHint",
AttributeKind::MinSize => "MinSize",
AttributeKind::Naked => "Naked",
AttributeKind::NoAlias => "NoAlias",
AttributeKind::CapturesAddress => "CapturesAddress",
AttributeKind::NoInline => "NoInline",
AttributeKind::NonNull => "NonNull",
AttributeKind::NoRedZone => "NoRedZone",
AttributeKind::NoReturn => "NoReturn",
AttributeKind::NoUnwind => "NoUnwind",
AttributeKind::OptimizeForSize => "OptimizeForSize",
AttributeKind::ReadOnly => "ReadOnly",
AttributeKind::SExt => "SExt",
AttributeKind::StructRet => "StructRet",
AttributeKind::UWTable => "UWTable",
AttributeKind::ZExt => "ZExt",
AttributeKind::InReg => "InReg",
AttributeKind::SanitizeThread => "SanitizeThread",
AttributeKind::SanitizeAddress => "SanitizeAddress",
AttributeKind::SanitizeMemory => "SanitizeMemory",
AttributeKind::NonLazyBind => "NonLazyBind",
AttributeKind::OptimizeNone => "OptimizeNone",
AttributeKind::ReadNone => "ReadNone",
AttributeKind::SanitizeHWAddress => "SanitizeHWAddress",
AttributeKind::WillReturn => "WillReturn",
AttributeKind::StackProtectReq => "StackProtectReq",
AttributeKind::StackProtectStrong => "StackProtectStrong",
AttributeKind::StackProtect => "StackProtect",
AttributeKind::NoUndef => "NoUndef",
AttributeKind::SanitizeMemTag => "SanitizeMemTag",
AttributeKind::NoCfCheck => "NoCfCheck",
AttributeKind::ShadowCallStack => "ShadowCallStack",
AttributeKind::AllocSize => "AllocSize",
AttributeKind::AllocatedPointer => "AllocatedPointer",
AttributeKind::AllocAlign => "AllocAlign",
AttributeKind::SanitizeSafeStack => "SanitizeSafeStack",
AttributeKind::FnRetThunkExtern => "FnRetThunkExtern",
AttributeKind::Writable => "Writable",
AttributeKind::DeadOnUnwind => "DeadOnUnwind",
AttributeKind::DeadOnReturn => "DeadOnReturn",
AttributeKind::CapturesReadOnly => "CapturesReadOnly",
AttributeKind::CapturesNone => "CapturesNone",
AttributeKind::SanitizeRealtimeNonblocking =>
"SanitizeRealtimeNonblocking",
AttributeKind::SanitizeRealtimeBlocking =>
"SanitizeRealtimeBlocking",
AttributeKind::Convergent => "Convergent",
AttributeKind::NoFree => "NoFree",
})
}
}Debug)]
271#[expect(dead_code, reason = "Some variants are unused, but are kept to match the C++")]
272pub(crate) enum AttributeKind {
273 AlwaysInline = 0,
274 ByVal = 1,
275 Cold = 2,
276 InlineHint = 3,
277 MinSize = 4,
278 Naked = 5,
279 NoAlias = 6,
280 CapturesAddress = 7,
281 NoInline = 8,
282 NonNull = 9,
283 NoRedZone = 10,
284 NoReturn = 11,
285 NoUnwind = 12,
286 OptimizeForSize = 13,
287 ReadOnly = 14,
288 SExt = 15,
289 StructRet = 16,
290 UWTable = 17,
291 ZExt = 18,
292 InReg = 19,
293 SanitizeThread = 20,
294 SanitizeAddress = 21,
295 SanitizeMemory = 22,
296 NonLazyBind = 23,
297 OptimizeNone = 24,
298 ReadNone = 26,
299 SanitizeHWAddress = 28,
300 WillReturn = 29,
301 StackProtectReq = 30,
302 StackProtectStrong = 31,
303 StackProtect = 32,
304 NoUndef = 33,
305 SanitizeMemTag = 34,
306 NoCfCheck = 35,
307 ShadowCallStack = 36,
308 AllocSize = 37,
309 AllocatedPointer = 38,
310 AllocAlign = 39,
311 SanitizeSafeStack = 40,
312 FnRetThunkExtern = 41,
313 Writable = 42,
314 DeadOnUnwind = 43,
315 DeadOnReturn = 44,
316 CapturesReadOnly = 45,
317 CapturesNone = 46,
318 SanitizeRealtimeNonblocking = 47,
319 SanitizeRealtimeBlocking = 48,
320 Convergent = 49,
321 NoFree = 50,
322}
323
324#[derive(#[automatically_derived]
impl ::core::marker::Copy for IntPredicate { }Copy, #[automatically_derived]
impl ::core::clone::Clone for IntPredicate {
#[inline]
fn clone(&self) -> IntPredicate { *self }
}Clone)]
326#[repr(C)]
327pub(crate) enum IntPredicate {
328 IntEQ = 32,
329 IntNE = 33,
330 IntUGT = 34,
331 IntUGE = 35,
332 IntULT = 36,
333 IntULE = 37,
334 IntSGT = 38,
335 IntSGE = 39,
336 IntSLT = 40,
337 IntSLE = 41,
338}
339
340#[derive(#[automatically_derived]
impl ::core::marker::Copy for RealPredicate { }Copy, #[automatically_derived]
impl ::core::clone::Clone for RealPredicate {
#[inline]
fn clone(&self) -> RealPredicate { *self }
}Clone)]
342#[repr(C)]
343pub(crate) enum RealPredicate {
344 RealPredicateFalse = 0,
345 RealOEQ = 1,
346 RealOGT = 2,
347 RealOGE = 3,
348 RealOLT = 4,
349 RealOLE = 5,
350 RealONE = 6,
351 RealORD = 7,
352 RealUNO = 8,
353 RealUEQ = 9,
354 RealUGT = 10,
355 RealUGE = 11,
356 RealULT = 12,
357 RealULE = 13,
358 RealUNE = 14,
359 RealPredicateTrue = 15,
360}
361
362#[derive(#[automatically_derived]
impl ::core::marker::Copy for TypeKind { }Copy, #[automatically_derived]
impl ::core::clone::Clone for TypeKind {
#[inline]
fn clone(&self) -> TypeKind { *self }
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for TypeKind {
#[inline]
fn eq(&self, other: &TypeKind) -> bool {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
__self_discr == __arg1_discr
}
}PartialEq, #[automatically_derived]
impl ::core::fmt::Debug for TypeKind {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::write_str(f,
match self {
TypeKind::Void => "Void",
TypeKind::Half => "Half",
TypeKind::Float => "Float",
TypeKind::Double => "Double",
TypeKind::X86_FP80 => "X86_FP80",
TypeKind::FP128 => "FP128",
TypeKind::PPC_FP128 => "PPC_FP128",
TypeKind::Label => "Label",
TypeKind::Integer => "Integer",
TypeKind::Function => "Function",
TypeKind::Struct => "Struct",
TypeKind::Array => "Array",
TypeKind::Pointer => "Pointer",
TypeKind::Vector => "Vector",
TypeKind::Metadata => "Metadata",
TypeKind::Token => "Token",
TypeKind::ScalableVector => "ScalableVector",
TypeKind::BFloat => "BFloat",
TypeKind::X86_AMX => "X86_AMX",
})
}
}Debug, impl ::core::convert::TryFrom<u32> for TypeKind {
type Error = u32;
#[allow(deprecated)]
fn try_from(value: u32) -> ::core::result::Result<TypeKind, Self::Error> {
if value == const { TypeKind::Void as u32 } {
return Ok(TypeKind::Void)
}
if value == const { TypeKind::Half as u32 } {
return Ok(TypeKind::Half)
}
if value == const { TypeKind::Float as u32 } {
return Ok(TypeKind::Float)
}
if value == const { TypeKind::Double as u32 } {
return Ok(TypeKind::Double)
}
if value == const { TypeKind::X86_FP80 as u32 } {
return Ok(TypeKind::X86_FP80)
}
if value == const { TypeKind::FP128 as u32 } {
return Ok(TypeKind::FP128)
}
if value == const { TypeKind::PPC_FP128 as u32 } {
return Ok(TypeKind::PPC_FP128)
}
if value == const { TypeKind::Label as u32 } {
return Ok(TypeKind::Label)
}
if value == const { TypeKind::Integer as u32 } {
return Ok(TypeKind::Integer)
}
if value == const { TypeKind::Function as u32 } {
return Ok(TypeKind::Function)
}
if value == const { TypeKind::Struct as u32 } {
return Ok(TypeKind::Struct)
}
if value == const { TypeKind::Array as u32 } {
return Ok(TypeKind::Array)
}
if value == const { TypeKind::Pointer as u32 } {
return Ok(TypeKind::Pointer)
}
if value == const { TypeKind::Vector as u32 } {
return Ok(TypeKind::Vector)
}
if value == const { TypeKind::Metadata as u32 } {
return Ok(TypeKind::Metadata)
}
if value == const { TypeKind::Token as u32 } {
return Ok(TypeKind::Token)
}
if value == const { TypeKind::ScalableVector as u32 } {
return Ok(TypeKind::ScalableVector)
}
if value == const { TypeKind::BFloat as u32 } {
return Ok(TypeKind::BFloat)
}
if value == const { TypeKind::X86_AMX as u32 } {
return Ok(TypeKind::X86_AMX)
}
Err(value)
}
}TryFromU32)]
370#[repr(C)]
371pub(crate) enum TypeKind {
372 Void = 0,
373 Half = 1,
374 Float = 2,
375 Double = 3,
376 X86_FP80 = 4,
377 FP128 = 5,
378 PPC_FP128 = 6,
379 Label = 7,
380 Integer = 8,
381 Function = 9,
382 Struct = 10,
383 Array = 11,
384 Pointer = 12,
385 Vector = 13,
386 Metadata = 14,
387 Token = 16,
388 ScalableVector = 17,
389 BFloat = 18,
390 X86_AMX = 19,
391}
392
393#[derive(#[automatically_derived]
impl ::core::marker::Copy for AtomicRmwBinOp { }Copy, #[automatically_derived]
impl ::core::clone::Clone for AtomicRmwBinOp {
#[inline]
fn clone(&self) -> AtomicRmwBinOp { *self }
}Clone)]
395#[repr(C)]
396pub(crate) enum AtomicRmwBinOp {
397 AtomicXchg = 0,
398 AtomicAdd = 1,
399 AtomicSub = 2,
400 AtomicAnd = 3,
401 AtomicNand = 4,
402 AtomicOr = 5,
403 AtomicXor = 6,
404 AtomicMax = 7,
405 AtomicMin = 8,
406 AtomicUMax = 9,
407 AtomicUMin = 10,
408}
409
410#[derive(#[automatically_derived]
impl ::core::marker::Copy for AtomicOrdering { }Copy, #[automatically_derived]
impl ::core::clone::Clone for AtomicOrdering {
#[inline]
fn clone(&self) -> AtomicOrdering { *self }
}Clone)]
412#[repr(C)]
413pub(crate) enum AtomicOrdering {
414 #[allow(dead_code)]
415 NotAtomic = 0,
416 #[allow(dead_code)]
417 Unordered = 1,
418 Monotonic = 2,
419 Acquire = 4,
421 Release = 5,
422 AcquireRelease = 6,
423 SequentiallyConsistent = 7,
424}
425
426#[derive(#[automatically_derived]
impl ::core::marker::Copy for FileType { }Copy, #[automatically_derived]
impl ::core::clone::Clone for FileType {
#[inline]
fn clone(&self) -> FileType { *self }
}Clone)]
428#[repr(C)]
429pub(crate) enum FileType {
430 AssemblyFile,
431 ObjectFile,
432}
433
434#[derive(#[automatically_derived]
impl ::core::marker::Copy for AsmDialect { }Copy, #[automatically_derived]
impl ::core::clone::Clone for AsmDialect {
#[inline]
fn clone(&self) -> AsmDialect { *self }
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for AsmDialect {
#[inline]
fn eq(&self, other: &AsmDialect) -> bool {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
__self_discr == __arg1_discr
}
}PartialEq)]
436#[repr(C)]
437pub(crate) enum AsmDialect {
438 Att,
439 Intel,
440}
441
442#[derive(#[automatically_derived]
impl ::core::marker::Copy for CodeGenOptLevel { }Copy, #[automatically_derived]
impl ::core::clone::Clone for CodeGenOptLevel {
#[inline]
fn clone(&self) -> CodeGenOptLevel { *self }
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for CodeGenOptLevel {
#[inline]
fn eq(&self, other: &CodeGenOptLevel) -> bool {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
__self_discr == __arg1_discr
}
}PartialEq)]
444#[repr(C)]
445pub(crate) enum CodeGenOptLevel {
446 None,
447 Less,
448 Default,
449 Aggressive,
450}
451
452#[repr(C)]
454pub(crate) enum PassBuilderOptLevel {
455 O0,
456 O1,
457 O2,
458 O3,
459 Os,
460 Oz,
461}
462
463#[derive(#[automatically_derived]
impl ::core::cmp::PartialEq for OptStage {
#[inline]
fn eq(&self, other: &OptStage) -> bool {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
__self_discr == __arg1_discr
}
}PartialEq)]
465#[repr(C)]
466pub(crate) enum OptStage {
467 PreLinkNoLTO,
468 PreLinkThinLTO,
469 PreLinkFatLTO,
470 ThinLTO,
471 FatLTO,
472}
473
474#[repr(C)]
476pub(crate) struct SanitizerOptions {
477 pub sanitize_address: bool,
478 pub sanitize_address_recover: bool,
479 pub sanitize_cfi: bool,
480 pub sanitize_dataflow: bool,
481 pub sanitize_dataflow_abilist: *const *const c_char,
482 pub sanitize_dataflow_abilist_len: size_t,
483 pub sanitize_kcfi: bool,
484 pub sanitize_memory: bool,
485 pub sanitize_memory_recover: bool,
486 pub sanitize_memory_track_origins: c_int,
487 pub sanitize_realtime: bool,
488 pub sanitize_thread: bool,
489 pub sanitize_hwaddress: bool,
490 pub sanitize_hwaddress_recover: bool,
491 pub sanitize_kernel_address: bool,
492 pub sanitize_kernel_address_recover: bool,
493 pub sanitize_kernel_hwaddress: bool,
494 pub sanitize_kernel_hwaddress_recover: bool,
495}
496
497#[derive(#[automatically_derived]
impl ::core::marker::Copy for RelocModel { }Copy, #[automatically_derived]
impl ::core::clone::Clone for RelocModel {
#[inline]
fn clone(&self) -> RelocModel { *self }
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for RelocModel {
#[inline]
fn eq(&self, other: &RelocModel) -> bool {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
__self_discr == __arg1_discr
}
}PartialEq)]
499#[repr(C)]
500pub(crate) enum RelocModel {
501 Static,
502 PIC,
503 DynamicNoPic,
504 ROPI,
505 RWPI,
506 ROPI_RWPI,
507}
508
509#[derive(#[automatically_derived]
impl ::core::marker::Copy for FloatAbi { }Copy, #[automatically_derived]
impl ::core::clone::Clone for FloatAbi {
#[inline]
fn clone(&self) -> FloatAbi { *self }
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for FloatAbi {
#[inline]
fn eq(&self, other: &FloatAbi) -> bool {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
__self_discr == __arg1_discr
}
}PartialEq)]
511#[repr(C)]
512pub(crate) enum FloatAbi {
513 Default,
514 Soft,
515 Hard,
516}
517
518#[derive(#[automatically_derived]
impl ::core::marker::Copy for CodeModel { }Copy, #[automatically_derived]
impl ::core::clone::Clone for CodeModel {
#[inline]
fn clone(&self) -> CodeModel { *self }
}Clone)]
520#[repr(C)]
521pub(crate) enum CodeModel {
522 Tiny,
523 Small,
524 Kernel,
525 Medium,
526 Large,
527 None,
528}
529
530#[derive(#[automatically_derived]
#[allow(dead_code)]
impl ::core::marker::Copy for DiagnosticKind { }Copy, #[automatically_derived]
#[allow(dead_code)]
impl ::core::clone::Clone for DiagnosticKind {
#[inline]
fn clone(&self) -> DiagnosticKind { *self }
}Clone)]
532#[repr(C)]
533#[allow(dead_code)] pub(crate) enum DiagnosticKind {
535 Other,
536 InlineAsm,
537 StackSize,
538 DebugMetadataVersion,
539 SampleProfile,
540 OptimizationRemark,
541 OptimizationRemarkMissed,
542 OptimizationRemarkAnalysis,
543 OptimizationRemarkAnalysisFPCommute,
544 OptimizationRemarkAnalysisAliasing,
545 OptimizationRemarkOther,
546 OptimizationFailure,
547 PGOProfile,
548 Linker,
549 Unsupported,
550 SrcMgr,
551}
552
553#[derive(#[automatically_derived]
#[allow(dead_code)]
impl ::core::marker::Copy for DiagnosticLevel { }Copy, #[automatically_derived]
#[allow(dead_code)]
impl ::core::clone::Clone for DiagnosticLevel {
#[inline]
fn clone(&self) -> DiagnosticLevel { *self }
}Clone)]
555#[repr(C)]
556#[allow(dead_code)] pub(crate) enum DiagnosticLevel {
558 Error,
559 Warning,
560 Note,
561 Remark,
562}
563
564unsafe extern "C" {
565 pub(crate) type ThinLTOData;
567}
568
569#[repr(C)]
571pub(crate) struct ThinLTOModule {
572 pub identifier: *const c_char,
573 pub data: *const u8,
574 pub len: usize,
575}
576
577#[derive(#[automatically_derived]
impl ::core::marker::Copy for ThreadLocalMode { }Copy, #[automatically_derived]
impl ::core::clone::Clone for ThreadLocalMode {
#[inline]
fn clone(&self) -> ThreadLocalMode { *self }
}Clone)]
579#[repr(C)]
580pub(crate) enum ThreadLocalMode {
581 #[expect(dead_code)]
582 NotThreadLocal,
583 GeneralDynamic,
584 LocalDynamic,
585 InitialExec,
586 LocalExec,
587}
588
589#[derive(#[automatically_derived]
impl ::core::marker::Copy for ChecksumKind { }Copy, #[automatically_derived]
impl ::core::clone::Clone for ChecksumKind {
#[inline]
fn clone(&self) -> ChecksumKind { *self }
}Clone)]
591#[repr(C)]
592pub(crate) enum ChecksumKind {
593 None,
594 MD5,
595 SHA1,
596 SHA256,
597}
598
599#[derive(#[automatically_derived]
impl ::core::marker::Copy for MemoryEffects { }Copy, #[automatically_derived]
impl ::core::clone::Clone for MemoryEffects {
#[inline]
fn clone(&self) -> MemoryEffects { *self }
}Clone)]
601#[repr(C)]
602pub(crate) enum MemoryEffects {
603 None,
604 ReadOnly,
605 InaccessibleMemOnly,
606 ReadOnlyNotPure,
607}
608
609#[derive(#[automatically_derived]
impl ::core::marker::Copy for Opcode { }Copy, #[automatically_derived]
impl ::core::clone::Clone for Opcode {
#[inline]
fn clone(&self) -> Opcode { *self }
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for Opcode {
#[inline]
fn eq(&self, other: &Opcode) -> bool {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
__self_discr == __arg1_discr
}
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for Opcode {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {}
}Eq)]
611#[repr(C)]
612#[expect(dead_code, reason = "Some variants are unused, but are kept to match LLVM-C")]
613pub(crate) enum Opcode {
614 Ret = 1,
615 Br = 2,
616 Switch = 3,
617 IndirectBr = 4,
618 Invoke = 5,
619 Unreachable = 7,
620 CallBr = 67,
621 FNeg = 66,
622 Add = 8,
623 FAdd = 9,
624 Sub = 10,
625 FSub = 11,
626 Mul = 12,
627 FMul = 13,
628 UDiv = 14,
629 SDiv = 15,
630 FDiv = 16,
631 URem = 17,
632 SRem = 18,
633 FRem = 19,
634 Shl = 20,
635 LShr = 21,
636 AShr = 22,
637 And = 23,
638 Or = 24,
639 Xor = 25,
640 Alloca = 26,
641 Load = 27,
642 Store = 28,
643 GetElementPtr = 29,
644 Trunc = 30,
645 ZExt = 31,
646 SExt = 32,
647 FPToUI = 33,
648 FPToSI = 34,
649 UIToFP = 35,
650 SIToFP = 36,
651 FPTrunc = 37,
652 FPExt = 38,
653 PtrToInt = 39,
654 IntToPtr = 40,
655 BitCast = 41,
656 AddrSpaceCast = 60,
657 ICmp = 42,
658 FCmp = 43,
659 PHI = 44,
660 Call = 45,
661 Select = 46,
662 UserOp1 = 47,
663 UserOp2 = 48,
664 VAArg = 49,
665 ExtractElement = 50,
666 InsertElement = 51,
667 ShuffleVector = 52,
668 ExtractValue = 53,
669 InsertValue = 54,
670 Freeze = 68,
671 Fence = 55,
672 AtomicCmpXchg = 56,
673 AtomicRMW = 57,
674 Resume = 58,
675 LandingPad = 59,
676 CleanupRet = 61,
677 CatchRet = 62,
678 CatchPad = 63,
679 CleanupPad = 64,
680 CatchSwitch = 65,
681}
682
683#[derive(#[automatically_derived]
impl ::core::marker::Copy for CompressionKind { }Copy, #[automatically_derived]
impl ::core::clone::Clone for CompressionKind {
#[inline]
fn clone(&self) -> CompressionKind { *self }
}Clone)]
685#[repr(C)]
686pub(crate) enum CompressionKind {
687 None = 0,
688 Zlib = 1,
689 Zstd = 2,
690}
691
692unsafe extern "C" {
693 type Opaque;
694}
695#[repr(C)]
696struct InvariantOpaque<'a> {
697 _marker: PhantomData<&'a mut &'a ()>,
698 _opaque: Opaque,
699}
700
701unsafe extern "C" {
703 pub(crate) type Module;
704 pub(crate) type Context;
705 pub(crate) type Type;
706 pub(crate) type Value;
707 pub(crate) type ConstantInt;
708 pub(crate) type Attribute;
709 pub(crate) type Metadata;
710 pub(crate) type BasicBlock;
711 pub(crate) type Comdat;
712 pub(crate) type DbgRecord;
714}
715#[repr(C)]
716pub(crate) struct Builder<'a>(InvariantOpaque<'a>);
717#[repr(C)]
718pub(crate) struct PassManager<'a>(InvariantOpaque<'a>);
719unsafe extern "C" {
720 pub type TargetMachine;
721}
722unsafe extern "C" {
723 pub(crate) type Twine;
724 pub(crate) type DiagnosticInfo;
725 pub(crate) type SMDiagnostic;
726}
727#[repr(C)]
729pub(crate) struct OperandBundle<'a>(InvariantOpaque<'a>);
730#[repr(C)]
731pub(crate) struct Linker<'a>(InvariantOpaque<'a>);
732
733unsafe extern "C" {
734 pub(crate) type DiagnosticHandler;
735}
736
737pub(crate) type DiagnosticHandlerTy = unsafe extern "C" fn(&DiagnosticInfo, *mut c_void);
738
739pub(crate) mod debuginfo {
740 use bitflags::bitflags;
741
742 use super::{InvariantOpaque, Metadata};
743
744 #[repr(C)]
753 pub(crate) struct DIBuilder<'ll>(InvariantOpaque<'ll>);
754
755 pub(crate) type DIDescriptor = Metadata;
756 pub(crate) type DILocation = Metadata;
757 pub(crate) type DIScope = DIDescriptor;
758 pub(crate) type DIFile = DIScope;
759 pub(crate) type DILexicalBlock = DIScope;
760 pub(crate) type DISubprogram = DIScope;
761 pub(crate) type DIType = DIDescriptor;
762 pub(crate) type DIBasicType = DIType;
763 pub(crate) type DIDerivedType = DIType;
764 pub(crate) type DICompositeType = DIDerivedType;
765 pub(crate) type DIVariable = DIDescriptor;
766 pub(crate) type DIArray = DIDescriptor;
767 pub(crate) type DITemplateTypeParameter = DIDescriptor;
768
769 bitflags! {
770 #[repr(transparent)]
775 #[derive(#[automatically_derived]
impl ::core::clone::Clone for DIFlags {
#[inline]
fn clone(&self) -> DIFlags {
let _:
::core::clone::AssertParamIsClone<<DIFlags as
::bitflags::__private::PublicFlags>::Internal>;
*self
}
}
impl DIFlags {
#[allow(deprecated, non_upper_case_globals,)]
pub const FlagZero: Self = Self::from_bits_retain(0);
#[allow(deprecated, non_upper_case_globals,)]
pub const FlagPrivate: Self = Self::from_bits_retain(1);
#[allow(deprecated, non_upper_case_globals,)]
pub const FlagProtected: Self = Self::from_bits_retain(2);
#[allow(deprecated, non_upper_case_globals,)]
pub const FlagPublic: Self = Self::from_bits_retain(3);
#[allow(deprecated, non_upper_case_globals,)]
pub const FlagFwdDecl: Self = Self::from_bits_retain((1 << 2));
#[allow(deprecated, non_upper_case_globals,)]
pub const FlagAppleBlock: Self = Self::from_bits_retain((1 << 3));
#[allow(deprecated, non_upper_case_globals,)]
pub const FlagReservedBit4: Self = Self::from_bits_retain((1 << 4));
#[allow(deprecated, non_upper_case_globals,)]
pub const FlagVirtual: Self = Self::from_bits_retain((1 << 5));
#[allow(deprecated, non_upper_case_globals,)]
pub const FlagArtificial: Self = Self::from_bits_retain((1 << 6));
#[allow(deprecated, non_upper_case_globals,)]
pub const FlagExplicit: Self = Self::from_bits_retain((1 << 7));
#[allow(deprecated, non_upper_case_globals,)]
pub const FlagPrototyped: Self = Self::from_bits_retain((1 << 8));
#[allow(deprecated, non_upper_case_globals,)]
pub const FlagObjcClassComplete: Self = Self::from_bits_retain((1 << 9));
#[allow(deprecated, non_upper_case_globals,)]
pub const FlagObjectPointer: Self = Self::from_bits_retain((1 << 10));
#[allow(deprecated, non_upper_case_globals,)]
pub const FlagVector: Self = Self::from_bits_retain((1 << 11));
#[allow(deprecated, non_upper_case_globals,)]
pub const FlagStaticMember: Self = Self::from_bits_retain((1 << 12));
#[allow(deprecated, non_upper_case_globals,)]
pub const FlagLValueReference: Self = Self::from_bits_retain((1 << 13));
#[allow(deprecated, non_upper_case_globals,)]
pub const FlagRValueReference: Self = Self::from_bits_retain((1 << 14));
#[allow(deprecated, non_upper_case_globals,)]
pub const FlagReserved: Self = Self::from_bits_retain((1 << 15));
#[allow(deprecated, non_upper_case_globals,)]
pub const FlagSingleInheritance: Self = Self::from_bits_retain((1 << 16));
#[allow(deprecated, non_upper_case_globals,)]
pub const FlagMultipleInheritance: Self =
Self::from_bits_retain((2 << 16));
#[allow(deprecated, non_upper_case_globals,)]
pub const FlagVirtualInheritance: Self =
Self::from_bits_retain((3 << 16));
#[allow(deprecated, non_upper_case_globals,)]
pub const FlagIntroducedVirtual: Self = Self::from_bits_retain((1 << 18));
#[allow(deprecated, non_upper_case_globals,)]
pub const FlagBitField: Self = Self::from_bits_retain((1 << 19));
#[allow(deprecated, non_upper_case_globals,)]
pub const FlagNoReturn: Self = Self::from_bits_retain((1 << 20));
#[allow(deprecated, non_upper_case_globals,)]
pub const FlagTypePassByValue: Self = Self::from_bits_retain((1 << 22));
#[allow(deprecated, non_upper_case_globals,)]
pub const FlagTypePassByReference: Self =
Self::from_bits_retain((1 << 23));
#[allow(deprecated, non_upper_case_globals,)]
pub const FlagEnumClass: Self = Self::from_bits_retain((1 << 24));
#[allow(deprecated, non_upper_case_globals,)]
pub const FlagThunk: Self = Self::from_bits_retain((1 << 25));
#[allow(deprecated, non_upper_case_globals,)]
pub const FlagNonTrivial: Self = Self::from_bits_retain((1 << 26));
#[allow(deprecated, non_upper_case_globals,)]
pub const FlagBigEndian: Self = Self::from_bits_retain((1 << 27));
#[allow(deprecated, non_upper_case_globals,)]
pub const FlagLittleEndian: Self = Self::from_bits_retain((1 << 28));
}
impl ::bitflags::Flags for DIFlags {
const FLAGS: &'static [::bitflags::Flag<DIFlags>] =
&[{
#[allow(deprecated, non_upper_case_globals,)]
::bitflags::Flag::new("FlagZero", DIFlags::FlagZero)
},
{
#[allow(deprecated, non_upper_case_globals,)]
::bitflags::Flag::new("FlagPrivate", DIFlags::FlagPrivate)
},
{
#[allow(deprecated, non_upper_case_globals,)]
::bitflags::Flag::new("FlagProtected",
DIFlags::FlagProtected)
},
{
#[allow(deprecated, non_upper_case_globals,)]
::bitflags::Flag::new("FlagPublic", DIFlags::FlagPublic)
},
{
#[allow(deprecated, non_upper_case_globals,)]
::bitflags::Flag::new("FlagFwdDecl", DIFlags::FlagFwdDecl)
},
{
#[allow(deprecated, non_upper_case_globals,)]
::bitflags::Flag::new("FlagAppleBlock",
DIFlags::FlagAppleBlock)
},
{
#[allow(deprecated, non_upper_case_globals,)]
::bitflags::Flag::new("FlagReservedBit4",
DIFlags::FlagReservedBit4)
},
{
#[allow(deprecated, non_upper_case_globals,)]
::bitflags::Flag::new("FlagVirtual", DIFlags::FlagVirtual)
},
{
#[allow(deprecated, non_upper_case_globals,)]
::bitflags::Flag::new("FlagArtificial",
DIFlags::FlagArtificial)
},
{
#[allow(deprecated, non_upper_case_globals,)]
::bitflags::Flag::new("FlagExplicit", DIFlags::FlagExplicit)
},
{
#[allow(deprecated, non_upper_case_globals,)]
::bitflags::Flag::new("FlagPrototyped",
DIFlags::FlagPrototyped)
},
{
#[allow(deprecated, non_upper_case_globals,)]
::bitflags::Flag::new("FlagObjcClassComplete",
DIFlags::FlagObjcClassComplete)
},
{
#[allow(deprecated, non_upper_case_globals,)]
::bitflags::Flag::new("FlagObjectPointer",
DIFlags::FlagObjectPointer)
},
{
#[allow(deprecated, non_upper_case_globals,)]
::bitflags::Flag::new("FlagVector", DIFlags::FlagVector)
},
{
#[allow(deprecated, non_upper_case_globals,)]
::bitflags::Flag::new("FlagStaticMember",
DIFlags::FlagStaticMember)
},
{
#[allow(deprecated, non_upper_case_globals,)]
::bitflags::Flag::new("FlagLValueReference",
DIFlags::FlagLValueReference)
},
{
#[allow(deprecated, non_upper_case_globals,)]
::bitflags::Flag::new("FlagRValueReference",
DIFlags::FlagRValueReference)
},
{
#[allow(deprecated, non_upper_case_globals,)]
::bitflags::Flag::new("FlagReserved", DIFlags::FlagReserved)
},
{
#[allow(deprecated, non_upper_case_globals,)]
::bitflags::Flag::new("FlagSingleInheritance",
DIFlags::FlagSingleInheritance)
},
{
#[allow(deprecated, non_upper_case_globals,)]
::bitflags::Flag::new("FlagMultipleInheritance",
DIFlags::FlagMultipleInheritance)
},
{
#[allow(deprecated, non_upper_case_globals,)]
::bitflags::Flag::new("FlagVirtualInheritance",
DIFlags::FlagVirtualInheritance)
},
{
#[allow(deprecated, non_upper_case_globals,)]
::bitflags::Flag::new("FlagIntroducedVirtual",
DIFlags::FlagIntroducedVirtual)
},
{
#[allow(deprecated, non_upper_case_globals,)]
::bitflags::Flag::new("FlagBitField", DIFlags::FlagBitField)
},
{
#[allow(deprecated, non_upper_case_globals,)]
::bitflags::Flag::new("FlagNoReturn", DIFlags::FlagNoReturn)
},
{
#[allow(deprecated, non_upper_case_globals,)]
::bitflags::Flag::new("FlagTypePassByValue",
DIFlags::FlagTypePassByValue)
},
{
#[allow(deprecated, non_upper_case_globals,)]
::bitflags::Flag::new("FlagTypePassByReference",
DIFlags::FlagTypePassByReference)
},
{
#[allow(deprecated, non_upper_case_globals,)]
::bitflags::Flag::new("FlagEnumClass",
DIFlags::FlagEnumClass)
},
{
#[allow(deprecated, non_upper_case_globals,)]
::bitflags::Flag::new("FlagThunk", DIFlags::FlagThunk)
},
{
#[allow(deprecated, non_upper_case_globals,)]
::bitflags::Flag::new("FlagNonTrivial",
DIFlags::FlagNonTrivial)
},
{
#[allow(deprecated, non_upper_case_globals,)]
::bitflags::Flag::new("FlagBigEndian",
DIFlags::FlagBigEndian)
},
{
#[allow(deprecated, non_upper_case_globals,)]
::bitflags::Flag::new("FlagLittleEndian",
DIFlags::FlagLittleEndian)
}];
type Bits = u32;
fn bits(&self) -> u32 { DIFlags::bits(self) }
fn from_bits_retain(bits: u32) -> DIFlags {
DIFlags::from_bits_retain(bits)
}
}
#[allow(dead_code, deprecated, unused_doc_comments, unused_attributes,
unused_mut, unused_imports, non_upper_case_globals, clippy ::
assign_op_pattern, clippy :: indexing_slicing, clippy :: same_name_method,
clippy :: iter_without_into_iter,)]
const _: () =
{
#[repr(transparent)]
pub(crate) struct InternalBitFlags(u32);
#[automatically_derived]
#[doc(hidden)]
unsafe impl ::core::clone::TrivialClone for InternalBitFlags { }
#[automatically_derived]
impl ::core::clone::Clone for InternalBitFlags {
#[inline]
fn clone(&self) -> InternalBitFlags {
let _: ::core::clone::AssertParamIsClone<u32>;
*self
}
}
#[automatically_derived]
impl ::core::marker::Copy for InternalBitFlags { }
#[automatically_derived]
impl ::core::marker::StructuralPartialEq for InternalBitFlags { }
#[automatically_derived]
impl ::core::cmp::PartialEq for InternalBitFlags {
#[inline]
fn eq(&self, other: &InternalBitFlags) -> bool {
self.0 == other.0
}
}
#[automatically_derived]
impl ::core::cmp::Eq for InternalBitFlags {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<u32>;
}
}
#[automatically_derived]
impl ::core::cmp::PartialOrd for InternalBitFlags {
#[inline]
fn partial_cmp(&self, other: &InternalBitFlags)
-> ::core::option::Option<::core::cmp::Ordering> {
::core::option::Option::Some(::core::cmp::Ord::cmp(self,
other))
}
}
#[automatically_derived]
impl ::core::cmp::Ord for InternalBitFlags {
#[inline]
fn cmp(&self, other: &InternalBitFlags) -> ::core::cmp::Ordering {
::core::cmp::Ord::cmp(&self.0, &other.0)
}
}
#[automatically_derived]
impl ::core::hash::Hash for InternalBitFlags {
#[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
::core::hash::Hash::hash(&self.0, state)
}
}
impl ::bitflags::__private::PublicFlags for DIFlags {
type Primitive = u32;
type Internal = InternalBitFlags;
}
impl ::bitflags::__private::core::default::Default for
InternalBitFlags {
#[inline]
fn default() -> Self { InternalBitFlags::empty() }
}
impl ::bitflags::__private::core::fmt::Debug for InternalBitFlags {
fn fmt(&self,
f: &mut ::bitflags::__private::core::fmt::Formatter<'_>)
-> ::bitflags::__private::core::fmt::Result {
if self.is_empty() {
f.write_fmt(format_args!("{0:#x}",
<u32 as ::bitflags::Bits>::EMPTY))
} else {
::bitflags::__private::core::fmt::Display::fmt(self, f)
}
}
}
impl ::bitflags::__private::core::fmt::Display for InternalBitFlags {
fn fmt(&self,
f: &mut ::bitflags::__private::core::fmt::Formatter<'_>)
-> ::bitflags::__private::core::fmt::Result {
::bitflags::parser::to_writer(&DIFlags(*self), f)
}
}
impl ::bitflags::__private::core::str::FromStr for InternalBitFlags {
type Err = ::bitflags::parser::ParseError;
fn from_str(s: &str)
->
::bitflags::__private::core::result::Result<Self,
Self::Err> {
::bitflags::parser::from_str::<DIFlags>(s).map(|flags|
flags.0)
}
}
impl ::bitflags::__private::core::convert::AsRef<u32> for
InternalBitFlags {
fn as_ref(&self) -> &u32 { &self.0 }
}
impl ::bitflags::__private::core::convert::From<u32> for
InternalBitFlags {
fn from(bits: u32) -> Self { Self::from_bits_retain(bits) }
}
#[allow(dead_code, deprecated, unused_attributes)]
impl InternalBitFlags {
#[inline]
pub const fn empty() -> Self {
Self(<u32 as ::bitflags::Bits>::EMPTY)
}
#[inline]
pub const fn all() -> Self {
let mut truncated = <u32 as ::bitflags::Bits>::EMPTY;
let mut i = 0;
{
{
let flag =
<DIFlags as ::bitflags::Flags>::FLAGS[i].value().bits();
truncated = truncated | flag;
i += 1;
}
};
{
{
let flag =
<DIFlags as ::bitflags::Flags>::FLAGS[i].value().bits();
truncated = truncated | flag;
i += 1;
}
};
{
{
let flag =
<DIFlags as ::bitflags::Flags>::FLAGS[i].value().bits();
truncated = truncated | flag;
i += 1;
}
};
{
{
let flag =
<DIFlags as ::bitflags::Flags>::FLAGS[i].value().bits();
truncated = truncated | flag;
i += 1;
}
};
{
{
let flag =
<DIFlags as ::bitflags::Flags>::FLAGS[i].value().bits();
truncated = truncated | flag;
i += 1;
}
};
{
{
let flag =
<DIFlags as ::bitflags::Flags>::FLAGS[i].value().bits();
truncated = truncated | flag;
i += 1;
}
};
{
{
let flag =
<DIFlags as ::bitflags::Flags>::FLAGS[i].value().bits();
truncated = truncated | flag;
i += 1;
}
};
{
{
let flag =
<DIFlags as ::bitflags::Flags>::FLAGS[i].value().bits();
truncated = truncated | flag;
i += 1;
}
};
{
{
let flag =
<DIFlags as ::bitflags::Flags>::FLAGS[i].value().bits();
truncated = truncated | flag;
i += 1;
}
};
{
{
let flag =
<DIFlags as ::bitflags::Flags>::FLAGS[i].value().bits();
truncated = truncated | flag;
i += 1;
}
};
{
{
let flag =
<DIFlags as ::bitflags::Flags>::FLAGS[i].value().bits();
truncated = truncated | flag;
i += 1;
}
};
{
{
let flag =
<DIFlags as ::bitflags::Flags>::FLAGS[i].value().bits();
truncated = truncated | flag;
i += 1;
}
};
{
{
let flag =
<DIFlags as ::bitflags::Flags>::FLAGS[i].value().bits();
truncated = truncated | flag;
i += 1;
}
};
{
{
let flag =
<DIFlags as ::bitflags::Flags>::FLAGS[i].value().bits();
truncated = truncated | flag;
i += 1;
}
};
{
{
let flag =
<DIFlags as ::bitflags::Flags>::FLAGS[i].value().bits();
truncated = truncated | flag;
i += 1;
}
};
{
{
let flag =
<DIFlags as ::bitflags::Flags>::FLAGS[i].value().bits();
truncated = truncated | flag;
i += 1;
}
};
{
{
let flag =
<DIFlags as ::bitflags::Flags>::FLAGS[i].value().bits();
truncated = truncated | flag;
i += 1;
}
};
{
{
let flag =
<DIFlags as ::bitflags::Flags>::FLAGS[i].value().bits();
truncated = truncated | flag;
i += 1;
}
};
{
{
let flag =
<DIFlags as ::bitflags::Flags>::FLAGS[i].value().bits();
truncated = truncated | flag;
i += 1;
}
};
{
{
let flag =
<DIFlags as ::bitflags::Flags>::FLAGS[i].value().bits();
truncated = truncated | flag;
i += 1;
}
};
{
{
let flag =
<DIFlags as ::bitflags::Flags>::FLAGS[i].value().bits();
truncated = truncated | flag;
i += 1;
}
};
{
{
let flag =
<DIFlags as ::bitflags::Flags>::FLAGS[i].value().bits();
truncated = truncated | flag;
i += 1;
}
};
{
{
let flag =
<DIFlags as ::bitflags::Flags>::FLAGS[i].value().bits();
truncated = truncated | flag;
i += 1;
}
};
{
{
let flag =
<DIFlags as ::bitflags::Flags>::FLAGS[i].value().bits();
truncated = truncated | flag;
i += 1;
}
};
{
{
let flag =
<DIFlags as ::bitflags::Flags>::FLAGS[i].value().bits();
truncated = truncated | flag;
i += 1;
}
};
{
{
let flag =
<DIFlags as ::bitflags::Flags>::FLAGS[i].value().bits();
truncated = truncated | flag;
i += 1;
}
};
{
{
let flag =
<DIFlags as ::bitflags::Flags>::FLAGS[i].value().bits();
truncated = truncated | flag;
i += 1;
}
};
{
{
let flag =
<DIFlags as ::bitflags::Flags>::FLAGS[i].value().bits();
truncated = truncated | flag;
i += 1;
}
};
{
{
let flag =
<DIFlags as ::bitflags::Flags>::FLAGS[i].value().bits();
truncated = truncated | flag;
i += 1;
}
};
{
{
let flag =
<DIFlags as ::bitflags::Flags>::FLAGS[i].value().bits();
truncated = truncated | flag;
i += 1;
}
};
{
{
let flag =
<DIFlags as ::bitflags::Flags>::FLAGS[i].value().bits();
truncated = truncated | flag;
i += 1;
}
};
let _ = i;
Self(truncated)
}
#[inline]
pub const fn bits(&self) -> u32 { self.0 }
#[inline]
pub const fn from_bits(bits: u32)
-> ::bitflags::__private::core::option::Option<Self> {
let truncated = Self::from_bits_truncate(bits).0;
if truncated == bits {
::bitflags::__private::core::option::Option::Some(Self(bits))
} else { ::bitflags::__private::core::option::Option::None }
}
#[inline]
pub const fn from_bits_truncate(bits: u32) -> Self {
Self(bits & Self::all().0)
}
#[inline]
pub const fn from_bits_retain(bits: u32) -> Self { Self(bits) }
#[inline]
pub fn from_name(name: &str)
-> ::bitflags::__private::core::option::Option<Self> {
{
if name == "FlagZero" {
return ::bitflags::__private::core::option::Option::Some(Self(DIFlags::FlagZero.bits()));
}
};
;
{
if name == "FlagPrivate" {
return ::bitflags::__private::core::option::Option::Some(Self(DIFlags::FlagPrivate.bits()));
}
};
;
{
if name == "FlagProtected" {
return ::bitflags::__private::core::option::Option::Some(Self(DIFlags::FlagProtected.bits()));
}
};
;
{
if name == "FlagPublic" {
return ::bitflags::__private::core::option::Option::Some(Self(DIFlags::FlagPublic.bits()));
}
};
;
{
if name == "FlagFwdDecl" {
return ::bitflags::__private::core::option::Option::Some(Self(DIFlags::FlagFwdDecl.bits()));
}
};
;
{
if name == "FlagAppleBlock" {
return ::bitflags::__private::core::option::Option::Some(Self(DIFlags::FlagAppleBlock.bits()));
}
};
;
{
if name == "FlagReservedBit4" {
return ::bitflags::__private::core::option::Option::Some(Self(DIFlags::FlagReservedBit4.bits()));
}
};
;
{
if name == "FlagVirtual" {
return ::bitflags::__private::core::option::Option::Some(Self(DIFlags::FlagVirtual.bits()));
}
};
;
{
if name == "FlagArtificial" {
return ::bitflags::__private::core::option::Option::Some(Self(DIFlags::FlagArtificial.bits()));
}
};
;
{
if name == "FlagExplicit" {
return ::bitflags::__private::core::option::Option::Some(Self(DIFlags::FlagExplicit.bits()));
}
};
;
{
if name == "FlagPrototyped" {
return ::bitflags::__private::core::option::Option::Some(Self(DIFlags::FlagPrototyped.bits()));
}
};
;
{
if name == "FlagObjcClassComplete" {
return ::bitflags::__private::core::option::Option::Some(Self(DIFlags::FlagObjcClassComplete.bits()));
}
};
;
{
if name == "FlagObjectPointer" {
return ::bitflags::__private::core::option::Option::Some(Self(DIFlags::FlagObjectPointer.bits()));
}
};
;
{
if name == "FlagVector" {
return ::bitflags::__private::core::option::Option::Some(Self(DIFlags::FlagVector.bits()));
}
};
;
{
if name == "FlagStaticMember" {
return ::bitflags::__private::core::option::Option::Some(Self(DIFlags::FlagStaticMember.bits()));
}
};
;
{
if name == "FlagLValueReference" {
return ::bitflags::__private::core::option::Option::Some(Self(DIFlags::FlagLValueReference.bits()));
}
};
;
{
if name == "FlagRValueReference" {
return ::bitflags::__private::core::option::Option::Some(Self(DIFlags::FlagRValueReference.bits()));
}
};
;
{
if name == "FlagReserved" {
return ::bitflags::__private::core::option::Option::Some(Self(DIFlags::FlagReserved.bits()));
}
};
;
{
if name == "FlagSingleInheritance" {
return ::bitflags::__private::core::option::Option::Some(Self(DIFlags::FlagSingleInheritance.bits()));
}
};
;
{
if name == "FlagMultipleInheritance" {
return ::bitflags::__private::core::option::Option::Some(Self(DIFlags::FlagMultipleInheritance.bits()));
}
};
;
{
if name == "FlagVirtualInheritance" {
return ::bitflags::__private::core::option::Option::Some(Self(DIFlags::FlagVirtualInheritance.bits()));
}
};
;
{
if name == "FlagIntroducedVirtual" {
return ::bitflags::__private::core::option::Option::Some(Self(DIFlags::FlagIntroducedVirtual.bits()));
}
};
;
{
if name == "FlagBitField" {
return ::bitflags::__private::core::option::Option::Some(Self(DIFlags::FlagBitField.bits()));
}
};
;
{
if name == "FlagNoReturn" {
return ::bitflags::__private::core::option::Option::Some(Self(DIFlags::FlagNoReturn.bits()));
}
};
;
{
if name == "FlagTypePassByValue" {
return ::bitflags::__private::core::option::Option::Some(Self(DIFlags::FlagTypePassByValue.bits()));
}
};
;
{
if name == "FlagTypePassByReference" {
return ::bitflags::__private::core::option::Option::Some(Self(DIFlags::FlagTypePassByReference.bits()));
}
};
;
{
if name == "FlagEnumClass" {
return ::bitflags::__private::core::option::Option::Some(Self(DIFlags::FlagEnumClass.bits()));
}
};
;
{
if name == "FlagThunk" {
return ::bitflags::__private::core::option::Option::Some(Self(DIFlags::FlagThunk.bits()));
}
};
;
{
if name == "FlagNonTrivial" {
return ::bitflags::__private::core::option::Option::Some(Self(DIFlags::FlagNonTrivial.bits()));
}
};
;
{
if name == "FlagBigEndian" {
return ::bitflags::__private::core::option::Option::Some(Self(DIFlags::FlagBigEndian.bits()));
}
};
;
{
if name == "FlagLittleEndian" {
return ::bitflags::__private::core::option::Option::Some(Self(DIFlags::FlagLittleEndian.bits()));
}
};
;
let _ = name;
::bitflags::__private::core::option::Option::None
}
#[inline]
pub const fn is_empty(&self) -> bool {
self.0 == <u32 as ::bitflags::Bits>::EMPTY
}
#[inline]
pub const fn is_all(&self) -> bool {
Self::all().0 | self.0 == self.0
}
#[inline]
pub const fn intersects(&self, other: Self) -> bool {
self.0 & other.0 != <u32 as ::bitflags::Bits>::EMPTY
}
#[inline]
pub const fn contains(&self, other: Self) -> bool {
self.0 & other.0 == other.0
}
#[inline]
pub fn insert(&mut self, other: Self) {
*self = Self(self.0).union(other);
}
#[inline]
pub fn remove(&mut self, other: Self) {
*self = Self(self.0).difference(other);
}
#[inline]
pub fn toggle(&mut self, other: Self) {
*self = Self(self.0).symmetric_difference(other);
}
#[inline]
pub fn set(&mut self, other: Self, value: bool) {
if value { self.insert(other); } else { self.remove(other); }
}
#[inline]
#[must_use]
pub const fn intersection(self, other: Self) -> Self {
Self(self.0 & other.0)
}
#[inline]
#[must_use]
pub const fn union(self, other: Self) -> Self {
Self(self.0 | other.0)
}
#[inline]
#[must_use]
pub const fn difference(self, other: Self) -> Self {
Self(self.0 & !other.0)
}
#[inline]
#[must_use]
pub const fn symmetric_difference(self, other: Self) -> Self {
Self(self.0 ^ other.0)
}
#[inline]
#[must_use]
pub const fn complement(self) -> Self {
Self::from_bits_truncate(!self.0)
}
}
impl ::bitflags::__private::core::fmt::Binary for InternalBitFlags {
fn fmt(&self, f: &mut ::bitflags::__private::core::fmt::Formatter)
-> ::bitflags::__private::core::fmt::Result {
let inner = self.0;
::bitflags::__private::core::fmt::Binary::fmt(&inner, f)
}
}
impl ::bitflags::__private::core::fmt::Octal for InternalBitFlags {
fn fmt(&self, f: &mut ::bitflags::__private::core::fmt::Formatter)
-> ::bitflags::__private::core::fmt::Result {
let inner = self.0;
::bitflags::__private::core::fmt::Octal::fmt(&inner, f)
}
}
impl ::bitflags::__private::core::fmt::LowerHex for InternalBitFlags {
fn fmt(&self, f: &mut ::bitflags::__private::core::fmt::Formatter)
-> ::bitflags::__private::core::fmt::Result {
let inner = self.0;
::bitflags::__private::core::fmt::LowerHex::fmt(&inner, f)
}
}
impl ::bitflags::__private::core::fmt::UpperHex for InternalBitFlags {
fn fmt(&self, f: &mut ::bitflags::__private::core::fmt::Formatter)
-> ::bitflags::__private::core::fmt::Result {
let inner = self.0;
::bitflags::__private::core::fmt::UpperHex::fmt(&inner, f)
}
}
impl ::bitflags::__private::core::ops::BitOr for InternalBitFlags {
type Output = Self;
#[inline]
fn bitor(self, other: InternalBitFlags) -> Self {
self.union(other)
}
}
impl ::bitflags::__private::core::ops::BitOrAssign for
InternalBitFlags {
#[inline]
fn bitor_assign(&mut self, other: Self) { self.insert(other); }
}
impl ::bitflags::__private::core::ops::BitXor for InternalBitFlags {
type Output = Self;
#[inline]
fn bitxor(self, other: Self) -> Self {
self.symmetric_difference(other)
}
}
impl ::bitflags::__private::core::ops::BitXorAssign for
InternalBitFlags {
#[inline]
fn bitxor_assign(&mut self, other: Self) { self.toggle(other); }
}
impl ::bitflags::__private::core::ops::BitAnd for InternalBitFlags {
type Output = Self;
#[inline]
fn bitand(self, other: Self) -> Self { self.intersection(other) }
}
impl ::bitflags::__private::core::ops::BitAndAssign for
InternalBitFlags {
#[inline]
fn bitand_assign(&mut self, other: Self) {
*self =
Self::from_bits_retain(self.bits()).intersection(other);
}
}
impl ::bitflags::__private::core::ops::Sub for InternalBitFlags {
type Output = Self;
#[inline]
fn sub(self, other: Self) -> Self { self.difference(other) }
}
impl ::bitflags::__private::core::ops::SubAssign for InternalBitFlags
{
#[inline]
fn sub_assign(&mut self, other: Self) { self.remove(other); }
}
impl ::bitflags::__private::core::ops::Not for InternalBitFlags {
type Output = Self;
#[inline]
fn not(self) -> Self { self.complement() }
}
impl ::bitflags::__private::core::iter::Extend<InternalBitFlags> for
InternalBitFlags {
fn extend<T: ::bitflags::__private::core::iter::IntoIterator<Item
= Self>>(&mut self, iterator: T) {
for item in iterator { self.insert(item) }
}
}
impl ::bitflags::__private::core::iter::FromIterator<InternalBitFlags>
for InternalBitFlags {
fn from_iter<T: ::bitflags::__private::core::iter::IntoIterator<Item
= Self>>(iterator: T) -> Self {
use ::bitflags::__private::core::iter::Extend;
let mut result = Self::empty();
result.extend(iterator);
result
}
}
impl InternalBitFlags {
#[inline]
pub const fn iter(&self) -> ::bitflags::iter::Iter<DIFlags> {
::bitflags::iter::Iter::__private_const_new(<DIFlags as
::bitflags::Flags>::FLAGS,
DIFlags::from_bits_retain(self.bits()),
DIFlags::from_bits_retain(self.bits()))
}
#[inline]
pub const fn iter_names(&self)
-> ::bitflags::iter::IterNames<DIFlags> {
::bitflags::iter::IterNames::__private_const_new(<DIFlags as
::bitflags::Flags>::FLAGS,
DIFlags::from_bits_retain(self.bits()),
DIFlags::from_bits_retain(self.bits()))
}
}
impl ::bitflags::__private::core::iter::IntoIterator for
InternalBitFlags {
type Item = DIFlags;
type IntoIter = ::bitflags::iter::Iter<DIFlags>;
fn into_iter(self) -> Self::IntoIter { self.iter() }
}
impl InternalBitFlags {
#[inline]
pub fn bits_mut(&mut self) -> &mut u32 { &mut self.0 }
}
#[allow(dead_code, deprecated, unused_attributes)]
impl DIFlags {
#[inline]
pub const fn empty() -> Self { Self(InternalBitFlags::empty()) }
#[inline]
pub const fn all() -> Self { Self(InternalBitFlags::all()) }
#[inline]
pub const fn bits(&self) -> u32 { self.0.bits() }
#[inline]
pub const fn from_bits(bits: u32)
-> ::bitflags::__private::core::option::Option<Self> {
match InternalBitFlags::from_bits(bits) {
::bitflags::__private::core::option::Option::Some(bits) =>
::bitflags::__private::core::option::Option::Some(Self(bits)),
::bitflags::__private::core::option::Option::None =>
::bitflags::__private::core::option::Option::None,
}
}
#[inline]
pub const fn from_bits_truncate(bits: u32) -> Self {
Self(InternalBitFlags::from_bits_truncate(bits))
}
#[inline]
pub const fn from_bits_retain(bits: u32) -> Self {
Self(InternalBitFlags::from_bits_retain(bits))
}
#[inline]
pub fn from_name(name: &str)
-> ::bitflags::__private::core::option::Option<Self> {
match InternalBitFlags::from_name(name) {
::bitflags::__private::core::option::Option::Some(bits) =>
::bitflags::__private::core::option::Option::Some(Self(bits)),
::bitflags::__private::core::option::Option::None =>
::bitflags::__private::core::option::Option::None,
}
}
#[inline]
pub const fn is_empty(&self) -> bool { self.0.is_empty() }
#[inline]
pub const fn is_all(&self) -> bool { self.0.is_all() }
#[inline]
pub const fn intersects(&self, other: Self) -> bool {
self.0.intersects(other.0)
}
#[inline]
pub const fn contains(&self, other: Self) -> bool {
self.0.contains(other.0)
}
#[inline]
pub fn insert(&mut self, other: Self) { self.0.insert(other.0) }
#[inline]
pub fn remove(&mut self, other: Self) { self.0.remove(other.0) }
#[inline]
pub fn toggle(&mut self, other: Self) { self.0.toggle(other.0) }
#[inline]
pub fn set(&mut self, other: Self, value: bool) {
self.0.set(other.0, value)
}
#[inline]
#[must_use]
pub const fn intersection(self, other: Self) -> Self {
Self(self.0.intersection(other.0))
}
#[inline]
#[must_use]
pub const fn union(self, other: Self) -> Self {
Self(self.0.union(other.0))
}
#[inline]
#[must_use]
pub const fn difference(self, other: Self) -> Self {
Self(self.0.difference(other.0))
}
#[inline]
#[must_use]
pub const fn symmetric_difference(self, other: Self) -> Self {
Self(self.0.symmetric_difference(other.0))
}
#[inline]
#[must_use]
pub const fn complement(self) -> Self {
Self(self.0.complement())
}
}
impl ::bitflags::__private::core::fmt::Binary for DIFlags {
fn fmt(&self, f: &mut ::bitflags::__private::core::fmt::Formatter)
-> ::bitflags::__private::core::fmt::Result {
let inner = self.0;
::bitflags::__private::core::fmt::Binary::fmt(&inner, f)
}
}
impl ::bitflags::__private::core::fmt::Octal for DIFlags {
fn fmt(&self, f: &mut ::bitflags::__private::core::fmt::Formatter)
-> ::bitflags::__private::core::fmt::Result {
let inner = self.0;
::bitflags::__private::core::fmt::Octal::fmt(&inner, f)
}
}
impl ::bitflags::__private::core::fmt::LowerHex for DIFlags {
fn fmt(&self, f: &mut ::bitflags::__private::core::fmt::Formatter)
-> ::bitflags::__private::core::fmt::Result {
let inner = self.0;
::bitflags::__private::core::fmt::LowerHex::fmt(&inner, f)
}
}
impl ::bitflags::__private::core::fmt::UpperHex for DIFlags {
fn fmt(&self, f: &mut ::bitflags::__private::core::fmt::Formatter)
-> ::bitflags::__private::core::fmt::Result {
let inner = self.0;
::bitflags::__private::core::fmt::UpperHex::fmt(&inner, f)
}
}
impl ::bitflags::__private::core::ops::BitOr for DIFlags {
type Output = Self;
#[inline]
fn bitor(self, other: DIFlags) -> Self { self.union(other) }
}
impl ::bitflags::__private::core::ops::BitOrAssign for DIFlags {
#[inline]
fn bitor_assign(&mut self, other: Self) { self.insert(other); }
}
impl ::bitflags::__private::core::ops::BitXor for DIFlags {
type Output = Self;
#[inline]
fn bitxor(self, other: Self) -> Self {
self.symmetric_difference(other)
}
}
impl ::bitflags::__private::core::ops::BitXorAssign for DIFlags {
#[inline]
fn bitxor_assign(&mut self, other: Self) { self.toggle(other); }
}
impl ::bitflags::__private::core::ops::BitAnd for DIFlags {
type Output = Self;
#[inline]
fn bitand(self, other: Self) -> Self { self.intersection(other) }
}
impl ::bitflags::__private::core::ops::BitAndAssign for DIFlags {
#[inline]
fn bitand_assign(&mut self, other: Self) {
*self =
Self::from_bits_retain(self.bits()).intersection(other);
}
}
impl ::bitflags::__private::core::ops::Sub for DIFlags {
type Output = Self;
#[inline]
fn sub(self, other: Self) -> Self { self.difference(other) }
}
impl ::bitflags::__private::core::ops::SubAssign for DIFlags {
#[inline]
fn sub_assign(&mut self, other: Self) { self.remove(other); }
}
impl ::bitflags::__private::core::ops::Not for DIFlags {
type Output = Self;
#[inline]
fn not(self) -> Self { self.complement() }
}
impl ::bitflags::__private::core::iter::Extend<DIFlags> for DIFlags {
fn extend<T: ::bitflags::__private::core::iter::IntoIterator<Item
= Self>>(&mut self, iterator: T) {
for item in iterator { self.insert(item) }
}
}
impl ::bitflags::__private::core::iter::FromIterator<DIFlags> for
DIFlags {
fn from_iter<T: ::bitflags::__private::core::iter::IntoIterator<Item
= Self>>(iterator: T) -> Self {
use ::bitflags::__private::core::iter::Extend;
let mut result = Self::empty();
result.extend(iterator);
result
}
}
impl DIFlags {
#[inline]
pub const fn iter(&self) -> ::bitflags::iter::Iter<DIFlags> {
::bitflags::iter::Iter::__private_const_new(<DIFlags as
::bitflags::Flags>::FLAGS,
DIFlags::from_bits_retain(self.bits()),
DIFlags::from_bits_retain(self.bits()))
}
#[inline]
pub const fn iter_names(&self)
-> ::bitflags::iter::IterNames<DIFlags> {
::bitflags::iter::IterNames::__private_const_new(<DIFlags as
::bitflags::Flags>::FLAGS,
DIFlags::from_bits_retain(self.bits()),
DIFlags::from_bits_retain(self.bits()))
}
}
impl ::bitflags::__private::core::iter::IntoIterator for DIFlags {
type Item = DIFlags;
type IntoIter = ::bitflags::iter::Iter<DIFlags>;
fn into_iter(self) -> Self::IntoIter { self.iter() }
}
};Clone, #[automatically_derived]
impl ::core::marker::Copy for DIFlags { }Copy, #[automatically_derived]
impl ::core::default::Default for DIFlags {
#[inline]
fn default() -> DIFlags { DIFlags(::core::default::Default::default()) }
}Default)]
776 pub(crate) struct DIFlags: u32 {
777 const FlagZero = 0;
778 const FlagPrivate = 1;
779 const FlagProtected = 2;
780 const FlagPublic = 3;
781 const FlagFwdDecl = (1 << 2);
782 const FlagAppleBlock = (1 << 3);
783 const FlagReservedBit4 = (1 << 4);
784 const FlagVirtual = (1 << 5);
785 const FlagArtificial = (1 << 6);
786 const FlagExplicit = (1 << 7);
787 const FlagPrototyped = (1 << 8);
788 const FlagObjcClassComplete = (1 << 9);
789 const FlagObjectPointer = (1 << 10);
790 const FlagVector = (1 << 11);
791 const FlagStaticMember = (1 << 12);
792 const FlagLValueReference = (1 << 13);
793 const FlagRValueReference = (1 << 14);
794 const FlagReserved = (1 << 15);
795 const FlagSingleInheritance = (1 << 16);
796 const FlagMultipleInheritance = (2 << 16);
797 const FlagVirtualInheritance = (3 << 16);
798 const FlagIntroducedVirtual = (1 << 18);
799 const FlagBitField = (1 << 19);
800 const FlagNoReturn = (1 << 20);
801 const FlagTypePassByValue = (1 << 22);
803 const FlagTypePassByReference = (1 << 23);
804 const FlagEnumClass = (1 << 24);
805 const FlagThunk = (1 << 25);
806 const FlagNonTrivial = (1 << 26);
807 const FlagBigEndian = (1 << 27);
808 const FlagLittleEndian = (1 << 28);
809 }
810 }
811
812 bitflags! {
814 #[repr(transparent)]
815 #[derive(#[automatically_derived]
impl ::core::clone::Clone for DISPFlags {
#[inline]
fn clone(&self) -> DISPFlags {
let _:
::core::clone::AssertParamIsClone<<DISPFlags as
::bitflags::__private::PublicFlags>::Internal>;
*self
}
}
impl DISPFlags {
#[allow(deprecated, non_upper_case_globals,)]
pub const SPFlagZero: Self = Self::from_bits_retain(0);
#[allow(deprecated, non_upper_case_globals,)]
pub const SPFlagVirtual: Self = Self::from_bits_retain(1);
#[allow(deprecated, non_upper_case_globals,)]
pub const SPFlagPureVirtual: Self = Self::from_bits_retain(2);
#[allow(deprecated, non_upper_case_globals,)]
pub const SPFlagLocalToUnit: Self = Self::from_bits_retain((1 << 2));
#[allow(deprecated, non_upper_case_globals,)]
pub const SPFlagDefinition: Self = Self::from_bits_retain((1 << 3));
#[allow(deprecated, non_upper_case_globals,)]
pub const SPFlagOptimized: Self = Self::from_bits_retain((1 << 4));
#[allow(deprecated, non_upper_case_globals,)]
pub const SPFlagMainSubprogram: Self = Self::from_bits_retain((1 << 5));
}
impl ::bitflags::Flags for DISPFlags {
const FLAGS: &'static [::bitflags::Flag<DISPFlags>] =
&[{
#[allow(deprecated, non_upper_case_globals,)]
::bitflags::Flag::new("SPFlagZero", DISPFlags::SPFlagZero)
},
{
#[allow(deprecated, non_upper_case_globals,)]
::bitflags::Flag::new("SPFlagVirtual",
DISPFlags::SPFlagVirtual)
},
{
#[allow(deprecated, non_upper_case_globals,)]
::bitflags::Flag::new("SPFlagPureVirtual",
DISPFlags::SPFlagPureVirtual)
},
{
#[allow(deprecated, non_upper_case_globals,)]
::bitflags::Flag::new("SPFlagLocalToUnit",
DISPFlags::SPFlagLocalToUnit)
},
{
#[allow(deprecated, non_upper_case_globals,)]
::bitflags::Flag::new("SPFlagDefinition",
DISPFlags::SPFlagDefinition)
},
{
#[allow(deprecated, non_upper_case_globals,)]
::bitflags::Flag::new("SPFlagOptimized",
DISPFlags::SPFlagOptimized)
},
{
#[allow(deprecated, non_upper_case_globals,)]
::bitflags::Flag::new("SPFlagMainSubprogram",
DISPFlags::SPFlagMainSubprogram)
}];
type Bits = u32;
fn bits(&self) -> u32 { DISPFlags::bits(self) }
fn from_bits_retain(bits: u32) -> DISPFlags {
DISPFlags::from_bits_retain(bits)
}
}
#[allow(dead_code, deprecated, unused_doc_comments, unused_attributes,
unused_mut, unused_imports, non_upper_case_globals, clippy ::
assign_op_pattern, clippy :: indexing_slicing, clippy :: same_name_method,
clippy :: iter_without_into_iter,)]
const _: () =
{
#[repr(transparent)]
pub(crate) struct InternalBitFlags(u32);
#[automatically_derived]
#[doc(hidden)]
unsafe impl ::core::clone::TrivialClone for InternalBitFlags { }
#[automatically_derived]
impl ::core::clone::Clone for InternalBitFlags {
#[inline]
fn clone(&self) -> InternalBitFlags {
let _: ::core::clone::AssertParamIsClone<u32>;
*self
}
}
#[automatically_derived]
impl ::core::marker::Copy for InternalBitFlags { }
#[automatically_derived]
impl ::core::marker::StructuralPartialEq for InternalBitFlags { }
#[automatically_derived]
impl ::core::cmp::PartialEq for InternalBitFlags {
#[inline]
fn eq(&self, other: &InternalBitFlags) -> bool {
self.0 == other.0
}
}
#[automatically_derived]
impl ::core::cmp::Eq for InternalBitFlags {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<u32>;
}
}
#[automatically_derived]
impl ::core::cmp::PartialOrd for InternalBitFlags {
#[inline]
fn partial_cmp(&self, other: &InternalBitFlags)
-> ::core::option::Option<::core::cmp::Ordering> {
::core::option::Option::Some(::core::cmp::Ord::cmp(self,
other))
}
}
#[automatically_derived]
impl ::core::cmp::Ord for InternalBitFlags {
#[inline]
fn cmp(&self, other: &InternalBitFlags) -> ::core::cmp::Ordering {
::core::cmp::Ord::cmp(&self.0, &other.0)
}
}
#[automatically_derived]
impl ::core::hash::Hash for InternalBitFlags {
#[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
::core::hash::Hash::hash(&self.0, state)
}
}
impl ::bitflags::__private::PublicFlags for DISPFlags {
type Primitive = u32;
type Internal = InternalBitFlags;
}
impl ::bitflags::__private::core::default::Default for
InternalBitFlags {
#[inline]
fn default() -> Self { InternalBitFlags::empty() }
}
impl ::bitflags::__private::core::fmt::Debug for InternalBitFlags {
fn fmt(&self,
f: &mut ::bitflags::__private::core::fmt::Formatter<'_>)
-> ::bitflags::__private::core::fmt::Result {
if self.is_empty() {
f.write_fmt(format_args!("{0:#x}",
<u32 as ::bitflags::Bits>::EMPTY))
} else {
::bitflags::__private::core::fmt::Display::fmt(self, f)
}
}
}
impl ::bitflags::__private::core::fmt::Display for InternalBitFlags {
fn fmt(&self,
f: &mut ::bitflags::__private::core::fmt::Formatter<'_>)
-> ::bitflags::__private::core::fmt::Result {
::bitflags::parser::to_writer(&DISPFlags(*self), f)
}
}
impl ::bitflags::__private::core::str::FromStr for InternalBitFlags {
type Err = ::bitflags::parser::ParseError;
fn from_str(s: &str)
->
::bitflags::__private::core::result::Result<Self,
Self::Err> {
::bitflags::parser::from_str::<DISPFlags>(s).map(|flags|
flags.0)
}
}
impl ::bitflags::__private::core::convert::AsRef<u32> for
InternalBitFlags {
fn as_ref(&self) -> &u32 { &self.0 }
}
impl ::bitflags::__private::core::convert::From<u32> for
InternalBitFlags {
fn from(bits: u32) -> Self { Self::from_bits_retain(bits) }
}
#[allow(dead_code, deprecated, unused_attributes)]
impl InternalBitFlags {
#[inline]
pub const fn empty() -> Self {
Self(<u32 as ::bitflags::Bits>::EMPTY)
}
#[inline]
pub const fn all() -> Self {
let mut truncated = <u32 as ::bitflags::Bits>::EMPTY;
let mut i = 0;
{
{
let flag =
<DISPFlags as ::bitflags::Flags>::FLAGS[i].value().bits();
truncated = truncated | flag;
i += 1;
}
};
{
{
let flag =
<DISPFlags as ::bitflags::Flags>::FLAGS[i].value().bits();
truncated = truncated | flag;
i += 1;
}
};
{
{
let flag =
<DISPFlags as ::bitflags::Flags>::FLAGS[i].value().bits();
truncated = truncated | flag;
i += 1;
}
};
{
{
let flag =
<DISPFlags as ::bitflags::Flags>::FLAGS[i].value().bits();
truncated = truncated | flag;
i += 1;
}
};
{
{
let flag =
<DISPFlags as ::bitflags::Flags>::FLAGS[i].value().bits();
truncated = truncated | flag;
i += 1;
}
};
{
{
let flag =
<DISPFlags as ::bitflags::Flags>::FLAGS[i].value().bits();
truncated = truncated | flag;
i += 1;
}
};
{
{
let flag =
<DISPFlags as ::bitflags::Flags>::FLAGS[i].value().bits();
truncated = truncated | flag;
i += 1;
}
};
let _ = i;
Self(truncated)
}
#[inline]
pub const fn bits(&self) -> u32 { self.0 }
#[inline]
pub const fn from_bits(bits: u32)
-> ::bitflags::__private::core::option::Option<Self> {
let truncated = Self::from_bits_truncate(bits).0;
if truncated == bits {
::bitflags::__private::core::option::Option::Some(Self(bits))
} else { ::bitflags::__private::core::option::Option::None }
}
#[inline]
pub const fn from_bits_truncate(bits: u32) -> Self {
Self(bits & Self::all().0)
}
#[inline]
pub const fn from_bits_retain(bits: u32) -> Self { Self(bits) }
#[inline]
pub fn from_name(name: &str)
-> ::bitflags::__private::core::option::Option<Self> {
{
if name == "SPFlagZero" {
return ::bitflags::__private::core::option::Option::Some(Self(DISPFlags::SPFlagZero.bits()));
}
};
;
{
if name == "SPFlagVirtual" {
return ::bitflags::__private::core::option::Option::Some(Self(DISPFlags::SPFlagVirtual.bits()));
}
};
;
{
if name == "SPFlagPureVirtual" {
return ::bitflags::__private::core::option::Option::Some(Self(DISPFlags::SPFlagPureVirtual.bits()));
}
};
;
{
if name == "SPFlagLocalToUnit" {
return ::bitflags::__private::core::option::Option::Some(Self(DISPFlags::SPFlagLocalToUnit.bits()));
}
};
;
{
if name == "SPFlagDefinition" {
return ::bitflags::__private::core::option::Option::Some(Self(DISPFlags::SPFlagDefinition.bits()));
}
};
;
{
if name == "SPFlagOptimized" {
return ::bitflags::__private::core::option::Option::Some(Self(DISPFlags::SPFlagOptimized.bits()));
}
};
;
{
if name == "SPFlagMainSubprogram" {
return ::bitflags::__private::core::option::Option::Some(Self(DISPFlags::SPFlagMainSubprogram.bits()));
}
};
;
let _ = name;
::bitflags::__private::core::option::Option::None
}
#[inline]
pub const fn is_empty(&self) -> bool {
self.0 == <u32 as ::bitflags::Bits>::EMPTY
}
#[inline]
pub const fn is_all(&self) -> bool {
Self::all().0 | self.0 == self.0
}
#[inline]
pub const fn intersects(&self, other: Self) -> bool {
self.0 & other.0 != <u32 as ::bitflags::Bits>::EMPTY
}
#[inline]
pub const fn contains(&self, other: Self) -> bool {
self.0 & other.0 == other.0
}
#[inline]
pub fn insert(&mut self, other: Self) {
*self = Self(self.0).union(other);
}
#[inline]
pub fn remove(&mut self, other: Self) {
*self = Self(self.0).difference(other);
}
#[inline]
pub fn toggle(&mut self, other: Self) {
*self = Self(self.0).symmetric_difference(other);
}
#[inline]
pub fn set(&mut self, other: Self, value: bool) {
if value { self.insert(other); } else { self.remove(other); }
}
#[inline]
#[must_use]
pub const fn intersection(self, other: Self) -> Self {
Self(self.0 & other.0)
}
#[inline]
#[must_use]
pub const fn union(self, other: Self) -> Self {
Self(self.0 | other.0)
}
#[inline]
#[must_use]
pub const fn difference(self, other: Self) -> Self {
Self(self.0 & !other.0)
}
#[inline]
#[must_use]
pub const fn symmetric_difference(self, other: Self) -> Self {
Self(self.0 ^ other.0)
}
#[inline]
#[must_use]
pub const fn complement(self) -> Self {
Self::from_bits_truncate(!self.0)
}
}
impl ::bitflags::__private::core::fmt::Binary for InternalBitFlags {
fn fmt(&self, f: &mut ::bitflags::__private::core::fmt::Formatter)
-> ::bitflags::__private::core::fmt::Result {
let inner = self.0;
::bitflags::__private::core::fmt::Binary::fmt(&inner, f)
}
}
impl ::bitflags::__private::core::fmt::Octal for InternalBitFlags {
fn fmt(&self, f: &mut ::bitflags::__private::core::fmt::Formatter)
-> ::bitflags::__private::core::fmt::Result {
let inner = self.0;
::bitflags::__private::core::fmt::Octal::fmt(&inner, f)
}
}
impl ::bitflags::__private::core::fmt::LowerHex for InternalBitFlags {
fn fmt(&self, f: &mut ::bitflags::__private::core::fmt::Formatter)
-> ::bitflags::__private::core::fmt::Result {
let inner = self.0;
::bitflags::__private::core::fmt::LowerHex::fmt(&inner, f)
}
}
impl ::bitflags::__private::core::fmt::UpperHex for InternalBitFlags {
fn fmt(&self, f: &mut ::bitflags::__private::core::fmt::Formatter)
-> ::bitflags::__private::core::fmt::Result {
let inner = self.0;
::bitflags::__private::core::fmt::UpperHex::fmt(&inner, f)
}
}
impl ::bitflags::__private::core::ops::BitOr for InternalBitFlags {
type Output = Self;
#[inline]
fn bitor(self, other: InternalBitFlags) -> Self {
self.union(other)
}
}
impl ::bitflags::__private::core::ops::BitOrAssign for
InternalBitFlags {
#[inline]
fn bitor_assign(&mut self, other: Self) { self.insert(other); }
}
impl ::bitflags::__private::core::ops::BitXor for InternalBitFlags {
type Output = Self;
#[inline]
fn bitxor(self, other: Self) -> Self {
self.symmetric_difference(other)
}
}
impl ::bitflags::__private::core::ops::BitXorAssign for
InternalBitFlags {
#[inline]
fn bitxor_assign(&mut self, other: Self) { self.toggle(other); }
}
impl ::bitflags::__private::core::ops::BitAnd for InternalBitFlags {
type Output = Self;
#[inline]
fn bitand(self, other: Self) -> Self { self.intersection(other) }
}
impl ::bitflags::__private::core::ops::BitAndAssign for
InternalBitFlags {
#[inline]
fn bitand_assign(&mut self, other: Self) {
*self =
Self::from_bits_retain(self.bits()).intersection(other);
}
}
impl ::bitflags::__private::core::ops::Sub for InternalBitFlags {
type Output = Self;
#[inline]
fn sub(self, other: Self) -> Self { self.difference(other) }
}
impl ::bitflags::__private::core::ops::SubAssign for InternalBitFlags
{
#[inline]
fn sub_assign(&mut self, other: Self) { self.remove(other); }
}
impl ::bitflags::__private::core::ops::Not for InternalBitFlags {
type Output = Self;
#[inline]
fn not(self) -> Self { self.complement() }
}
impl ::bitflags::__private::core::iter::Extend<InternalBitFlags> for
InternalBitFlags {
fn extend<T: ::bitflags::__private::core::iter::IntoIterator<Item
= Self>>(&mut self, iterator: T) {
for item in iterator { self.insert(item) }
}
}
impl ::bitflags::__private::core::iter::FromIterator<InternalBitFlags>
for InternalBitFlags {
fn from_iter<T: ::bitflags::__private::core::iter::IntoIterator<Item
= Self>>(iterator: T) -> Self {
use ::bitflags::__private::core::iter::Extend;
let mut result = Self::empty();
result.extend(iterator);
result
}
}
impl InternalBitFlags {
#[inline]
pub const fn iter(&self) -> ::bitflags::iter::Iter<DISPFlags> {
::bitflags::iter::Iter::__private_const_new(<DISPFlags as
::bitflags::Flags>::FLAGS,
DISPFlags::from_bits_retain(self.bits()),
DISPFlags::from_bits_retain(self.bits()))
}
#[inline]
pub const fn iter_names(&self)
-> ::bitflags::iter::IterNames<DISPFlags> {
::bitflags::iter::IterNames::__private_const_new(<DISPFlags as
::bitflags::Flags>::FLAGS,
DISPFlags::from_bits_retain(self.bits()),
DISPFlags::from_bits_retain(self.bits()))
}
}
impl ::bitflags::__private::core::iter::IntoIterator for
InternalBitFlags {
type Item = DISPFlags;
type IntoIter = ::bitflags::iter::Iter<DISPFlags>;
fn into_iter(self) -> Self::IntoIter { self.iter() }
}
impl InternalBitFlags {
#[inline]
pub fn bits_mut(&mut self) -> &mut u32 { &mut self.0 }
}
#[allow(dead_code, deprecated, unused_attributes)]
impl DISPFlags {
#[inline]
pub const fn empty() -> Self { Self(InternalBitFlags::empty()) }
#[inline]
pub const fn all() -> Self { Self(InternalBitFlags::all()) }
#[inline]
pub const fn bits(&self) -> u32 { self.0.bits() }
#[inline]
pub const fn from_bits(bits: u32)
-> ::bitflags::__private::core::option::Option<Self> {
match InternalBitFlags::from_bits(bits) {
::bitflags::__private::core::option::Option::Some(bits) =>
::bitflags::__private::core::option::Option::Some(Self(bits)),
::bitflags::__private::core::option::Option::None =>
::bitflags::__private::core::option::Option::None,
}
}
#[inline]
pub const fn from_bits_truncate(bits: u32) -> Self {
Self(InternalBitFlags::from_bits_truncate(bits))
}
#[inline]
pub const fn from_bits_retain(bits: u32) -> Self {
Self(InternalBitFlags::from_bits_retain(bits))
}
#[inline]
pub fn from_name(name: &str)
-> ::bitflags::__private::core::option::Option<Self> {
match InternalBitFlags::from_name(name) {
::bitflags::__private::core::option::Option::Some(bits) =>
::bitflags::__private::core::option::Option::Some(Self(bits)),
::bitflags::__private::core::option::Option::None =>
::bitflags::__private::core::option::Option::None,
}
}
#[inline]
pub const fn is_empty(&self) -> bool { self.0.is_empty() }
#[inline]
pub const fn is_all(&self) -> bool { self.0.is_all() }
#[inline]
pub const fn intersects(&self, other: Self) -> bool {
self.0.intersects(other.0)
}
#[inline]
pub const fn contains(&self, other: Self) -> bool {
self.0.contains(other.0)
}
#[inline]
pub fn insert(&mut self, other: Self) { self.0.insert(other.0) }
#[inline]
pub fn remove(&mut self, other: Self) { self.0.remove(other.0) }
#[inline]
pub fn toggle(&mut self, other: Self) { self.0.toggle(other.0) }
#[inline]
pub fn set(&mut self, other: Self, value: bool) {
self.0.set(other.0, value)
}
#[inline]
#[must_use]
pub const fn intersection(self, other: Self) -> Self {
Self(self.0.intersection(other.0))
}
#[inline]
#[must_use]
pub const fn union(self, other: Self) -> Self {
Self(self.0.union(other.0))
}
#[inline]
#[must_use]
pub const fn difference(self, other: Self) -> Self {
Self(self.0.difference(other.0))
}
#[inline]
#[must_use]
pub const fn symmetric_difference(self, other: Self) -> Self {
Self(self.0.symmetric_difference(other.0))
}
#[inline]
#[must_use]
pub const fn complement(self) -> Self {
Self(self.0.complement())
}
}
impl ::bitflags::__private::core::fmt::Binary for DISPFlags {
fn fmt(&self, f: &mut ::bitflags::__private::core::fmt::Formatter)
-> ::bitflags::__private::core::fmt::Result {
let inner = self.0;
::bitflags::__private::core::fmt::Binary::fmt(&inner, f)
}
}
impl ::bitflags::__private::core::fmt::Octal for DISPFlags {
fn fmt(&self, f: &mut ::bitflags::__private::core::fmt::Formatter)
-> ::bitflags::__private::core::fmt::Result {
let inner = self.0;
::bitflags::__private::core::fmt::Octal::fmt(&inner, f)
}
}
impl ::bitflags::__private::core::fmt::LowerHex for DISPFlags {
fn fmt(&self, f: &mut ::bitflags::__private::core::fmt::Formatter)
-> ::bitflags::__private::core::fmt::Result {
let inner = self.0;
::bitflags::__private::core::fmt::LowerHex::fmt(&inner, f)
}
}
impl ::bitflags::__private::core::fmt::UpperHex for DISPFlags {
fn fmt(&self, f: &mut ::bitflags::__private::core::fmt::Formatter)
-> ::bitflags::__private::core::fmt::Result {
let inner = self.0;
::bitflags::__private::core::fmt::UpperHex::fmt(&inner, f)
}
}
impl ::bitflags::__private::core::ops::BitOr for DISPFlags {
type Output = Self;
#[inline]
fn bitor(self, other: DISPFlags) -> Self { self.union(other) }
}
impl ::bitflags::__private::core::ops::BitOrAssign for DISPFlags {
#[inline]
fn bitor_assign(&mut self, other: Self) { self.insert(other); }
}
impl ::bitflags::__private::core::ops::BitXor for DISPFlags {
type Output = Self;
#[inline]
fn bitxor(self, other: Self) -> Self {
self.symmetric_difference(other)
}
}
impl ::bitflags::__private::core::ops::BitXorAssign for DISPFlags {
#[inline]
fn bitxor_assign(&mut self, other: Self) { self.toggle(other); }
}
impl ::bitflags::__private::core::ops::BitAnd for DISPFlags {
type Output = Self;
#[inline]
fn bitand(self, other: Self) -> Self { self.intersection(other) }
}
impl ::bitflags::__private::core::ops::BitAndAssign for DISPFlags {
#[inline]
fn bitand_assign(&mut self, other: Self) {
*self =
Self::from_bits_retain(self.bits()).intersection(other);
}
}
impl ::bitflags::__private::core::ops::Sub for DISPFlags {
type Output = Self;
#[inline]
fn sub(self, other: Self) -> Self { self.difference(other) }
}
impl ::bitflags::__private::core::ops::SubAssign for DISPFlags {
#[inline]
fn sub_assign(&mut self, other: Self) { self.remove(other); }
}
impl ::bitflags::__private::core::ops::Not for DISPFlags {
type Output = Self;
#[inline]
fn not(self) -> Self { self.complement() }
}
impl ::bitflags::__private::core::iter::Extend<DISPFlags> for
DISPFlags {
fn extend<T: ::bitflags::__private::core::iter::IntoIterator<Item
= Self>>(&mut self, iterator: T) {
for item in iterator { self.insert(item) }
}
}
impl ::bitflags::__private::core::iter::FromIterator<DISPFlags> for
DISPFlags {
fn from_iter<T: ::bitflags::__private::core::iter::IntoIterator<Item
= Self>>(iterator: T) -> Self {
use ::bitflags::__private::core::iter::Extend;
let mut result = Self::empty();
result.extend(iterator);
result
}
}
impl DISPFlags {
#[inline]
pub const fn iter(&self) -> ::bitflags::iter::Iter<DISPFlags> {
::bitflags::iter::Iter::__private_const_new(<DISPFlags as
::bitflags::Flags>::FLAGS,
DISPFlags::from_bits_retain(self.bits()),
DISPFlags::from_bits_retain(self.bits()))
}
#[inline]
pub const fn iter_names(&self)
-> ::bitflags::iter::IterNames<DISPFlags> {
::bitflags::iter::IterNames::__private_const_new(<DISPFlags as
::bitflags::Flags>::FLAGS,
DISPFlags::from_bits_retain(self.bits()),
DISPFlags::from_bits_retain(self.bits()))
}
}
impl ::bitflags::__private::core::iter::IntoIterator for DISPFlags {
type Item = DISPFlags;
type IntoIter = ::bitflags::iter::Iter<DISPFlags>;
fn into_iter(self) -> Self::IntoIter { self.iter() }
}
};Clone, #[automatically_derived]
impl ::core::marker::Copy for DISPFlags { }Copy, #[automatically_derived]
impl ::core::default::Default for DISPFlags {
#[inline]
fn default() -> DISPFlags {
DISPFlags(::core::default::Default::default())
}
}Default)]
816 pub(crate) struct DISPFlags: u32 {
817 const SPFlagZero = 0;
818 const SPFlagVirtual = 1;
819 const SPFlagPureVirtual = 2;
820 const SPFlagLocalToUnit = (1 << 2);
821 const SPFlagDefinition = (1 << 3);
822 const SPFlagOptimized = (1 << 4);
823 const SPFlagMainSubprogram = (1 << 5);
824 }
825 }
826
827 #[derive(#[automatically_derived]
impl ::core::marker::Copy for DebugEmissionKind { }Copy, #[automatically_derived]
impl ::core::clone::Clone for DebugEmissionKind {
#[inline]
fn clone(&self) -> DebugEmissionKind { *self }
}Clone)]
829 #[repr(C)]
830 pub(crate) enum DebugEmissionKind {
831 NoDebug,
832 FullDebug,
833 LineTablesOnly,
834 DebugDirectivesOnly,
835 }
836
837 #[derive(#[automatically_derived]
impl ::core::clone::Clone for DebugNameTableKind {
#[inline]
fn clone(&self) -> DebugNameTableKind { *self }
}Clone, #[automatically_derived]
impl ::core::marker::Copy for DebugNameTableKind { }Copy)]
839 #[repr(C)]
840 pub(crate) enum DebugNameTableKind {
841 Default,
842 #[expect(dead_code)]
843 Gnu,
844 None,
845 }
846}
847
848#[repr(transparent)]
pub(crate) struct AllocKindFlags(<AllocKindFlags as
::bitflags::__private::PublicFlags>::Internal);
#[automatically_derived]
impl ::core::default::Default for AllocKindFlags {
#[inline]
fn default() -> AllocKindFlags {
AllocKindFlags(::core::default::Default::default())
}
}
impl AllocKindFlags {
#[allow(deprecated, non_upper_case_globals,)]
pub const Unknown: Self = Self::from_bits_retain(0);
#[allow(deprecated, non_upper_case_globals,)]
pub const Alloc: Self = Self::from_bits_retain(1);
#[allow(deprecated, non_upper_case_globals,)]
pub const Realloc: Self = Self::from_bits_retain(1 << 1);
#[allow(deprecated, non_upper_case_globals,)]
pub const Free: Self = Self::from_bits_retain(1 << 2);
#[allow(deprecated, non_upper_case_globals,)]
pub const Uninitialized: Self = Self::from_bits_retain(1 << 3);
#[allow(deprecated, non_upper_case_globals,)]
pub const Zeroed: Self = Self::from_bits_retain(1 << 4);
#[allow(deprecated, non_upper_case_globals,)]
pub const Aligned: Self = Self::from_bits_retain(1 << 5);
}
impl ::bitflags::Flags for AllocKindFlags {
const FLAGS: &'static [::bitflags::Flag<AllocKindFlags>] =
&[{
#[allow(deprecated, non_upper_case_globals,)]
::bitflags::Flag::new("Unknown", AllocKindFlags::Unknown)
},
{
#[allow(deprecated, non_upper_case_globals,)]
::bitflags::Flag::new("Alloc", AllocKindFlags::Alloc)
},
{
#[allow(deprecated, non_upper_case_globals,)]
::bitflags::Flag::new("Realloc", AllocKindFlags::Realloc)
},
{
#[allow(deprecated, non_upper_case_globals,)]
::bitflags::Flag::new("Free", AllocKindFlags::Free)
},
{
#[allow(deprecated, non_upper_case_globals,)]
::bitflags::Flag::new("Uninitialized",
AllocKindFlags::Uninitialized)
},
{
#[allow(deprecated, non_upper_case_globals,)]
::bitflags::Flag::new("Zeroed", AllocKindFlags::Zeroed)
},
{
#[allow(deprecated, non_upper_case_globals,)]
::bitflags::Flag::new("Aligned", AllocKindFlags::Aligned)
}];
type Bits = u64;
fn bits(&self) -> u64 { AllocKindFlags::bits(self) }
fn from_bits_retain(bits: u64) -> AllocKindFlags {
AllocKindFlags::from_bits_retain(bits)
}
}
#[allow(dead_code, deprecated, unused_doc_comments, unused_attributes,
unused_mut, unused_imports, non_upper_case_globals, clippy ::
assign_op_pattern, clippy :: indexing_slicing, clippy :: same_name_method,
clippy :: iter_without_into_iter,)]
const _: () =
{
#[repr(transparent)]
pub(crate) struct InternalBitFlags(u64);
#[automatically_derived]
#[doc(hidden)]
unsafe impl ::core::clone::TrivialClone for InternalBitFlags { }
#[automatically_derived]
impl ::core::clone::Clone for InternalBitFlags {
#[inline]
fn clone(&self) -> InternalBitFlags {
let _: ::core::clone::AssertParamIsClone<u64>;
*self
}
}
#[automatically_derived]
impl ::core::marker::Copy for InternalBitFlags { }
#[automatically_derived]
impl ::core::marker::StructuralPartialEq for InternalBitFlags { }
#[automatically_derived]
impl ::core::cmp::PartialEq for InternalBitFlags {
#[inline]
fn eq(&self, other: &InternalBitFlags) -> bool {
self.0 == other.0
}
}
#[automatically_derived]
impl ::core::cmp::Eq for InternalBitFlags {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<u64>;
}
}
#[automatically_derived]
impl ::core::cmp::PartialOrd for InternalBitFlags {
#[inline]
fn partial_cmp(&self, other: &InternalBitFlags)
-> ::core::option::Option<::core::cmp::Ordering> {
::core::option::Option::Some(::core::cmp::Ord::cmp(self,
other))
}
}
#[automatically_derived]
impl ::core::cmp::Ord for InternalBitFlags {
#[inline]
fn cmp(&self, other: &InternalBitFlags) -> ::core::cmp::Ordering {
::core::cmp::Ord::cmp(&self.0, &other.0)
}
}
#[automatically_derived]
impl ::core::hash::Hash for InternalBitFlags {
#[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
::core::hash::Hash::hash(&self.0, state)
}
}
impl ::bitflags::__private::PublicFlags for AllocKindFlags {
type Primitive = u64;
type Internal = InternalBitFlags;
}
impl ::bitflags::__private::core::default::Default for
InternalBitFlags {
#[inline]
fn default() -> Self { InternalBitFlags::empty() }
}
impl ::bitflags::__private::core::fmt::Debug for InternalBitFlags {
fn fmt(&self,
f: &mut ::bitflags::__private::core::fmt::Formatter<'_>)
-> ::bitflags::__private::core::fmt::Result {
if self.is_empty() {
f.write_fmt(format_args!("{0:#x}",
<u64 as ::bitflags::Bits>::EMPTY))
} else {
::bitflags::__private::core::fmt::Display::fmt(self, f)
}
}
}
impl ::bitflags::__private::core::fmt::Display for InternalBitFlags {
fn fmt(&self,
f: &mut ::bitflags::__private::core::fmt::Formatter<'_>)
-> ::bitflags::__private::core::fmt::Result {
::bitflags::parser::to_writer(&AllocKindFlags(*self), f)
}
}
impl ::bitflags::__private::core::str::FromStr for InternalBitFlags {
type Err = ::bitflags::parser::ParseError;
fn from_str(s: &str)
->
::bitflags::__private::core::result::Result<Self,
Self::Err> {
::bitflags::parser::from_str::<AllocKindFlags>(s).map(|flags|
flags.0)
}
}
impl ::bitflags::__private::core::convert::AsRef<u64> for
InternalBitFlags {
fn as_ref(&self) -> &u64 { &self.0 }
}
impl ::bitflags::__private::core::convert::From<u64> for
InternalBitFlags {
fn from(bits: u64) -> Self { Self::from_bits_retain(bits) }
}
#[allow(dead_code, deprecated, unused_attributes)]
impl InternalBitFlags {
#[inline]
pub const fn empty() -> Self {
Self(<u64 as ::bitflags::Bits>::EMPTY)
}
#[inline]
pub const fn all() -> Self {
let mut truncated = <u64 as ::bitflags::Bits>::EMPTY;
let mut i = 0;
{
{
let flag =
<AllocKindFlags as
::bitflags::Flags>::FLAGS[i].value().bits();
truncated = truncated | flag;
i += 1;
}
};
{
{
let flag =
<AllocKindFlags as
::bitflags::Flags>::FLAGS[i].value().bits();
truncated = truncated | flag;
i += 1;
}
};
{
{
let flag =
<AllocKindFlags as
::bitflags::Flags>::FLAGS[i].value().bits();
truncated = truncated | flag;
i += 1;
}
};
{
{
let flag =
<AllocKindFlags as
::bitflags::Flags>::FLAGS[i].value().bits();
truncated = truncated | flag;
i += 1;
}
};
{
{
let flag =
<AllocKindFlags as
::bitflags::Flags>::FLAGS[i].value().bits();
truncated = truncated | flag;
i += 1;
}
};
{
{
let flag =
<AllocKindFlags as
::bitflags::Flags>::FLAGS[i].value().bits();
truncated = truncated | flag;
i += 1;
}
};
{
{
let flag =
<AllocKindFlags as
::bitflags::Flags>::FLAGS[i].value().bits();
truncated = truncated | flag;
i += 1;
}
};
let _ = i;
Self(truncated)
}
#[inline]
pub const fn bits(&self) -> u64 { self.0 }
#[inline]
pub const fn from_bits(bits: u64)
-> ::bitflags::__private::core::option::Option<Self> {
let truncated = Self::from_bits_truncate(bits).0;
if truncated == bits {
::bitflags::__private::core::option::Option::Some(Self(bits))
} else { ::bitflags::__private::core::option::Option::None }
}
#[inline]
pub const fn from_bits_truncate(bits: u64) -> Self {
Self(bits & Self::all().0)
}
#[inline]
pub const fn from_bits_retain(bits: u64) -> Self { Self(bits) }
#[inline]
pub fn from_name(name: &str)
-> ::bitflags::__private::core::option::Option<Self> {
{
if name == "Unknown" {
return ::bitflags::__private::core::option::Option::Some(Self(AllocKindFlags::Unknown.bits()));
}
};
;
{
if name == "Alloc" {
return ::bitflags::__private::core::option::Option::Some(Self(AllocKindFlags::Alloc.bits()));
}
};
;
{
if name == "Realloc" {
return ::bitflags::__private::core::option::Option::Some(Self(AllocKindFlags::Realloc.bits()));
}
};
;
{
if name == "Free" {
return ::bitflags::__private::core::option::Option::Some(Self(AllocKindFlags::Free.bits()));
}
};
;
{
if name == "Uninitialized" {
return ::bitflags::__private::core::option::Option::Some(Self(AllocKindFlags::Uninitialized.bits()));
}
};
;
{
if name == "Zeroed" {
return ::bitflags::__private::core::option::Option::Some(Self(AllocKindFlags::Zeroed.bits()));
}
};
;
{
if name == "Aligned" {
return ::bitflags::__private::core::option::Option::Some(Self(AllocKindFlags::Aligned.bits()));
}
};
;
let _ = name;
::bitflags::__private::core::option::Option::None
}
#[inline]
pub const fn is_empty(&self) -> bool {
self.0 == <u64 as ::bitflags::Bits>::EMPTY
}
#[inline]
pub const fn is_all(&self) -> bool {
Self::all().0 | self.0 == self.0
}
#[inline]
pub const fn intersects(&self, other: Self) -> bool {
self.0 & other.0 != <u64 as ::bitflags::Bits>::EMPTY
}
#[inline]
pub const fn contains(&self, other: Self) -> bool {
self.0 & other.0 == other.0
}
#[inline]
pub fn insert(&mut self, other: Self) {
*self = Self(self.0).union(other);
}
#[inline]
pub fn remove(&mut self, other: Self) {
*self = Self(self.0).difference(other);
}
#[inline]
pub fn toggle(&mut self, other: Self) {
*self = Self(self.0).symmetric_difference(other);
}
#[inline]
pub fn set(&mut self, other: Self, value: bool) {
if value { self.insert(other); } else { self.remove(other); }
}
#[inline]
#[must_use]
pub const fn intersection(self, other: Self) -> Self {
Self(self.0 & other.0)
}
#[inline]
#[must_use]
pub const fn union(self, other: Self) -> Self {
Self(self.0 | other.0)
}
#[inline]
#[must_use]
pub const fn difference(self, other: Self) -> Self {
Self(self.0 & !other.0)
}
#[inline]
#[must_use]
pub const fn symmetric_difference(self, other: Self) -> Self {
Self(self.0 ^ other.0)
}
#[inline]
#[must_use]
pub const fn complement(self) -> Self {
Self::from_bits_truncate(!self.0)
}
}
impl ::bitflags::__private::core::fmt::Binary for InternalBitFlags {
fn fmt(&self, f: &mut ::bitflags::__private::core::fmt::Formatter)
-> ::bitflags::__private::core::fmt::Result {
let inner = self.0;
::bitflags::__private::core::fmt::Binary::fmt(&inner, f)
}
}
impl ::bitflags::__private::core::fmt::Octal for InternalBitFlags {
fn fmt(&self, f: &mut ::bitflags::__private::core::fmt::Formatter)
-> ::bitflags::__private::core::fmt::Result {
let inner = self.0;
::bitflags::__private::core::fmt::Octal::fmt(&inner, f)
}
}
impl ::bitflags::__private::core::fmt::LowerHex for InternalBitFlags {
fn fmt(&self, f: &mut ::bitflags::__private::core::fmt::Formatter)
-> ::bitflags::__private::core::fmt::Result {
let inner = self.0;
::bitflags::__private::core::fmt::LowerHex::fmt(&inner, f)
}
}
impl ::bitflags::__private::core::fmt::UpperHex for InternalBitFlags {
fn fmt(&self, f: &mut ::bitflags::__private::core::fmt::Formatter)
-> ::bitflags::__private::core::fmt::Result {
let inner = self.0;
::bitflags::__private::core::fmt::UpperHex::fmt(&inner, f)
}
}
impl ::bitflags::__private::core::ops::BitOr for InternalBitFlags {
type Output = Self;
#[inline]
fn bitor(self, other: InternalBitFlags) -> Self {
self.union(other)
}
}
impl ::bitflags::__private::core::ops::BitOrAssign for
InternalBitFlags {
#[inline]
fn bitor_assign(&mut self, other: Self) { self.insert(other); }
}
impl ::bitflags::__private::core::ops::BitXor for InternalBitFlags {
type Output = Self;
#[inline]
fn bitxor(self, other: Self) -> Self {
self.symmetric_difference(other)
}
}
impl ::bitflags::__private::core::ops::BitXorAssign for
InternalBitFlags {
#[inline]
fn bitxor_assign(&mut self, other: Self) { self.toggle(other); }
}
impl ::bitflags::__private::core::ops::BitAnd for InternalBitFlags {
type Output = Self;
#[inline]
fn bitand(self, other: Self) -> Self { self.intersection(other) }
}
impl ::bitflags::__private::core::ops::BitAndAssign for
InternalBitFlags {
#[inline]
fn bitand_assign(&mut self, other: Self) {
*self =
Self::from_bits_retain(self.bits()).intersection(other);
}
}
impl ::bitflags::__private::core::ops::Sub for InternalBitFlags {
type Output = Self;
#[inline]
fn sub(self, other: Self) -> Self { self.difference(other) }
}
impl ::bitflags::__private::core::ops::SubAssign for InternalBitFlags
{
#[inline]
fn sub_assign(&mut self, other: Self) { self.remove(other); }
}
impl ::bitflags::__private::core::ops::Not for InternalBitFlags {
type Output = Self;
#[inline]
fn not(self) -> Self { self.complement() }
}
impl ::bitflags::__private::core::iter::Extend<InternalBitFlags> for
InternalBitFlags {
fn extend<T: ::bitflags::__private::core::iter::IntoIterator<Item
= Self>>(&mut self, iterator: T) {
for item in iterator { self.insert(item) }
}
}
impl ::bitflags::__private::core::iter::FromIterator<InternalBitFlags>
for InternalBitFlags {
fn from_iter<T: ::bitflags::__private::core::iter::IntoIterator<Item
= Self>>(iterator: T) -> Self {
use ::bitflags::__private::core::iter::Extend;
let mut result = Self::empty();
result.extend(iterator);
result
}
}
impl InternalBitFlags {
#[inline]
pub const fn iter(&self)
-> ::bitflags::iter::Iter<AllocKindFlags> {
::bitflags::iter::Iter::__private_const_new(<AllocKindFlags as
::bitflags::Flags>::FLAGS,
AllocKindFlags::from_bits_retain(self.bits()),
AllocKindFlags::from_bits_retain(self.bits()))
}
#[inline]
pub const fn iter_names(&self)
-> ::bitflags::iter::IterNames<AllocKindFlags> {
::bitflags::iter::IterNames::__private_const_new(<AllocKindFlags
as ::bitflags::Flags>::FLAGS,
AllocKindFlags::from_bits_retain(self.bits()),
AllocKindFlags::from_bits_retain(self.bits()))
}
}
impl ::bitflags::__private::core::iter::IntoIterator for
InternalBitFlags {
type Item = AllocKindFlags;
type IntoIter = ::bitflags::iter::Iter<AllocKindFlags>;
fn into_iter(self) -> Self::IntoIter { self.iter() }
}
impl InternalBitFlags {
#[inline]
pub fn bits_mut(&mut self) -> &mut u64 { &mut self.0 }
}
#[allow(dead_code, deprecated, unused_attributes)]
impl AllocKindFlags {
#[inline]
pub const fn empty() -> Self { Self(InternalBitFlags::empty()) }
#[inline]
pub const fn all() -> Self { Self(InternalBitFlags::all()) }
#[inline]
pub const fn bits(&self) -> u64 { self.0.bits() }
#[inline]
pub const fn from_bits(bits: u64)
-> ::bitflags::__private::core::option::Option<Self> {
match InternalBitFlags::from_bits(bits) {
::bitflags::__private::core::option::Option::Some(bits) =>
::bitflags::__private::core::option::Option::Some(Self(bits)),
::bitflags::__private::core::option::Option::None =>
::bitflags::__private::core::option::Option::None,
}
}
#[inline]
pub const fn from_bits_truncate(bits: u64) -> Self {
Self(InternalBitFlags::from_bits_truncate(bits))
}
#[inline]
pub const fn from_bits_retain(bits: u64) -> Self {
Self(InternalBitFlags::from_bits_retain(bits))
}
#[inline]
pub fn from_name(name: &str)
-> ::bitflags::__private::core::option::Option<Self> {
match InternalBitFlags::from_name(name) {
::bitflags::__private::core::option::Option::Some(bits) =>
::bitflags::__private::core::option::Option::Some(Self(bits)),
::bitflags::__private::core::option::Option::None =>
::bitflags::__private::core::option::Option::None,
}
}
#[inline]
pub const fn is_empty(&self) -> bool { self.0.is_empty() }
#[inline]
pub const fn is_all(&self) -> bool { self.0.is_all() }
#[inline]
pub const fn intersects(&self, other: Self) -> bool {
self.0.intersects(other.0)
}
#[inline]
pub const fn contains(&self, other: Self) -> bool {
self.0.contains(other.0)
}
#[inline]
pub fn insert(&mut self, other: Self) { self.0.insert(other.0) }
#[inline]
pub fn remove(&mut self, other: Self) { self.0.remove(other.0) }
#[inline]
pub fn toggle(&mut self, other: Self) { self.0.toggle(other.0) }
#[inline]
pub fn set(&mut self, other: Self, value: bool) {
self.0.set(other.0, value)
}
#[inline]
#[must_use]
pub const fn intersection(self, other: Self) -> Self {
Self(self.0.intersection(other.0))
}
#[inline]
#[must_use]
pub const fn union(self, other: Self) -> Self {
Self(self.0.union(other.0))
}
#[inline]
#[must_use]
pub const fn difference(self, other: Self) -> Self {
Self(self.0.difference(other.0))
}
#[inline]
#[must_use]
pub const fn symmetric_difference(self, other: Self) -> Self {
Self(self.0.symmetric_difference(other.0))
}
#[inline]
#[must_use]
pub const fn complement(self) -> Self {
Self(self.0.complement())
}
}
impl ::bitflags::__private::core::fmt::Binary for AllocKindFlags {
fn fmt(&self, f: &mut ::bitflags::__private::core::fmt::Formatter)
-> ::bitflags::__private::core::fmt::Result {
let inner = self.0;
::bitflags::__private::core::fmt::Binary::fmt(&inner, f)
}
}
impl ::bitflags::__private::core::fmt::Octal for AllocKindFlags {
fn fmt(&self, f: &mut ::bitflags::__private::core::fmt::Formatter)
-> ::bitflags::__private::core::fmt::Result {
let inner = self.0;
::bitflags::__private::core::fmt::Octal::fmt(&inner, f)
}
}
impl ::bitflags::__private::core::fmt::LowerHex for AllocKindFlags {
fn fmt(&self, f: &mut ::bitflags::__private::core::fmt::Formatter)
-> ::bitflags::__private::core::fmt::Result {
let inner = self.0;
::bitflags::__private::core::fmt::LowerHex::fmt(&inner, f)
}
}
impl ::bitflags::__private::core::fmt::UpperHex for AllocKindFlags {
fn fmt(&self, f: &mut ::bitflags::__private::core::fmt::Formatter)
-> ::bitflags::__private::core::fmt::Result {
let inner = self.0;
::bitflags::__private::core::fmt::UpperHex::fmt(&inner, f)
}
}
impl ::bitflags::__private::core::ops::BitOr for AllocKindFlags {
type Output = Self;
#[inline]
fn bitor(self, other: AllocKindFlags) -> Self {
self.union(other)
}
}
impl ::bitflags::__private::core::ops::BitOrAssign for AllocKindFlags
{
#[inline]
fn bitor_assign(&mut self, other: Self) { self.insert(other); }
}
impl ::bitflags::__private::core::ops::BitXor for AllocKindFlags {
type Output = Self;
#[inline]
fn bitxor(self, other: Self) -> Self {
self.symmetric_difference(other)
}
}
impl ::bitflags::__private::core::ops::BitXorAssign for AllocKindFlags
{
#[inline]
fn bitxor_assign(&mut self, other: Self) { self.toggle(other); }
}
impl ::bitflags::__private::core::ops::BitAnd for AllocKindFlags {
type Output = Self;
#[inline]
fn bitand(self, other: Self) -> Self { self.intersection(other) }
}
impl ::bitflags::__private::core::ops::BitAndAssign for AllocKindFlags
{
#[inline]
fn bitand_assign(&mut self, other: Self) {
*self =
Self::from_bits_retain(self.bits()).intersection(other);
}
}
impl ::bitflags::__private::core::ops::Sub for AllocKindFlags {
type Output = Self;
#[inline]
fn sub(self, other: Self) -> Self { self.difference(other) }
}
impl ::bitflags::__private::core::ops::SubAssign for AllocKindFlags {
#[inline]
fn sub_assign(&mut self, other: Self) { self.remove(other); }
}
impl ::bitflags::__private::core::ops::Not for AllocKindFlags {
type Output = Self;
#[inline]
fn not(self) -> Self { self.complement() }
}
impl ::bitflags::__private::core::iter::Extend<AllocKindFlags> for
AllocKindFlags {
fn extend<T: ::bitflags::__private::core::iter::IntoIterator<Item
= Self>>(&mut self, iterator: T) {
for item in iterator { self.insert(item) }
}
}
impl ::bitflags::__private::core::iter::FromIterator<AllocKindFlags>
for AllocKindFlags {
fn from_iter<T: ::bitflags::__private::core::iter::IntoIterator<Item
= Self>>(iterator: T) -> Self {
use ::bitflags::__private::core::iter::Extend;
let mut result = Self::empty();
result.extend(iterator);
result
}
}
impl AllocKindFlags {
#[inline]
pub const fn iter(&self)
-> ::bitflags::iter::Iter<AllocKindFlags> {
::bitflags::iter::Iter::__private_const_new(<AllocKindFlags as
::bitflags::Flags>::FLAGS,
AllocKindFlags::from_bits_retain(self.bits()),
AllocKindFlags::from_bits_retain(self.bits()))
}
#[inline]
pub const fn iter_names(&self)
-> ::bitflags::iter::IterNames<AllocKindFlags> {
::bitflags::iter::IterNames::__private_const_new(<AllocKindFlags
as ::bitflags::Flags>::FLAGS,
AllocKindFlags::from_bits_retain(self.bits()),
AllocKindFlags::from_bits_retain(self.bits()))
}
}
impl ::bitflags::__private::core::iter::IntoIterator for
AllocKindFlags {
type Item = AllocKindFlags;
type IntoIter = ::bitflags::iter::Iter<AllocKindFlags>;
fn into_iter(self) -> Self::IntoIter { self.iter() }
}
};bitflags! {
850 #[repr(transparent)]
851 #[derive(Default)]
852 pub(crate) struct AllocKindFlags : u64 {
853 const Unknown = 0;
854 const Alloc = 1;
855 const Realloc = 1 << 1;
856 const Free = 1 << 2;
857 const Uninitialized = 1 << 3;
858 const Zeroed = 1 << 4;
859 const Aligned = 1 << 5;
860 }
861}
862
863#[repr(transparent)]
pub struct GEPNoWrapFlags(<GEPNoWrapFlags as
::bitflags::__private::PublicFlags>::Internal);
#[automatically_derived]
impl ::core::default::Default for GEPNoWrapFlags {
#[inline]
fn default() -> GEPNoWrapFlags {
GEPNoWrapFlags(::core::default::Default::default())
}
}
impl GEPNoWrapFlags {
#[allow(deprecated, non_upper_case_globals,)]
pub const InBounds: Self = Self::from_bits_retain(1 << 0);
#[allow(deprecated, non_upper_case_globals,)]
pub const NUSW: Self = Self::from_bits_retain(1 << 1);
#[allow(deprecated, non_upper_case_globals,)]
pub const NUW: Self = Self::from_bits_retain(1 << 2);
}
impl ::bitflags::Flags for GEPNoWrapFlags {
const FLAGS: &'static [::bitflags::Flag<GEPNoWrapFlags>] =
&[{
#[allow(deprecated, non_upper_case_globals,)]
::bitflags::Flag::new("InBounds", GEPNoWrapFlags::InBounds)
},
{
#[allow(deprecated, non_upper_case_globals,)]
::bitflags::Flag::new("NUSW", GEPNoWrapFlags::NUSW)
},
{
#[allow(deprecated, non_upper_case_globals,)]
::bitflags::Flag::new("NUW", GEPNoWrapFlags::NUW)
}];
type Bits = c_uint;
fn bits(&self) -> c_uint { GEPNoWrapFlags::bits(self) }
fn from_bits_retain(bits: c_uint) -> GEPNoWrapFlags {
GEPNoWrapFlags::from_bits_retain(bits)
}
}
#[allow(dead_code, deprecated, unused_doc_comments, unused_attributes,
unused_mut, unused_imports, non_upper_case_globals, clippy ::
assign_op_pattern, clippy :: indexing_slicing, clippy :: same_name_method,
clippy :: iter_without_into_iter,)]
const _: () =
{
#[repr(transparent)]
pub struct InternalBitFlags(c_uint);
#[automatically_derived]
#[doc(hidden)]
unsafe impl ::core::clone::TrivialClone for InternalBitFlags { }
#[automatically_derived]
impl ::core::clone::Clone for InternalBitFlags {
#[inline]
fn clone(&self) -> InternalBitFlags {
let _: ::core::clone::AssertParamIsClone<c_uint>;
*self
}
}
#[automatically_derived]
impl ::core::marker::Copy for InternalBitFlags { }
#[automatically_derived]
impl ::core::marker::StructuralPartialEq for InternalBitFlags { }
#[automatically_derived]
impl ::core::cmp::PartialEq for InternalBitFlags {
#[inline]
fn eq(&self, other: &InternalBitFlags) -> bool {
self.0 == other.0
}
}
#[automatically_derived]
impl ::core::cmp::Eq for InternalBitFlags {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<c_uint>;
}
}
#[automatically_derived]
impl ::core::cmp::PartialOrd for InternalBitFlags {
#[inline]
fn partial_cmp(&self, other: &InternalBitFlags)
-> ::core::option::Option<::core::cmp::Ordering> {
::core::option::Option::Some(::core::cmp::Ord::cmp(self,
other))
}
}
#[automatically_derived]
impl ::core::cmp::Ord for InternalBitFlags {
#[inline]
fn cmp(&self, other: &InternalBitFlags) -> ::core::cmp::Ordering {
::core::cmp::Ord::cmp(&self.0, &other.0)
}
}
#[automatically_derived]
impl ::core::hash::Hash for InternalBitFlags {
#[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
::core::hash::Hash::hash(&self.0, state)
}
}
impl ::bitflags::__private::PublicFlags for GEPNoWrapFlags {
type Primitive = c_uint;
type Internal = InternalBitFlags;
}
impl ::bitflags::__private::core::default::Default for
InternalBitFlags {
#[inline]
fn default() -> Self { InternalBitFlags::empty() }
}
impl ::bitflags::__private::core::fmt::Debug for InternalBitFlags {
fn fmt(&self,
f: &mut ::bitflags::__private::core::fmt::Formatter<'_>)
-> ::bitflags::__private::core::fmt::Result {
if self.is_empty() {
f.write_fmt(format_args!("{0:#x}",
<c_uint as ::bitflags::Bits>::EMPTY))
} else {
::bitflags::__private::core::fmt::Display::fmt(self, f)
}
}
}
impl ::bitflags::__private::core::fmt::Display for InternalBitFlags {
fn fmt(&self,
f: &mut ::bitflags::__private::core::fmt::Formatter<'_>)
-> ::bitflags::__private::core::fmt::Result {
::bitflags::parser::to_writer(&GEPNoWrapFlags(*self), f)
}
}
impl ::bitflags::__private::core::str::FromStr for InternalBitFlags {
type Err = ::bitflags::parser::ParseError;
fn from_str(s: &str)
->
::bitflags::__private::core::result::Result<Self,
Self::Err> {
::bitflags::parser::from_str::<GEPNoWrapFlags>(s).map(|flags|
flags.0)
}
}
impl ::bitflags::__private::core::convert::AsRef<c_uint> for
InternalBitFlags {
fn as_ref(&self) -> &c_uint { &self.0 }
}
impl ::bitflags::__private::core::convert::From<c_uint> for
InternalBitFlags {
fn from(bits: c_uint) -> Self { Self::from_bits_retain(bits) }
}
#[allow(dead_code, deprecated, unused_attributes)]
impl InternalBitFlags {
#[inline]
pub const fn empty() -> Self {
Self(<c_uint as ::bitflags::Bits>::EMPTY)
}
#[inline]
pub const fn all() -> Self {
let mut truncated = <c_uint as ::bitflags::Bits>::EMPTY;
let mut i = 0;
{
{
let flag =
<GEPNoWrapFlags as
::bitflags::Flags>::FLAGS[i].value().bits();
truncated = truncated | flag;
i += 1;
}
};
{
{
let flag =
<GEPNoWrapFlags as
::bitflags::Flags>::FLAGS[i].value().bits();
truncated = truncated | flag;
i += 1;
}
};
{
{
let flag =
<GEPNoWrapFlags as
::bitflags::Flags>::FLAGS[i].value().bits();
truncated = truncated | flag;
i += 1;
}
};
let _ = i;
Self(truncated)
}
#[inline]
pub const fn bits(&self) -> c_uint { self.0 }
#[inline]
pub const fn from_bits(bits: c_uint)
-> ::bitflags::__private::core::option::Option<Self> {
let truncated = Self::from_bits_truncate(bits).0;
if truncated == bits {
::bitflags::__private::core::option::Option::Some(Self(bits))
} else { ::bitflags::__private::core::option::Option::None }
}
#[inline]
pub const fn from_bits_truncate(bits: c_uint) -> Self {
Self(bits & Self::all().0)
}
#[inline]
pub const fn from_bits_retain(bits: c_uint) -> Self { Self(bits) }
#[inline]
pub fn from_name(name: &str)
-> ::bitflags::__private::core::option::Option<Self> {
{
if name == "InBounds" {
return ::bitflags::__private::core::option::Option::Some(Self(GEPNoWrapFlags::InBounds.bits()));
}
};
;
{
if name == "NUSW" {
return ::bitflags::__private::core::option::Option::Some(Self(GEPNoWrapFlags::NUSW.bits()));
}
};
;
{
if name == "NUW" {
return ::bitflags::__private::core::option::Option::Some(Self(GEPNoWrapFlags::NUW.bits()));
}
};
;
let _ = name;
::bitflags::__private::core::option::Option::None
}
#[inline]
pub const fn is_empty(&self) -> bool {
self.0 == <c_uint as ::bitflags::Bits>::EMPTY
}
#[inline]
pub const fn is_all(&self) -> bool {
Self::all().0 | self.0 == self.0
}
#[inline]
pub const fn intersects(&self, other: Self) -> bool {
self.0 & other.0 != <c_uint as ::bitflags::Bits>::EMPTY
}
#[inline]
pub const fn contains(&self, other: Self) -> bool {
self.0 & other.0 == other.0
}
#[inline]
pub fn insert(&mut self, other: Self) {
*self = Self(self.0).union(other);
}
#[inline]
pub fn remove(&mut self, other: Self) {
*self = Self(self.0).difference(other);
}
#[inline]
pub fn toggle(&mut self, other: Self) {
*self = Self(self.0).symmetric_difference(other);
}
#[inline]
pub fn set(&mut self, other: Self, value: bool) {
if value { self.insert(other); } else { self.remove(other); }
}
#[inline]
#[must_use]
pub const fn intersection(self, other: Self) -> Self {
Self(self.0 & other.0)
}
#[inline]
#[must_use]
pub const fn union(self, other: Self) -> Self {
Self(self.0 | other.0)
}
#[inline]
#[must_use]
pub const fn difference(self, other: Self) -> Self {
Self(self.0 & !other.0)
}
#[inline]
#[must_use]
pub const fn symmetric_difference(self, other: Self) -> Self {
Self(self.0 ^ other.0)
}
#[inline]
#[must_use]
pub const fn complement(self) -> Self {
Self::from_bits_truncate(!self.0)
}
}
impl ::bitflags::__private::core::fmt::Binary for InternalBitFlags {
fn fmt(&self, f: &mut ::bitflags::__private::core::fmt::Formatter)
-> ::bitflags::__private::core::fmt::Result {
let inner = self.0;
::bitflags::__private::core::fmt::Binary::fmt(&inner, f)
}
}
impl ::bitflags::__private::core::fmt::Octal for InternalBitFlags {
fn fmt(&self, f: &mut ::bitflags::__private::core::fmt::Formatter)
-> ::bitflags::__private::core::fmt::Result {
let inner = self.0;
::bitflags::__private::core::fmt::Octal::fmt(&inner, f)
}
}
impl ::bitflags::__private::core::fmt::LowerHex for InternalBitFlags {
fn fmt(&self, f: &mut ::bitflags::__private::core::fmt::Formatter)
-> ::bitflags::__private::core::fmt::Result {
let inner = self.0;
::bitflags::__private::core::fmt::LowerHex::fmt(&inner, f)
}
}
impl ::bitflags::__private::core::fmt::UpperHex for InternalBitFlags {
fn fmt(&self, f: &mut ::bitflags::__private::core::fmt::Formatter)
-> ::bitflags::__private::core::fmt::Result {
let inner = self.0;
::bitflags::__private::core::fmt::UpperHex::fmt(&inner, f)
}
}
impl ::bitflags::__private::core::ops::BitOr for InternalBitFlags {
type Output = Self;
#[inline]
fn bitor(self, other: InternalBitFlags) -> Self {
self.union(other)
}
}
impl ::bitflags::__private::core::ops::BitOrAssign for
InternalBitFlags {
#[inline]
fn bitor_assign(&mut self, other: Self) { self.insert(other); }
}
impl ::bitflags::__private::core::ops::BitXor for InternalBitFlags {
type Output = Self;
#[inline]
fn bitxor(self, other: Self) -> Self {
self.symmetric_difference(other)
}
}
impl ::bitflags::__private::core::ops::BitXorAssign for
InternalBitFlags {
#[inline]
fn bitxor_assign(&mut self, other: Self) { self.toggle(other); }
}
impl ::bitflags::__private::core::ops::BitAnd for InternalBitFlags {
type Output = Self;
#[inline]
fn bitand(self, other: Self) -> Self { self.intersection(other) }
}
impl ::bitflags::__private::core::ops::BitAndAssign for
InternalBitFlags {
#[inline]
fn bitand_assign(&mut self, other: Self) {
*self =
Self::from_bits_retain(self.bits()).intersection(other);
}
}
impl ::bitflags::__private::core::ops::Sub for InternalBitFlags {
type Output = Self;
#[inline]
fn sub(self, other: Self) -> Self { self.difference(other) }
}
impl ::bitflags::__private::core::ops::SubAssign for InternalBitFlags
{
#[inline]
fn sub_assign(&mut self, other: Self) { self.remove(other); }
}
impl ::bitflags::__private::core::ops::Not for InternalBitFlags {
type Output = Self;
#[inline]
fn not(self) -> Self { self.complement() }
}
impl ::bitflags::__private::core::iter::Extend<InternalBitFlags> for
InternalBitFlags {
fn extend<T: ::bitflags::__private::core::iter::IntoIterator<Item
= Self>>(&mut self, iterator: T) {
for item in iterator { self.insert(item) }
}
}
impl ::bitflags::__private::core::iter::FromIterator<InternalBitFlags>
for InternalBitFlags {
fn from_iter<T: ::bitflags::__private::core::iter::IntoIterator<Item
= Self>>(iterator: T) -> Self {
use ::bitflags::__private::core::iter::Extend;
let mut result = Self::empty();
result.extend(iterator);
result
}
}
impl InternalBitFlags {
#[inline]
pub const fn iter(&self)
-> ::bitflags::iter::Iter<GEPNoWrapFlags> {
::bitflags::iter::Iter::__private_const_new(<GEPNoWrapFlags as
::bitflags::Flags>::FLAGS,
GEPNoWrapFlags::from_bits_retain(self.bits()),
GEPNoWrapFlags::from_bits_retain(self.bits()))
}
#[inline]
pub const fn iter_names(&self)
-> ::bitflags::iter::IterNames<GEPNoWrapFlags> {
::bitflags::iter::IterNames::__private_const_new(<GEPNoWrapFlags
as ::bitflags::Flags>::FLAGS,
GEPNoWrapFlags::from_bits_retain(self.bits()),
GEPNoWrapFlags::from_bits_retain(self.bits()))
}
}
impl ::bitflags::__private::core::iter::IntoIterator for
InternalBitFlags {
type Item = GEPNoWrapFlags;
type IntoIter = ::bitflags::iter::Iter<GEPNoWrapFlags>;
fn into_iter(self) -> Self::IntoIter { self.iter() }
}
impl InternalBitFlags {
#[inline]
pub fn bits_mut(&mut self) -> &mut c_uint { &mut self.0 }
}
#[allow(dead_code, deprecated, unused_attributes)]
impl GEPNoWrapFlags {
#[inline]
pub const fn empty() -> Self { Self(InternalBitFlags::empty()) }
#[inline]
pub const fn all() -> Self { Self(InternalBitFlags::all()) }
#[inline]
pub const fn bits(&self) -> c_uint { self.0.bits() }
#[inline]
pub const fn from_bits(bits: c_uint)
-> ::bitflags::__private::core::option::Option<Self> {
match InternalBitFlags::from_bits(bits) {
::bitflags::__private::core::option::Option::Some(bits) =>
::bitflags::__private::core::option::Option::Some(Self(bits)),
::bitflags::__private::core::option::Option::None =>
::bitflags::__private::core::option::Option::None,
}
}
#[inline]
pub const fn from_bits_truncate(bits: c_uint) -> Self {
Self(InternalBitFlags::from_bits_truncate(bits))
}
#[inline]
pub const fn from_bits_retain(bits: c_uint) -> Self {
Self(InternalBitFlags::from_bits_retain(bits))
}
#[inline]
pub fn from_name(name: &str)
-> ::bitflags::__private::core::option::Option<Self> {
match InternalBitFlags::from_name(name) {
::bitflags::__private::core::option::Option::Some(bits) =>
::bitflags::__private::core::option::Option::Some(Self(bits)),
::bitflags::__private::core::option::Option::None =>
::bitflags::__private::core::option::Option::None,
}
}
#[inline]
pub const fn is_empty(&self) -> bool { self.0.is_empty() }
#[inline]
pub const fn is_all(&self) -> bool { self.0.is_all() }
#[inline]
pub const fn intersects(&self, other: Self) -> bool {
self.0.intersects(other.0)
}
#[inline]
pub const fn contains(&self, other: Self) -> bool {
self.0.contains(other.0)
}
#[inline]
pub fn insert(&mut self, other: Self) { self.0.insert(other.0) }
#[inline]
pub fn remove(&mut self, other: Self) { self.0.remove(other.0) }
#[inline]
pub fn toggle(&mut self, other: Self) { self.0.toggle(other.0) }
#[inline]
pub fn set(&mut self, other: Self, value: bool) {
self.0.set(other.0, value)
}
#[inline]
#[must_use]
pub const fn intersection(self, other: Self) -> Self {
Self(self.0.intersection(other.0))
}
#[inline]
#[must_use]
pub const fn union(self, other: Self) -> Self {
Self(self.0.union(other.0))
}
#[inline]
#[must_use]
pub const fn difference(self, other: Self) -> Self {
Self(self.0.difference(other.0))
}
#[inline]
#[must_use]
pub const fn symmetric_difference(self, other: Self) -> Self {
Self(self.0.symmetric_difference(other.0))
}
#[inline]
#[must_use]
pub const fn complement(self) -> Self {
Self(self.0.complement())
}
}
impl ::bitflags::__private::core::fmt::Binary for GEPNoWrapFlags {
fn fmt(&self, f: &mut ::bitflags::__private::core::fmt::Formatter)
-> ::bitflags::__private::core::fmt::Result {
let inner = self.0;
::bitflags::__private::core::fmt::Binary::fmt(&inner, f)
}
}
impl ::bitflags::__private::core::fmt::Octal for GEPNoWrapFlags {
fn fmt(&self, f: &mut ::bitflags::__private::core::fmt::Formatter)
-> ::bitflags::__private::core::fmt::Result {
let inner = self.0;
::bitflags::__private::core::fmt::Octal::fmt(&inner, f)
}
}
impl ::bitflags::__private::core::fmt::LowerHex for GEPNoWrapFlags {
fn fmt(&self, f: &mut ::bitflags::__private::core::fmt::Formatter)
-> ::bitflags::__private::core::fmt::Result {
let inner = self.0;
::bitflags::__private::core::fmt::LowerHex::fmt(&inner, f)
}
}
impl ::bitflags::__private::core::fmt::UpperHex for GEPNoWrapFlags {
fn fmt(&self, f: &mut ::bitflags::__private::core::fmt::Formatter)
-> ::bitflags::__private::core::fmt::Result {
let inner = self.0;
::bitflags::__private::core::fmt::UpperHex::fmt(&inner, f)
}
}
impl ::bitflags::__private::core::ops::BitOr for GEPNoWrapFlags {
type Output = Self;
#[inline]
fn bitor(self, other: GEPNoWrapFlags) -> Self {
self.union(other)
}
}
impl ::bitflags::__private::core::ops::BitOrAssign for GEPNoWrapFlags
{
#[inline]
fn bitor_assign(&mut self, other: Self) { self.insert(other); }
}
impl ::bitflags::__private::core::ops::BitXor for GEPNoWrapFlags {
type Output = Self;
#[inline]
fn bitxor(self, other: Self) -> Self {
self.symmetric_difference(other)
}
}
impl ::bitflags::__private::core::ops::BitXorAssign for GEPNoWrapFlags
{
#[inline]
fn bitxor_assign(&mut self, other: Self) { self.toggle(other); }
}
impl ::bitflags::__private::core::ops::BitAnd for GEPNoWrapFlags {
type Output = Self;
#[inline]
fn bitand(self, other: Self) -> Self { self.intersection(other) }
}
impl ::bitflags::__private::core::ops::BitAndAssign for GEPNoWrapFlags
{
#[inline]
fn bitand_assign(&mut self, other: Self) {
*self =
Self::from_bits_retain(self.bits()).intersection(other);
}
}
impl ::bitflags::__private::core::ops::Sub for GEPNoWrapFlags {
type Output = Self;
#[inline]
fn sub(self, other: Self) -> Self { self.difference(other) }
}
impl ::bitflags::__private::core::ops::SubAssign for GEPNoWrapFlags {
#[inline]
fn sub_assign(&mut self, other: Self) { self.remove(other); }
}
impl ::bitflags::__private::core::ops::Not for GEPNoWrapFlags {
type Output = Self;
#[inline]
fn not(self) -> Self { self.complement() }
}
impl ::bitflags::__private::core::iter::Extend<GEPNoWrapFlags> for
GEPNoWrapFlags {
fn extend<T: ::bitflags::__private::core::iter::IntoIterator<Item
= Self>>(&mut self, iterator: T) {
for item in iterator { self.insert(item) }
}
}
impl ::bitflags::__private::core::iter::FromIterator<GEPNoWrapFlags>
for GEPNoWrapFlags {
fn from_iter<T: ::bitflags::__private::core::iter::IntoIterator<Item
= Self>>(iterator: T) -> Self {
use ::bitflags::__private::core::iter::Extend;
let mut result = Self::empty();
result.extend(iterator);
result
}
}
impl GEPNoWrapFlags {
#[inline]
pub const fn iter(&self)
-> ::bitflags::iter::Iter<GEPNoWrapFlags> {
::bitflags::iter::Iter::__private_const_new(<GEPNoWrapFlags as
::bitflags::Flags>::FLAGS,
GEPNoWrapFlags::from_bits_retain(self.bits()),
GEPNoWrapFlags::from_bits_retain(self.bits()))
}
#[inline]
pub const fn iter_names(&self)
-> ::bitflags::iter::IterNames<GEPNoWrapFlags> {
::bitflags::iter::IterNames::__private_const_new(<GEPNoWrapFlags
as ::bitflags::Flags>::FLAGS,
GEPNoWrapFlags::from_bits_retain(self.bits()),
GEPNoWrapFlags::from_bits_retain(self.bits()))
}
}
impl ::bitflags::__private::core::iter::IntoIterator for
GEPNoWrapFlags {
type Item = GEPNoWrapFlags;
type IntoIter = ::bitflags::iter::Iter<GEPNoWrapFlags>;
fn into_iter(self) -> Self::IntoIter { self.iter() }
}
};bitflags! {
865 #[repr(transparent)]
866 #[derive(Default)]
867 pub struct GEPNoWrapFlags : c_uint {
868 const InBounds = 1 << 0;
869 const NUSW = 1 << 1;
870 const NUW = 1 << 2;
871 }
872}
873
874unsafe extern "C" {
875 pub(crate) type Buffer;
876}
877
878pub(crate) type SelfProfileBeforePassCallback =
879 unsafe extern "C" fn(*mut c_void, *const c_char, *const c_char);
880pub(crate) type SelfProfileAfterPassCallback = unsafe extern "C" fn(*mut c_void);
881
882pub(crate) type GetSymbolsCallback =
883 unsafe extern "C" fn(*mut c_void, *const c_char) -> *mut c_void;
884pub(crate) type GetSymbolsErrorCallback = unsafe extern "C" fn(*const c_char) -> *mut c_void;
885
886unsafe extern "C" {
887 pub(crate) fn LLVMContextCreate() -> &'static mut Context;
889 pub(crate) fn LLVMContextDispose(C: &'static mut Context);
890 pub(crate) fn LLVMContextSetDiscardValueNames(C: &Context, Discard: Bool);
891 pub(crate) fn LLVMGetMDKindIDInContext(
892 C: &Context,
893 Name: *const c_char,
894 SLen: c_uint,
895 ) -> MetadataKindId;
896
897 pub(crate) fn LLVMGetVersion(major: &mut c_uint, minor: &mut c_uint, patch: &mut c_uint);
898
899 pub(crate) fn LLVMDisposeTargetMachine(T: ptr::NonNull<TargetMachine>);
900
901 pub(crate) fn LLVMModuleCreateWithNameInContext(
903 ModuleID: *const c_char,
904 C: &Context,
905 ) -> &Module;
906 pub(crate) safe fn LLVMCloneModule(M: &Module) -> &Module;
907
908 pub(crate) fn LLVMGetDataLayoutStr(M: &Module) -> *const c_char;
910 pub(crate) fn LLVMSetDataLayout(M: &Module, Triple: *const c_char);
911
912 pub(crate) fn LLVMGetInlineAsm<'ll>(
914 Ty: &'ll Type,
915 AsmString: *const c_uchar, AsmStringSize: size_t,
917 Constraints: *const c_uchar, ConstraintsSize: size_t,
919 HasSideEffects: llvm::Bool,
920 IsAlignStack: llvm::Bool,
921 Dialect: AsmDialect,
922 CanThrow: llvm::Bool,
923 ) -> &'ll Value;
924
925 pub(crate) safe fn LLVMGetTypeKind(Ty: &Type) -> RawEnum<TypeKind>;
926
927 pub(crate) fn LLVMInt1TypeInContext(C: &Context) -> &Type;
929 pub(crate) fn LLVMInt8TypeInContext(C: &Context) -> &Type;
930 pub(crate) fn LLVMInt16TypeInContext(C: &Context) -> &Type;
931 pub(crate) fn LLVMInt32TypeInContext(C: &Context) -> &Type;
932 pub(crate) fn LLVMInt64TypeInContext(C: &Context) -> &Type;
933 pub(crate) safe fn LLVMIntTypeInContext(C: &Context, NumBits: c_uint) -> &Type;
934
935 pub(crate) fn LLVMGetIntTypeWidth(IntegerTy: &Type) -> c_uint;
936
937 pub(crate) fn LLVMHalfTypeInContext(C: &Context) -> &Type;
939 pub(crate) fn LLVMFloatTypeInContext(C: &Context) -> &Type;
940 pub(crate) fn LLVMDoubleTypeInContext(C: &Context) -> &Type;
941 pub(crate) fn LLVMFP128TypeInContext(C: &Context) -> &Type;
942
943 pub(crate) fn LLVMBFloatTypeInContext(C: &Context) -> &Type;
945
946 pub(crate) fn LLVMFunctionType<'a>(
948 ReturnType: &'a Type,
949 ParamTypes: *const &'a Type,
950 ParamCount: c_uint,
951 IsVarArg: Bool,
952 ) -> &'a Type;
953 pub(crate) fn LLVMCountParamTypes(FunctionTy: &Type) -> c_uint;
954 pub(crate) fn LLVMGetParamTypes<'a>(FunctionTy: &'a Type, Dest: *mut &'a Type);
955 pub(crate) fn LLVMGetReturnType(FunctionTy: &Type) -> &Type;
956 pub(crate) fn LLVMIsFunctionVarArg(FunctionTy: &Type) -> Bool;
957
958 pub(crate) fn LLVMStructTypeInContext<'a>(
960 C: &'a Context,
961 ElementTypes: *const &'a Type,
962 ElementCount: c_uint,
963 Packed: Bool,
964 ) -> &'a Type;
965
966 pub(crate) safe fn LLVMPointerTypeInContext(C: &Context, AddressSpace: c_uint) -> &Type;
968 pub(crate) fn LLVMVectorType(ElementType: &Type, ElementCount: c_uint) -> &Type;
969 pub(crate) fn LLVMScalableVectorType(ElementType: &Type, ElementCount: c_uint) -> &Type;
970
971 pub(crate) fn LLVMGetElementType(Ty: &Type) -> &Type;
972 pub(crate) fn LLVMGetVectorSize(VectorTy: &Type) -> c_uint;
973
974 pub(crate) fn LLVMVoidTypeInContext(C: &Context) -> &Type;
976
977 pub(crate) fn LLVMTypeOf(Val: &Value) -> &Type;
979 pub(crate) fn LLVMGetValueName2(Val: &Value, Length: *mut size_t) -> *const c_char;
980 pub(crate) fn LLVMSetValueName2(Val: &Value, Name: *const c_char, NameLen: size_t);
981 pub(crate) fn LLVMReplaceAllUsesWith<'a>(OldVal: &'a Value, NewVal: &'a Value);
982 pub(crate) safe fn LLVMGetMetadata<'a>(
983 Val: &'a Value,
984 KindID: MetadataKindId,
985 ) -> Option<&'a Value>;
986 pub(crate) safe fn LLVMSetMetadata<'a>(Val: &'a Value, KindID: MetadataKindId, Node: &'a Value);
987 pub(crate) fn LLVMGlobalSetMetadata<'a>(
988 Val: &'a Value,
989 KindID: MetadataKindId,
990 Metadata: &'a Metadata,
991 );
992 pub(crate) safe fn LLVMValueAsMetadata(Node: &Value) -> &Metadata;
993
994 pub(crate) fn LLVMConstNull(Ty: &Type) -> &Value;
996 pub(crate) fn LLVMGetUndef(Ty: &Type) -> &Value;
997 pub(crate) fn LLVMGetPoison(Ty: &Type) -> &Value;
998
999 pub(crate) fn LLVMMDStringInContext2(
1001 C: &Context,
1002 Str: *const c_char,
1003 SLen: size_t,
1004 ) -> &Metadata;
1005 pub(crate) fn LLVMMDNodeInContext2<'a>(
1006 C: &'a Context,
1007 Vals: *const &'a Metadata,
1008 Count: size_t,
1009 ) -> &'a Metadata;
1010 pub(crate) fn LLVMAddNamedMetadataOperand<'a>(
1011 M: &'a Module,
1012 Name: *const c_char,
1013 Val: &'a Value,
1014 );
1015 pub(crate) fn LLVMReplaceMDNodeOperandWith(Val: &Value, index: u32, replacement: &Metadata);
1016
1017 pub(crate) fn LLVMConstInt(IntTy: &Type, N: c_ulonglong, SignExtend: Bool) -> &Value;
1019 pub(crate) fn LLVMConstIntOfArbitraryPrecision(
1020 IntTy: &Type,
1021 Wn: c_uint,
1022 Ws: *const u64,
1023 ) -> &Value;
1024 pub(crate) fn LLVMConstReal(RealTy: &Type, N: f64) -> &Value;
1025
1026 pub(crate) fn LLVMConstArray2<'a>(
1028 ElementTy: &'a Type,
1029 ConstantVals: *const &'a Value,
1030 Length: u64,
1031 ) -> &'a Value;
1032 pub(crate) fn LLVMArrayType2(ElementType: &Type, ElementCount: u64) -> &Type;
1033 pub(crate) fn LLVMConstStringInContext2(
1034 C: &Context,
1035 Str: *const c_char,
1036 Length: size_t,
1037 DontNullTerminate: Bool,
1038 ) -> &Value;
1039 pub(crate) fn LLVMConstStructInContext<'a>(
1040 C: &'a Context,
1041 ConstantVals: *const &'a Value,
1042 Count: c_uint,
1043 Packed: Bool,
1044 ) -> &'a Value;
1045 pub(crate) fn LLVMConstNamedStruct<'a>(
1046 StructTy: &'a Type,
1047 ConstantVals: *const &'a Value,
1048 Count: c_uint,
1049 ) -> &'a Value;
1050 pub(crate) fn LLVMConstVector(ScalarConstantVals: *const &Value, Size: c_uint) -> &Value;
1051
1052 pub(crate) fn LLVMConstInBoundsGEP2<'a>(
1054 ty: &'a Type,
1055 ConstantVal: &'a Value,
1056 ConstantIndices: *const &'a Value,
1057 NumIndices: c_uint,
1058 ) -> &'a Value;
1059 pub(crate) fn LLVMConstPtrToInt<'a>(ConstantVal: &'a Value, ToType: &'a Type) -> &'a Value;
1060 pub(crate) fn LLVMConstIntToPtr<'a>(ConstantVal: &'a Value, ToType: &'a Type) -> &'a Value;
1061 pub(crate) fn LLVMConstBitCast<'a>(ConstantVal: &'a Value, ToType: &'a Type) -> &'a Value;
1062 pub(crate) fn LLVMConstPointerCast<'a>(ConstantVal: &'a Value, ToType: &'a Type) -> &'a Value;
1063 pub(crate) fn LLVMGetAggregateElement(ConstantVal: &Value, Idx: c_uint) -> Option<&Value>;
1064 pub(crate) fn LLVMGetConstOpcode(ConstantVal: &Value) -> Opcode;
1065 pub(crate) fn LLVMIsAConstantExpr(Val: &Value) -> Option<&Value>;
1066
1067 pub(crate) fn LLVMIsDeclaration(Global: &Value) -> Bool;
1069 pub(crate) fn LLVMGetLinkage(Global: &Value) -> RawEnum<Linkage>;
1070 pub(crate) fn LLVMSetLinkage(Global: &Value, RustLinkage: Linkage);
1071 pub(crate) fn LLVMSetSection(Global: &Value, Section: *const c_char);
1072 pub(crate) fn LLVMGetVisibility(Global: &Value) -> RawEnum<Visibility>;
1073 pub(crate) fn LLVMSetVisibility(Global: &Value, Viz: Visibility);
1074 pub(crate) fn LLVMGetAlignment(Global: &Value) -> c_uint;
1075 pub(crate) fn LLVMSetAlignment(Global: &Value, Bytes: c_uint);
1076 pub(crate) fn LLVMSetDLLStorageClass(V: &Value, C: DLLStorageClass);
1077 pub(crate) fn LLVMGlobalGetValueType(Global: &Value) -> &Type;
1078
1079 pub(crate) safe fn LLVMIsAGlobalVariable(GlobalVar: &Value) -> Option<&Value>;
1081 pub(crate) fn LLVMAddGlobal<'a>(M: &'a Module, Ty: &'a Type, Name: *const c_char) -> &'a Value;
1082 pub(crate) fn LLVMGetNamedGlobal(M: &Module, Name: *const c_char) -> Option<&Value>;
1083 pub(crate) fn LLVMGetFirstGlobal(M: &Module) -> Option<&Value>;
1084 pub(crate) fn LLVMGetNextGlobal(GlobalVar: &Value) -> Option<&Value>;
1085 pub(crate) fn LLVMDeleteGlobal(GlobalVar: &Value);
1086 pub(crate) safe fn LLVMGetInitializer(GlobalVar: &Value) -> Option<&Value>;
1087 pub(crate) fn LLVMSetInitializer<'a>(GlobalVar: &'a Value, ConstantVal: &'a Value);
1088 pub(crate) safe fn LLVMIsThreadLocal(GlobalVar: &Value) -> Bool;
1089 pub(crate) fn LLVMSetThreadLocalMode(GlobalVar: &Value, Mode: ThreadLocalMode);
1090 pub(crate) safe fn LLVMIsGlobalConstant(GlobalVar: &Value) -> Bool;
1091 pub(crate) safe fn LLVMSetGlobalConstant(GlobalVar: &Value, IsConstant: Bool);
1092 pub(crate) safe fn LLVMSetTailCall(CallInst: &Value, IsTailCall: Bool);
1093 pub(crate) safe fn LLVMSetTailCallKind(CallInst: &Value, kind: TailCallKind);
1094 pub(crate) safe fn LLVMSetExternallyInitialized(GlobalVar: &Value, IsExtInit: Bool);
1095
1096 pub(crate) fn LLVMAddAlias2<'ll>(
1098 M: &'ll Module,
1099 ValueTy: &Type,
1100 AddressSpace: c_uint,
1101 Aliasee: &Value,
1102 Name: *const c_char,
1103 ) -> &'ll Value;
1104 pub(crate) fn LLVMGetFirstGlobalAlias(M: &Module) -> Option<&Value>;
1105 pub(crate) fn LLVMGetNextGlobalAlias(GlobalAlias: &Value) -> Option<&Value>;
1106
1107 pub(crate) fn LLVMCreateStringAttribute(
1109 C: &Context,
1110 Name: *const c_char,
1111 NameLen: c_uint,
1112 Value: *const c_char,
1113 ValueLen: c_uint,
1114 ) -> &Attribute;
1115
1116 pub(crate) fn LLVMSetFunctionCallConv(Fn: &Value, CC: c_uint);
1118 pub(crate) fn LLVMAddFunction<'a>(
1119 Mod: &'a Module,
1120 Name: *const c_char,
1121 FunctionTy: &'a Type,
1122 ) -> &'a Value;
1123 pub(crate) fn LLVMDeleteFunction(Fn: &Value);
1124
1125 pub(crate) fn LLVMLookupIntrinsicID(Name: *const c_char, NameLen: size_t) -> c_uint;
1127 pub(crate) fn LLVMIntrinsicIsOverloaded(ID: NonZero<c_uint>) -> Bool;
1128 pub(crate) fn LLVMGetIntrinsicDeclaration<'a>(
1129 Mod: &'a Module,
1130 ID: NonZero<c_uint>,
1131 ParamTypes: *const &'a Type,
1132 ParamCount: size_t,
1133 ) -> &'a Value;
1134 pub(crate) fn LLVMRustUpgradeIntrinsicFunction<'a>(
1135 Fn: &'a Value,
1136 NewFn: &mut Option<&'a Value>,
1137 ) -> bool;
1138 pub(crate) fn LLVMRustIsTargetIntrinsic(ID: NonZero<c_uint>) -> bool;
1139
1140 pub(crate) fn LLVMIsAArgument(Val: &Value) -> Option<&Value>;
1142 pub(crate) safe fn LLVMCountParams(Fn: &Value) -> c_uint;
1143 pub(crate) fn LLVMGetParam(Fn: &Value, Index: c_uint) -> &Value;
1144
1145 pub(crate) fn LLVMGetBasicBlockParent(BB: &BasicBlock) -> &Value;
1147 pub(crate) fn LLVMAppendBasicBlockInContext<'a>(
1148 C: &'a Context,
1149 Fn: &'a Value,
1150 Name: *const c_char,
1151 ) -> &'a BasicBlock;
1152
1153 pub(crate) fn LLVMIsAInstruction(Val: &Value) -> Option<&Value>;
1155 pub(crate) fn LLVMGetFirstBasicBlock(Fn: &Value) -> &BasicBlock;
1156 pub(crate) fn LLVMGetOperand(Val: &Value, Index: c_uint) -> Option<&Value>;
1157
1158 pub(crate) fn LLVMSetInstructionCallConv(Instr: &Value, CC: c_uint);
1160
1161 pub(crate) fn LLVMSetVolatile(MemoryAccessInst: &Value, volatile: Bool);
1163 pub(crate) fn LLVMSetOrdering(MemoryAccessInst: &Value, Ordering: AtomicOrdering);
1164
1165 pub(crate) fn LLVMAddIncoming<'a>(
1167 PhiNode: &'a Value,
1168 IncomingValues: *const &'a Value,
1169 IncomingBlocks: *const &'a BasicBlock,
1170 Count: c_uint,
1171 );
1172
1173 pub(crate) fn LLVMCreateBuilderInContext(C: &Context) -> &mut Builder<'_>;
1175 pub(crate) fn LLVMPositionBuilderAtEnd<'a>(Builder: &Builder<'a>, Block: &'a BasicBlock);
1176 pub(crate) fn LLVMGetInsertBlock<'a>(Builder: &Builder<'a>) -> &'a BasicBlock;
1177 pub(crate) fn LLVMDisposeBuilder<'a>(Builder: &'a mut Builder<'a>);
1178
1179 pub(crate) fn LLVMSetCurrentDebugLocation2<'a>(Builder: &Builder<'a>, Loc: *const Metadata);
1181 pub(crate) fn LLVMGetCurrentDebugLocation2<'a>(Builder: &Builder<'a>) -> Option<&'a Metadata>;
1182
1183 pub(crate) safe fn LLVMBuildRetVoid<'a>(B: &Builder<'a>) -> &'a Value;
1185 pub(crate) fn LLVMBuildRet<'a>(B: &Builder<'a>, V: &'a Value) -> &'a Value;
1186 pub(crate) fn LLVMBuildBr<'a>(B: &Builder<'a>, Dest: &'a BasicBlock) -> &'a Value;
1187 pub(crate) fn LLVMBuildCondBr<'a>(
1188 B: &Builder<'a>,
1189 If: &'a Value,
1190 Then: &'a BasicBlock,
1191 Else: &'a BasicBlock,
1192 ) -> &'a Value;
1193 pub(crate) fn LLVMBuildSwitch<'a>(
1194 B: &Builder<'a>,
1195 V: &'a Value,
1196 Else: &'a BasicBlock,
1197 NumCases: c_uint,
1198 ) -> &'a Value;
1199 pub(crate) fn LLVMBuildLandingPad<'a>(
1200 B: &Builder<'a>,
1201 Ty: &'a Type,
1202 PersFn: Option<&'a Value>,
1203 NumClauses: c_uint,
1204 Name: *const c_char,
1205 ) -> &'a Value;
1206 pub(crate) fn LLVMBuildResume<'a>(B: &Builder<'a>, Exn: &'a Value) -> &'a Value;
1207 pub(crate) fn LLVMBuildUnreachable<'a>(B: &Builder<'a>) -> &'a Value;
1208
1209 pub(crate) fn LLVMBuildCleanupPad<'a>(
1210 B: &Builder<'a>,
1211 ParentPad: Option<&'a Value>,
1212 Args: *const &'a Value,
1213 NumArgs: c_uint,
1214 Name: *const c_char,
1215 ) -> Option<&'a Value>;
1216 pub(crate) fn LLVMBuildCleanupRet<'a>(
1217 B: &Builder<'a>,
1218 CleanupPad: &'a Value,
1219 BB: Option<&'a BasicBlock>,
1220 ) -> Option<&'a Value>;
1221 pub(crate) fn LLVMBuildCatchPad<'a>(
1222 B: &Builder<'a>,
1223 ParentPad: &'a Value,
1224 Args: *const &'a Value,
1225 NumArgs: c_uint,
1226 Name: *const c_char,
1227 ) -> Option<&'a Value>;
1228 pub(crate) fn LLVMBuildCatchRet<'a>(
1229 B: &Builder<'a>,
1230 CatchPad: &'a Value,
1231 BB: &'a BasicBlock,
1232 ) -> Option<&'a Value>;
1233 pub(crate) fn LLVMBuildCatchSwitch<'a>(
1234 Builder: &Builder<'a>,
1235 ParentPad: Option<&'a Value>,
1236 UnwindBB: Option<&'a BasicBlock>,
1237 NumHandlers: c_uint,
1238 Name: *const c_char,
1239 ) -> Option<&'a Value>;
1240 pub(crate) fn LLVMAddHandler<'a>(CatchSwitch: &'a Value, Dest: &'a BasicBlock);
1241 pub(crate) fn LLVMSetPersonalityFn<'a>(Func: &'a Value, Pers: &'a Value);
1242
1243 pub(crate) fn LLVMAddCase<'a>(Switch: &'a Value, OnVal: &'a Value, Dest: &'a BasicBlock);
1245
1246 pub(crate) fn LLVMAddClause<'a>(LandingPad: &'a Value, ClauseVal: &'a Value);
1248
1249 pub(crate) fn LLVMSetCleanup(LandingPad: &Value, Val: Bool);
1251
1252 pub(crate) fn LLVMBuildAdd<'a>(
1254 B: &Builder<'a>,
1255 LHS: &'a Value,
1256 RHS: &'a Value,
1257 Name: *const c_char,
1258 ) -> &'a Value;
1259 pub(crate) fn LLVMBuildFAdd<'a>(
1260 B: &Builder<'a>,
1261 LHS: &'a Value,
1262 RHS: &'a Value,
1263 Name: *const c_char,
1264 ) -> &'a Value;
1265 pub(crate) fn LLVMBuildSub<'a>(
1266 B: &Builder<'a>,
1267 LHS: &'a Value,
1268 RHS: &'a Value,
1269 Name: *const c_char,
1270 ) -> &'a Value;
1271 pub(crate) fn LLVMBuildFSub<'a>(
1272 B: &Builder<'a>,
1273 LHS: &'a Value,
1274 RHS: &'a Value,
1275 Name: *const c_char,
1276 ) -> &'a Value;
1277 pub(crate) fn LLVMBuildMul<'a>(
1278 B: &Builder<'a>,
1279 LHS: &'a Value,
1280 RHS: &'a Value,
1281 Name: *const c_char,
1282 ) -> &'a Value;
1283 pub(crate) fn LLVMBuildFMul<'a>(
1284 B: &Builder<'a>,
1285 LHS: &'a Value,
1286 RHS: &'a Value,
1287 Name: *const c_char,
1288 ) -> &'a Value;
1289 pub(crate) fn LLVMBuildUDiv<'a>(
1290 B: &Builder<'a>,
1291 LHS: &'a Value,
1292 RHS: &'a Value,
1293 Name: *const c_char,
1294 ) -> &'a Value;
1295 pub(crate) fn LLVMBuildExactUDiv<'a>(
1296 B: &Builder<'a>,
1297 LHS: &'a Value,
1298 RHS: &'a Value,
1299 Name: *const c_char,
1300 ) -> &'a Value;
1301 pub(crate) fn LLVMBuildSDiv<'a>(
1302 B: &Builder<'a>,
1303 LHS: &'a Value,
1304 RHS: &'a Value,
1305 Name: *const c_char,
1306 ) -> &'a Value;
1307 pub(crate) fn LLVMBuildExactSDiv<'a>(
1308 B: &Builder<'a>,
1309 LHS: &'a Value,
1310 RHS: &'a Value,
1311 Name: *const c_char,
1312 ) -> &'a Value;
1313 pub(crate) fn LLVMBuildFDiv<'a>(
1314 B: &Builder<'a>,
1315 LHS: &'a Value,
1316 RHS: &'a Value,
1317 Name: *const c_char,
1318 ) -> &'a Value;
1319 pub(crate) fn LLVMBuildURem<'a>(
1320 B: &Builder<'a>,
1321 LHS: &'a Value,
1322 RHS: &'a Value,
1323 Name: *const c_char,
1324 ) -> &'a Value;
1325 pub(crate) fn LLVMBuildSRem<'a>(
1326 B: &Builder<'a>,
1327 LHS: &'a Value,
1328 RHS: &'a Value,
1329 Name: *const c_char,
1330 ) -> &'a Value;
1331 pub(crate) fn LLVMBuildFRem<'a>(
1332 B: &Builder<'a>,
1333 LHS: &'a Value,
1334 RHS: &'a Value,
1335 Name: *const c_char,
1336 ) -> &'a Value;
1337 pub(crate) fn LLVMBuildShl<'a>(
1338 B: &Builder<'a>,
1339 LHS: &'a Value,
1340 RHS: &'a Value,
1341 Name: *const c_char,
1342 ) -> &'a Value;
1343 pub(crate) fn LLVMBuildLShr<'a>(
1344 B: &Builder<'a>,
1345 LHS: &'a Value,
1346 RHS: &'a Value,
1347 Name: *const c_char,
1348 ) -> &'a Value;
1349 pub(crate) fn LLVMBuildAShr<'a>(
1350 B: &Builder<'a>,
1351 LHS: &'a Value,
1352 RHS: &'a Value,
1353 Name: *const c_char,
1354 ) -> &'a Value;
1355 pub(crate) fn LLVMBuildNSWAdd<'a>(
1356 B: &Builder<'a>,
1357 LHS: &'a Value,
1358 RHS: &'a Value,
1359 Name: *const c_char,
1360 ) -> &'a Value;
1361 pub(crate) fn LLVMBuildNUWAdd<'a>(
1362 B: &Builder<'a>,
1363 LHS: &'a Value,
1364 RHS: &'a Value,
1365 Name: *const c_char,
1366 ) -> &'a Value;
1367 pub(crate) fn LLVMBuildNSWSub<'a>(
1368 B: &Builder<'a>,
1369 LHS: &'a Value,
1370 RHS: &'a Value,
1371 Name: *const c_char,
1372 ) -> &'a Value;
1373 pub(crate) fn LLVMBuildNUWSub<'a>(
1374 B: &Builder<'a>,
1375 LHS: &'a Value,
1376 RHS: &'a Value,
1377 Name: *const c_char,
1378 ) -> &'a Value;
1379 pub(crate) fn LLVMBuildNSWMul<'a>(
1380 B: &Builder<'a>,
1381 LHS: &'a Value,
1382 RHS: &'a Value,
1383 Name: *const c_char,
1384 ) -> &'a Value;
1385 pub(crate) fn LLVMBuildNUWMul<'a>(
1386 B: &Builder<'a>,
1387 LHS: &'a Value,
1388 RHS: &'a Value,
1389 Name: *const c_char,
1390 ) -> &'a Value;
1391 pub(crate) fn LLVMBuildAnd<'a>(
1392 B: &Builder<'a>,
1393 LHS: &'a Value,
1394 RHS: &'a Value,
1395 Name: *const c_char,
1396 ) -> &'a Value;
1397 pub(crate) fn LLVMBuildOr<'a>(
1398 B: &Builder<'a>,
1399 LHS: &'a Value,
1400 RHS: &'a Value,
1401 Name: *const c_char,
1402 ) -> &'a Value;
1403 pub(crate) fn LLVMBuildXor<'a>(
1404 B: &Builder<'a>,
1405 LHS: &'a Value,
1406 RHS: &'a Value,
1407 Name: *const c_char,
1408 ) -> &'a Value;
1409 pub(crate) fn LLVMBuildNeg<'a>(B: &Builder<'a>, V: &'a Value, Name: *const c_char)
1410 -> &'a Value;
1411 pub(crate) fn LLVMBuildFNeg<'a>(
1412 B: &Builder<'a>,
1413 V: &'a Value,
1414 Name: *const c_char,
1415 ) -> &'a Value;
1416 pub(crate) fn LLVMBuildNot<'a>(B: &Builder<'a>, V: &'a Value, Name: *const c_char)
1417 -> &'a Value;
1418
1419 pub(crate) fn LLVMSetIsDisjoint(Instr: &Value, IsDisjoint: Bool);
1421 pub(crate) fn LLVMSetNUW(ArithInst: &Value, HasNUW: Bool);
1422 pub(crate) fn LLVMSetNSW(ArithInst: &Value, HasNSW: Bool);
1423
1424 pub(crate) fn LLVMBuildAlloca<'a>(
1426 B: &Builder<'a>,
1427 Ty: &'a Type,
1428 Name: *const c_char,
1429 ) -> &'a Value;
1430 pub(crate) fn LLVMBuildLoad2<'a>(
1431 B: &Builder<'a>,
1432 Ty: &'a Type,
1433 PointerVal: &'a Value,
1434 Name: *const c_char,
1435 ) -> &'a Value;
1436
1437 pub(crate) fn LLVMBuildStore<'a>(B: &Builder<'a>, Val: &'a Value, Ptr: &'a Value) -> &'a Value;
1438
1439 pub(crate) fn LLVMBuildGEPWithNoWrapFlags<'a>(
1440 B: &Builder<'a>,
1441 Ty: &'a Type,
1442 Pointer: &'a Value,
1443 Indices: *const &'a Value,
1444 NumIndices: c_uint,
1445 Name: *const c_char,
1446 Flags: GEPNoWrapFlags,
1447 ) -> &'a Value;
1448
1449 pub(crate) fn LLVMBuildTrunc<'a>(
1451 B: &Builder<'a>,
1452 Val: &'a Value,
1453 DestTy: &'a Type,
1454 Name: *const c_char,
1455 ) -> &'a Value;
1456 pub(crate) fn LLVMBuildZExt<'a>(
1457 B: &Builder<'a>,
1458 Val: &'a Value,
1459 DestTy: &'a Type,
1460 Name: *const c_char,
1461 ) -> &'a Value;
1462 pub(crate) fn LLVMBuildSExt<'a>(
1463 B: &Builder<'a>,
1464 Val: &'a Value,
1465 DestTy: &'a Type,
1466 Name: *const c_char,
1467 ) -> &'a Value;
1468 pub(crate) fn LLVMBuildFPToUI<'a>(
1469 B: &Builder<'a>,
1470 Val: &'a Value,
1471 DestTy: &'a Type,
1472 Name: *const c_char,
1473 ) -> &'a Value;
1474 pub(crate) fn LLVMBuildFPToSI<'a>(
1475 B: &Builder<'a>,
1476 Val: &'a Value,
1477 DestTy: &'a Type,
1478 Name: *const c_char,
1479 ) -> &'a Value;
1480 pub(crate) fn LLVMBuildUIToFP<'a>(
1481 B: &Builder<'a>,
1482 Val: &'a Value,
1483 DestTy: &'a Type,
1484 Name: *const c_char,
1485 ) -> &'a Value;
1486 pub(crate) fn LLVMBuildSIToFP<'a>(
1487 B: &Builder<'a>,
1488 Val: &'a Value,
1489 DestTy: &'a Type,
1490 Name: *const c_char,
1491 ) -> &'a Value;
1492 pub(crate) fn LLVMBuildFPTrunc<'a>(
1493 B: &Builder<'a>,
1494 Val: &'a Value,
1495 DestTy: &'a Type,
1496 Name: *const c_char,
1497 ) -> &'a Value;
1498 pub(crate) fn LLVMBuildFPExt<'a>(
1499 B: &Builder<'a>,
1500 Val: &'a Value,
1501 DestTy: &'a Type,
1502 Name: *const c_char,
1503 ) -> &'a Value;
1504 pub(crate) fn LLVMBuildPtrToInt<'a>(
1505 B: &Builder<'a>,
1506 Val: &'a Value,
1507 DestTy: &'a Type,
1508 Name: *const c_char,
1509 ) -> &'a Value;
1510 pub(crate) fn LLVMBuildIntToPtr<'a>(
1511 B: &Builder<'a>,
1512 Val: &'a Value,
1513 DestTy: &'a Type,
1514 Name: *const c_char,
1515 ) -> &'a Value;
1516 pub(crate) fn LLVMBuildBitCast<'a>(
1517 B: &Builder<'a>,
1518 Val: &'a Value,
1519 DestTy: &'a Type,
1520 Name: *const c_char,
1521 ) -> &'a Value;
1522 pub(crate) fn LLVMBuildPointerCast<'a>(
1523 B: &Builder<'a>,
1524 Val: &'a Value,
1525 DestTy: &'a Type,
1526 Name: *const c_char,
1527 ) -> &'a Value;
1528 pub(crate) fn LLVMBuildIntCast2<'a>(
1529 B: &Builder<'a>,
1530 Val: &'a Value,
1531 DestTy: &'a Type,
1532 IsSigned: Bool,
1533 Name: *const c_char,
1534 ) -> &'a Value;
1535
1536 pub(crate) fn LLVMBuildICmp<'a>(
1538 B: &Builder<'a>,
1539 Op: c_uint,
1540 LHS: &'a Value,
1541 RHS: &'a Value,
1542 Name: *const c_char,
1543 ) -> &'a Value;
1544 pub(crate) fn LLVMBuildFCmp<'a>(
1545 B: &Builder<'a>,
1546 Op: c_uint,
1547 LHS: &'a Value,
1548 RHS: &'a Value,
1549 Name: *const c_char,
1550 ) -> &'a Value;
1551
1552 pub(crate) fn LLVMBuildPhi<'a>(B: &Builder<'a>, Ty: &'a Type, Name: *const c_char)
1554 -> &'a Value;
1555 pub(crate) fn LLVMBuildSelect<'a>(
1556 B: &Builder<'a>,
1557 If: &'a Value,
1558 Then: &'a Value,
1559 Else: &'a Value,
1560 Name: *const c_char,
1561 ) -> &'a Value;
1562 pub(crate) fn LLVMBuildVAArg<'a>(
1563 B: &Builder<'a>,
1564 list: &'a Value,
1565 Ty: &'a Type,
1566 Name: *const c_char,
1567 ) -> &'a Value;
1568 pub(crate) fn LLVMBuildExtractElement<'a>(
1569 B: &Builder<'a>,
1570 VecVal: &'a Value,
1571 Index: &'a Value,
1572 Name: *const c_char,
1573 ) -> &'a Value;
1574 pub(crate) fn LLVMBuildInsertElement<'a>(
1575 B: &Builder<'a>,
1576 VecVal: &'a Value,
1577 EltVal: &'a Value,
1578 Index: &'a Value,
1579 Name: *const c_char,
1580 ) -> &'a Value;
1581 pub(crate) fn LLVMBuildShuffleVector<'a>(
1582 B: &Builder<'a>,
1583 V1: &'a Value,
1584 V2: &'a Value,
1585 Mask: &'a Value,
1586 Name: *const c_char,
1587 ) -> &'a Value;
1588 pub(crate) fn LLVMBuildExtractValue<'a>(
1589 B: &Builder<'a>,
1590 AggVal: &'a Value,
1591 Index: c_uint,
1592 Name: *const c_char,
1593 ) -> &'a Value;
1594 pub(crate) fn LLVMBuildInsertValue<'a>(
1595 B: &Builder<'a>,
1596 AggVal: &'a Value,
1597 EltVal: &'a Value,
1598 Index: c_uint,
1599 Name: *const c_char,
1600 ) -> &'a Value;
1601
1602 pub(crate) fn LLVMBuildAtomicCmpXchg<'a>(
1604 B: &Builder<'a>,
1605 LHS: &'a Value,
1606 CMP: &'a Value,
1607 RHS: &'a Value,
1608 Order: AtomicOrdering,
1609 FailureOrder: AtomicOrdering,
1610 SingleThreaded: Bool,
1611 ) -> &'a Value;
1612
1613 pub(crate) fn LLVMSetWeak(CmpXchgInst: &Value, IsWeak: Bool);
1614
1615 pub(crate) fn LLVMBuildAtomicRMW<'a>(
1616 B: &Builder<'a>,
1617 Op: AtomicRmwBinOp,
1618 LHS: &'a Value,
1619 RHS: &'a Value,
1620 Order: AtomicOrdering,
1621 SingleThreaded: Bool,
1622 ) -> &'a Value;
1623
1624 pub(crate) fn LLVMBuildFence<'a>(
1625 B: &Builder<'a>,
1626 Order: AtomicOrdering,
1627 SingleThreaded: Bool,
1628 Name: *const c_char,
1629 ) -> &'a Value;
1630
1631 pub(crate) fn LLVMWriteBitcodeToFile(M: &Module, Path: *const c_char) -> c_int;
1633
1634 pub(crate) fn LLVMCreatePassManager<'a>() -> &'a mut PassManager<'a>;
1636
1637 pub(crate) fn LLVMAddAnalysisPasses<'a>(T: &'a TargetMachine, PM: &PassManager<'a>);
1638
1639 pub(crate) fn LLVMGetHostCPUFeatures() -> *mut c_char;
1640
1641 pub(crate) fn LLVMDisposeMessage(message: *mut c_char);
1642
1643 pub(crate) fn LLVMIsMultithreaded() -> Bool;
1644
1645 pub(crate) fn LLVMStructCreateNamed(C: &Context, Name: *const c_char) -> &Type;
1646
1647 pub(crate) fn LLVMStructSetBody<'a>(
1648 StructTy: &'a Type,
1649 ElementTypes: *const &'a Type,
1650 ElementCount: c_uint,
1651 Packed: Bool,
1652 );
1653
1654 pub(crate) fn LLVMCountStructElementTypes(StructTy: &Type) -> c_uint;
1655 pub(crate) fn LLVMGetStructElementTypes<'a>(StructTy: &'a Type, Dest: *mut &'a Type);
1656
1657 pub(crate) safe fn LLVMMetadataAsValue<'a>(C: &'a Context, MD: &'a Metadata) -> &'a Value;
1658
1659 pub(crate) safe fn LLVMSetUnnamedAddress(Global: &Value, UnnamedAddr: UnnamedAddr);
1660
1661 pub(crate) fn LLVMIsAConstantInt(value_ref: &Value) -> Option<&ConstantInt>;
1662
1663 pub(crate) fn LLVMGetOrInsertComdat(M: &Module, Name: *const c_char) -> &Comdat;
1664 pub(crate) fn LLVMSetComdat(V: &Value, C: &Comdat);
1665
1666 pub(crate) fn LLVMCreateOperandBundle(
1667 Tag: *const c_char,
1668 TagLen: size_t,
1669 Args: *const &'_ Value,
1670 NumArgs: c_uint,
1671 ) -> *mut OperandBundle<'_>;
1672 pub(crate) fn LLVMDisposeOperandBundle(Bundle: ptr::NonNull<OperandBundle<'_>>);
1673
1674 pub(crate) fn LLVMBuildCallWithOperandBundles<'a>(
1675 B: &Builder<'a>,
1676 Ty: &'a Type,
1677 Fn: &'a Value,
1678 Args: *const &'a Value,
1679 NumArgs: c_uint,
1680 Bundles: *const &OperandBundle<'a>,
1681 NumBundles: c_uint,
1682 Name: *const c_char,
1683 ) -> &'a Value;
1684 pub(crate) fn LLVMBuildInvokeWithOperandBundles<'a>(
1685 B: &Builder<'a>,
1686 Ty: &'a Type,
1687 Fn: &'a Value,
1688 Args: *const &'a Value,
1689 NumArgs: c_uint,
1690 Then: &'a BasicBlock,
1691 Catch: &'a BasicBlock,
1692 Bundles: *const &OperandBundle<'a>,
1693 NumBundles: c_uint,
1694 Name: *const c_char,
1695 ) -> &'a Value;
1696 pub(crate) fn LLVMBuildCallBr<'a>(
1697 B: &Builder<'a>,
1698 Ty: &'a Type,
1699 Fn: &'a Value,
1700 DefaultDest: &'a BasicBlock,
1701 IndirectDests: *const &'a BasicBlock,
1702 NumIndirectDests: c_uint,
1703 Args: *const &'a Value,
1704 NumArgs: c_uint,
1705 Bundles: *const &OperandBundle<'a>,
1706 NumBundles: c_uint,
1707 Name: *const c_char,
1708 ) -> &'a Value;
1709}
1710
1711unsafe extern "C" {
1718 pub(crate) fn LLVMCreateDIBuilder<'ll>(M: &'ll Module) -> *mut DIBuilder<'ll>;
1719 pub(crate) fn LLVMDisposeDIBuilder<'ll>(Builder: ptr::NonNull<DIBuilder<'ll>>);
1720
1721 pub(crate) fn LLVMDIBuilderFinalize<'ll>(Builder: &DIBuilder<'ll>);
1722
1723 pub(crate) fn LLVMDIBuilderCreateNameSpace<'ll>(
1724 Builder: &DIBuilder<'ll>,
1725 ParentScope: Option<&'ll Metadata>,
1726 Name: *const c_uchar, NameLen: size_t,
1728 ExportSymbols: llvm::Bool,
1729 ) -> &'ll Metadata;
1730
1731 pub(crate) fn LLVMDIBuilderCreateLexicalBlock<'ll>(
1732 Builder: &DIBuilder<'ll>,
1733 Scope: &'ll Metadata,
1734 File: &'ll Metadata,
1735 Line: c_uint,
1736 Column: c_uint,
1737 ) -> &'ll Metadata;
1738
1739 pub(crate) fn LLVMDIBuilderCreateLexicalBlockFile<'ll>(
1740 Builder: &DIBuilder<'ll>,
1741 Scope: &'ll Metadata,
1742 File: &'ll Metadata,
1743 Discriminator: c_uint, ) -> &'ll Metadata;
1745
1746 pub(crate) fn LLVMDIBuilderCreateDebugLocation<'ll>(
1747 Ctx: &'ll Context,
1748 Line: c_uint,
1749 Column: c_uint,
1750 Scope: &'ll Metadata,
1751 InlinedAt: Option<&'ll Metadata>,
1752 ) -> &'ll Metadata;
1753
1754 pub(crate) fn LLVMDIBuilderCreateSubroutineType<'ll>(
1755 Builder: &DIBuilder<'ll>,
1756 File: Option<&'ll Metadata>, ParameterTypes: *const Option<&'ll Metadata>,
1758 NumParameterTypes: c_uint,
1759 Flags: DIFlags, ) -> &'ll Metadata;
1761
1762 pub(crate) fn LLVMDIBuilderCreateEnumeratorOfArbitraryPrecision<'ll>(
1763 Builder: &DIBuilder<'ll>,
1764 Name: *const c_uchar, NameLen: size_t,
1766 SizeInBits: u64,
1767 Words: *const u64, IsUnsigned: llvm::Bool,
1769 ) -> &'ll Metadata;
1770
1771 pub(crate) fn LLVMDIBuilderCreateUnionType<'ll>(
1772 Builder: &DIBuilder<'ll>,
1773 Scope: Option<&'ll Metadata>,
1774 Name: *const c_uchar, NameLen: size_t,
1776 File: &'ll Metadata,
1777 LineNumber: c_uint,
1778 SizeInBits: u64,
1779 AlignInBits: u32,
1780 Flags: DIFlags,
1781 Elements: *const Option<&'ll Metadata>,
1782 NumElements: c_uint,
1783 RunTimeLang: c_uint, UniqueId: *const c_uchar, UniqueIdLen: size_t,
1786 ) -> &'ll Metadata;
1787
1788 pub(crate) fn LLVMDIBuilderCreateArrayType<'ll>(
1789 Builder: &DIBuilder<'ll>,
1790 Size: u64,
1791 Align: u32,
1792 Ty: &'ll Metadata,
1793 Subscripts: *const &'ll Metadata,
1794 NumSubscripts: c_uint,
1795 ) -> &'ll Metadata;
1796
1797 pub(crate) fn LLVMDIBuilderCreateBasicType<'ll>(
1798 Builder: &DIBuilder<'ll>,
1799 Name: *const c_uchar, NameLen: size_t,
1801 SizeInBits: u64,
1802 Encoding: c_uint, Flags: DIFlags, ) -> &'ll Metadata;
1805
1806 pub(crate) fn LLVMDIBuilderCreatePointerType<'ll>(
1807 Builder: &DIBuilder<'ll>,
1808 PointeeTy: &'ll Metadata,
1809 SizeInBits: u64,
1810 AlignInBits: u32,
1811 AddressSpace: c_uint, Name: *const c_uchar, NameLen: size_t,
1814 ) -> &'ll Metadata;
1815
1816 pub(crate) fn LLVMDIBuilderCreateStructType<'ll>(
1817 Builder: &DIBuilder<'ll>,
1818 Scope: Option<&'ll Metadata>,
1819 Name: *const c_uchar, NameLen: size_t,
1821 File: &'ll Metadata,
1822 LineNumber: c_uint,
1823 SizeInBits: u64,
1824 AlignInBits: u32,
1825 Flags: DIFlags,
1826 DerivedFrom: Option<&'ll Metadata>,
1827 Elements: *const Option<&'ll Metadata>,
1828 NumElements: c_uint,
1829 RunTimeLang: c_uint, VTableHolder: Option<&'ll Metadata>,
1831 UniqueId: *const c_uchar, UniqueIdLen: size_t,
1833 ) -> &'ll Metadata;
1834
1835 pub(crate) fn LLVMDIBuilderCreateMemberType<'ll>(
1836 Builder: &DIBuilder<'ll>,
1837 Scope: &'ll Metadata,
1838 Name: *const c_uchar, NameLen: size_t,
1840 File: &'ll Metadata,
1841 LineNo: c_uint,
1842 SizeInBits: u64,
1843 AlignInBits: u32,
1844 OffsetInBits: u64,
1845 Flags: DIFlags,
1846 Ty: &'ll Metadata,
1847 ) -> &'ll Metadata;
1848
1849 pub(crate) fn LLVMDIBuilderCreateStaticMemberType<'ll>(
1850 Builder: &DIBuilder<'ll>,
1851 Scope: &'ll Metadata,
1852 Name: *const c_uchar, NameLen: size_t,
1854 File: &'ll Metadata,
1855 LineNumber: c_uint,
1856 Type: &'ll Metadata,
1857 Flags: DIFlags,
1858 ConstantVal: Option<&'ll Value>,
1859 AlignInBits: u32,
1860 ) -> &'ll Metadata;
1861
1862 pub(crate) fn LLVMDIBuilderCreateQualifiedType<'ll>(
1865 Builder: &DIBuilder<'ll>,
1866 Tag: c_uint, Type: &'ll Metadata,
1868 ) -> &'ll Metadata;
1869
1870 pub(crate) fn LLVMDIBuilderCreateTypedef<'ll>(
1871 Builder: &DIBuilder<'ll>,
1872 Type: &'ll Metadata,
1873 Name: *const c_uchar, NameLen: size_t,
1875 File: &'ll Metadata,
1876 LineNo: c_uint,
1877 Scope: Option<&'ll Metadata>,
1878 AlignInBits: u32, ) -> &'ll Metadata;
1880
1881 pub(crate) fn LLVMDIBuilderGetOrCreateSubrange<'ll>(
1882 Builder: &DIBuilder<'ll>,
1883 LowerBound: i64,
1884 Count: i64,
1885 ) -> &'ll Metadata;
1886
1887 pub(crate) fn LLVMDIBuilderGetOrCreateArray<'ll>(
1888 Builder: &DIBuilder<'ll>,
1889 Data: *const Option<&'ll Metadata>,
1890 NumElements: size_t,
1891 ) -> &'ll Metadata;
1892
1893 pub(crate) fn LLVMDIBuilderCreateExpression<'ll>(
1894 Builder: &DIBuilder<'ll>,
1895 Addr: *const u64,
1896 Length: size_t,
1897 ) -> &'ll Metadata;
1898
1899 pub(crate) fn LLVMDIBuilderCreateGlobalVariableExpression<'ll>(
1900 Builder: &DIBuilder<'ll>,
1901 Scope: Option<&'ll Metadata>,
1902 Name: *const c_uchar, NameLen: size_t,
1904 Linkage: *const c_uchar, LinkLen: size_t,
1906 File: &'ll Metadata,
1907 LineNo: c_uint,
1908 Ty: &'ll Metadata,
1909 LocalToUnit: llvm::Bool,
1910 Expr: &'ll Metadata,
1911 Decl: Option<&'ll Metadata>,
1912 AlignInBits: u32,
1913 ) -> &'ll Metadata;
1914
1915 pub(crate) fn LLVMDIBuilderInsertDeclareRecordAtEnd<'ll>(
1916 Builder: &DIBuilder<'ll>,
1917 Storage: &'ll Value,
1918 VarInfo: &'ll Metadata,
1919 Expr: &'ll Metadata,
1920 DebugLoc: &'ll Metadata,
1921 Block: &'ll BasicBlock,
1922 ) -> &'ll DbgRecord;
1923
1924 pub(crate) fn LLVMDIBuilderInsertDbgValueRecordAtEnd<'ll>(
1925 Builder: &DIBuilder<'ll>,
1926 Val: &'ll Value,
1927 VarInfo: &'ll Metadata,
1928 Expr: &'ll Metadata,
1929 DebugLoc: &'ll Metadata,
1930 Block: &'ll BasicBlock,
1931 ) -> &'ll DbgRecord;
1932
1933 pub(crate) fn LLVMDIBuilderCreateAutoVariable<'ll>(
1934 Builder: &DIBuilder<'ll>,
1935 Scope: &'ll Metadata,
1936 Name: *const c_uchar, NameLen: size_t,
1938 File: &'ll Metadata,
1939 LineNo: c_uint,
1940 Ty: &'ll Metadata,
1941 AlwaysPreserve: llvm::Bool, Flags: DIFlags,
1943 AlignInBits: u32,
1944 ) -> &'ll Metadata;
1945
1946 pub(crate) fn LLVMDIBuilderCreateParameterVariable<'ll>(
1947 Builder: &DIBuilder<'ll>,
1948 Scope: &'ll Metadata,
1949 Name: *const c_uchar, NameLen: size_t,
1951 ArgNo: c_uint,
1952 File: &'ll Metadata,
1953 LineNo: c_uint,
1954 Ty: &'ll Metadata,
1955 AlwaysPreserve: llvm::Bool, Flags: DIFlags,
1957 ) -> &'ll Metadata;
1958}
1959
1960#[link(name = "llvm-wrapper", kind = "static")]
1961unsafe extern "C" {
1962 pub(crate) fn LLVMRustInstallErrorHandlers();
1963 pub(crate) fn LLVMRustDisableSystemDialogsOnCrash();
1964
1965 pub(crate) fn LLVMRustGlobalAddMetadata<'a>(
1968 Val: &'a Value,
1969 KindID: MetadataKindId,
1970 Metadata: &'a Metadata,
1971 );
1972 pub(crate) fn LLVMRustIsNonGVFunctionPointerTy(Val: &Value) -> bool;
1973 pub(crate) fn LLVMRustStripPointerCasts<'a>(Val: &'a Value) -> &'a Value;
1974
1975 pub(crate) fn LLVMRustConstIntGetZExtValue(ConstantVal: &ConstantInt, Value: &mut u64) -> bool;
1977 pub(crate) fn LLVMRustConstInt128Get(
1978 ConstantVal: &ConstantInt,
1979 SExt: bool,
1980 high: &mut u64,
1981 low: &mut u64,
1982 ) -> bool;
1983
1984 pub(crate) fn LLVMRustSetDSOLocal(Global: &Value, is_dso_local: bool);
1986
1987 pub(crate) fn LLVMRustGetOrInsertGlobal<'a>(
1989 M: &'a Module,
1990 Name: *const c_char,
1991 NameLen: size_t,
1992 T: &'a Type,
1993 ) -> &'a Value;
1994 pub(crate) fn LLVMRustGetOrInsertGlobalInAddrspace<'a>(
1995 M: &'a Module,
1996 Name: *const c_char,
1997 NameLen: size_t,
1998 T: &'a Type,
1999 AddressSpace: c_uint,
2000 ) -> &'a Value;
2001 pub(crate) fn LLVMRustGetNamedValue(
2002 M: &Module,
2003 Name: *const c_char,
2004 NameLen: size_t,
2005 ) -> Option<&Value>;
2006
2007 pub(crate) fn LLVMRustCreateAttrNoValue(C: &Context, attr: AttributeKind) -> &Attribute;
2009 pub(crate) fn LLVMRustCreateAlignmentAttr(C: &Context, bytes: u64) -> &Attribute;
2010 pub(crate) fn LLVMRustCreateDereferenceableAttr(C: &Context, bytes: u64) -> &Attribute;
2011 pub(crate) fn LLVMRustCreateDereferenceableOrNullAttr(C: &Context, bytes: u64) -> &Attribute;
2012 pub(crate) fn LLVMRustCreateByValAttr<'a>(C: &'a Context, ty: &'a Type) -> &'a Attribute;
2013 pub(crate) fn LLVMRustCreateStructRetAttr<'a>(C: &'a Context, ty: &'a Type) -> &'a Attribute;
2014 pub(crate) fn LLVMRustCreateElementTypeAttr<'a>(C: &'a Context, ty: &'a Type) -> &'a Attribute;
2015 pub(crate) fn LLVMRustCreateUWTableAttr(C: &Context, async_: bool) -> &Attribute;
2016 pub(crate) fn LLVMRustCreateAllocSizeAttr(C: &Context, size_arg: u32) -> &Attribute;
2017 pub(crate) fn LLVMRustCreateAllocKindAttr(C: &Context, size_arg: u64) -> &Attribute;
2018 pub(crate) fn LLVMRustCreateMemoryEffectsAttr(
2019 C: &Context,
2020 effects: MemoryEffects,
2021 ) -> &Attribute;
2022 pub(crate) fn LLVMRustCreateRangeAttribute(
2029 C: &Context,
2030 NumBits: c_uint,
2031 LowerWords: *const u64,
2032 UpperWords: *const u64,
2033 ) -> &Attribute;
2034
2035 pub(crate) fn LLVMRustGetOrInsertFunction<'a>(
2038 M: &'a Module,
2039 Name: *const c_char,
2040 NameLen: size_t,
2041 FunctionTy: &'a Type,
2042 ) -> &'a Value;
2043 pub(crate) fn LLVMRustAddFunctionAttributes<'a>(
2044 Fn: &'a Value,
2045 index: c_uint,
2046 Attrs: *const &'a Attribute,
2047 AttrsLen: size_t,
2048 );
2049
2050 pub(crate) fn LLVMRustAddCallSiteAttributes<'a>(
2052 Instr: &'a Value,
2053 index: c_uint,
2054 Attrs: *const &'a Attribute,
2055 AttrsLen: size_t,
2056 );
2057
2058 pub(crate) fn LLVMRustSetFastMath(Instr: &Value);
2059 pub(crate) fn LLVMRustSetAlgebraicMath(Instr: &Value);
2060 pub(crate) fn LLVMRustSetAllowReassoc(Instr: &Value);
2061 pub(crate) fn LLVMRustSetNoSignedZeros(Instr: &Value);
2062
2063 pub(crate) fn LLVMRustBuildMemCpy<'a>(
2065 B: &Builder<'a>,
2066 Dst: &'a Value,
2067 DstAlign: c_uint,
2068 Src: &'a Value,
2069 SrcAlign: c_uint,
2070 Size: &'a Value,
2071 IsVolatile: bool,
2072 ) -> &'a Value;
2073 pub(crate) fn LLVMRustBuildMemMove<'a>(
2074 B: &Builder<'a>,
2075 Dst: &'a Value,
2076 DstAlign: c_uint,
2077 Src: &'a Value,
2078 SrcAlign: c_uint,
2079 Size: &'a Value,
2080 IsVolatile: bool,
2081 ) -> &'a Value;
2082 pub(crate) fn LLVMRustBuildMemSet<'a>(
2083 B: &Builder<'a>,
2084 Dst: &'a Value,
2085 DstAlign: c_uint,
2086 Val: &'a Value,
2087 Size: &'a Value,
2088 IsVolatile: bool,
2089 ) -> &'a Value;
2090
2091 pub(crate) fn LLVMRustBuildVScale<'a>(B: &Builder<'a>, Ty: &'a Type) -> &'a Value;
2092
2093 pub(crate) fn LLVMRustTimeTraceProfilerInitialize();
2094
2095 pub(crate) fn LLVMRustTimeTraceProfilerFinishThread();
2096
2097 pub(crate) fn LLVMRustTimeTraceProfilerFinish(FileName: *const c_char);
2098
2099 pub(crate) fn LLVMRustGetLastError() -> *const c_char;
2101
2102 pub(crate) fn LLVMRustPrintPassTimings(OutStr: &RustString);
2104
2105 pub(crate) fn LLVMRustPrintStatistics(OutStr: &RustString);
2107
2108 pub(crate) fn LLVMRustPrintStatisticsJSON(OutStr: &RustString);
2110
2111 pub(crate) fn LLVMRustInlineAsmVerify(
2112 Ty: &Type,
2113 Constraints: *const c_uchar, ConstraintsLen: size_t,
2115 ) -> bool;
2116
2117 pub(crate) fn LLVMRustAppendModuleInlineAsm(
2119 M: &Module,
2120 Asm: *const c_uchar, AsmLen: size_t,
2122 TargetFeatures: *const c_uchar, TargetFeaturesLen: size_t,
2124 TargetCpu: *const c_uchar, TargetCpuLen: size_t,
2126 );
2127
2128 pub(crate) fn LLVMRustCoverageWriteFilenamesToBuffer(
2132 Filenames: *const *const c_uchar, FilenamesLen: size_t,
2134 Lengths: *const size_t,
2135 LengthsLen: size_t,
2136 BufferOut: &RustString,
2137 );
2138
2139 pub(crate) fn LLVMRustCoverageWriteFunctionMappingsToBuffer(
2140 VirtualFileMappingIDs: *const c_uint,
2141 NumVirtualFileMappingIDs: size_t,
2142 Expressions: *const crate::coverageinfo::ffi::CounterExpression,
2143 NumExpressions: size_t,
2144 CodeRegions: *const crate::coverageinfo::ffi::CodeRegion,
2145 NumCodeRegions: size_t,
2146 ExpansionRegions: *const crate::coverageinfo::ffi::ExpansionRegion,
2147 NumExpansionRegions: size_t,
2148 BranchRegions: *const crate::coverageinfo::ffi::BranchRegion,
2149 NumBranchRegions: size_t,
2150 BufferOut: &RustString,
2151 );
2152
2153 pub(crate) fn LLVMRustCoverageCreatePGOFuncNameVar(
2154 F: &Value,
2155 FuncName: *const c_uchar, FuncNameLen: size_t,
2157 ) -> &Value;
2158 pub(crate) fn LLVMRustCoverageHashBytes(
2159 Bytes: *const c_uchar, NumBytes: size_t,
2161 ) -> u64;
2162
2163 pub(crate) safe fn LLVMRustCoverageWriteCovmapSectionNameToString(
2164 M: &Module,
2165 OutStr: &RustString,
2166 );
2167 pub(crate) safe fn LLVMRustCoverageWriteCovfunSectionNameToString(
2168 M: &Module,
2169 OutStr: &RustString,
2170 );
2171 pub(crate) safe fn LLVMRustCoverageWriteCovmapVarNameToString(OutStr: &RustString);
2172
2173 pub(crate) safe fn LLVMRustCoverageMappingVersion() -> u32;
2174 pub(crate) fn LLVMRustDebugMetadataVersion() -> u32;
2175 pub(crate) fn LLVMRustVersionMajor() -> u32;
2176 pub(crate) fn LLVMRustVersionMinor() -> u32;
2177 pub(crate) fn LLVMRustVersionPatch() -> u32;
2178
2179 pub(crate) fn LLVMRustAddModuleFlagU32(
2184 M: &Module,
2185 MergeBehavior: ModuleFlagMergeBehavior,
2186 Name: *const c_char,
2187 NameLen: size_t,
2188 Value: u32,
2189 );
2190
2191 pub(crate) fn LLVMRustAddModuleFlagString(
2192 M: &Module,
2193 MergeBehavior: ModuleFlagMergeBehavior,
2194 Name: *const c_char,
2195 NameLen: size_t,
2196 Value: *const c_char,
2197 ValueLen: size_t,
2198 );
2199
2200 pub(crate) fn LLVMRustDIBuilderCreateCompileUnit<'a>(
2204 Builder: &DIBuilder<'a>,
2205 Lang: c_uint,
2206 File: &'a DIFile,
2207 Producer: *const c_char,
2208 ProducerLen: size_t,
2209 isOptimized: bool,
2210 Flags: *const c_char,
2211 RuntimeVer: c_uint,
2212 SplitName: *const c_char,
2213 SplitNameLen: size_t,
2214 kind: DebugEmissionKind,
2215 DWOId: u64,
2216 SplitDebugInlining: bool,
2217 DebugNameTableKind: DebugNameTableKind,
2218 ) -> &'a DIDescriptor;
2219
2220 pub(crate) fn LLVMRustDIBuilderCreateFile<'a>(
2223 Builder: &DIBuilder<'a>,
2224 Filename: *const c_char,
2225 FilenameLen: size_t,
2226 Directory: *const c_char,
2227 DirectoryLen: size_t,
2228 CSKind: ChecksumKind,
2229 Checksum: *const c_char,
2230 ChecksumLen: size_t,
2231 Source: *const c_char,
2232 SourceLen: size_t,
2233 ) -> &'a DIFile;
2234
2235 pub(crate) fn LLVMRustDIBuilderCreateFunction<'a>(
2238 Builder: &DIBuilder<'a>,
2239 Scope: &'a DIDescriptor,
2240 Name: *const c_char,
2241 NameLen: size_t,
2242 LinkageName: *const c_char,
2243 LinkageNameLen: size_t,
2244 File: &'a DIFile,
2245 LineNo: c_uint,
2246 Ty: &'a DIType,
2247 ScopeLine: c_uint,
2248 Flags: DIFlags,
2249 SPFlags: DISPFlags,
2250 MaybeFn: Option<&'a Value>,
2251 TParam: &'a DIArray,
2252 Decl: Option<&'a DIDescriptor>,
2253 ) -> &'a DISubprogram;
2254
2255 pub(crate) fn LLVMRustDIBuilderCreateMethod<'a>(
2257 Builder: &DIBuilder<'a>,
2258 Scope: &'a DIDescriptor,
2259 Name: *const c_char,
2260 NameLen: size_t,
2261 LinkageName: *const c_char,
2262 LinkageNameLen: size_t,
2263 File: &'a DIFile,
2264 LineNo: c_uint,
2265 Ty: &'a DIType,
2266 Flags: DIFlags,
2267 SPFlags: DISPFlags,
2268 TParam: &'a DIArray,
2269 ) -> &'a DISubprogram;
2270
2271 pub(crate) fn LLVMRustDIBuilderCreateVariantMemberType<'a>(
2273 Builder: &DIBuilder<'a>,
2274 Scope: &'a DIScope,
2275 Name: *const c_char,
2276 NameLen: size_t,
2277 File: &'a DIFile,
2278 LineNumber: c_uint,
2279 SizeInBits: u64,
2280 AlignInBits: u32,
2281 OffsetInBits: u64,
2282 Discriminant: Option<&'a Value>,
2283 Flags: DIFlags,
2284 Ty: &'a DIType,
2285 ) -> &'a DIType;
2286
2287 pub(crate) fn LLVMRustDIBuilderCreateEnumerationType<'a>(
2289 Builder: &DIBuilder<'a>,
2290 Scope: &'a DIScope,
2291 Name: *const c_char,
2292 NameLen: size_t,
2293 File: &'a DIFile,
2294 LineNumber: c_uint,
2295 SizeInBits: u64,
2296 AlignInBits: u32,
2297 Elements: &'a DIArray,
2298 ClassType: &'a DIType,
2299 IsScoped: bool,
2300 ) -> &'a DIType;
2301
2302 pub(crate) fn LLVMRustDIBuilderCreateVariantPart<'a>(
2304 Builder: &DIBuilder<'a>,
2305 Scope: &'a DIScope,
2306 Name: *const c_char,
2307 NameLen: size_t,
2308 File: &'a DIFile,
2309 LineNo: c_uint,
2310 SizeInBits: u64,
2311 AlignInBits: u32,
2312 Flags: DIFlags,
2313 Discriminator: Option<&'a DIDerivedType>,
2314 Elements: &'a DIArray,
2315 UniqueId: *const c_char,
2316 UniqueIdLen: size_t,
2317 ) -> &'a DIDerivedType;
2318
2319 pub(crate) fn LLVMRustDIBuilderCreateTemplateTypeParameter<'a>(
2321 Builder: &DIBuilder<'a>,
2322 Scope: Option<&'a DIScope>,
2323 Name: *const c_char,
2324 NameLen: size_t,
2325 Ty: &'a DIType,
2326 ) -> &'a DITemplateTypeParameter;
2327
2328 pub(crate) fn LLVMRustDICompositeTypeReplaceArrays<'a>(
2331 Builder: &DIBuilder<'a>,
2332 CompositeType: &'a DIType,
2333 Elements: Option<&'a DIArray>,
2334 Params: Option<&'a DIArray>,
2335 );
2336
2337 pub(crate) fn LLVMRustDIGetOrCreateSubrange<'a>(
2340 Builder: &DIBuilder<'a>,
2341 CountNode: Option<&'a Metadata>,
2342 LB: &'a Metadata,
2343 UB: &'a Metadata,
2344 Stride: Option<&'a Metadata>,
2345 ) -> &'a Metadata;
2346
2347 pub(crate) fn LLVMRustDICreateVectorType<'a>(
2350 Builder: &DIBuilder<'a>,
2351 Size: u64,
2352 AlignInBits: u32,
2353 Type: &'a DIType,
2354 Subscripts: &'a DIArray,
2355 BitStride: Option<&'a Metadata>,
2356 ) -> &'a Metadata;
2357
2358 pub(crate) fn LLVMRustDILocationCloneWithBaseDiscriminator<'a>(
2360 Location: &'a DILocation,
2361 BD: c_uint,
2362 ) -> Option<&'a DILocation>;
2363
2364 pub(crate) fn LLVMRustWriteTypeToString(Type: &Type, s: &RustString);
2365 pub(crate) fn LLVMRustWriteValueToString(value_ref: &Value, s: &RustString);
2366
2367 pub(crate) fn LLVMRustHasFeature(T: &TargetMachine, s: *const c_char) -> bool;
2368 pub(crate) fn LLVMRustTargetHasMnemonic(T: &TargetMachine, s: *const c_char) -> bool;
2369
2370 pub(crate) fn LLVMRustPrintTargetCPUs(TM: &TargetMachine, OutStr: &RustString);
2371 pub(crate) fn LLVMRustGetTargetFeaturesCount(T: &TargetMachine) -> size_t;
2372 pub(crate) fn LLVMRustGetTargetFeature(
2373 T: &TargetMachine,
2374 Index: size_t,
2375 Feature: &mut *const c_char,
2376 Desc: &mut *const c_char,
2377 );
2378
2379 pub(crate) fn LLVMRustGetHostCPUName(LenOut: &mut size_t) -> *const u8;
2380
2381 pub(crate) fn LLVMRustCreateTargetMachine(
2384 Triple: *const c_char,
2385 CPU: *const c_char,
2386 Features: *const c_char,
2387 Abi: *const c_char,
2388 Model: CodeModel,
2389 Reloc: RelocModel,
2390 Level: CodeGenOptLevel,
2391 FloatABIType: FloatAbi,
2392 FunctionSections: bool,
2393 DataSections: bool,
2394 UniqueSectionNames: bool,
2395 TrapUnreachable: bool,
2396 Singlethread: bool,
2397 VerboseAsm: bool,
2398 EmitStackSizeSection: bool,
2399 RelaxELFRelocations: bool,
2400 UseInitArray: bool,
2401 SplitDwarfFile: *const c_char,
2402 OutputObjFile: *const c_char,
2403 DebugInfoCompression: CompressionKind,
2404 UseEmulatedTls: bool,
2405 UseWasmEH: bool,
2406 LargeDataThreshold: u64,
2407 ) -> *mut TargetMachine;
2408
2409 pub(crate) fn LLVMRustAddLibraryInfo<'a>(
2410 T: &TargetMachine,
2411 PM: &PassManager<'a>,
2412 M: &'a Module,
2413 DisableSimplifyLibCalls: bool,
2414 );
2415 pub(crate) fn LLVMRustWriteOutputFile<'a>(
2416 T: &'a TargetMachine,
2417 PM: *mut PassManager<'a>,
2418 M: &'a Module,
2419 Output: *const c_char,
2420 DwoOutput: *const c_char,
2421 FileType: FileType,
2422 VerifyIR: bool,
2423 ) -> LLVMRustResult;
2424 pub(crate) fn LLVMRustOptimize<'a>(
2425 M: &'a Module,
2426 TM: &'a TargetMachine,
2427 OptLevel: PassBuilderOptLevel,
2428 OptStage: OptStage,
2429 IsLinkerPluginLTO: bool,
2430 NoPrepopulatePasses: bool,
2431 VerifyIR: bool,
2432 LintIR: bool,
2433 ThinLTOBuffer: Option<&mut Option<crate::back::lto::Buffer>>,
2434 ThinLTOSummaryBuffer: Option<&mut Option<crate::back::lto::Buffer>>,
2435 MergeFunctions: bool,
2436 UnrollLoops: bool,
2437 SLPVectorize: bool,
2438 LoopVectorize: bool,
2439 DisableSimplifyLibCalls: bool,
2440 EmitLifetimeMarkers: bool,
2441 RunEnzyme: *const c_void,
2442 PrintBeforeEnzyme: bool,
2443 PrintAfterEnzyme: bool,
2444 PrintPasses: bool,
2445 SanitizerOptions: Option<&SanitizerOptions>,
2446 PGOGenPath: *const c_char,
2447 PGOUsePath: *const c_char,
2448 InstrumentCoverage: bool,
2449 InstrProfileOutput: *const c_char,
2450 PGOSampleUsePath: *const c_char,
2451 DebugInfoForProfiling: bool,
2452 llvm_selfprofiler: *mut c_void,
2453 begin_callback: SelfProfileBeforePassCallback,
2454 end_callback: SelfProfileAfterPassCallback,
2455 PostEnzymePasses: *const c_char,
2456 PostEnzymePassesLen: size_t,
2457 ExtraPasses: *const c_char,
2458 ExtraPassesLen: size_t,
2459 LLVMPlugins: *const c_char,
2460 LLVMPluginsLen: size_t,
2461 ) -> LLVMRustResult;
2462 pub(crate) fn LLVMRustPrintModule(
2463 M: &Module,
2464 Output: *const c_char,
2465 Demangle: extern "C" fn(*const c_char, size_t, *mut c_char, size_t) -> size_t,
2466 ) -> LLVMRustResult;
2467 pub(crate) fn LLVMRustSetLLVMOptions(Argc: c_int, Argv: *const *const c_char);
2468 pub(crate) fn LLVMRustPrintPasses();
2469 pub(crate) fn LLVMRustSetNormalizedTarget(M: &Module, triple: *const c_char);
2470 pub(crate) fn LLVMRustRunRestrictionPass(M: &Module, syms: *const *const c_char, len: size_t);
2471
2472 pub(crate) fn LLVMRustWriteTwineToString(T: &Twine, s: &RustString);
2473
2474 pub(crate) fn LLVMRustUnpackOptimizationDiagnostic<'a>(
2475 DI: &'a DiagnosticInfo,
2476 pass_name_out: &RustString,
2477 function_out: &mut Option<&'a Value>,
2478 loc_line_out: &mut c_uint,
2479 loc_column_out: &mut c_uint,
2480 loc_filename_out: &RustString,
2481 message_out: &RustString,
2482 );
2483
2484 pub(crate) fn LLVMRustUnpackInlineAsmDiagnostic<'a>(
2485 DI: &'a DiagnosticInfo,
2486 level_out: &mut DiagnosticLevel,
2487 cookie_out: &mut u64,
2488 message_out: &mut Option<&'a Twine>,
2489 );
2490
2491 pub(crate) fn LLVMRustWriteDiagnosticInfoToString(DI: &DiagnosticInfo, s: &RustString);
2492 pub(crate) fn LLVMRustGetDiagInfoKind(DI: &DiagnosticInfo) -> DiagnosticKind;
2493
2494 pub(crate) fn LLVMRustGetSMDiagnostic<'a>(
2495 DI: &'a DiagnosticInfo,
2496 cookie_out: &mut u64,
2497 ) -> &'a SMDiagnostic;
2498
2499 pub(crate) fn LLVMRustUnpackSMDiagnostic(
2500 d: &SMDiagnostic,
2501 message_out: &RustString,
2502 buffer_out: &RustString,
2503 level_out: &mut DiagnosticLevel,
2504 loc_out: &mut c_uint,
2505 ranges_out: *mut c_uint,
2506 num_ranges: &mut usize,
2507 ) -> bool;
2508
2509 pub(crate) fn LLVMRustSetDataLayoutFromTargetMachine<'a>(M: &'a Module, TM: &'a TargetMachine);
2510
2511 pub(crate) fn LLVMRustPositionBuilderPastAllocas<'a>(B: &Builder<'a>, Fn: &'a Value);
2512 pub(crate) fn LLVMRustPositionBuilderAtStart<'a>(B: &Builder<'a>, BB: &'a BasicBlock);
2513
2514 pub(crate) fn LLVMRustSetModulePICLevel(M: &Module);
2515 pub(crate) fn LLVMRustSetModulePIELevel(M: &Module);
2516 pub(crate) fn LLVMRustSetModuleCodeModel(M: &Module, Model: CodeModel);
2517 pub(crate) fn LLVMRustBufferPtr(p: &Buffer) -> *const u8;
2518 pub(crate) fn LLVMRustBufferLen(p: &Buffer) -> usize;
2519 pub(crate) fn LLVMRustBufferFree(p: &'static mut Buffer);
2520 pub(crate) fn LLVMRustModuleCost(M: &Module) -> u64;
2521 pub(crate) fn LLVMRustModuleInstructionStats(M: &Module) -> u64;
2522
2523 pub(crate) fn LLVMRustModuleSerialize(M: &Module, is_thin: bool) -> &'static mut Buffer;
2524 pub(crate) fn LLVMRustCreateThinLTOData(
2525 Modules: *const ThinLTOModule,
2526 NumModules: size_t,
2527 PreservedSymbols: *const *const c_char,
2528 PreservedSymbolsLen: size_t,
2529 ) -> Option<&'static mut ThinLTOData>;
2530 pub(crate) fn LLVMRustPrepareThinLTORename(
2531 Data: &ThinLTOData,
2532 Module: &Module,
2533 Target: &TargetMachine,
2534 );
2535 pub(crate) fn LLVMRustPrepareThinLTOResolveWeak(Data: &ThinLTOData, Module: &Module) -> bool;
2536 pub(crate) fn LLVMRustPrepareThinLTOInternalize(Data: &ThinLTOData, Module: &Module) -> bool;
2537 pub(crate) fn LLVMRustPrepareThinLTOImport(
2538 Data: &ThinLTOData,
2539 Module: &Module,
2540 Target: &TargetMachine,
2541 ) -> bool;
2542 pub(crate) fn LLVMRustFreeThinLTOData(Data: &'static mut ThinLTOData);
2543 pub(crate) fn LLVMRustParseBitcodeForLTO(
2544 Context: &Context,
2545 Data: *const u8,
2546 len: usize,
2547 Identifier: *const c_char,
2548 ) -> Option<&Module>;
2549
2550 pub(crate) fn LLVMRustLinkerNew(M: &Module) -> &mut Linker<'_>;
2551 pub(crate) fn LLVMRustLinkerAdd(
2552 linker: &Linker<'_>,
2553 bytecode: *const c_char,
2554 bytecode_len: usize,
2555 ) -> bool;
2556 pub(crate) fn LLVMRustLinkerFree<'a>(linker: &'a mut Linker<'a>);
2557 pub(crate) fn LLVMRustComputeLTOCacheKey(
2558 key_out: &RustString,
2559 mod_id: *const c_char,
2560 data: &ThinLTOData,
2561 );
2562
2563 pub(crate) fn LLVMRustContextGetDiagnosticHandler(
2564 Context: &Context,
2565 ) -> Option<&DiagnosticHandler>;
2566 pub(crate) fn LLVMRustContextSetDiagnosticHandler(
2567 context: &Context,
2568 diagnostic_handler: Option<&DiagnosticHandler>,
2569 );
2570 pub(crate) fn LLVMRustContextConfigureDiagnosticHandler(
2571 context: &Context,
2572 diagnostic_handler_callback: DiagnosticHandlerTy,
2573 diagnostic_handler_context: *mut c_void,
2574 remark_all_passes: bool,
2575 remark_passes: *const *const c_char,
2576 remark_passes_len: usize,
2577 remark_file: *const c_char,
2578 pgo_available: bool,
2579 );
2580
2581 pub(crate) fn LLVMRustGetMangledName(V: &Value, out: &RustString);
2582
2583 pub(crate) fn LLVMRustGetElementTypeArgIndex(CallSite: &Value) -> i32;
2584
2585 pub(crate) safe fn LLVMRustLLVMHasZlibCompression() -> bool;
2586 pub(crate) safe fn LLVMRustLLVMHasZstdCompression() -> bool;
2587
2588 pub(crate) fn LLVMRustGetSymbols(
2589 buf_ptr: *const u8,
2590 buf_len: usize,
2591 state: *mut c_void,
2592 callback: GetSymbolsCallback,
2593 error_callback: GetSymbolsErrorCallback,
2594 ) -> *mut c_void;
2595
2596 pub(crate) fn LLVMRustIs64BitSymbolicFile(buf_ptr: *const u8, buf_len: usize) -> bool;
2597
2598 pub(crate) fn LLVMRustIsECObject(buf_ptr: *const u8, buf_len: usize) -> bool;
2599
2600 pub(crate) fn LLVMRustIsAnyArm64Coff(buf_ptr: *const u8, buf_len: usize) -> bool;
2601
2602 pub(crate) fn LLVMRustSetNoSanitizeAddress(Global: &Value);
2603 pub(crate) fn LLVMRustSetNoSanitizeHWAddress(Global: &Value);
2604
2605 pub(crate) fn LLVMRustConstPtrAuth(
2606 ptr: *const Value,
2607 key: u32,
2608 disc: u64,
2609 addr_diversity: *const Value,
2610 deactivation_symbol: *const Value,
2611 ) -> *const Value;
2612}