Enum rustc_target::abi::TagEncoding
source · pub enum TagEncoding<VariantIdx>where
VariantIdx: Idx,{
Direct,
Niche {
untagged_variant: VariantIdx,
niche_variants: RangeInclusive<VariantIdx>,
niche_start: u128,
},
}
Variants§
Direct
The tag directly stores the discriminant, but possibly with a smaller layout (so converting the tag to the discriminant can require sign extension).
Niche
Niche (values invalid for a type) encoding the discriminant:
Discriminant and variant index coincide.
The variant untagged_variant
contains a niche at an arbitrary
offset (field tag_field
of the enum), which for a variant with
discriminant d
is set to
(d - niche_variants.start).wrapping_add(niche_start)
.
For example, Option<(usize, &T)>
is represented such that
None
has a null pointer for the second tuple field, and
Some
is the identity function (with a non-null reference).
Auto Trait Implementations§
impl<VariantIdx> RefUnwindSafe for TagEncoding<VariantIdx>where VariantIdx: RefUnwindSafe,
impl<VariantIdx> Send for TagEncoding<VariantIdx>where VariantIdx: Send,
impl<VariantIdx> Sync for TagEncoding<VariantIdx>where VariantIdx: Sync,
impl<VariantIdx> Unpin for TagEncoding<VariantIdx>where VariantIdx: Unpin,
impl<VariantIdx> UnwindSafe for TagEncoding<VariantIdx>where VariantIdx: UnwindSafe,
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
Layout§
Note: Unable to compute type layout, possibly due to this type having generic parameters. Layout can only be computed for concrete, fully-instantiated types.