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