pub enum GlobalAlloc {
Function(Instance),
VTable(Ty, Option<Binder<ExistentialTraitRef>>),
Static(StaticDef),
Memory(Allocation),
}
Expand description
An allocation in the SMIR global memory can be either a function pointer, a static, or a “real” allocation with some data in it.
Variants§
Function(Instance)
The alloc ID is used as a function pointer.
VTable(Ty, Option<Binder<ExistentialTraitRef>>)
This alloc ID points to a symbolic (not-reified) vtable.
The None
trait ref is used to represent auto traits.
Static(StaticDef)
The alloc ID points to a “lazy” static variable that did not get computed (yet). This is also used to break the cycle in recursive statics.
Memory(Allocation)
The alloc ID points to memory.
Implementations§
source§impl GlobalAlloc
impl GlobalAlloc
sourcepub fn vtable_allocation(&self) -> Option<AllocId>
pub fn vtable_allocation(&self) -> Option<AllocId>
Retrieve the allocation id for a global allocation if it exists.
For [GlobalAlloc::VTable]
, this will return the allocation for the VTable of the given
type for the optional trait if the type implements the trait.
This method will always return None
for allocations other than [GlobalAlloc::VTable]
.
Trait Implementations§
source§impl Clone for GlobalAlloc
impl Clone for GlobalAlloc
source§fn clone(&self) -> GlobalAlloc
fn clone(&self) -> GlobalAlloc
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl Debug for GlobalAlloc
impl Debug for GlobalAlloc
source§impl From<AllocId> for GlobalAlloc
impl From<AllocId> for GlobalAlloc
source§impl PartialEq for GlobalAlloc
impl PartialEq for GlobalAlloc
source§impl Serialize for GlobalAlloc
impl Serialize for GlobalAlloc
impl Eq for GlobalAlloc
impl StructuralPartialEq for GlobalAlloc
Auto Trait Implementations§
impl Freeze for GlobalAlloc
impl RefUnwindSafe for GlobalAlloc
impl Send for GlobalAlloc
impl Sync for GlobalAlloc
impl Unpin for GlobalAlloc
impl UnwindSafe for GlobalAlloc
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...)
attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 72 bytes
Size for each variant:
Function
: 24 bytesVTable
: 64 bytesStatic
: 8 bytesMemory
: 64 bytes