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 LLVMDisposeTargetMachine(T: ptr::NonNull<TargetMachine>);
898
899 pub(crate) fn LLVMModuleCreateWithNameInContext(
901 ModuleID: *const c_char,
902 C: &Context,
903 ) -> &Module;
904 pub(crate) safe fn LLVMCloneModule(M: &Module) -> &Module;
905
906 pub(crate) fn LLVMGetDataLayoutStr(M: &Module) -> *const c_char;
908 pub(crate) fn LLVMSetDataLayout(M: &Module, Triple: *const c_char);
909
910 pub(crate) fn LLVMAppendModuleInlineAsm(
912 M: &Module,
913 Asm: *const c_uchar, Len: size_t,
915 );
916
917 pub(crate) fn LLVMGetInlineAsm<'ll>(
919 Ty: &'ll Type,
920 AsmString: *const c_uchar, AsmStringSize: size_t,
922 Constraints: *const c_uchar, ConstraintsSize: size_t,
924 HasSideEffects: llvm::Bool,
925 IsAlignStack: llvm::Bool,
926 Dialect: AsmDialect,
927 CanThrow: llvm::Bool,
928 ) -> &'ll Value;
929
930 pub(crate) safe fn LLVMGetTypeKind(Ty: &Type) -> RawEnum<TypeKind>;
931
932 pub(crate) fn LLVMInt1TypeInContext(C: &Context) -> &Type;
934 pub(crate) fn LLVMInt8TypeInContext(C: &Context) -> &Type;
935 pub(crate) fn LLVMInt16TypeInContext(C: &Context) -> &Type;
936 pub(crate) fn LLVMInt32TypeInContext(C: &Context) -> &Type;
937 pub(crate) fn LLVMInt64TypeInContext(C: &Context) -> &Type;
938 pub(crate) safe fn LLVMIntTypeInContext(C: &Context, NumBits: c_uint) -> &Type;
939
940 pub(crate) fn LLVMGetIntTypeWidth(IntegerTy: &Type) -> c_uint;
941
942 pub(crate) fn LLVMHalfTypeInContext(C: &Context) -> &Type;
944 pub(crate) fn LLVMFloatTypeInContext(C: &Context) -> &Type;
945 pub(crate) fn LLVMDoubleTypeInContext(C: &Context) -> &Type;
946 pub(crate) fn LLVMFP128TypeInContext(C: &Context) -> &Type;
947
948 pub(crate) fn LLVMBFloatTypeInContext(C: &Context) -> &Type;
950
951 pub(crate) fn LLVMFunctionType<'a>(
953 ReturnType: &'a Type,
954 ParamTypes: *const &'a Type,
955 ParamCount: c_uint,
956 IsVarArg: Bool,
957 ) -> &'a Type;
958 pub(crate) fn LLVMCountParamTypes(FunctionTy: &Type) -> c_uint;
959 pub(crate) fn LLVMGetParamTypes<'a>(FunctionTy: &'a Type, Dest: *mut &'a Type);
960 pub(crate) fn LLVMGetReturnType(FunctionTy: &Type) -> &Type;
961 pub(crate) fn LLVMIsFunctionVarArg(FunctionTy: &Type) -> Bool;
962
963 pub(crate) fn LLVMStructTypeInContext<'a>(
965 C: &'a Context,
966 ElementTypes: *const &'a Type,
967 ElementCount: c_uint,
968 Packed: Bool,
969 ) -> &'a Type;
970
971 pub(crate) safe fn LLVMPointerTypeInContext(C: &Context, AddressSpace: c_uint) -> &Type;
973 pub(crate) fn LLVMVectorType(ElementType: &Type, ElementCount: c_uint) -> &Type;
974 pub(crate) fn LLVMScalableVectorType(ElementType: &Type, ElementCount: c_uint) -> &Type;
975
976 pub(crate) fn LLVMGetElementType(Ty: &Type) -> &Type;
977 pub(crate) fn LLVMGetVectorSize(VectorTy: &Type) -> c_uint;
978
979 pub(crate) fn LLVMVoidTypeInContext(C: &Context) -> &Type;
981
982 pub(crate) fn LLVMTypeOf(Val: &Value) -> &Type;
984 pub(crate) fn LLVMGetValueName2(Val: &Value, Length: *mut size_t) -> *const c_char;
985 pub(crate) fn LLVMSetValueName2(Val: &Value, Name: *const c_char, NameLen: size_t);
986 pub(crate) fn LLVMReplaceAllUsesWith<'a>(OldVal: &'a Value, NewVal: &'a Value);
987 pub(crate) safe fn LLVMSetMetadata<'a>(Val: &'a Value, KindID: MetadataKindId, Node: &'a Value);
988 pub(crate) fn LLVMGlobalSetMetadata<'a>(
989 Val: &'a Value,
990 KindID: MetadataKindId,
991 Metadata: &'a Metadata,
992 );
993 pub(crate) safe fn LLVMValueAsMetadata(Node: &Value) -> &Metadata;
994
995 pub(crate) fn LLVMConstNull(Ty: &Type) -> &Value;
997 pub(crate) fn LLVMGetUndef(Ty: &Type) -> &Value;
998 pub(crate) fn LLVMGetPoison(Ty: &Type) -> &Value;
999
1000 pub(crate) fn LLVMMDStringInContext2(
1002 C: &Context,
1003 Str: *const c_char,
1004 SLen: size_t,
1005 ) -> &Metadata;
1006 pub(crate) fn LLVMMDNodeInContext2<'a>(
1007 C: &'a Context,
1008 Vals: *const &'a Metadata,
1009 Count: size_t,
1010 ) -> &'a Metadata;
1011 pub(crate) fn LLVMAddNamedMetadataOperand<'a>(
1012 M: &'a Module,
1013 Name: *const c_char,
1014 Val: &'a Value,
1015 );
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 LLVMCreateStringAttribute(
1098 C: &Context,
1099 Name: *const c_char,
1100 NameLen: c_uint,
1101 Value: *const c_char,
1102 ValueLen: c_uint,
1103 ) -> &Attribute;
1104
1105 pub(crate) fn LLVMSetFunctionCallConv(Fn: &Value, CC: c_uint);
1107 pub(crate) fn LLVMAddFunction<'a>(
1108 Mod: &'a Module,
1109 Name: *const c_char,
1110 FunctionTy: &'a Type,
1111 ) -> &'a Value;
1112 pub(crate) fn LLVMDeleteFunction(Fn: &Value);
1113
1114 pub(crate) fn LLVMLookupIntrinsicID(Name: *const c_char, NameLen: size_t) -> c_uint;
1116 pub(crate) fn LLVMIntrinsicIsOverloaded(ID: NonZero<c_uint>) -> Bool;
1117 pub(crate) fn LLVMGetIntrinsicDeclaration<'a>(
1118 Mod: &'a Module,
1119 ID: NonZero<c_uint>,
1120 ParamTypes: *const &'a Type,
1121 ParamCount: size_t,
1122 ) -> &'a Value;
1123 pub(crate) fn LLVMRustUpgradeIntrinsicFunction<'a>(
1124 Fn: &'a Value,
1125 NewFn: &mut Option<&'a Value>,
1126 ) -> bool;
1127 pub(crate) fn LLVMRustIsTargetIntrinsic(ID: NonZero<c_uint>) -> bool;
1128
1129 pub(crate) fn LLVMIsAArgument(Val: &Value) -> Option<&Value>;
1131 pub(crate) safe fn LLVMCountParams(Fn: &Value) -> c_uint;
1132 pub(crate) fn LLVMGetParam(Fn: &Value, Index: c_uint) -> &Value;
1133
1134 pub(crate) fn LLVMGetBasicBlockParent(BB: &BasicBlock) -> &Value;
1136 pub(crate) fn LLVMAppendBasicBlockInContext<'a>(
1137 C: &'a Context,
1138 Fn: &'a Value,
1139 Name: *const c_char,
1140 ) -> &'a BasicBlock;
1141
1142 pub(crate) fn LLVMIsAInstruction(Val: &Value) -> Option<&Value>;
1144 pub(crate) fn LLVMGetFirstBasicBlock(Fn: &Value) -> &BasicBlock;
1145 pub(crate) fn LLVMGetOperand(Val: &Value, Index: c_uint) -> Option<&Value>;
1146
1147 pub(crate) fn LLVMSetInstructionCallConv(Instr: &Value, CC: c_uint);
1149
1150 pub(crate) fn LLVMSetVolatile(MemoryAccessInst: &Value, volatile: Bool);
1152 pub(crate) fn LLVMSetOrdering(MemoryAccessInst: &Value, Ordering: AtomicOrdering);
1153
1154 pub(crate) fn LLVMAddIncoming<'a>(
1156 PhiNode: &'a Value,
1157 IncomingValues: *const &'a Value,
1158 IncomingBlocks: *const &'a BasicBlock,
1159 Count: c_uint,
1160 );
1161
1162 pub(crate) fn LLVMCreateBuilderInContext(C: &Context) -> &mut Builder<'_>;
1164 pub(crate) fn LLVMPositionBuilderAtEnd<'a>(Builder: &Builder<'a>, Block: &'a BasicBlock);
1165 pub(crate) fn LLVMGetInsertBlock<'a>(Builder: &Builder<'a>) -> &'a BasicBlock;
1166 pub(crate) fn LLVMDisposeBuilder<'a>(Builder: &'a mut Builder<'a>);
1167
1168 pub(crate) fn LLVMSetCurrentDebugLocation2<'a>(Builder: &Builder<'a>, Loc: *const Metadata);
1170 pub(crate) fn LLVMGetCurrentDebugLocation2<'a>(Builder: &Builder<'a>) -> Option<&'a Metadata>;
1171
1172 pub(crate) safe fn LLVMBuildRetVoid<'a>(B: &Builder<'a>) -> &'a Value;
1174 pub(crate) fn LLVMBuildRet<'a>(B: &Builder<'a>, V: &'a Value) -> &'a Value;
1175 pub(crate) fn LLVMBuildBr<'a>(B: &Builder<'a>, Dest: &'a BasicBlock) -> &'a Value;
1176 pub(crate) fn LLVMBuildCondBr<'a>(
1177 B: &Builder<'a>,
1178 If: &'a Value,
1179 Then: &'a BasicBlock,
1180 Else: &'a BasicBlock,
1181 ) -> &'a Value;
1182 pub(crate) fn LLVMBuildSwitch<'a>(
1183 B: &Builder<'a>,
1184 V: &'a Value,
1185 Else: &'a BasicBlock,
1186 NumCases: c_uint,
1187 ) -> &'a Value;
1188 pub(crate) fn LLVMBuildLandingPad<'a>(
1189 B: &Builder<'a>,
1190 Ty: &'a Type,
1191 PersFn: Option<&'a Value>,
1192 NumClauses: c_uint,
1193 Name: *const c_char,
1194 ) -> &'a Value;
1195 pub(crate) fn LLVMBuildResume<'a>(B: &Builder<'a>, Exn: &'a Value) -> &'a Value;
1196 pub(crate) fn LLVMBuildUnreachable<'a>(B: &Builder<'a>) -> &'a Value;
1197
1198 pub(crate) fn LLVMBuildCleanupPad<'a>(
1199 B: &Builder<'a>,
1200 ParentPad: Option<&'a Value>,
1201 Args: *const &'a Value,
1202 NumArgs: c_uint,
1203 Name: *const c_char,
1204 ) -> Option<&'a Value>;
1205 pub(crate) fn LLVMBuildCleanupRet<'a>(
1206 B: &Builder<'a>,
1207 CleanupPad: &'a Value,
1208 BB: Option<&'a BasicBlock>,
1209 ) -> Option<&'a Value>;
1210 pub(crate) fn LLVMBuildCatchPad<'a>(
1211 B: &Builder<'a>,
1212 ParentPad: &'a Value,
1213 Args: *const &'a Value,
1214 NumArgs: c_uint,
1215 Name: *const c_char,
1216 ) -> Option<&'a Value>;
1217 pub(crate) fn LLVMBuildCatchRet<'a>(
1218 B: &Builder<'a>,
1219 CatchPad: &'a Value,
1220 BB: &'a BasicBlock,
1221 ) -> Option<&'a Value>;
1222 pub(crate) fn LLVMBuildCatchSwitch<'a>(
1223 Builder: &Builder<'a>,
1224 ParentPad: Option<&'a Value>,
1225 UnwindBB: Option<&'a BasicBlock>,
1226 NumHandlers: c_uint,
1227 Name: *const c_char,
1228 ) -> Option<&'a Value>;
1229 pub(crate) fn LLVMAddHandler<'a>(CatchSwitch: &'a Value, Dest: &'a BasicBlock);
1230 pub(crate) fn LLVMSetPersonalityFn<'a>(Func: &'a Value, Pers: &'a Value);
1231
1232 pub(crate) fn LLVMAddCase<'a>(Switch: &'a Value, OnVal: &'a Value, Dest: &'a BasicBlock);
1234
1235 pub(crate) fn LLVMAddClause<'a>(LandingPad: &'a Value, ClauseVal: &'a Value);
1237
1238 pub(crate) fn LLVMSetCleanup(LandingPad: &Value, Val: Bool);
1240
1241 pub(crate) fn LLVMBuildAdd<'a>(
1243 B: &Builder<'a>,
1244 LHS: &'a Value,
1245 RHS: &'a Value,
1246 Name: *const c_char,
1247 ) -> &'a Value;
1248 pub(crate) fn LLVMBuildFAdd<'a>(
1249 B: &Builder<'a>,
1250 LHS: &'a Value,
1251 RHS: &'a Value,
1252 Name: *const c_char,
1253 ) -> &'a Value;
1254 pub(crate) fn LLVMBuildSub<'a>(
1255 B: &Builder<'a>,
1256 LHS: &'a Value,
1257 RHS: &'a Value,
1258 Name: *const c_char,
1259 ) -> &'a Value;
1260 pub(crate) fn LLVMBuildFSub<'a>(
1261 B: &Builder<'a>,
1262 LHS: &'a Value,
1263 RHS: &'a Value,
1264 Name: *const c_char,
1265 ) -> &'a Value;
1266 pub(crate) fn LLVMBuildMul<'a>(
1267 B: &Builder<'a>,
1268 LHS: &'a Value,
1269 RHS: &'a Value,
1270 Name: *const c_char,
1271 ) -> &'a Value;
1272 pub(crate) fn LLVMBuildFMul<'a>(
1273 B: &Builder<'a>,
1274 LHS: &'a Value,
1275 RHS: &'a Value,
1276 Name: *const c_char,
1277 ) -> &'a Value;
1278 pub(crate) fn LLVMBuildUDiv<'a>(
1279 B: &Builder<'a>,
1280 LHS: &'a Value,
1281 RHS: &'a Value,
1282 Name: *const c_char,
1283 ) -> &'a Value;
1284 pub(crate) fn LLVMBuildExactUDiv<'a>(
1285 B: &Builder<'a>,
1286 LHS: &'a Value,
1287 RHS: &'a Value,
1288 Name: *const c_char,
1289 ) -> &'a Value;
1290 pub(crate) fn LLVMBuildSDiv<'a>(
1291 B: &Builder<'a>,
1292 LHS: &'a Value,
1293 RHS: &'a Value,
1294 Name: *const c_char,
1295 ) -> &'a Value;
1296 pub(crate) fn LLVMBuildExactSDiv<'a>(
1297 B: &Builder<'a>,
1298 LHS: &'a Value,
1299 RHS: &'a Value,
1300 Name: *const c_char,
1301 ) -> &'a Value;
1302 pub(crate) fn LLVMBuildFDiv<'a>(
1303 B: &Builder<'a>,
1304 LHS: &'a Value,
1305 RHS: &'a Value,
1306 Name: *const c_char,
1307 ) -> &'a Value;
1308 pub(crate) fn LLVMBuildURem<'a>(
1309 B: &Builder<'a>,
1310 LHS: &'a Value,
1311 RHS: &'a Value,
1312 Name: *const c_char,
1313 ) -> &'a Value;
1314 pub(crate) fn LLVMBuildSRem<'a>(
1315 B: &Builder<'a>,
1316 LHS: &'a Value,
1317 RHS: &'a Value,
1318 Name: *const c_char,
1319 ) -> &'a Value;
1320 pub(crate) fn LLVMBuildFRem<'a>(
1321 B: &Builder<'a>,
1322 LHS: &'a Value,
1323 RHS: &'a Value,
1324 Name: *const c_char,
1325 ) -> &'a Value;
1326 pub(crate) fn LLVMBuildShl<'a>(
1327 B: &Builder<'a>,
1328 LHS: &'a Value,
1329 RHS: &'a Value,
1330 Name: *const c_char,
1331 ) -> &'a Value;
1332 pub(crate) fn LLVMBuildLShr<'a>(
1333 B: &Builder<'a>,
1334 LHS: &'a Value,
1335 RHS: &'a Value,
1336 Name: *const c_char,
1337 ) -> &'a Value;
1338 pub(crate) fn LLVMBuildAShr<'a>(
1339 B: &Builder<'a>,
1340 LHS: &'a Value,
1341 RHS: &'a Value,
1342 Name: *const c_char,
1343 ) -> &'a Value;
1344 pub(crate) fn LLVMBuildNSWAdd<'a>(
1345 B: &Builder<'a>,
1346 LHS: &'a Value,
1347 RHS: &'a Value,
1348 Name: *const c_char,
1349 ) -> &'a Value;
1350 pub(crate) fn LLVMBuildNUWAdd<'a>(
1351 B: &Builder<'a>,
1352 LHS: &'a Value,
1353 RHS: &'a Value,
1354 Name: *const c_char,
1355 ) -> &'a Value;
1356 pub(crate) fn LLVMBuildNSWSub<'a>(
1357 B: &Builder<'a>,
1358 LHS: &'a Value,
1359 RHS: &'a Value,
1360 Name: *const c_char,
1361 ) -> &'a Value;
1362 pub(crate) fn LLVMBuildNUWSub<'a>(
1363 B: &Builder<'a>,
1364 LHS: &'a Value,
1365 RHS: &'a Value,
1366 Name: *const c_char,
1367 ) -> &'a Value;
1368 pub(crate) fn LLVMBuildNSWMul<'a>(
1369 B: &Builder<'a>,
1370 LHS: &'a Value,
1371 RHS: &'a Value,
1372 Name: *const c_char,
1373 ) -> &'a Value;
1374 pub(crate) fn LLVMBuildNUWMul<'a>(
1375 B: &Builder<'a>,
1376 LHS: &'a Value,
1377 RHS: &'a Value,
1378 Name: *const c_char,
1379 ) -> &'a Value;
1380 pub(crate) fn LLVMBuildAnd<'a>(
1381 B: &Builder<'a>,
1382 LHS: &'a Value,
1383 RHS: &'a Value,
1384 Name: *const c_char,
1385 ) -> &'a Value;
1386 pub(crate) fn LLVMBuildOr<'a>(
1387 B: &Builder<'a>,
1388 LHS: &'a Value,
1389 RHS: &'a Value,
1390 Name: *const c_char,
1391 ) -> &'a Value;
1392 pub(crate) fn LLVMBuildXor<'a>(
1393 B: &Builder<'a>,
1394 LHS: &'a Value,
1395 RHS: &'a Value,
1396 Name: *const c_char,
1397 ) -> &'a Value;
1398 pub(crate) fn LLVMBuildNeg<'a>(B: &Builder<'a>, V: &'a Value, Name: *const c_char)
1399 -> &'a Value;
1400 pub(crate) fn LLVMBuildFNeg<'a>(
1401 B: &Builder<'a>,
1402 V: &'a Value,
1403 Name: *const c_char,
1404 ) -> &'a Value;
1405 pub(crate) fn LLVMBuildNot<'a>(B: &Builder<'a>, V: &'a Value, Name: *const c_char)
1406 -> &'a Value;
1407
1408 pub(crate) fn LLVMSetIsDisjoint(Instr: &Value, IsDisjoint: Bool);
1410 pub(crate) fn LLVMSetNUW(ArithInst: &Value, HasNUW: Bool);
1411 pub(crate) fn LLVMSetNSW(ArithInst: &Value, HasNSW: Bool);
1412
1413 pub(crate) fn LLVMBuildAlloca<'a>(
1415 B: &Builder<'a>,
1416 Ty: &'a Type,
1417 Name: *const c_char,
1418 ) -> &'a Value;
1419 pub(crate) fn LLVMBuildLoad2<'a>(
1420 B: &Builder<'a>,
1421 Ty: &'a Type,
1422 PointerVal: &'a Value,
1423 Name: *const c_char,
1424 ) -> &'a Value;
1425
1426 pub(crate) fn LLVMBuildStore<'a>(B: &Builder<'a>, Val: &'a Value, Ptr: &'a Value) -> &'a Value;
1427
1428 pub(crate) fn LLVMBuildGEPWithNoWrapFlags<'a>(
1429 B: &Builder<'a>,
1430 Ty: &'a Type,
1431 Pointer: &'a Value,
1432 Indices: *const &'a Value,
1433 NumIndices: c_uint,
1434 Name: *const c_char,
1435 Flags: GEPNoWrapFlags,
1436 ) -> &'a Value;
1437
1438 pub(crate) fn LLVMBuildTrunc<'a>(
1440 B: &Builder<'a>,
1441 Val: &'a Value,
1442 DestTy: &'a Type,
1443 Name: *const c_char,
1444 ) -> &'a Value;
1445 pub(crate) fn LLVMBuildZExt<'a>(
1446 B: &Builder<'a>,
1447 Val: &'a Value,
1448 DestTy: &'a Type,
1449 Name: *const c_char,
1450 ) -> &'a Value;
1451 pub(crate) fn LLVMBuildSExt<'a>(
1452 B: &Builder<'a>,
1453 Val: &'a Value,
1454 DestTy: &'a Type,
1455 Name: *const c_char,
1456 ) -> &'a Value;
1457 pub(crate) fn LLVMBuildFPToUI<'a>(
1458 B: &Builder<'a>,
1459 Val: &'a Value,
1460 DestTy: &'a Type,
1461 Name: *const c_char,
1462 ) -> &'a Value;
1463 pub(crate) fn LLVMBuildFPToSI<'a>(
1464 B: &Builder<'a>,
1465 Val: &'a Value,
1466 DestTy: &'a Type,
1467 Name: *const c_char,
1468 ) -> &'a Value;
1469 pub(crate) fn LLVMBuildUIToFP<'a>(
1470 B: &Builder<'a>,
1471 Val: &'a Value,
1472 DestTy: &'a Type,
1473 Name: *const c_char,
1474 ) -> &'a Value;
1475 pub(crate) fn LLVMBuildSIToFP<'a>(
1476 B: &Builder<'a>,
1477 Val: &'a Value,
1478 DestTy: &'a Type,
1479 Name: *const c_char,
1480 ) -> &'a Value;
1481 pub(crate) fn LLVMBuildFPTrunc<'a>(
1482 B: &Builder<'a>,
1483 Val: &'a Value,
1484 DestTy: &'a Type,
1485 Name: *const c_char,
1486 ) -> &'a Value;
1487 pub(crate) fn LLVMBuildFPExt<'a>(
1488 B: &Builder<'a>,
1489 Val: &'a Value,
1490 DestTy: &'a Type,
1491 Name: *const c_char,
1492 ) -> &'a Value;
1493 pub(crate) fn LLVMBuildPtrToInt<'a>(
1494 B: &Builder<'a>,
1495 Val: &'a Value,
1496 DestTy: &'a Type,
1497 Name: *const c_char,
1498 ) -> &'a Value;
1499 pub(crate) fn LLVMBuildIntToPtr<'a>(
1500 B: &Builder<'a>,
1501 Val: &'a Value,
1502 DestTy: &'a Type,
1503 Name: *const c_char,
1504 ) -> &'a Value;
1505 pub(crate) fn LLVMBuildBitCast<'a>(
1506 B: &Builder<'a>,
1507 Val: &'a Value,
1508 DestTy: &'a Type,
1509 Name: *const c_char,
1510 ) -> &'a Value;
1511 pub(crate) fn LLVMBuildPointerCast<'a>(
1512 B: &Builder<'a>,
1513 Val: &'a Value,
1514 DestTy: &'a Type,
1515 Name: *const c_char,
1516 ) -> &'a Value;
1517 pub(crate) fn LLVMBuildIntCast2<'a>(
1518 B: &Builder<'a>,
1519 Val: &'a Value,
1520 DestTy: &'a Type,
1521 IsSigned: Bool,
1522 Name: *const c_char,
1523 ) -> &'a Value;
1524
1525 pub(crate) fn LLVMBuildICmp<'a>(
1527 B: &Builder<'a>,
1528 Op: c_uint,
1529 LHS: &'a Value,
1530 RHS: &'a Value,
1531 Name: *const c_char,
1532 ) -> &'a Value;
1533 pub(crate) fn LLVMBuildFCmp<'a>(
1534 B: &Builder<'a>,
1535 Op: c_uint,
1536 LHS: &'a Value,
1537 RHS: &'a Value,
1538 Name: *const c_char,
1539 ) -> &'a Value;
1540
1541 pub(crate) fn LLVMBuildPhi<'a>(B: &Builder<'a>, Ty: &'a Type, Name: *const c_char)
1543 -> &'a Value;
1544 pub(crate) fn LLVMBuildSelect<'a>(
1545 B: &Builder<'a>,
1546 If: &'a Value,
1547 Then: &'a Value,
1548 Else: &'a Value,
1549 Name: *const c_char,
1550 ) -> &'a Value;
1551 pub(crate) fn LLVMBuildVAArg<'a>(
1552 B: &Builder<'a>,
1553 list: &'a Value,
1554 Ty: &'a Type,
1555 Name: *const c_char,
1556 ) -> &'a Value;
1557 pub(crate) fn LLVMBuildExtractElement<'a>(
1558 B: &Builder<'a>,
1559 VecVal: &'a Value,
1560 Index: &'a Value,
1561 Name: *const c_char,
1562 ) -> &'a Value;
1563 pub(crate) fn LLVMBuildInsertElement<'a>(
1564 B: &Builder<'a>,
1565 VecVal: &'a Value,
1566 EltVal: &'a Value,
1567 Index: &'a Value,
1568 Name: *const c_char,
1569 ) -> &'a Value;
1570 pub(crate) fn LLVMBuildShuffleVector<'a>(
1571 B: &Builder<'a>,
1572 V1: &'a Value,
1573 V2: &'a Value,
1574 Mask: &'a Value,
1575 Name: *const c_char,
1576 ) -> &'a Value;
1577 pub(crate) fn LLVMBuildExtractValue<'a>(
1578 B: &Builder<'a>,
1579 AggVal: &'a Value,
1580 Index: c_uint,
1581 Name: *const c_char,
1582 ) -> &'a Value;
1583 pub(crate) fn LLVMBuildInsertValue<'a>(
1584 B: &Builder<'a>,
1585 AggVal: &'a Value,
1586 EltVal: &'a Value,
1587 Index: c_uint,
1588 Name: *const c_char,
1589 ) -> &'a Value;
1590
1591 pub(crate) fn LLVMBuildAtomicCmpXchg<'a>(
1593 B: &Builder<'a>,
1594 LHS: &'a Value,
1595 CMP: &'a Value,
1596 RHS: &'a Value,
1597 Order: AtomicOrdering,
1598 FailureOrder: AtomicOrdering,
1599 SingleThreaded: Bool,
1600 ) -> &'a Value;
1601
1602 pub(crate) fn LLVMSetWeak(CmpXchgInst: &Value, IsWeak: Bool);
1603
1604 pub(crate) fn LLVMBuildAtomicRMW<'a>(
1605 B: &Builder<'a>,
1606 Op: AtomicRmwBinOp,
1607 LHS: &'a Value,
1608 RHS: &'a Value,
1609 Order: AtomicOrdering,
1610 SingleThreaded: Bool,
1611 ) -> &'a Value;
1612
1613 pub(crate) fn LLVMBuildFence<'a>(
1614 B: &Builder<'a>,
1615 Order: AtomicOrdering,
1616 SingleThreaded: Bool,
1617 Name: *const c_char,
1618 ) -> &'a Value;
1619
1620 pub(crate) fn LLVMWriteBitcodeToFile(M: &Module, Path: *const c_char) -> c_int;
1622
1623 pub(crate) fn LLVMCreatePassManager<'a>() -> &'a mut PassManager<'a>;
1625
1626 pub(crate) fn LLVMAddAnalysisPasses<'a>(T: &'a TargetMachine, PM: &PassManager<'a>);
1627
1628 pub(crate) fn LLVMGetHostCPUFeatures() -> *mut c_char;
1629
1630 pub(crate) fn LLVMDisposeMessage(message: *mut c_char);
1631
1632 pub(crate) fn LLVMIsMultithreaded() -> Bool;
1633
1634 pub(crate) fn LLVMStructCreateNamed(C: &Context, Name: *const c_char) -> &Type;
1635
1636 pub(crate) fn LLVMStructSetBody<'a>(
1637 StructTy: &'a Type,
1638 ElementTypes: *const &'a Type,
1639 ElementCount: c_uint,
1640 Packed: Bool,
1641 );
1642
1643 pub(crate) fn LLVMCountStructElementTypes(StructTy: &Type) -> c_uint;
1644 pub(crate) fn LLVMGetStructElementTypes<'a>(StructTy: &'a Type, Dest: *mut &'a Type);
1645
1646 pub(crate) safe fn LLVMMetadataAsValue<'a>(C: &'a Context, MD: &'a Metadata) -> &'a Value;
1647
1648 pub(crate) safe fn LLVMSetUnnamedAddress(Global: &Value, UnnamedAddr: UnnamedAddr);
1649
1650 pub(crate) fn LLVMIsAConstantInt(value_ref: &Value) -> Option<&ConstantInt>;
1651
1652 pub(crate) fn LLVMGetOrInsertComdat(M: &Module, Name: *const c_char) -> &Comdat;
1653 pub(crate) fn LLVMSetComdat(V: &Value, C: &Comdat);
1654
1655 pub(crate) fn LLVMCreateOperandBundle(
1656 Tag: *const c_char,
1657 TagLen: size_t,
1658 Args: *const &'_ Value,
1659 NumArgs: c_uint,
1660 ) -> *mut OperandBundle<'_>;
1661 pub(crate) fn LLVMDisposeOperandBundle(Bundle: ptr::NonNull<OperandBundle<'_>>);
1662
1663 pub(crate) fn LLVMBuildCallWithOperandBundles<'a>(
1664 B: &Builder<'a>,
1665 Ty: &'a Type,
1666 Fn: &'a Value,
1667 Args: *const &'a Value,
1668 NumArgs: c_uint,
1669 Bundles: *const &OperandBundle<'a>,
1670 NumBundles: c_uint,
1671 Name: *const c_char,
1672 ) -> &'a Value;
1673 pub(crate) fn LLVMBuildInvokeWithOperandBundles<'a>(
1674 B: &Builder<'a>,
1675 Ty: &'a Type,
1676 Fn: &'a Value,
1677 Args: *const &'a Value,
1678 NumArgs: c_uint,
1679 Then: &'a BasicBlock,
1680 Catch: &'a BasicBlock,
1681 Bundles: *const &OperandBundle<'a>,
1682 NumBundles: c_uint,
1683 Name: *const c_char,
1684 ) -> &'a Value;
1685 pub(crate) fn LLVMBuildCallBr<'a>(
1686 B: &Builder<'a>,
1687 Ty: &'a Type,
1688 Fn: &'a Value,
1689 DefaultDest: &'a BasicBlock,
1690 IndirectDests: *const &'a BasicBlock,
1691 NumIndirectDests: c_uint,
1692 Args: *const &'a Value,
1693 NumArgs: c_uint,
1694 Bundles: *const &OperandBundle<'a>,
1695 NumBundles: c_uint,
1696 Name: *const c_char,
1697 ) -> &'a Value;
1698}
1699
1700#[cfg(feature = "llvm_offload")]
1701pub(crate) use self::Offload::*;
1702
1703#[cfg(feature = "llvm_offload")]
1704mod Offload {
1705 use super::*;
1706 unsafe extern "C" {
1707 pub(crate) fn LLVMRustBundleImages<'a>(
1709 M: &'a Module,
1710 TM: &'a TargetMachine,
1711 device_bin: *const c_char,
1712 ) -> bool;
1713 pub(crate) unsafe fn LLVMRustOffloadEmbedBufferInModule<'a>(
1714 _M: &'a Module,
1715 _device_bin: *const c_char,
1716 ) -> bool;
1717 pub(crate) fn LLVMRustOffloadMapper<'a>(
1718 OldFn: &'a Value,
1719 NewFn: &'a Value,
1720 RebuiltArgs: *const &Value,
1721 );
1722 }
1723}
1724
1725#[cfg(not(feature = "llvm_offload"))]
1726pub(crate) use self::Offload_fallback::*;
1727
1728#[cfg(not(feature = "llvm_offload"))]
1729mod Offload_fallback {
1730 use super::*;
1731 #[allow(unused_unsafe)]
1734 pub(crate) unsafe fn LLVMRustBundleImages<'a>(
1735 _M: &'a Module,
1736 _TM: &'a TargetMachine,
1737 _device_bin: *const c_char,
1738 ) -> bool {
1739 {
::core::panicking::panic_fmt(format_args!("not implemented: {0}",
format_args!("This rustc version was not built with LLVM Offload support!")));
};unimplemented!("This rustc version was not built with LLVM Offload support!");
1740 }
1741 pub(crate) unsafe fn LLVMRustOffloadEmbedBufferInModule<'a>(
1742 _M: &'a Module,
1743 _device_bin: *const c_char,
1744 ) -> bool {
1745 {
::core::panicking::panic_fmt(format_args!("not implemented: {0}",
format_args!("This rustc version was not built with LLVM Offload support!")));
};unimplemented!("This rustc version was not built with LLVM Offload support!");
1746 }
1747 #[allow(unused_unsafe)]
1748 pub(crate) unsafe fn LLVMRustOffloadMapper<'a>(
1749 _OldFn: &'a Value,
1750 _NewFn: &'a Value,
1751 _RebuiltArgs: *const &Value,
1752 ) {
1753 {
::core::panicking::panic_fmt(format_args!("not implemented: {0}",
format_args!("This rustc version was not built with LLVM Offload support!")));
};unimplemented!("This rustc version was not built with LLVM Offload support!");
1754 }
1755}
1756
1757unsafe extern "C" {
1764 pub(crate) fn LLVMCreateDIBuilder<'ll>(M: &'ll Module) -> *mut DIBuilder<'ll>;
1765 pub(crate) fn LLVMDisposeDIBuilder<'ll>(Builder: ptr::NonNull<DIBuilder<'ll>>);
1766
1767 pub(crate) fn LLVMDIBuilderFinalize<'ll>(Builder: &DIBuilder<'ll>);
1768
1769 pub(crate) fn LLVMDIBuilderCreateNameSpace<'ll>(
1770 Builder: &DIBuilder<'ll>,
1771 ParentScope: Option<&'ll Metadata>,
1772 Name: *const c_uchar, NameLen: size_t,
1774 ExportSymbols: llvm::Bool,
1775 ) -> &'ll Metadata;
1776
1777 pub(crate) fn LLVMDIBuilderCreateLexicalBlock<'ll>(
1778 Builder: &DIBuilder<'ll>,
1779 Scope: &'ll Metadata,
1780 File: &'ll Metadata,
1781 Line: c_uint,
1782 Column: c_uint,
1783 ) -> &'ll Metadata;
1784
1785 pub(crate) fn LLVMDIBuilderCreateLexicalBlockFile<'ll>(
1786 Builder: &DIBuilder<'ll>,
1787 Scope: &'ll Metadata,
1788 File: &'ll Metadata,
1789 Discriminator: c_uint, ) -> &'ll Metadata;
1791
1792 pub(crate) fn LLVMDIBuilderCreateDebugLocation<'ll>(
1793 Ctx: &'ll Context,
1794 Line: c_uint,
1795 Column: c_uint,
1796 Scope: &'ll Metadata,
1797 InlinedAt: Option<&'ll Metadata>,
1798 ) -> &'ll Metadata;
1799
1800 pub(crate) fn LLVMDIBuilderCreateSubroutineType<'ll>(
1801 Builder: &DIBuilder<'ll>,
1802 File: Option<&'ll Metadata>, ParameterTypes: *const Option<&'ll Metadata>,
1804 NumParameterTypes: c_uint,
1805 Flags: DIFlags, ) -> &'ll Metadata;
1807
1808 pub(crate) fn LLVMDIBuilderCreateEnumeratorOfArbitraryPrecision<'ll>(
1809 Builder: &DIBuilder<'ll>,
1810 Name: *const c_uchar, NameLen: size_t,
1812 SizeInBits: u64,
1813 Words: *const u64, IsUnsigned: llvm::Bool,
1815 ) -> &'ll Metadata;
1816
1817 pub(crate) fn LLVMDIBuilderCreateUnionType<'ll>(
1818 Builder: &DIBuilder<'ll>,
1819 Scope: Option<&'ll Metadata>,
1820 Name: *const c_uchar, NameLen: size_t,
1822 File: &'ll Metadata,
1823 LineNumber: c_uint,
1824 SizeInBits: u64,
1825 AlignInBits: u32,
1826 Flags: DIFlags,
1827 Elements: *const Option<&'ll Metadata>,
1828 NumElements: c_uint,
1829 RunTimeLang: c_uint, UniqueId: *const c_uchar, UniqueIdLen: size_t,
1832 ) -> &'ll Metadata;
1833
1834 pub(crate) fn LLVMDIBuilderCreateArrayType<'ll>(
1835 Builder: &DIBuilder<'ll>,
1836 Size: u64,
1837 Align: u32,
1838 Ty: &'ll Metadata,
1839 Subscripts: *const &'ll Metadata,
1840 NumSubscripts: c_uint,
1841 ) -> &'ll Metadata;
1842
1843 pub(crate) fn LLVMDIBuilderCreateBasicType<'ll>(
1844 Builder: &DIBuilder<'ll>,
1845 Name: *const c_uchar, NameLen: size_t,
1847 SizeInBits: u64,
1848 Encoding: c_uint, Flags: DIFlags, ) -> &'ll Metadata;
1851
1852 pub(crate) fn LLVMDIBuilderCreatePointerType<'ll>(
1853 Builder: &DIBuilder<'ll>,
1854 PointeeTy: &'ll Metadata,
1855 SizeInBits: u64,
1856 AlignInBits: u32,
1857 AddressSpace: c_uint, Name: *const c_uchar, NameLen: size_t,
1860 ) -> &'ll Metadata;
1861
1862 pub(crate) fn LLVMDIBuilderCreateStructType<'ll>(
1863 Builder: &DIBuilder<'ll>,
1864 Scope: Option<&'ll Metadata>,
1865 Name: *const c_uchar, NameLen: size_t,
1867 File: &'ll Metadata,
1868 LineNumber: c_uint,
1869 SizeInBits: u64,
1870 AlignInBits: u32,
1871 Flags: DIFlags,
1872 DerivedFrom: Option<&'ll Metadata>,
1873 Elements: *const Option<&'ll Metadata>,
1874 NumElements: c_uint,
1875 RunTimeLang: c_uint, VTableHolder: Option<&'ll Metadata>,
1877 UniqueId: *const c_uchar, UniqueIdLen: size_t,
1879 ) -> &'ll Metadata;
1880
1881 pub(crate) fn LLVMDIBuilderCreateMemberType<'ll>(
1882 Builder: &DIBuilder<'ll>,
1883 Scope: &'ll Metadata,
1884 Name: *const c_uchar, NameLen: size_t,
1886 File: &'ll Metadata,
1887 LineNo: c_uint,
1888 SizeInBits: u64,
1889 AlignInBits: u32,
1890 OffsetInBits: u64,
1891 Flags: DIFlags,
1892 Ty: &'ll Metadata,
1893 ) -> &'ll Metadata;
1894
1895 pub(crate) fn LLVMDIBuilderCreateStaticMemberType<'ll>(
1896 Builder: &DIBuilder<'ll>,
1897 Scope: &'ll Metadata,
1898 Name: *const c_uchar, NameLen: size_t,
1900 File: &'ll Metadata,
1901 LineNumber: c_uint,
1902 Type: &'ll Metadata,
1903 Flags: DIFlags,
1904 ConstantVal: Option<&'ll Value>,
1905 AlignInBits: u32,
1906 ) -> &'ll Metadata;
1907
1908 pub(crate) fn LLVMDIBuilderCreateQualifiedType<'ll>(
1911 Builder: &DIBuilder<'ll>,
1912 Tag: c_uint, Type: &'ll Metadata,
1914 ) -> &'ll Metadata;
1915
1916 pub(crate) fn LLVMDIBuilderCreateTypedef<'ll>(
1917 Builder: &DIBuilder<'ll>,
1918 Type: &'ll Metadata,
1919 Name: *const c_uchar, NameLen: size_t,
1921 File: &'ll Metadata,
1922 LineNo: c_uint,
1923 Scope: Option<&'ll Metadata>,
1924 AlignInBits: u32, ) -> &'ll Metadata;
1926
1927 pub(crate) fn LLVMDIBuilderGetOrCreateSubrange<'ll>(
1928 Builder: &DIBuilder<'ll>,
1929 LowerBound: i64,
1930 Count: i64,
1931 ) -> &'ll Metadata;
1932
1933 pub(crate) fn LLVMDIBuilderGetOrCreateArray<'ll>(
1934 Builder: &DIBuilder<'ll>,
1935 Data: *const Option<&'ll Metadata>,
1936 NumElements: size_t,
1937 ) -> &'ll Metadata;
1938
1939 pub(crate) fn LLVMDIBuilderCreateExpression<'ll>(
1940 Builder: &DIBuilder<'ll>,
1941 Addr: *const u64,
1942 Length: size_t,
1943 ) -> &'ll Metadata;
1944
1945 pub(crate) fn LLVMDIBuilderCreateGlobalVariableExpression<'ll>(
1946 Builder: &DIBuilder<'ll>,
1947 Scope: Option<&'ll Metadata>,
1948 Name: *const c_uchar, NameLen: size_t,
1950 Linkage: *const c_uchar, LinkLen: size_t,
1952 File: &'ll Metadata,
1953 LineNo: c_uint,
1954 Ty: &'ll Metadata,
1955 LocalToUnit: llvm::Bool,
1956 Expr: &'ll Metadata,
1957 Decl: Option<&'ll Metadata>,
1958 AlignInBits: u32,
1959 ) -> &'ll Metadata;
1960
1961 pub(crate) fn LLVMDIBuilderInsertDeclareRecordAtEnd<'ll>(
1962 Builder: &DIBuilder<'ll>,
1963 Storage: &'ll Value,
1964 VarInfo: &'ll Metadata,
1965 Expr: &'ll Metadata,
1966 DebugLoc: &'ll Metadata,
1967 Block: &'ll BasicBlock,
1968 ) -> &'ll DbgRecord;
1969
1970 pub(crate) fn LLVMDIBuilderInsertDbgValueRecordAtEnd<'ll>(
1971 Builder: &DIBuilder<'ll>,
1972 Val: &'ll Value,
1973 VarInfo: &'ll Metadata,
1974 Expr: &'ll Metadata,
1975 DebugLoc: &'ll Metadata,
1976 Block: &'ll BasicBlock,
1977 ) -> &'ll DbgRecord;
1978
1979 pub(crate) fn LLVMDIBuilderCreateAutoVariable<'ll>(
1980 Builder: &DIBuilder<'ll>,
1981 Scope: &'ll Metadata,
1982 Name: *const c_uchar, NameLen: size_t,
1984 File: &'ll Metadata,
1985 LineNo: c_uint,
1986 Ty: &'ll Metadata,
1987 AlwaysPreserve: llvm::Bool, Flags: DIFlags,
1989 AlignInBits: u32,
1990 ) -> &'ll Metadata;
1991
1992 pub(crate) fn LLVMDIBuilderCreateParameterVariable<'ll>(
1993 Builder: &DIBuilder<'ll>,
1994 Scope: &'ll Metadata,
1995 Name: *const c_uchar, NameLen: size_t,
1997 ArgNo: c_uint,
1998 File: &'ll Metadata,
1999 LineNo: c_uint,
2000 Ty: &'ll Metadata,
2001 AlwaysPreserve: llvm::Bool, Flags: DIFlags,
2003 ) -> &'ll Metadata;
2004}
2005
2006#[link(name = "llvm-wrapper", kind = "static")]
2007unsafe extern "C" {
2008 pub(crate) fn LLVMRustInstallErrorHandlers();
2009 pub(crate) fn LLVMRustDisableSystemDialogsOnCrash();
2010
2011 pub(crate) fn LLVMRustGlobalAddMetadata<'a>(
2014 Val: &'a Value,
2015 KindID: MetadataKindId,
2016 Metadata: &'a Metadata,
2017 );
2018 pub(crate) fn LLVMRustIsNonGVFunctionPointerTy(Val: &Value) -> bool;
2019 pub(crate) fn LLVMRustStripPointerCasts<'a>(Val: &'a Value) -> &'a Value;
2020
2021 pub(crate) fn LLVMRustConstIntGetZExtValue(ConstantVal: &ConstantInt, Value: &mut u64) -> bool;
2023 pub(crate) fn LLVMRustConstInt128Get(
2024 ConstantVal: &ConstantInt,
2025 SExt: bool,
2026 high: &mut u64,
2027 low: &mut u64,
2028 ) -> bool;
2029
2030 pub(crate) fn LLVMRustSetDSOLocal(Global: &Value, is_dso_local: bool);
2032
2033 pub(crate) fn LLVMRustGetOrInsertGlobal<'a>(
2035 M: &'a Module,
2036 Name: *const c_char,
2037 NameLen: size_t,
2038 T: &'a Type,
2039 ) -> &'a Value;
2040 pub(crate) fn LLVMRustGetOrInsertGlobalInAddrspace<'a>(
2041 M: &'a Module,
2042 Name: *const c_char,
2043 NameLen: size_t,
2044 T: &'a Type,
2045 AddressSpace: c_uint,
2046 ) -> &'a Value;
2047 pub(crate) fn LLVMRustGetNamedValue(
2048 M: &Module,
2049 Name: *const c_char,
2050 NameLen: size_t,
2051 ) -> Option<&Value>;
2052
2053 pub(crate) fn LLVMRustCreateAttrNoValue(C: &Context, attr: AttributeKind) -> &Attribute;
2055 pub(crate) fn LLVMRustCreateAlignmentAttr(C: &Context, bytes: u64) -> &Attribute;
2056 pub(crate) fn LLVMRustCreateDereferenceableAttr(C: &Context, bytes: u64) -> &Attribute;
2057 pub(crate) fn LLVMRustCreateDereferenceableOrNullAttr(C: &Context, bytes: u64) -> &Attribute;
2058 pub(crate) fn LLVMRustCreateByValAttr<'a>(C: &'a Context, ty: &'a Type) -> &'a Attribute;
2059 pub(crate) fn LLVMRustCreateStructRetAttr<'a>(C: &'a Context, ty: &'a Type) -> &'a Attribute;
2060 pub(crate) fn LLVMRustCreateElementTypeAttr<'a>(C: &'a Context, ty: &'a Type) -> &'a Attribute;
2061 pub(crate) fn LLVMRustCreateUWTableAttr(C: &Context, async_: bool) -> &Attribute;
2062 pub(crate) fn LLVMRustCreateAllocSizeAttr(C: &Context, size_arg: u32) -> &Attribute;
2063 pub(crate) fn LLVMRustCreateAllocKindAttr(C: &Context, size_arg: u64) -> &Attribute;
2064 pub(crate) fn LLVMRustCreateMemoryEffectsAttr(
2065 C: &Context,
2066 effects: MemoryEffects,
2067 ) -> &Attribute;
2068 pub(crate) fn LLVMRustCreateRangeAttribute(
2075 C: &Context,
2076 NumBits: c_uint,
2077 LowerWords: *const u64,
2078 UpperWords: *const u64,
2079 ) -> &Attribute;
2080
2081 pub(crate) fn LLVMRustGetOrInsertFunction<'a>(
2084 M: &'a Module,
2085 Name: *const c_char,
2086 NameLen: size_t,
2087 FunctionTy: &'a Type,
2088 ) -> &'a Value;
2089 pub(crate) fn LLVMRustAddFunctionAttributes<'a>(
2090 Fn: &'a Value,
2091 index: c_uint,
2092 Attrs: *const &'a Attribute,
2093 AttrsLen: size_t,
2094 );
2095
2096 pub(crate) fn LLVMRustAddCallSiteAttributes<'a>(
2098 Instr: &'a Value,
2099 index: c_uint,
2100 Attrs: *const &'a Attribute,
2101 AttrsLen: size_t,
2102 );
2103
2104 pub(crate) fn LLVMRustSetFastMath(Instr: &Value);
2105 pub(crate) fn LLVMRustSetAlgebraicMath(Instr: &Value);
2106 pub(crate) fn LLVMRustSetAllowReassoc(Instr: &Value);
2107 pub(crate) fn LLVMRustSetNoSignedZeros(Instr: &Value);
2108
2109 pub(crate) fn LLVMRustBuildMemCpy<'a>(
2111 B: &Builder<'a>,
2112 Dst: &'a Value,
2113 DstAlign: c_uint,
2114 Src: &'a Value,
2115 SrcAlign: c_uint,
2116 Size: &'a Value,
2117 IsVolatile: bool,
2118 ) -> &'a Value;
2119 pub(crate) fn LLVMRustBuildMemMove<'a>(
2120 B: &Builder<'a>,
2121 Dst: &'a Value,
2122 DstAlign: c_uint,
2123 Src: &'a Value,
2124 SrcAlign: c_uint,
2125 Size: &'a Value,
2126 IsVolatile: bool,
2127 ) -> &'a Value;
2128 pub(crate) fn LLVMRustBuildMemSet<'a>(
2129 B: &Builder<'a>,
2130 Dst: &'a Value,
2131 DstAlign: c_uint,
2132 Val: &'a Value,
2133 Size: &'a Value,
2134 IsVolatile: bool,
2135 ) -> &'a Value;
2136
2137 pub(crate) fn LLVMRustTimeTraceProfilerInitialize();
2138
2139 pub(crate) fn LLVMRustTimeTraceProfilerFinishThread();
2140
2141 pub(crate) fn LLVMRustTimeTraceProfilerFinish(FileName: *const c_char);
2142
2143 pub(crate) fn LLVMRustGetLastError() -> *const c_char;
2145
2146 pub(crate) fn LLVMRustPrintPassTimings(OutStr: &RustString);
2148
2149 pub(crate) fn LLVMRustPrintStatistics(OutStr: &RustString);
2151
2152 pub(crate) fn LLVMRustPrintStatisticsJSON(OutStr: &RustString);
2154
2155 pub(crate) fn LLVMRustInlineAsmVerify(
2156 Ty: &Type,
2157 Constraints: *const c_uchar, ConstraintsLen: size_t,
2159 ) -> bool;
2160
2161 pub(crate) fn LLVMRustCoverageWriteFilenamesToBuffer(
2165 Filenames: *const *const c_uchar, FilenamesLen: size_t,
2167 Lengths: *const size_t,
2168 LengthsLen: size_t,
2169 BufferOut: &RustString,
2170 );
2171
2172 pub(crate) fn LLVMRustCoverageWriteFunctionMappingsToBuffer(
2173 VirtualFileMappingIDs: *const c_uint,
2174 NumVirtualFileMappingIDs: size_t,
2175 Expressions: *const crate::coverageinfo::ffi::CounterExpression,
2176 NumExpressions: size_t,
2177 CodeRegions: *const crate::coverageinfo::ffi::CodeRegion,
2178 NumCodeRegions: size_t,
2179 ExpansionRegions: *const crate::coverageinfo::ffi::ExpansionRegion,
2180 NumExpansionRegions: size_t,
2181 BranchRegions: *const crate::coverageinfo::ffi::BranchRegion,
2182 NumBranchRegions: size_t,
2183 BufferOut: &RustString,
2184 );
2185
2186 pub(crate) fn LLVMRustCoverageCreatePGOFuncNameVar(
2187 F: &Value,
2188 FuncName: *const c_uchar, FuncNameLen: size_t,
2190 ) -> &Value;
2191 pub(crate) fn LLVMRustCoverageHashBytes(
2192 Bytes: *const c_uchar, NumBytes: size_t,
2194 ) -> u64;
2195
2196 pub(crate) safe fn LLVMRustCoverageWriteCovmapSectionNameToString(
2197 M: &Module,
2198 OutStr: &RustString,
2199 );
2200 pub(crate) safe fn LLVMRustCoverageWriteCovfunSectionNameToString(
2201 M: &Module,
2202 OutStr: &RustString,
2203 );
2204 pub(crate) safe fn LLVMRustCoverageWriteCovmapVarNameToString(OutStr: &RustString);
2205
2206 pub(crate) safe fn LLVMRustCoverageMappingVersion() -> u32;
2207 pub(crate) fn LLVMRustDebugMetadataVersion() -> u32;
2208 pub(crate) fn LLVMRustVersionMajor() -> u32;
2209 pub(crate) fn LLVMRustVersionMinor() -> u32;
2210 pub(crate) fn LLVMRustVersionPatch() -> u32;
2211
2212 pub(crate) fn LLVMRustAddModuleFlagU32(
2217 M: &Module,
2218 MergeBehavior: ModuleFlagMergeBehavior,
2219 Name: *const c_char,
2220 NameLen: size_t,
2221 Value: u32,
2222 );
2223
2224 pub(crate) fn LLVMRustAddModuleFlagString(
2225 M: &Module,
2226 MergeBehavior: ModuleFlagMergeBehavior,
2227 Name: *const c_char,
2228 NameLen: size_t,
2229 Value: *const c_char,
2230 ValueLen: size_t,
2231 );
2232
2233 pub(crate) fn LLVMRustDIBuilderCreateCompileUnit<'a>(
2237 Builder: &DIBuilder<'a>,
2238 Lang: c_uint,
2239 File: &'a DIFile,
2240 Producer: *const c_char,
2241 ProducerLen: size_t,
2242 isOptimized: bool,
2243 Flags: *const c_char,
2244 RuntimeVer: c_uint,
2245 SplitName: *const c_char,
2246 SplitNameLen: size_t,
2247 kind: DebugEmissionKind,
2248 DWOId: u64,
2249 SplitDebugInlining: bool,
2250 DebugNameTableKind: DebugNameTableKind,
2251 ) -> &'a DIDescriptor;
2252
2253 pub(crate) fn LLVMRustDIBuilderCreateFile<'a>(
2256 Builder: &DIBuilder<'a>,
2257 Filename: *const c_char,
2258 FilenameLen: size_t,
2259 Directory: *const c_char,
2260 DirectoryLen: size_t,
2261 CSKind: ChecksumKind,
2262 Checksum: *const c_char,
2263 ChecksumLen: size_t,
2264 Source: *const c_char,
2265 SourceLen: size_t,
2266 ) -> &'a DIFile;
2267
2268 pub(crate) fn LLVMRustDIBuilderCreateFunction<'a>(
2271 Builder: &DIBuilder<'a>,
2272 Scope: &'a DIDescriptor,
2273 Name: *const c_char,
2274 NameLen: size_t,
2275 LinkageName: *const c_char,
2276 LinkageNameLen: size_t,
2277 File: &'a DIFile,
2278 LineNo: c_uint,
2279 Ty: &'a DIType,
2280 ScopeLine: c_uint,
2281 Flags: DIFlags,
2282 SPFlags: DISPFlags,
2283 MaybeFn: Option<&'a Value>,
2284 TParam: &'a DIArray,
2285 Decl: Option<&'a DIDescriptor>,
2286 ) -> &'a DISubprogram;
2287
2288 pub(crate) fn LLVMRustDIBuilderCreateMethod<'a>(
2290 Builder: &DIBuilder<'a>,
2291 Scope: &'a DIDescriptor,
2292 Name: *const c_char,
2293 NameLen: size_t,
2294 LinkageName: *const c_char,
2295 LinkageNameLen: size_t,
2296 File: &'a DIFile,
2297 LineNo: c_uint,
2298 Ty: &'a DIType,
2299 Flags: DIFlags,
2300 SPFlags: DISPFlags,
2301 TParam: &'a DIArray,
2302 ) -> &'a DISubprogram;
2303
2304 pub(crate) fn LLVMRustDIBuilderCreateVariantMemberType<'a>(
2306 Builder: &DIBuilder<'a>,
2307 Scope: &'a DIScope,
2308 Name: *const c_char,
2309 NameLen: size_t,
2310 File: &'a DIFile,
2311 LineNumber: c_uint,
2312 SizeInBits: u64,
2313 AlignInBits: u32,
2314 OffsetInBits: u64,
2315 Discriminant: Option<&'a Value>,
2316 Flags: DIFlags,
2317 Ty: &'a DIType,
2318 ) -> &'a DIType;
2319
2320 pub(crate) fn LLVMRustDIBuilderCreateEnumerationType<'a>(
2322 Builder: &DIBuilder<'a>,
2323 Scope: &'a DIScope,
2324 Name: *const c_char,
2325 NameLen: size_t,
2326 File: &'a DIFile,
2327 LineNumber: c_uint,
2328 SizeInBits: u64,
2329 AlignInBits: u32,
2330 Elements: &'a DIArray,
2331 ClassType: &'a DIType,
2332 IsScoped: bool,
2333 ) -> &'a DIType;
2334
2335 pub(crate) fn LLVMRustDIBuilderCreateVariantPart<'a>(
2337 Builder: &DIBuilder<'a>,
2338 Scope: &'a DIScope,
2339 Name: *const c_char,
2340 NameLen: size_t,
2341 File: &'a DIFile,
2342 LineNo: c_uint,
2343 SizeInBits: u64,
2344 AlignInBits: u32,
2345 Flags: DIFlags,
2346 Discriminator: Option<&'a DIDerivedType>,
2347 Elements: &'a DIArray,
2348 UniqueId: *const c_char,
2349 UniqueIdLen: size_t,
2350 ) -> &'a DIDerivedType;
2351
2352 pub(crate) fn LLVMRustDIBuilderCreateTemplateTypeParameter<'a>(
2354 Builder: &DIBuilder<'a>,
2355 Scope: Option<&'a DIScope>,
2356 Name: *const c_char,
2357 NameLen: size_t,
2358 Ty: &'a DIType,
2359 ) -> &'a DITemplateTypeParameter;
2360
2361 pub(crate) fn LLVMRustDICompositeTypeReplaceArrays<'a>(
2364 Builder: &DIBuilder<'a>,
2365 CompositeType: &'a DIType,
2366 Elements: Option<&'a DIArray>,
2367 Params: Option<&'a DIArray>,
2368 );
2369
2370 pub(crate) fn LLVMRustDIGetOrCreateSubrange<'a>(
2373 Builder: &DIBuilder<'a>,
2374 CountNode: Option<&'a Metadata>,
2375 LB: &'a Metadata,
2376 UB: &'a Metadata,
2377 Stride: Option<&'a Metadata>,
2378 ) -> &'a Metadata;
2379
2380 pub(crate) fn LLVMRustDICreateVectorType<'a>(
2383 Builder: &DIBuilder<'a>,
2384 Size: u64,
2385 AlignInBits: u32,
2386 Type: &'a DIType,
2387 Subscripts: &'a DIArray,
2388 BitStride: Option<&'a Metadata>,
2389 ) -> &'a Metadata;
2390
2391 pub(crate) fn LLVMRustDILocationCloneWithBaseDiscriminator<'a>(
2393 Location: &'a DILocation,
2394 BD: c_uint,
2395 ) -> Option<&'a DILocation>;
2396
2397 pub(crate) fn LLVMRustWriteTypeToString(Type: &Type, s: &RustString);
2398 pub(crate) fn LLVMRustWriteValueToString(value_ref: &Value, s: &RustString);
2399
2400 pub(crate) fn LLVMRustHasFeature(T: &TargetMachine, s: *const c_char) -> bool;
2401 pub(crate) fn LLVMRustTargetHasMnemonic(T: &TargetMachine, s: *const c_char) -> bool;
2402
2403 pub(crate) fn LLVMRustPrintTargetCPUs(TM: &TargetMachine, OutStr: &RustString);
2404 pub(crate) fn LLVMRustGetTargetFeaturesCount(T: &TargetMachine) -> size_t;
2405 pub(crate) fn LLVMRustGetTargetFeature(
2406 T: &TargetMachine,
2407 Index: size_t,
2408 Feature: &mut *const c_char,
2409 Desc: &mut *const c_char,
2410 );
2411
2412 pub(crate) fn LLVMRustGetHostCPUName(LenOut: &mut size_t) -> *const u8;
2413
2414 pub(crate) fn LLVMRustCreateTargetMachine(
2417 Triple: *const c_char,
2418 CPU: *const c_char,
2419 Features: *const c_char,
2420 Abi: *const c_char,
2421 Model: CodeModel,
2422 Reloc: RelocModel,
2423 Level: CodeGenOptLevel,
2424 FloatABIType: FloatAbi,
2425 FunctionSections: bool,
2426 DataSections: bool,
2427 UniqueSectionNames: bool,
2428 TrapUnreachable: bool,
2429 Singlethread: bool,
2430 VerboseAsm: bool,
2431 EmitStackSizeSection: bool,
2432 RelaxELFRelocations: bool,
2433 UseInitArray: bool,
2434 SplitDwarfFile: *const c_char,
2435 OutputObjFile: *const c_char,
2436 DebugInfoCompression: CompressionKind,
2437 UseEmulatedTls: bool,
2438 UseWasmEH: bool,
2439 LargeDataThreshold: u64,
2440 ) -> *mut TargetMachine;
2441
2442 pub(crate) fn LLVMRustAddLibraryInfo<'a>(
2443 T: &TargetMachine,
2444 PM: &PassManager<'a>,
2445 M: &'a Module,
2446 DisableSimplifyLibCalls: bool,
2447 );
2448 pub(crate) fn LLVMRustWriteOutputFile<'a>(
2449 T: &'a TargetMachine,
2450 PM: *mut PassManager<'a>,
2451 M: &'a Module,
2452 Output: *const c_char,
2453 DwoOutput: *const c_char,
2454 FileType: FileType,
2455 VerifyIR: bool,
2456 ) -> LLVMRustResult;
2457 pub(crate) fn LLVMRustOptimize<'a>(
2458 M: &'a Module,
2459 TM: &'a TargetMachine,
2460 OptLevel: PassBuilderOptLevel,
2461 OptStage: OptStage,
2462 IsLinkerPluginLTO: bool,
2463 NoPrepopulatePasses: bool,
2464 VerifyIR: bool,
2465 LintIR: bool,
2466 ThinLTOBuffer: Option<&mut Option<crate::back::lto::Buffer>>,
2467 ThinLTOSummaryBuffer: Option<&mut Option<crate::back::lto::Buffer>>,
2468 MergeFunctions: bool,
2469 UnrollLoops: bool,
2470 SLPVectorize: bool,
2471 LoopVectorize: bool,
2472 DisableSimplifyLibCalls: bool,
2473 EmitLifetimeMarkers: bool,
2474 RunEnzyme: *const c_void,
2475 PrintBeforeEnzyme: bool,
2476 PrintAfterEnzyme: bool,
2477 PrintPasses: bool,
2478 SanitizerOptions: Option<&SanitizerOptions>,
2479 PGOGenPath: *const c_char,
2480 PGOUsePath: *const c_char,
2481 InstrumentCoverage: bool,
2482 InstrProfileOutput: *const c_char,
2483 PGOSampleUsePath: *const c_char,
2484 DebugInfoForProfiling: bool,
2485 llvm_selfprofiler: *mut c_void,
2486 begin_callback: SelfProfileBeforePassCallback,
2487 end_callback: SelfProfileAfterPassCallback,
2488 ExtraPasses: *const c_char,
2489 ExtraPassesLen: size_t,
2490 LLVMPlugins: *const c_char,
2491 LLVMPluginsLen: size_t,
2492 ) -> LLVMRustResult;
2493 pub(crate) fn LLVMRustPrintModule(
2494 M: &Module,
2495 Output: *const c_char,
2496 Demangle: extern "C" fn(*const c_char, size_t, *mut c_char, size_t) -> size_t,
2497 ) -> LLVMRustResult;
2498 pub(crate) fn LLVMRustSetLLVMOptions(Argc: c_int, Argv: *const *const c_char);
2499 pub(crate) fn LLVMRustPrintPasses();
2500 pub(crate) fn LLVMRustSetNormalizedTarget(M: &Module, triple: *const c_char);
2501 pub(crate) fn LLVMRustRunRestrictionPass(M: &Module, syms: *const *const c_char, len: size_t);
2502
2503 pub(crate) fn LLVMRustWriteTwineToString(T: &Twine, s: &RustString);
2504
2505 pub(crate) fn LLVMRustUnpackOptimizationDiagnostic<'a>(
2506 DI: &'a DiagnosticInfo,
2507 pass_name_out: &RustString,
2508 function_out: &mut Option<&'a Value>,
2509 loc_line_out: &mut c_uint,
2510 loc_column_out: &mut c_uint,
2511 loc_filename_out: &RustString,
2512 message_out: &RustString,
2513 );
2514
2515 pub(crate) fn LLVMRustUnpackInlineAsmDiagnostic<'a>(
2516 DI: &'a DiagnosticInfo,
2517 level_out: &mut DiagnosticLevel,
2518 cookie_out: &mut u64,
2519 message_out: &mut Option<&'a Twine>,
2520 );
2521
2522 pub(crate) fn LLVMRustWriteDiagnosticInfoToString(DI: &DiagnosticInfo, s: &RustString);
2523 pub(crate) fn LLVMRustGetDiagInfoKind(DI: &DiagnosticInfo) -> DiagnosticKind;
2524
2525 pub(crate) fn LLVMRustGetSMDiagnostic<'a>(
2526 DI: &'a DiagnosticInfo,
2527 cookie_out: &mut u64,
2528 ) -> &'a SMDiagnostic;
2529
2530 pub(crate) fn LLVMRustUnpackSMDiagnostic(
2531 d: &SMDiagnostic,
2532 message_out: &RustString,
2533 buffer_out: &RustString,
2534 level_out: &mut DiagnosticLevel,
2535 loc_out: &mut c_uint,
2536 ranges_out: *mut c_uint,
2537 num_ranges: &mut usize,
2538 ) -> bool;
2539
2540 pub(crate) fn LLVMRustSetDataLayoutFromTargetMachine<'a>(M: &'a Module, TM: &'a TargetMachine);
2541
2542 pub(crate) fn LLVMRustPositionBuilderPastAllocas<'a>(B: &Builder<'a>, Fn: &'a Value);
2543 pub(crate) fn LLVMRustPositionBuilderAtStart<'a>(B: &Builder<'a>, BB: &'a BasicBlock);
2544
2545 pub(crate) fn LLVMRustSetModulePICLevel(M: &Module);
2546 pub(crate) fn LLVMRustSetModulePIELevel(M: &Module);
2547 pub(crate) fn LLVMRustSetModuleCodeModel(M: &Module, Model: CodeModel);
2548 pub(crate) fn LLVMRustBufferPtr(p: &Buffer) -> *const u8;
2549 pub(crate) fn LLVMRustBufferLen(p: &Buffer) -> usize;
2550 pub(crate) fn LLVMRustBufferFree(p: &'static mut Buffer);
2551 pub(crate) fn LLVMRustModuleCost(M: &Module) -> u64;
2552 pub(crate) fn LLVMRustModuleInstructionStats(M: &Module) -> u64;
2553
2554 pub(crate) fn LLVMRustModuleSerialize(M: &Module, is_thin: bool) -> &'static mut Buffer;
2555 pub(crate) fn LLVMRustCreateThinLTOData(
2556 Modules: *const ThinLTOModule,
2557 NumModules: size_t,
2558 PreservedSymbols: *const *const c_char,
2559 PreservedSymbolsLen: size_t,
2560 ) -> Option<&'static mut ThinLTOData>;
2561 pub(crate) fn LLVMRustPrepareThinLTORename(
2562 Data: &ThinLTOData,
2563 Module: &Module,
2564 Target: &TargetMachine,
2565 );
2566 pub(crate) fn LLVMRustPrepareThinLTOResolveWeak(Data: &ThinLTOData, Module: &Module) -> bool;
2567 pub(crate) fn LLVMRustPrepareThinLTOInternalize(Data: &ThinLTOData, Module: &Module) -> bool;
2568 pub(crate) fn LLVMRustPrepareThinLTOImport(
2569 Data: &ThinLTOData,
2570 Module: &Module,
2571 Target: &TargetMachine,
2572 ) -> bool;
2573 pub(crate) fn LLVMRustFreeThinLTOData(Data: &'static mut ThinLTOData);
2574 pub(crate) fn LLVMRustParseBitcodeForLTO(
2575 Context: &Context,
2576 Data: *const u8,
2577 len: usize,
2578 Identifier: *const c_char,
2579 ) -> Option<&Module>;
2580
2581 pub(crate) fn LLVMRustLinkerNew(M: &Module) -> &mut Linker<'_>;
2582 pub(crate) fn LLVMRustLinkerAdd(
2583 linker: &Linker<'_>,
2584 bytecode: *const c_char,
2585 bytecode_len: usize,
2586 ) -> bool;
2587 pub(crate) fn LLVMRustLinkerFree<'a>(linker: &'a mut Linker<'a>);
2588 pub(crate) fn LLVMRustComputeLTOCacheKey(
2589 key_out: &RustString,
2590 mod_id: *const c_char,
2591 data: &ThinLTOData,
2592 );
2593
2594 pub(crate) fn LLVMRustContextGetDiagnosticHandler(
2595 Context: &Context,
2596 ) -> Option<&DiagnosticHandler>;
2597 pub(crate) fn LLVMRustContextSetDiagnosticHandler(
2598 context: &Context,
2599 diagnostic_handler: Option<&DiagnosticHandler>,
2600 );
2601 pub(crate) fn LLVMRustContextConfigureDiagnosticHandler(
2602 context: &Context,
2603 diagnostic_handler_callback: DiagnosticHandlerTy,
2604 diagnostic_handler_context: *mut c_void,
2605 remark_all_passes: bool,
2606 remark_passes: *const *const c_char,
2607 remark_passes_len: usize,
2608 remark_file: *const c_char,
2609 pgo_available: bool,
2610 );
2611
2612 pub(crate) fn LLVMRustGetMangledName(V: &Value, out: &RustString);
2613
2614 pub(crate) fn LLVMRustGetElementTypeArgIndex(CallSite: &Value) -> i32;
2615
2616 pub(crate) safe fn LLVMRustLLVMHasZlibCompression() -> bool;
2617 pub(crate) safe fn LLVMRustLLVMHasZstdCompression() -> bool;
2618
2619 pub(crate) fn LLVMRustGetSymbols(
2620 buf_ptr: *const u8,
2621 buf_len: usize,
2622 state: *mut c_void,
2623 callback: GetSymbolsCallback,
2624 error_callback: GetSymbolsErrorCallback,
2625 ) -> *mut c_void;
2626
2627 pub(crate) fn LLVMRustIs64BitSymbolicFile(buf_ptr: *const u8, buf_len: usize) -> bool;
2628
2629 pub(crate) fn LLVMRustIsECObject(buf_ptr: *const u8, buf_len: usize) -> bool;
2630
2631 pub(crate) fn LLVMRustIsAnyArm64Coff(buf_ptr: *const u8, buf_len: usize) -> bool;
2632
2633 pub(crate) fn LLVMRustSetNoSanitizeAddress(Global: &Value);
2634 pub(crate) fn LLVMRustSetNoSanitizeHWAddress(Global: &Value);
2635
2636 pub(crate) fn LLVMAddAlias2<'ll>(
2637 M: &'ll Module,
2638 ValueTy: &Type,
2639 AddressSpace: c_uint,
2640 Aliasee: &Value,
2641 Name: *const c_char,
2642 ) -> &'ll Value;
2643}