Enum rustc_target::abi::TagEncoding
source · pub enum TagEncoding<V>where
V: Idx,{
Direct,
Niche {
untagged_variant: V,
niche_variants: RangeInclusive<V>,
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<V> RefUnwindSafe for TagEncoding<V>where
V: RefUnwindSafe,
impl<V> Send for TagEncoding<V>where
V: Send,
impl<V> Sync for TagEncoding<V>where
V: Sync,
impl<V> Unpin for TagEncoding<V>where
V: Unpin,
impl<V> UnwindSafe for TagEncoding<V>where
V: UnwindSafe,
Blanket Implementations§
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.