pub enum Stability {
Stable,
CfgStableToggleUnstable(Symbol),
Unstable(Symbol),
InternalOnly {
reason: &'static str,
target_modifier: bool,
hard_error: bool,
},
}Expand description
Stability information for target features.
Variants§
Stable
This target feature is stable, it can be used in #[target_feature] and
#[cfg(target_feature)].
CfgStableToggleUnstable(Symbol)
This target feature is cfg-stable. It can be used for #[cfg(target_feature)] on stable,
but using it in #[target_feature] requires the given nightly feature.
Tuple Fields
Unstable(Symbol)
This target feature is unstable. It is only present in #[cfg(target_feature)] on
nightly and using it in #[target_feature] requires enabling the given nightly feature.
Tuple Fields
InternalOnly
This is not actually something we expose as a “target feature” to our users.
We just manage it internally as a target feature since that’s how LLVM represents it.
This feature can not be set via -Ctarget-feature or #[target_feature], it can only be
set in the target spec. It is never set in cfg(target_feature). Used in particular for
features are actually ABI configuration flags (such as “soft-float” on many targets).
However, “internal” target features can still sometimes be enabled or disabled via
-Ctarget-cpu or Rust/LLVM target feature implications. See target_modifier below for how
to protect ABI-relevant target features.
Fields
target_modifier: boolWhether this target feature must be consistent across all crates in a crate graph. If
this is false, then either it should be fine for the target feature to differ across
crates, or the target feature is set by another flag that’s already a target modifier,
or it needs to be pinned down via Target::abi_required_features.
Implementations§
Source§impl Stability
impl Stability
Sourcepub fn in_cfg(&self) -> bool
pub fn in_cfg(&self) -> bool
Returns whether the feature can be used in cfg(target_feature) ever.
(It might still be nightly-only even if this returns true, so make sure to also check
requires_nightly.)
Sourcepub fn is_target_modifier(&self) -> bool
pub fn is_target_modifier(&self) -> bool
Returns whether this target feature is to be treated as a target modifier.
Sourcepub fn requires_nightly(&self, in_cfg: bool) -> Option<Symbol>
pub fn requires_nightly(&self, in_cfg: bool) -> Option<Symbol>
Returns the nightly feature that is required to toggle this target feature via
#[target_feature]/-Ctarget-feature or to test it via cfg(target_feature).
(For cfg we only care whether the feature is nightly or not, we don’t require
the feature gate to actually be enabled when using a nightly compiler.)
Before calling this, ensure the feature is even permitted for this use:
- for
#[target_feature]/-Ctarget-feature, checktoggle_allowed() - for
cfg(target_feature), checkin_cfg()
The in_cfg parameter is used to determine whether it will be used in
cfg(target_feature) (true) or #[target_feature]/-Ctarget-feature (false)
Sourcepub fn is_cfg_stable_toggle_unstable(&self) -> bool
pub fn is_cfg_stable_toggle_unstable(&self) -> bool
Returns whether the feature is cfg-stable but still requires a nightly feature gate to
be used in #[target_feature]/-Ctarget-feature.
Sourcepub fn toggle_allowed(&self) -> Result<(), &'static str>
pub fn toggle_allowed(&self) -> Result<(), &'static str>
Returns whether the feature may be toggled via #[target_feature] or -Ctarget-feature.
(It might still be nightly-only even if this returns Ok(()), so make sure to also check
requires_nightly.)
Trait Implementations§
impl Copy for Stability
Source§impl StableHash for Stability
impl StableHash for Stability
fn stable_hash<__Hcx: StableHashCtxt>( &self, __hcx: &mut __Hcx, __hasher: &mut StableHasher, )
Auto Trait Implementations§
impl DynSend for Stability
impl DynSync for Stability
impl Forget for Stability
impl Freeze for Stability
impl RefUnwindSafe for Stability
impl Send for Stability
impl Sync for Stability
impl Unpin for Stability
impl UnsafeUnpin for Stability
impl UnwindSafe for Stability
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,
impl<T> ErasedDestructor for Twhere
T: 'static,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
Source§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
Source§fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ
fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ
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: 24 bytes
Size for each variant:
Stable: 0 bytesCfgStableToggleUnstable: 7 bytesUnstable: 7 bytesInternalOnly: 23 bytes