1use std::path::PathBuf;
4use std::time::{SystemTime, UNIX_EPOCH};
5
6use rustc_data_structures::AtomicRef;
7use rustc_data_structures::fx::FxHashSet;
8use rustc_macros::StableHash;
9use rustc_span::{Span, Symbol, sym};
10
11use super::{Feature, to_nonzero};
12
13fn default_track_feature(_: Symbol) {}
14
15pub static TRACK_FEATURE: AtomicRef<fn(Symbol)> = AtomicRef::new(&(default_track_feature as _));
18
19#[derive(#[automatically_derived]
impl ::core::marker::StructuralPartialEq for FeatureStatus { }
#[automatically_derived]
impl ::core::cmp::PartialEq for FeatureStatus {
#[inline]
fn eq(&self, other: &Self) -> bool {
::core::intrinsics::discriminant_value(self) ==
::core::intrinsics::discriminant_value(other)
}
}PartialEq)]
20enum FeatureStatus {
21 Default,
22 Incomplete,
23 Internal,
24}
25
26macro_rules! status_to_enum {
27 (unstable) => {
28 FeatureStatus::Default
29 };
30 (incomplete) => {
31 FeatureStatus::Incomplete
32 };
33 (internal) => {
34 FeatureStatus::Internal
35 };
36}
37
38#[derive(#[automatically_derived]
impl ::core::clone::Clone for Features {
#[inline]
fn clone(&self) -> Self {
Features {
enabled_lang_features: ::core::clone::Clone::clone(&self.enabled_lang_features),
enabled_lib_features: ::core::clone::Clone::clone(&self.enabled_lib_features),
enabled_features: ::core::clone::Clone::clone(&self.enabled_features),
}
}
}Clone, #[automatically_derived]
impl ::core::default::Default for Features {
#[inline]
fn default() -> Self {
Features {
enabled_lang_features: ::core::default::Default::default(),
enabled_lib_features: ::core::default::Default::default(),
enabled_features: ::core::default::Default::default(),
}
}
}Default, #[automatically_derived]
impl ::core::fmt::Debug for Features {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field3_finish(f, "Features",
"enabled_lang_features", &self.enabled_lang_features,
"enabled_lib_features", &self.enabled_lib_features,
"enabled_features", &&self.enabled_features)
}
}Debug, const _: () =
{
impl ::rustc_data_structures::stable_hash::StableHash for Features {
#[inline]
fn stable_hash<__Hcx: ::rustc_data_structures::stable_hash::StableHashCtxt>(&self,
__hcx: &mut __Hcx,
__hasher:
&mut ::rustc_data_structures::stable_hash::StableHasher) {
match *self {
Features {
enabled_lang_features: ref __binding_0,
enabled_lib_features: ref __binding_1,
enabled_features: ref __binding_2 } => {
{ __binding_0.stable_hash(__hcx, __hasher); }
{ __binding_1.stable_hash(__hcx, __hasher); }
{}
}
}
}
}
};StableHash)]
47pub struct Features {
48 enabled_lang_features: Vec<EnabledLangFeature>,
50 enabled_lib_features: Vec<EnabledLibFeature>,
52 #[stable_hash(ignore)] enabled_features: FxHashSet<Symbol>,
55}
56
57#[derive(#[automatically_derived]
impl ::core::fmt::Debug for EnabledLangFeature {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field3_finish(f,
"EnabledLangFeature", "gate_name", &self.gate_name, "attr_sp",
&self.attr_sp, "stable_since", &&self.stable_since)
}
}Debug, #[automatically_derived]
impl ::core::marker::Copy for EnabledLangFeature { }Copy, #[automatically_derived]
#[doc(hidden)]
unsafe impl ::core::clone::TrivialClone for EnabledLangFeature { }
#[automatically_derived]
impl ::core::clone::Clone for EnabledLangFeature {
#[inline]
fn clone(&self) -> Self {
let _: ::core::clone::AssertParamIsClone<Symbol>;
let _: ::core::clone::AssertParamIsClone<Span>;
let _: ::core::clone::AssertParamIsClone<Option<Symbol>>;
*self
}
}Clone, const _: () =
{
impl ::rustc_data_structures::stable_hash::StableHash for
EnabledLangFeature {
#[inline]
fn stable_hash<__Hcx: ::rustc_data_structures::stable_hash::StableHashCtxt>(&self,
__hcx: &mut __Hcx,
__hasher:
&mut ::rustc_data_structures::stable_hash::StableHasher) {
match *self {
EnabledLangFeature {
gate_name: ref __binding_0,
attr_sp: ref __binding_1,
stable_since: ref __binding_2 } => {
{ __binding_0.stable_hash(__hcx, __hasher); }
{ __binding_1.stable_hash(__hcx, __hasher); }
{ __binding_2.stable_hash(__hcx, __hasher); }
}
}
}
}
};StableHash)]
59pub struct EnabledLangFeature {
60 pub gate_name: Symbol,
62 pub attr_sp: Span,
64 pub stable_since: Option<Symbol>,
66}
67
68#[derive(#[automatically_derived]
impl ::core::fmt::Debug for EnabledLibFeature {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field2_finish(f,
"EnabledLibFeature", "gate_name", &self.gate_name, "attr_sp",
&&self.attr_sp)
}
}Debug, #[automatically_derived]
impl ::core::marker::Copy for EnabledLibFeature { }Copy, #[automatically_derived]
#[doc(hidden)]
unsafe impl ::core::clone::TrivialClone for EnabledLibFeature { }
#[automatically_derived]
impl ::core::clone::Clone for EnabledLibFeature {
#[inline]
fn clone(&self) -> Self {
let _: ::core::clone::AssertParamIsClone<Symbol>;
let _: ::core::clone::AssertParamIsClone<Span>;
*self
}
}Clone, const _: () =
{
impl ::rustc_data_structures::stable_hash::StableHash for
EnabledLibFeature {
#[inline]
fn stable_hash<__Hcx: ::rustc_data_structures::stable_hash::StableHashCtxt>(&self,
__hcx: &mut __Hcx,
__hasher:
&mut ::rustc_data_structures::stable_hash::StableHasher) {
match *self {
EnabledLibFeature {
gate_name: ref __binding_0, attr_sp: ref __binding_1 } => {
{ __binding_0.stable_hash(__hcx, __hasher); }
{ __binding_1.stable_hash(__hcx, __hasher); }
}
}
}
}
};StableHash)]
70pub struct EnabledLibFeature {
71 pub gate_name: Symbol,
72 pub attr_sp: Span,
73}
74
75impl Features {
76 pub fn set_enabled_lang_feature(&mut self, lang_feat: EnabledLangFeature) {
77 self.enabled_lang_features.push(lang_feat);
78 self.enabled_features.insert(lang_feat.gate_name);
79 }
80
81 pub fn set_enabled_lib_feature(&mut self, lib_feat: EnabledLibFeature) {
82 self.enabled_lib_features.push(lib_feat);
83 self.enabled_features.insert(lib_feat.gate_name);
84 }
85
86 pub fn enabled_lang_features(&self) -> &[EnabledLangFeature] {
92 &self.enabled_lang_features
93 }
94
95 pub fn enabled_lib_features(&self) -> &[EnabledLibFeature] {
96 &self.enabled_lib_features
97 }
98
99 pub fn enabled_features(&self) -> &FxHashSet<Symbol> {
100 &self.enabled_features
101 }
102
103 pub fn enabled_features_iter_stable_order(
105 &self,
106 ) -> impl Iterator<Item = (Symbol, Span)> + Clone {
107 self.enabled_lang_features
108 .iter()
109 .map(|feat| (feat.gate_name, feat.attr_sp))
110 .chain(self.enabled_lib_features.iter().map(|feat| (feat.gate_name, feat.attr_sp)))
111 }
112
113 pub fn enabled(&self, feature: Symbol) -> bool {
115 if self.enabled_features.contains(&feature) {
116 TRACK_FEATURE(feature);
117 true
118 } else {
119 false
120 }
121 }
122
123 pub fn gca(&self) -> bool {
127 self.gca_min_const_items() || self.gca_adts()
128 }
129}
130
131macro_rules! declare_features {
132 ($(
133 $(#[doc = $doc:tt])* ($status:ident, $feature:ident, $ver:expr, $issue:expr),
134 )+) => {
135 pub static UNSTABLE_LANG_FEATURES: &[Feature] = &[
138 $(Feature {
139 name: sym::$feature,
140 since: $ver,
141 issue: to_nonzero($issue),
142 }),+
143 ];
144
145 impl Features {
146 $(
147 pub fn $feature(&self) -> bool {
148 self.enabled(sym::$feature)
149 }
150 )*
151
152 pub fn incomplete(&self, feature: Symbol) -> bool {
156 match feature {
157 $(
158 f if f == sym::$feature => status_to_enum!($status) == FeatureStatus::Incomplete,
160 )*
161 _ if self.enabled_features.contains(&feature) => {
162 false
165 }
166 _ => panic!("`{}` was not listed in `declare_features`", feature),
167 }
168 }
169
170 pub fn internal(&self, feature: Symbol) -> bool {
173 match feature {
174 $(
175 f if f == sym::$feature => status_to_enum!($status) == FeatureStatus::Internal,
177 )*
178 _ if self.enabled_features.contains(&feature) => {
179 let name = feature.as_str();
188 name == "core_intrinsics" || name.ends_with("_internal") || name.ends_with("_internals")
189 }
190 _ => panic!("`{}` was not listed in `declare_features`", feature),
191 }
192 }
193 }
194 };
195}
196
197#[rustfmt::skip]
215pub static UNSTABLE_LANG_FEATURES: &[Feature] =
&[Feature {
name: sym::allocator_internals,
since: "1.20.0",
issue: to_nonzero(None),
},
Feature {
name: sym::allow_internal_unsafe,
since: "1.0.0",
issue: to_nonzero(None),
},
Feature {
name: sym::allow_internal_unstable,
since: "1.0.0",
issue: to_nonzero(None),
},
Feature {
name: sym::anonymous_lifetime_in_impl_trait,
since: "1.63.0",
issue: to_nonzero(None),
},
Feature {
name: sym::cfg_target_has_reliable_f16_f128,
since: "1.88.0",
issue: to_nonzero(None),
},
Feature {
name: sym::cfg_target_has_reliable_f16b,
since: "1.100.0",
issue: to_nonzero(None),
},
Feature {
name: sym::cfg_target_has_threads,
since: "1.99.0",
issue: to_nonzero(None),
},
Feature {
name: sym::compiler_builtins,
since: "1.13.0",
issue: to_nonzero(None),
},
Feature {
name: sym::const_param_ty_unchecked,
since: "1.97.0",
issue: to_nonzero(None),
},
Feature {
name: sym::custom_mir,
since: "1.65.0",
issue: to_nonzero(None),
},
Feature {
name: sym::eii_internals,
since: "1.94.0",
issue: to_nonzero(None),
},
Feature {
name: sym::field_representing_type_raw,
since: "1.96.0",
issue: to_nonzero(None),
},
Feature {
name: sym::generic_assert,
since: "1.63.0",
issue: to_nonzero(None),
},
Feature {
name: sym::intrinsics,
since: "1.0.0",
issue: to_nonzero(None),
},
Feature {
name: sym::lang_items,
since: "1.0.0",
issue: to_nonzero(None),
},
Feature {
name: sym::link_cfg,
since: "1.14.0",
issue: to_nonzero(None),
},
Feature {
name: sym::link_enzyme_intrinsics,
since: "1.100.0",
issue: to_nonzero(None),
},
Feature {
name: sym::more_maybe_bounds,
since: "1.82.0",
issue: to_nonzero(None),
},
Feature {
name: sym::negative_bounds,
since: "1.71.0",
issue: to_nonzero(None),
},
Feature {
name: sym::pattern_complexity_limit,
since: "1.78.0",
issue: to_nonzero(None),
},
Feature {
name: sym::prelude_import,
since: "1.2.0",
issue: to_nonzero(None),
},
Feature {
name: sym::profiler_runtime,
since: "1.18.0",
issue: to_nonzero(None),
},
Feature {
name: sym::rustc_attrs,
since: "1.0.0",
issue: to_nonzero(None),
},
Feature {
name: sym::staged_api,
since: "1.0.0",
issue: to_nonzero(None),
},
Feature {
name: sym::test_binder_constraints,
since: "1.100.0",
issue: to_nonzero(None),
},
Feature {
name: sym::test_incomplete_feature,
since: "1.96.0",
issue: to_nonzero(None),
},
Feature {
name: sym::test_unstable_lint,
since: "1.60.0",
issue: to_nonzero(None),
},
Feature {
name: sym::with_negative_coherence,
since: "1.60.0",
issue: to_nonzero(None),
},
Feature {
name: sym::abi_vectorcall,
since: "1.7.0",
issue: to_nonzero(Some(124485)),
},
Feature {
name: sym::auto_traits,
since: "1.50.0",
issue: to_nonzero(Some(13231)),
},
Feature {
name: sym::builtin_syntax,
since: "1.71.0",
issue: to_nonzero(Some(110680)),
},
Feature {
name: sym::doc_notable_trait,
since: "1.52.0",
issue: to_nonzero(Some(45040)),
},
Feature {
name: sym::dropck_eyepatch,
since: "1.10.0",
issue: to_nonzero(Some(34761)),
},
Feature {
name: sym::fundamental,
since: "1.0.0",
issue: to_nonzero(Some(29635)),
},
Feature {
name: sym::link_llvm_intrinsics,
since: "1.0.0",
issue: to_nonzero(Some(29602)),
},
Feature {
name: sym::linkage,
since: "1.0.0",
issue: to_nonzero(Some(29603)),
},
Feature {
name: sym::needs_panic_runtime,
since: "1.10.0",
issue: to_nonzero(Some(32837)),
},
Feature {
name: sym::panic_runtime,
since: "1.10.0",
issue: to_nonzero(Some(32837)),
},
Feature {
name: sym::pattern_types,
since: "1.79.0",
issue: to_nonzero(Some(123646)),
},
Feature {
name: sym::repr_simd,
since: "1.4.0",
issue: to_nonzero(Some(27731)),
},
Feature {
name: sym::rustc_private,
since: "1.0.0",
issue: to_nonzero(Some(27812)),
},
Feature {
name: sym::rustdoc_internals,
since: "1.58.0",
issue: to_nonzero(Some(90418)),
},
Feature {
name: sym::rustdoc_missing_doc_code_examples,
since: "1.31.0",
issue: to_nonzero(Some(101730)),
},
Feature {
name: sym::sized_hierarchy,
since: "1.89.0",
issue: to_nonzero(Some(144404)),
},
Feature {
name: sym::structural_match,
since: "1.8.0",
issue: to_nonzero(Some(31434)),
},
Feature {
name: sym::unboxed_closures,
since: "1.0.0",
issue: to_nonzero(Some(29625)),
},
Feature {
name: sym::unqualified_local_imports,
since: "1.83.0",
issue: to_nonzero(Some(138299)),
},
Feature {
name: sym::aarch64_unstable_target_feature,
since: "1.82.0",
issue: to_nonzero(Some(150244)),
},
Feature {
name: sym::aarch64_ver_target_feature,
since: "1.27.0",
issue: to_nonzero(Some(150245)),
},
Feature {
name: sym::abi_avr_interrupt,
since: "1.45.0",
issue: to_nonzero(Some(69664)),
},
Feature {
name: sym::abi_cmse_nonsecure_call,
since: "1.90.0",
issue: to_nonzero(Some(81391)),
},
Feature {
name: sym::abi_gpu_kernel,
since: "1.86.0",
issue: to_nonzero(Some(135467)),
},
Feature {
name: sym::abi_msp430_interrupt,
since: "1.16.0",
issue: to_nonzero(Some(38487)),
},
Feature {
name: sym::abi_ptx,
since: "1.15.0",
issue: to_nonzero(Some(38788)),
},
Feature {
name: sym::abi_riscv_interrupt,
since: "1.73.0",
issue: to_nonzero(Some(111889)),
},
Feature {
name: sym::abi_swift,
since: "1.97.0",
issue: to_nonzero(Some(156481)),
},
Feature {
name: sym::abi_x86_interrupt,
since: "1.17.0",
issue: to_nonzero(Some(40180)),
},
Feature {
name: sym::adt_const_params,
since: "1.56.0",
issue: to_nonzero(Some(95174)),
},
Feature {
name: sym::alloc_error_handler,
since: "1.29.0",
issue: to_nonzero(Some(51540)),
},
Feature {
name: sym::apx_target_feature,
since: "1.88.0",
issue: to_nonzero(Some(139284)),
},
Feature {
name: sym::arbitrary_self_types,
since: "1.23.0",
issue: to_nonzero(Some(44874)),
},
Feature {
name: sym::arbitrary_self_types_pointers,
since: "1.83.0",
issue: to_nonzero(Some(44874)),
},
Feature {
name: sym::arm_target_feature,
since: "1.27.0",
issue: to_nonzero(Some(150246)),
},
Feature {
name: sym::asm_const_ptr,
since: "1.99.0",
issue: to_nonzero(Some(128464)),
},
Feature {
name: sym::asm_experimental_arch,
since: "1.58.0",
issue: to_nonzero(Some(93335)),
},
Feature {
name: sym::asm_experimental_reg,
since: "1.85.0",
issue: to_nonzero(Some(133416)),
},
Feature {
name: sym::asm_goto_with_outputs,
since: "1.85.0",
issue: to_nonzero(Some(119364)),
},
Feature {
name: sym::asm_unwind,
since: "1.58.0",
issue: to_nonzero(Some(93334)),
},
Feature {
name: sym::associated_type_defaults,
since: "1.2.0",
issue: to_nonzero(Some(29661)),
},
Feature {
name: sym::async_drop,
since: "1.88.0",
issue: to_nonzero(Some(126482)),
},
Feature {
name: sym::async_fn_in_dyn_trait,
since: "1.85.0",
issue: to_nonzero(Some(133119)),
},
Feature {
name: sym::async_fn_track_caller,
since: "1.73.0",
issue: to_nonzero(Some(110011)),
},
Feature {
name: sym::async_for_loop,
since: "1.77.0",
issue: to_nonzero(Some(118898)),
},
Feature {
name: sym::async_trait_bounds,
since: "1.85.0",
issue: to_nonzero(Some(62290)),
},
Feature {
name: sym::avr_target_feature,
since: "1.95.0",
issue: to_nonzero(Some(146889)),
},
Feature {
name: sym::avx10_target_feature,
since: "1.88.0",
issue: to_nonzero(Some(138843)),
},
Feature {
name: sym::bpf_target_feature,
since: "1.54.0",
issue: to_nonzero(Some(150247)),
},
Feature {
name: sym::c_variadic_experimental_arch,
since: "1.97.0",
issue: to_nonzero(Some(155973)),
},
Feature {
name: sym::cfg_contract_checks,
since: "1.86.0",
issue: to_nonzero(Some(128044)),
},
Feature {
name: sym::cfg_overflow_checks,
since: "1.71.0",
issue: to_nonzero(Some(111466)),
},
Feature {
name: sym::cfg_relocation_model,
since: "1.73.0",
issue: to_nonzero(Some(114929)),
},
Feature {
name: sym::cfg_sanitize,
since: "1.41.0",
issue: to_nonzero(Some(39699)),
},
Feature {
name: sym::cfg_sanitizer_cfi,
since: "1.77.0",
issue: to_nonzero(Some(89653)),
},
Feature {
name: sym::cfg_target_compact,
since: "1.63.0",
issue: to_nonzero(Some(96901)),
},
Feature {
name: sym::cfg_target_has_atomic,
since: "1.60.0",
issue: to_nonzero(Some(94039)),
},
Feature {
name: sym::cfg_target_object_format,
since: "1.97.0",
issue: to_nonzero(Some(152586)),
},
Feature {
name: sym::cfg_target_thread_local,
since: "1.7.0",
issue: to_nonzero(Some(29594)),
},
Feature {
name: sym::cfg_ub_checks,
since: "1.79.0",
issue: to_nonzero(Some(123499)),
},
Feature {
name: sym::cfg_version,
since: "1.45.0",
issue: to_nonzero(Some(64796)),
},
Feature {
name: sym::cfi_encoding,
since: "1.71.0",
issue: to_nonzero(Some(89653)),
},
Feature {
name: sym::checked_type_aliases,
since: "1.99.0",
issue: to_nonzero(Some(112792)),
},
Feature {
name: sym::clflushopt_target_feature,
since: "1.98.0",
issue: to_nonzero(Some(157096)),
},
Feature {
name: sym::closure_lifetime_binder,
since: "1.64.0",
issue: to_nonzero(Some(97362)),
},
Feature {
name: sym::closure_track_caller,
since: "1.57.0",
issue: to_nonzero(Some(87417)),
},
Feature {
name: sym::cmse_nonsecure_entry,
since: "1.48.0",
issue: to_nonzero(Some(75835)),
},
Feature {
name: sym::const_async_blocks,
since: "1.53.0",
issue: to_nonzero(Some(85368)),
},
Feature {
name: sym::const_block_items,
since: "1.95.0",
issue: to_nonzero(Some(149226)),
},
Feature {
name: sym::const_c_variadic,
since: "1.95.0",
issue: to_nonzero(Some(151787)),
},
Feature {
name: sym::const_closures,
since: "1.68.0",
issue: to_nonzero(Some(106003)),
},
Feature {
name: sym::const_destruct,
since: "1.85.0",
issue: to_nonzero(Some(133214)),
},
Feature {
name: sym::const_for,
since: "1.56.0",
issue: to_nonzero(Some(87575)),
},
Feature {
name: sym::const_precise_live_drops,
since: "1.46.0",
issue: to_nonzero(Some(73255)),
},
Feature {
name: sym::const_trait_impl,
since: "1.42.0",
issue: to_nonzero(Some(143874)),
},
Feature {
name: sym::const_try,
since: "1.56.0",
issue: to_nonzero(Some(74935)),
},
Feature {
name: sym::contracts,
since: "1.86.0",
issue: to_nonzero(Some(128044)),
},
Feature {
name: sym::contracts_internals,
since: "1.86.0",
issue: to_nonzero(Some(128044)),
},
Feature {
name: sym::coroutine_clone,
since: "1.65.0",
issue: to_nonzero(Some(95360)),
},
Feature {
name: sym::coroutines,
since: "1.21.0",
issue: to_nonzero(Some(43122)),
},
Feature {
name: sym::coverage_attribute,
since: "1.74.0",
issue: to_nonzero(Some(84605)),
},
Feature {
name: sym::csky_target_feature,
since: "1.73.0",
issue: to_nonzero(Some(150248)),
},
Feature {
name: sym::custom_inner_attributes,
since: "1.30.0",
issue: to_nonzero(Some(54726)),
},
Feature {
name: sym::custom_test_frameworks,
since: "1.30.0",
issue: to_nonzero(Some(50297)),
},
Feature {
name: sym::decl_macro,
since: "1.17.0",
issue: to_nonzero(Some(39412)),
},
Feature {
name: sym::default_field_values,
since: "1.85.0",
issue: to_nonzero(Some(132162)),
},
Feature {
name: sym::deprecated_suggestion,
since: "1.61.0",
issue: to_nonzero(Some(94785)),
},
Feature {
name: sym::deref_patterns,
since: "1.79.0",
issue: to_nonzero(Some(87121)),
},
Feature {
name: sym::derive_from,
since: "1.91.0",
issue: to_nonzero(Some(144889)),
},
Feature {
name: sym::diagnostic_on_const,
since: "1.93.0",
issue: to_nonzero(Some(143874)),
},
Feature {
name: sym::diagnostic_on_move,
since: "1.96.0",
issue: to_nonzero(Some(154181)),
},
Feature {
name: sym::diagnostic_on_type_error,
since: "1.98.0",
issue: to_nonzero(Some(155382)),
},
Feature {
name: sym::diagnostic_on_unknown,
since: "1.96.0",
issue: to_nonzero(Some(152900)),
},
Feature {
name: sym::diagnostic_on_unmatched_args,
since: "1.97.0",
issue: to_nonzero(Some(155642)),
},
Feature {
name: sym::diagnostic_opaque,
since: "1.99.0",
issue: to_nonzero(Some(158813)),
},
Feature {
name: sym::doc_cfg,
since: "1.21.0",
issue: to_nonzero(Some(43781)),
},
Feature {
name: sym::doc_masked,
since: "1.21.0",
issue: to_nonzero(Some(44027)),
},
Feature {
name: sym::effective_target_features,
since: "1.91.0",
issue: to_nonzero(Some(143352)),
},
Feature {
name: sym::ergonomic_clones,
since: "1.87.0",
issue: to_nonzero(Some(132290)),
},
Feature {
name: sym::ermsb_target_feature,
since: "1.49.0",
issue: to_nonzero(Some(150249)),
},
Feature {
name: sym::exhaustive_patterns,
since: "1.13.0",
issue: to_nonzero(Some(51085)),
},
Feature {
name: sym::explicit_extern_abis,
since: "1.88.0",
issue: to_nonzero(Some(134986)),
},
Feature {
name: sym::explicit_tail_calls,
since: "1.72.0",
issue: to_nonzero(Some(112788)),
},
Feature {
name: sym::export_stable,
since: "1.88.0",
issue: to_nonzero(Some(139939)),
},
Feature {
name: sym::extern_item_impls,
since: "1.94.0",
issue: to_nonzero(Some(125418)),
},
Feature {
name: sym::extern_types,
since: "1.23.0",
issue: to_nonzero(Some(43467)),
},
Feature {
name: sym::f128,
since: "1.78.0",
issue: to_nonzero(Some(116909)),
},
Feature {
name: sym::f16,
since: "1.78.0",
issue: to_nonzero(Some(116909)),
},
Feature {
name: sym::f16b,
since: "1.100.0",
issue: to_nonzero(Some(160630)),
},
Feature {
name: sym::ffi_const,
since: "1.45.0",
issue: to_nonzero(Some(58328)),
},
Feature {
name: sym::ffi_pure,
since: "1.45.0",
issue: to_nonzero(Some(58329)),
},
Feature {
name: sym::field_projections,
since: "1.96.0",
issue: to_nonzero(Some(145383)),
},
Feature {
name: sym::final_associated_functions,
since: "1.95.0",
issue: to_nonzero(Some(131179)),
},
Feature {
name: sym::fma4_target_feature,
since: "1.97.0",
issue: to_nonzero(Some(155233)),
},
Feature {
name: sym::fmt_debug,
since: "1.82.0",
issue: to_nonzero(Some(129709)),
},
Feature {
name: sym::fn_align,
since: "1.53.0",
issue: to_nonzero(Some(82232)),
},
Feature {
name: sym::fn_delegation,
since: "1.76.0",
issue: to_nonzero(Some(118212)),
},
Feature {
name: sym::fn_static,
since: "1.100.0",
issue: to_nonzero(Some(148768)),
},
Feature {
name: sym::forced_keywords,
since: "CURRENT_RUSTC_VERSION",
issue: to_nonzero(Some(153839)),
},
Feature {
name: sym::freeze_impls,
since: "1.78.0",
issue: to_nonzero(Some(121675)),
},
Feature {
name: sym::frontmatter,
since: "1.88.0",
issue: to_nonzero(Some(136889)),
},
Feature {
name: sym::gca_adts,
since: "CURRENT_RUSTC_VERSION",
issue: to_nonzero(Some(163420)),
},
Feature {
name: sym::gca_const_items,
since: "1.95.0",
issue: to_nonzero(Some(151972)),
},
Feature {
name: sym::gca_macroless_args,
since: "1.99.0",
issue: to_nonzero(Some(159006)),
},
Feature {
name: sym::gca_macroless_items,
since: "1.100.0",
issue: to_nonzero(Some(162540)),
},
Feature {
name: sym::gca_min_const_items,
since: "1.84.0",
issue: to_nonzero(Some(132980)),
},
Feature {
name: sym::gen_blocks,
since: "1.75.0",
issue: to_nonzero(Some(117078)),
},
Feature {
name: sym::generic_const_exprs,
since: "1.56.0",
issue: to_nonzero(Some(76560)),
},
Feature {
name: sym::generic_const_items,
since: "1.73.0",
issue: to_nonzero(Some(113521)),
},
Feature {
name: sym::generic_const_parameter_types,
since: "1.87.0",
issue: to_nonzero(Some(137626)),
},
Feature {
name: sym::generic_pattern_types,
since: "1.86.0",
issue: to_nonzero(Some(136574)),
},
Feature {
name: sym::global_registration,
since: "1.80.0",
issue: to_nonzero(Some(125119)),
},
Feature {
name: sym::guard_patterns,
since: "1.85.0",
issue: to_nonzero(Some(129967)),
},
Feature {
name: sym::half_open_range_patterns_in_slices,
since: "1.66.0",
issue: to_nonzero(Some(67264)),
},
Feature {
name: sym::hexagon_target_feature,
since: "1.27.0",
issue: to_nonzero(Some(150250)),
},
Feature {
name: sym::impl_restriction,
since: "1.97.0",
issue: to_nonzero(Some(105077)),
},
Feature {
name: sym::impl_trait_in_assoc_type,
since: "1.70.0",
issue: to_nonzero(Some(63063)),
},
Feature {
name: sym::impl_trait_in_bindings,
since: "1.64.0",
issue: to_nonzero(Some(63065)),
},
Feature {
name: sym::impl_trait_in_fn_trait_return,
since: "1.64.0",
issue: to_nonzero(Some(99697)),
},
Feature {
name: sym::import_trait_associated_functions,
since: "1.86.0",
issue: to_nonzero(Some(134691)),
},
Feature {
name: sym::inherent_associated_types,
since: "1.52.0",
issue: to_nonzero(Some(8995)),
},
Feature {
name: sym::instrument_fn,
since: "1.98.0",
issue: to_nonzero(Some(157081)),
},
Feature {
name: sym::intra_doc_pointers,
since: "1.51.0",
issue: to_nonzero(Some(80896)),
},
Feature {
name: sym::lahfsahf_target_feature,
since: "1.78.0",
issue: to_nonzero(Some(150251)),
},
Feature {
name: sym::large_assignments,
since: "1.52.0",
issue: to_nonzero(Some(83518)),
},
Feature {
name: sym::link_arg_attribute,
since: "1.76.0",
issue: to_nonzero(Some(99427)),
},
Feature {
name: sym::loongarch_target_feature,
since: "1.73.0",
issue: to_nonzero(Some(150252)),
},
Feature {
name: sym::loop_hints,
since: "1.98.0",
issue: to_nonzero(Some(156874)),
},
Feature {
name: sym::loop_match,
since: "1.90.0",
issue: to_nonzero(Some(132306)),
},
Feature {
name: sym::m68k_target_feature,
since: "1.85.0",
issue: to_nonzero(Some(134328)),
},
Feature {
name: sym::macro_attr,
since: "1.91.0",
issue: to_nonzero(Some(143547)),
},
Feature {
name: sym::macro_derive,
since: "1.91.0",
issue: to_nonzero(Some(143549)),
},
Feature {
name: sym::macro_guard_matcher,
since: "1.96.0",
issue: to_nonzero(Some(153104)),
},
Feature {
name: sym::macro_metavar_expr,
since: "1.61.0",
issue: to_nonzero(Some(83527)),
},
Feature {
name: sym::macro_metavar_expr_concat,
since: "1.81.0",
issue: to_nonzero(Some(124225)),
},
Feature {
name: sym::marker_trait_attr,
since: "1.30.0",
issue: to_nonzero(Some(29864)),
},
Feature {
name: sym::min_adt_const_params,
since: "1.96.0",
issue: to_nonzero(Some(154042)),
},
Feature {
name: sym::min_specialization,
since: "1.7.0",
issue: to_nonzero(Some(31844)),
},
Feature {
name: sym::mips_target_feature,
since: "1.27.0",
issue: to_nonzero(Some(150253)),
},
Feature {
name: sym::more_qualified_paths,
since: "1.54.0",
issue: to_nonzero(Some(86935)),
},
Feature {
name: sym::movdir64b_target_feature,
since: "CURRENT_RUSTC_VERSION",
issue: to_nonzero(Some(163741)),
},
Feature {
name: sym::movdiri_target_feature,
since: "CURRENT_RUSTC_VERSION",
issue: to_nonzero(Some(163741)),
},
Feature {
name: sym::move_expr,
since: "1.97.0",
issue: to_nonzero(Some(155050)),
},
Feature {
name: sym::movrs_target_feature,
since: "1.88.0",
issue: to_nonzero(Some(137976)),
},
Feature {
name: sym::multiple_supertrait_upcastable,
since: "1.69.0",
issue: to_nonzero(Some(150833)),
},
Feature {
name: sym::must_not_suspend,
since: "1.57.0",
issue: to_nonzero(Some(83310)),
},
Feature {
name: sym::mut_ref,
since: "1.79.0",
issue: to_nonzero(Some(123076)),
},
Feature {
name: sym::mut_restriction,
since: "1.99.0",
issue: to_nonzero(Some(105077)),
},
Feature {
name: sym::naked_functions_rustic_abi,
since: "1.88.0",
issue: to_nonzero(Some(138997)),
},
Feature {
name: sym::naked_functions_target_feature,
since: "1.86.0",
issue: to_nonzero(Some(138568)),
},
Feature {
name: sym::named_fn_trait_parameters,
since: "1.99.0",
issue: to_nonzero(Some(158499)),
},
Feature {
name: sym::native_link_modifiers_as_needed,
since: "1.53.0",
issue: to_nonzero(Some(81490)),
},
Feature {
name: sym::negative_impls,
since: "1.44.0",
issue: to_nonzero(Some(68318)),
},
Feature {
name: sym::never_patterns,
since: "1.76.0",
issue: to_nonzero(Some(118155)),
},
Feature {
name: sym::new_range,
since: "1.86.0",
issue: to_nonzero(Some(123741)),
},
Feature {
name: sym::no_core,
since: "1.3.0",
issue: to_nonzero(Some(29639)),
},
Feature {
name: sym::non_exhaustive_omitted_patterns_lint,
since: "1.57.0",
issue: to_nonzero(Some(89554)),
},
Feature {
name: sym::non_lifetime_binders,
since: "1.69.0",
issue: to_nonzero(Some(108185)),
},
Feature {
name: sym::nvptx_target_feature,
since: "1.91.0",
issue: to_nonzero(Some(150254)),
},
Feature {
name: sym::offset_of_enum,
since: "1.75.0",
issue: to_nonzero(Some(120141)),
},
Feature {
name: sym::offset_of_slice,
since: "1.81.0",
issue: to_nonzero(Some(126151)),
},
Feature {
name: sym::patchable_function_entry,
since: "1.81.0",
issue: to_nonzero(Some(123115)),
},
Feature {
name: sym::pin_ergonomics,
since: "1.83.0",
issue: to_nonzero(Some(130494)),
},
Feature {
name: sym::postfix_match,
since: "1.79.0",
issue: to_nonzero(Some(121618)),
},
Feature {
name: sym::powerpc_target_feature,
since: "1.27.0",
issue: to_nonzero(Some(150255)),
},
Feature {
name: sym::prfchw_target_feature,
since: "1.78.0",
issue: to_nonzero(Some(150256)),
},
Feature {
name: sym::proc_macro_hygiene,
since: "1.30.0",
issue: to_nonzero(Some(54727)),
},
Feature {
name: sym::raw_dylib_elf,
since: "1.87.0",
issue: to_nonzero(Some(135694)),
},
Feature {
name: sym::reborrow,
since: "1.91.0",
issue: to_nonzero(Some(145612)),
},
Feature {
name: sym::ref_pat_eat_one_layer_2024,
since: "1.79.0",
issue: to_nonzero(Some(123076)),
},
Feature {
name: sym::ref_pat_eat_one_layer_2024_structural,
since: "1.81.0",
issue: to_nonzero(Some(123076)),
},
Feature {
name: sym::register_tool,
since: "1.41.0",
issue: to_nonzero(Some(66079)),
},
Feature {
name: sym::return_type_notation,
since: "1.70.0",
issue: to_nonzero(Some(109417)),
},
Feature {
name: sym::riscv_target_feature,
since: "1.45.0",
issue: to_nonzero(Some(150257)),
},
Feature {
name: sym::rtm_target_feature,
since: "1.35.0",
issue: to_nonzero(Some(150258)),
},
Feature {
name: sym::rust_cold_cc,
since: "1.63.0",
issue: to_nonzero(Some(97544)),
},
Feature {
name: sym::rust_preserve_none_cc,
since: "1.95.0",
issue: to_nonzero(Some(151401)),
},
Feature {
name: sym::rust_tail_cc,
since: "1.98.0",
issue: to_nonzero(Some(157427)),
},
Feature {
name: sym::s390x_target_feature,
since: "1.82.0",
issue: to_nonzero(Some(150259)),
},
Feature {
name: sym::sanitize,
since: "1.91.0",
issue: to_nonzero(Some(39699)),
},
Feature {
name: sym::simd_ffi,
since: "1.0.0",
issue: to_nonzero(Some(27731)),
},
Feature {
name: sym::sparc_target_feature,
since: "1.84.0",
issue: to_nonzero(Some(132783)),
},
Feature {
name: sym::specialization,
since: "1.7.0",
issue: to_nonzero(Some(31844)),
},
Feature {
name: sym::splat,
since: "1.98.0",
issue: to_nonzero(Some(153629)),
},
Feature {
name: sym::static_align,
since: "1.91.0",
issue: to_nonzero(Some(146177)),
},
Feature {
name: sym::stmt_expr_attributes,
since: "1.6.0",
issue: to_nonzero(Some(15701)),
},
Feature {
name: sym::strict_provenance_lints,
since: "1.61.0",
issue: to_nonzero(Some(130351)),
},
Feature {
name: sym::super_let,
since: "1.88.0",
issue: to_nonzero(Some(139076)),
},
Feature {
name: sym::supertrait_item_shadowing,
since: "1.86.0",
issue: to_nonzero(Some(89151)),
},
Feature {
name: sym::thread_local,
since: "1.0.0",
issue: to_nonzero(Some(29594)),
},
Feature {
name: sym::trait_alias,
since: "1.24.0",
issue: to_nonzero(Some(41517)),
},
Feature {
name: sym::transmute_generic_consts,
since: "1.70.0",
issue: to_nonzero(Some(109929)),
},
Feature {
name: sym::transparent_unions,
since: "1.37.0",
issue: to_nonzero(Some(60405)),
},
Feature {
name: sym::trivial_bounds,
since: "1.28.0",
issue: to_nonzero(Some(48214)),
},
Feature {
name: sym::try_blocks,
since: "1.29.0",
issue: to_nonzero(Some(154391)),
},
Feature {
name: sym::try_blocks_heterogeneous,
since: "1.94.0",
issue: to_nonzero(Some(149488)),
},
Feature {
name: sym::type_alias_impl_trait,
since: "1.38.0",
issue: to_nonzero(Some(63063)),
},
Feature {
name: sym::type_changing_struct_update,
since: "1.58.0",
issue: to_nonzero(Some(86555)),
},
Feature {
name: sym::unnamed_enum_variants,
since: "1.98.0",
issue: to_nonzero(Some(156628)),
},
Feature {
name: sym::unsafe_binders,
since: "1.85.0",
issue: to_nonzero(Some(130516)),
},
Feature {
name: sym::unsafe_fields,
since: "1.85.0",
issue: to_nonzero(Some(132922)),
},
Feature {
name: sym::unsized_const_params,
since: "1.82.0",
issue: to_nonzero(Some(95174)),
},
Feature {
name: sym::unsized_fn_params,
since: "1.49.0",
issue: to_nonzero(Some(48055)),
},
Feature {
name: sym::used_with_arg,
since: "1.60.0",
issue: to_nonzero(Some(93798)),
},
Feature {
name: sym::view_types,
since: "1.97.0",
issue: to_nonzero(Some(155938)),
},
Feature {
name: sym::wasm_target_feature,
since: "1.30.0",
issue: to_nonzero(Some(150260)),
},
Feature {
name: sym::where_clause_attrs,
since: "1.87.0",
issue: to_nonzero(Some(115590)),
},
Feature {
name: sym::x86_amx_intrinsics,
since: "1.81.0",
issue: to_nonzero(Some(126622)),
},
Feature {
name: sym::x87_target_feature,
since: "1.85.0",
issue: to_nonzero(Some(150261)),
},
Feature {
name: sym::xop_target_feature,
since: "1.81.0",
issue: to_nonzero(Some(127208)),
},
Feature {
name: sym::xtensa_target_feature,
since: "1.98.0",
issue: to_nonzero(Some(157063)),
},
Feature {
name: sym::yeet_expr,
since: "1.62.0",
issue: to_nonzero(Some(96373)),
},
Feature {
name: sym::yield_expr,
since: "1.87.0",
issue: to_nonzero(Some(43122)),
}];
impl Features {
pub fn allocator_internals(&self) -> bool {
self.enabled(sym::allocator_internals)
}
pub fn allow_internal_unsafe(&self) -> bool {
self.enabled(sym::allow_internal_unsafe)
}
pub fn allow_internal_unstable(&self) -> bool {
self.enabled(sym::allow_internal_unstable)
}
pub fn anonymous_lifetime_in_impl_trait(&self) -> bool {
self.enabled(sym::anonymous_lifetime_in_impl_trait)
}
pub fn cfg_target_has_reliable_f16_f128(&self) -> bool {
self.enabled(sym::cfg_target_has_reliable_f16_f128)
}
pub fn cfg_target_has_reliable_f16b(&self) -> bool {
self.enabled(sym::cfg_target_has_reliable_f16b)
}
pub fn cfg_target_has_threads(&self) -> bool {
self.enabled(sym::cfg_target_has_threads)
}
pub fn compiler_builtins(&self) -> bool {
self.enabled(sym::compiler_builtins)
}
pub fn const_param_ty_unchecked(&self) -> bool {
self.enabled(sym::const_param_ty_unchecked)
}
pub fn custom_mir(&self) -> bool { self.enabled(sym::custom_mir) }
pub fn eii_internals(&self) -> bool { self.enabled(sym::eii_internals) }
pub fn field_representing_type_raw(&self) -> bool {
self.enabled(sym::field_representing_type_raw)
}
pub fn generic_assert(&self) -> bool { self.enabled(sym::generic_assert) }
pub fn intrinsics(&self) -> bool { self.enabled(sym::intrinsics) }
pub fn lang_items(&self) -> bool { self.enabled(sym::lang_items) }
pub fn link_cfg(&self) -> bool { self.enabled(sym::link_cfg) }
pub fn link_enzyme_intrinsics(&self) -> bool {
self.enabled(sym::link_enzyme_intrinsics)
}
pub fn more_maybe_bounds(&self) -> bool {
self.enabled(sym::more_maybe_bounds)
}
pub fn negative_bounds(&self) -> bool {
self.enabled(sym::negative_bounds)
}
pub fn pattern_complexity_limit(&self) -> bool {
self.enabled(sym::pattern_complexity_limit)
}
pub fn prelude_import(&self) -> bool { self.enabled(sym::prelude_import) }
pub fn profiler_runtime(&self) -> bool {
self.enabled(sym::profiler_runtime)
}
pub fn rustc_attrs(&self) -> bool { self.enabled(sym::rustc_attrs) }
pub fn staged_api(&self) -> bool { self.enabled(sym::staged_api) }
pub fn test_binder_constraints(&self) -> bool {
self.enabled(sym::test_binder_constraints)
}
pub fn test_incomplete_feature(&self) -> bool {
self.enabled(sym::test_incomplete_feature)
}
pub fn test_unstable_lint(&self) -> bool {
self.enabled(sym::test_unstable_lint)
}
pub fn with_negative_coherence(&self) -> bool {
self.enabled(sym::with_negative_coherence)
}
pub fn abi_vectorcall(&self) -> bool { self.enabled(sym::abi_vectorcall) }
pub fn auto_traits(&self) -> bool { self.enabled(sym::auto_traits) }
pub fn builtin_syntax(&self) -> bool { self.enabled(sym::builtin_syntax) }
pub fn doc_notable_trait(&self) -> bool {
self.enabled(sym::doc_notable_trait)
}
pub fn dropck_eyepatch(&self) -> bool {
self.enabled(sym::dropck_eyepatch)
}
pub fn fundamental(&self) -> bool { self.enabled(sym::fundamental) }
pub fn link_llvm_intrinsics(&self) -> bool {
self.enabled(sym::link_llvm_intrinsics)
}
pub fn linkage(&self) -> bool { self.enabled(sym::linkage) }
pub fn needs_panic_runtime(&self) -> bool {
self.enabled(sym::needs_panic_runtime)
}
pub fn panic_runtime(&self) -> bool { self.enabled(sym::panic_runtime) }
pub fn pattern_types(&self) -> bool { self.enabled(sym::pattern_types) }
pub fn repr_simd(&self) -> bool { self.enabled(sym::repr_simd) }
pub fn rustc_private(&self) -> bool { self.enabled(sym::rustc_private) }
pub fn rustdoc_internals(&self) -> bool {
self.enabled(sym::rustdoc_internals)
}
pub fn rustdoc_missing_doc_code_examples(&self) -> bool {
self.enabled(sym::rustdoc_missing_doc_code_examples)
}
pub fn sized_hierarchy(&self) -> bool {
self.enabled(sym::sized_hierarchy)
}
pub fn structural_match(&self) -> bool {
self.enabled(sym::structural_match)
}
pub fn unboxed_closures(&self) -> bool {
self.enabled(sym::unboxed_closures)
}
pub fn unqualified_local_imports(&self) -> bool {
self.enabled(sym::unqualified_local_imports)
}
pub fn aarch64_unstable_target_feature(&self) -> bool {
self.enabled(sym::aarch64_unstable_target_feature)
}
pub fn aarch64_ver_target_feature(&self) -> bool {
self.enabled(sym::aarch64_ver_target_feature)
}
pub fn abi_avr_interrupt(&self) -> bool {
self.enabled(sym::abi_avr_interrupt)
}
pub fn abi_cmse_nonsecure_call(&self) -> bool {
self.enabled(sym::abi_cmse_nonsecure_call)
}
pub fn abi_gpu_kernel(&self) -> bool { self.enabled(sym::abi_gpu_kernel) }
pub fn abi_msp430_interrupt(&self) -> bool {
self.enabled(sym::abi_msp430_interrupt)
}
pub fn abi_ptx(&self) -> bool { self.enabled(sym::abi_ptx) }
pub fn abi_riscv_interrupt(&self) -> bool {
self.enabled(sym::abi_riscv_interrupt)
}
pub fn abi_swift(&self) -> bool { self.enabled(sym::abi_swift) }
pub fn abi_x86_interrupt(&self) -> bool {
self.enabled(sym::abi_x86_interrupt)
}
pub fn adt_const_params(&self) -> bool {
self.enabled(sym::adt_const_params)
}
pub fn alloc_error_handler(&self) -> bool {
self.enabled(sym::alloc_error_handler)
}
pub fn apx_target_feature(&self) -> bool {
self.enabled(sym::apx_target_feature)
}
pub fn arbitrary_self_types(&self) -> bool {
self.enabled(sym::arbitrary_self_types)
}
pub fn arbitrary_self_types_pointers(&self) -> bool {
self.enabled(sym::arbitrary_self_types_pointers)
}
pub fn arm_target_feature(&self) -> bool {
self.enabled(sym::arm_target_feature)
}
pub fn asm_const_ptr(&self) -> bool { self.enabled(sym::asm_const_ptr) }
pub fn asm_experimental_arch(&self) -> bool {
self.enabled(sym::asm_experimental_arch)
}
pub fn asm_experimental_reg(&self) -> bool {
self.enabled(sym::asm_experimental_reg)
}
pub fn asm_goto_with_outputs(&self) -> bool {
self.enabled(sym::asm_goto_with_outputs)
}
pub fn asm_unwind(&self) -> bool { self.enabled(sym::asm_unwind) }
pub fn associated_type_defaults(&self) -> bool {
self.enabled(sym::associated_type_defaults)
}
pub fn async_drop(&self) -> bool { self.enabled(sym::async_drop) }
pub fn async_fn_in_dyn_trait(&self) -> bool {
self.enabled(sym::async_fn_in_dyn_trait)
}
pub fn async_fn_track_caller(&self) -> bool {
self.enabled(sym::async_fn_track_caller)
}
pub fn async_for_loop(&self) -> bool { self.enabled(sym::async_for_loop) }
pub fn async_trait_bounds(&self) -> bool {
self.enabled(sym::async_trait_bounds)
}
pub fn avr_target_feature(&self) -> bool {
self.enabled(sym::avr_target_feature)
}
pub fn avx10_target_feature(&self) -> bool {
self.enabled(sym::avx10_target_feature)
}
pub fn bpf_target_feature(&self) -> bool {
self.enabled(sym::bpf_target_feature)
}
pub fn c_variadic_experimental_arch(&self) -> bool {
self.enabled(sym::c_variadic_experimental_arch)
}
pub fn cfg_contract_checks(&self) -> bool {
self.enabled(sym::cfg_contract_checks)
}
pub fn cfg_overflow_checks(&self) -> bool {
self.enabled(sym::cfg_overflow_checks)
}
pub fn cfg_relocation_model(&self) -> bool {
self.enabled(sym::cfg_relocation_model)
}
pub fn cfg_sanitize(&self) -> bool { self.enabled(sym::cfg_sanitize) }
pub fn cfg_sanitizer_cfi(&self) -> bool {
self.enabled(sym::cfg_sanitizer_cfi)
}
pub fn cfg_target_compact(&self) -> bool {
self.enabled(sym::cfg_target_compact)
}
pub fn cfg_target_has_atomic(&self) -> bool {
self.enabled(sym::cfg_target_has_atomic)
}
pub fn cfg_target_object_format(&self) -> bool {
self.enabled(sym::cfg_target_object_format)
}
pub fn cfg_target_thread_local(&self) -> bool {
self.enabled(sym::cfg_target_thread_local)
}
pub fn cfg_ub_checks(&self) -> bool { self.enabled(sym::cfg_ub_checks) }
pub fn cfg_version(&self) -> bool { self.enabled(sym::cfg_version) }
pub fn cfi_encoding(&self) -> bool { self.enabled(sym::cfi_encoding) }
pub fn checked_type_aliases(&self) -> bool {
self.enabled(sym::checked_type_aliases)
}
pub fn clflushopt_target_feature(&self) -> bool {
self.enabled(sym::clflushopt_target_feature)
}
pub fn closure_lifetime_binder(&self) -> bool {
self.enabled(sym::closure_lifetime_binder)
}
pub fn closure_track_caller(&self) -> bool {
self.enabled(sym::closure_track_caller)
}
pub fn cmse_nonsecure_entry(&self) -> bool {
self.enabled(sym::cmse_nonsecure_entry)
}
pub fn const_async_blocks(&self) -> bool {
self.enabled(sym::const_async_blocks)
}
pub fn const_block_items(&self) -> bool {
self.enabled(sym::const_block_items)
}
pub fn const_c_variadic(&self) -> bool {
self.enabled(sym::const_c_variadic)
}
pub fn const_closures(&self) -> bool { self.enabled(sym::const_closures) }
pub fn const_destruct(&self) -> bool { self.enabled(sym::const_destruct) }
pub fn const_for(&self) -> bool { self.enabled(sym::const_for) }
pub fn const_precise_live_drops(&self) -> bool {
self.enabled(sym::const_precise_live_drops)
}
pub fn const_trait_impl(&self) -> bool {
self.enabled(sym::const_trait_impl)
}
pub fn const_try(&self) -> bool { self.enabled(sym::const_try) }
pub fn contracts(&self) -> bool { self.enabled(sym::contracts) }
pub fn contracts_internals(&self) -> bool {
self.enabled(sym::contracts_internals)
}
pub fn coroutine_clone(&self) -> bool {
self.enabled(sym::coroutine_clone)
}
pub fn coroutines(&self) -> bool { self.enabled(sym::coroutines) }
pub fn coverage_attribute(&self) -> bool {
self.enabled(sym::coverage_attribute)
}
pub fn csky_target_feature(&self) -> bool {
self.enabled(sym::csky_target_feature)
}
pub fn custom_inner_attributes(&self) -> bool {
self.enabled(sym::custom_inner_attributes)
}
pub fn custom_test_frameworks(&self) -> bool {
self.enabled(sym::custom_test_frameworks)
}
pub fn decl_macro(&self) -> bool { self.enabled(sym::decl_macro) }
pub fn default_field_values(&self) -> bool {
self.enabled(sym::default_field_values)
}
pub fn deprecated_suggestion(&self) -> bool {
self.enabled(sym::deprecated_suggestion)
}
pub fn deref_patterns(&self) -> bool { self.enabled(sym::deref_patterns) }
pub fn derive_from(&self) -> bool { self.enabled(sym::derive_from) }
pub fn diagnostic_on_const(&self) -> bool {
self.enabled(sym::diagnostic_on_const)
}
pub fn diagnostic_on_move(&self) -> bool {
self.enabled(sym::diagnostic_on_move)
}
pub fn diagnostic_on_type_error(&self) -> bool {
self.enabled(sym::diagnostic_on_type_error)
}
pub fn diagnostic_on_unknown(&self) -> bool {
self.enabled(sym::diagnostic_on_unknown)
}
pub fn diagnostic_on_unmatched_args(&self) -> bool {
self.enabled(sym::diagnostic_on_unmatched_args)
}
pub fn diagnostic_opaque(&self) -> bool {
self.enabled(sym::diagnostic_opaque)
}
pub fn doc_cfg(&self) -> bool { self.enabled(sym::doc_cfg) }
pub fn doc_masked(&self) -> bool { self.enabled(sym::doc_masked) }
pub fn effective_target_features(&self) -> bool {
self.enabled(sym::effective_target_features)
}
pub fn ergonomic_clones(&self) -> bool {
self.enabled(sym::ergonomic_clones)
}
pub fn ermsb_target_feature(&self) -> bool {
self.enabled(sym::ermsb_target_feature)
}
pub fn exhaustive_patterns(&self) -> bool {
self.enabled(sym::exhaustive_patterns)
}
pub fn explicit_extern_abis(&self) -> bool {
self.enabled(sym::explicit_extern_abis)
}
pub fn explicit_tail_calls(&self) -> bool {
self.enabled(sym::explicit_tail_calls)
}
pub fn export_stable(&self) -> bool { self.enabled(sym::export_stable) }
pub fn extern_item_impls(&self) -> bool {
self.enabled(sym::extern_item_impls)
}
pub fn extern_types(&self) -> bool { self.enabled(sym::extern_types) }
pub fn f128(&self) -> bool { self.enabled(sym::f128) }
pub fn f16(&self) -> bool { self.enabled(sym::f16) }
pub fn f16b(&self) -> bool { self.enabled(sym::f16b) }
pub fn ffi_const(&self) -> bool { self.enabled(sym::ffi_const) }
pub fn ffi_pure(&self) -> bool { self.enabled(sym::ffi_pure) }
pub fn field_projections(&self) -> bool {
self.enabled(sym::field_projections)
}
pub fn final_associated_functions(&self) -> bool {
self.enabled(sym::final_associated_functions)
}
pub fn fma4_target_feature(&self) -> bool {
self.enabled(sym::fma4_target_feature)
}
pub fn fmt_debug(&self) -> bool { self.enabled(sym::fmt_debug) }
pub fn fn_align(&self) -> bool { self.enabled(sym::fn_align) }
pub fn fn_delegation(&self) -> bool { self.enabled(sym::fn_delegation) }
pub fn fn_static(&self) -> bool { self.enabled(sym::fn_static) }
pub fn forced_keywords(&self) -> bool {
self.enabled(sym::forced_keywords)
}
pub fn freeze_impls(&self) -> bool { self.enabled(sym::freeze_impls) }
pub fn frontmatter(&self) -> bool { self.enabled(sym::frontmatter) }
pub fn gca_adts(&self) -> bool { self.enabled(sym::gca_adts) }
pub fn gca_const_items(&self) -> bool {
self.enabled(sym::gca_const_items)
}
pub fn gca_macroless_args(&self) -> bool {
self.enabled(sym::gca_macroless_args)
}
pub fn gca_macroless_items(&self) -> bool {
self.enabled(sym::gca_macroless_items)
}
pub fn gca_min_const_items(&self) -> bool {
self.enabled(sym::gca_min_const_items)
}
pub fn gen_blocks(&self) -> bool { self.enabled(sym::gen_blocks) }
pub fn generic_const_exprs(&self) -> bool {
self.enabled(sym::generic_const_exprs)
}
pub fn generic_const_items(&self) -> bool {
self.enabled(sym::generic_const_items)
}
pub fn generic_const_parameter_types(&self) -> bool {
self.enabled(sym::generic_const_parameter_types)
}
pub fn generic_pattern_types(&self) -> bool {
self.enabled(sym::generic_pattern_types)
}
pub fn global_registration(&self) -> bool {
self.enabled(sym::global_registration)
}
pub fn guard_patterns(&self) -> bool { self.enabled(sym::guard_patterns) }
pub fn half_open_range_patterns_in_slices(&self) -> bool {
self.enabled(sym::half_open_range_patterns_in_slices)
}
pub fn hexagon_target_feature(&self) -> bool {
self.enabled(sym::hexagon_target_feature)
}
pub fn impl_restriction(&self) -> bool {
self.enabled(sym::impl_restriction)
}
pub fn impl_trait_in_assoc_type(&self) -> bool {
self.enabled(sym::impl_trait_in_assoc_type)
}
pub fn impl_trait_in_bindings(&self) -> bool {
self.enabled(sym::impl_trait_in_bindings)
}
pub fn impl_trait_in_fn_trait_return(&self) -> bool {
self.enabled(sym::impl_trait_in_fn_trait_return)
}
pub fn import_trait_associated_functions(&self) -> bool {
self.enabled(sym::import_trait_associated_functions)
}
pub fn inherent_associated_types(&self) -> bool {
self.enabled(sym::inherent_associated_types)
}
pub fn instrument_fn(&self) -> bool { self.enabled(sym::instrument_fn) }
pub fn intra_doc_pointers(&self) -> bool {
self.enabled(sym::intra_doc_pointers)
}
pub fn lahfsahf_target_feature(&self) -> bool {
self.enabled(sym::lahfsahf_target_feature)
}
pub fn large_assignments(&self) -> bool {
self.enabled(sym::large_assignments)
}
pub fn link_arg_attribute(&self) -> bool {
self.enabled(sym::link_arg_attribute)
}
pub fn loongarch_target_feature(&self) -> bool {
self.enabled(sym::loongarch_target_feature)
}
pub fn loop_hints(&self) -> bool { self.enabled(sym::loop_hints) }
pub fn loop_match(&self) -> bool { self.enabled(sym::loop_match) }
pub fn m68k_target_feature(&self) -> bool {
self.enabled(sym::m68k_target_feature)
}
pub fn macro_attr(&self) -> bool { self.enabled(sym::macro_attr) }
pub fn macro_derive(&self) -> bool { self.enabled(sym::macro_derive) }
pub fn macro_guard_matcher(&self) -> bool {
self.enabled(sym::macro_guard_matcher)
}
pub fn macro_metavar_expr(&self) -> bool {
self.enabled(sym::macro_metavar_expr)
}
pub fn macro_metavar_expr_concat(&self) -> bool {
self.enabled(sym::macro_metavar_expr_concat)
}
pub fn marker_trait_attr(&self) -> bool {
self.enabled(sym::marker_trait_attr)
}
pub fn min_adt_const_params(&self) -> bool {
self.enabled(sym::min_adt_const_params)
}
pub fn min_specialization(&self) -> bool {
self.enabled(sym::min_specialization)
}
pub fn mips_target_feature(&self) -> bool {
self.enabled(sym::mips_target_feature)
}
pub fn more_qualified_paths(&self) -> bool {
self.enabled(sym::more_qualified_paths)
}
pub fn movdir64b_target_feature(&self) -> bool {
self.enabled(sym::movdir64b_target_feature)
}
pub fn movdiri_target_feature(&self) -> bool {
self.enabled(sym::movdiri_target_feature)
}
pub fn move_expr(&self) -> bool { self.enabled(sym::move_expr) }
pub fn movrs_target_feature(&self) -> bool {
self.enabled(sym::movrs_target_feature)
}
pub fn multiple_supertrait_upcastable(&self) -> bool {
self.enabled(sym::multiple_supertrait_upcastable)
}
pub fn must_not_suspend(&self) -> bool {
self.enabled(sym::must_not_suspend)
}
pub fn mut_ref(&self) -> bool { self.enabled(sym::mut_ref) }
pub fn mut_restriction(&self) -> bool {
self.enabled(sym::mut_restriction)
}
pub fn naked_functions_rustic_abi(&self) -> bool {
self.enabled(sym::naked_functions_rustic_abi)
}
pub fn naked_functions_target_feature(&self) -> bool {
self.enabled(sym::naked_functions_target_feature)
}
pub fn named_fn_trait_parameters(&self) -> bool {
self.enabled(sym::named_fn_trait_parameters)
}
pub fn native_link_modifiers_as_needed(&self) -> bool {
self.enabled(sym::native_link_modifiers_as_needed)
}
pub fn negative_impls(&self) -> bool { self.enabled(sym::negative_impls) }
pub fn never_patterns(&self) -> bool { self.enabled(sym::never_patterns) }
pub fn new_range(&self) -> bool { self.enabled(sym::new_range) }
pub fn no_core(&self) -> bool { self.enabled(sym::no_core) }
pub fn non_exhaustive_omitted_patterns_lint(&self) -> bool {
self.enabled(sym::non_exhaustive_omitted_patterns_lint)
}
pub fn non_lifetime_binders(&self) -> bool {
self.enabled(sym::non_lifetime_binders)
}
pub fn nvptx_target_feature(&self) -> bool {
self.enabled(sym::nvptx_target_feature)
}
pub fn offset_of_enum(&self) -> bool { self.enabled(sym::offset_of_enum) }
pub fn offset_of_slice(&self) -> bool {
self.enabled(sym::offset_of_slice)
}
pub fn patchable_function_entry(&self) -> bool {
self.enabled(sym::patchable_function_entry)
}
pub fn pin_ergonomics(&self) -> bool { self.enabled(sym::pin_ergonomics) }
pub fn postfix_match(&self) -> bool { self.enabled(sym::postfix_match) }
pub fn powerpc_target_feature(&self) -> bool {
self.enabled(sym::powerpc_target_feature)
}
pub fn prfchw_target_feature(&self) -> bool {
self.enabled(sym::prfchw_target_feature)
}
pub fn proc_macro_hygiene(&self) -> bool {
self.enabled(sym::proc_macro_hygiene)
}
pub fn raw_dylib_elf(&self) -> bool { self.enabled(sym::raw_dylib_elf) }
pub fn reborrow(&self) -> bool { self.enabled(sym::reborrow) }
pub fn ref_pat_eat_one_layer_2024(&self) -> bool {
self.enabled(sym::ref_pat_eat_one_layer_2024)
}
pub fn ref_pat_eat_one_layer_2024_structural(&self) -> bool {
self.enabled(sym::ref_pat_eat_one_layer_2024_structural)
}
pub fn register_tool(&self) -> bool { self.enabled(sym::register_tool) }
pub fn return_type_notation(&self) -> bool {
self.enabled(sym::return_type_notation)
}
pub fn riscv_target_feature(&self) -> bool {
self.enabled(sym::riscv_target_feature)
}
pub fn rtm_target_feature(&self) -> bool {
self.enabled(sym::rtm_target_feature)
}
pub fn rust_cold_cc(&self) -> bool { self.enabled(sym::rust_cold_cc) }
pub fn rust_preserve_none_cc(&self) -> bool {
self.enabled(sym::rust_preserve_none_cc)
}
pub fn rust_tail_cc(&self) -> bool { self.enabled(sym::rust_tail_cc) }
pub fn s390x_target_feature(&self) -> bool {
self.enabled(sym::s390x_target_feature)
}
pub fn sanitize(&self) -> bool { self.enabled(sym::sanitize) }
pub fn simd_ffi(&self) -> bool { self.enabled(sym::simd_ffi) }
pub fn sparc_target_feature(&self) -> bool {
self.enabled(sym::sparc_target_feature)
}
pub fn specialization(&self) -> bool { self.enabled(sym::specialization) }
pub fn splat(&self) -> bool { self.enabled(sym::splat) }
pub fn static_align(&self) -> bool { self.enabled(sym::static_align) }
pub fn stmt_expr_attributes(&self) -> bool {
self.enabled(sym::stmt_expr_attributes)
}
pub fn strict_provenance_lints(&self) -> bool {
self.enabled(sym::strict_provenance_lints)
}
pub fn super_let(&self) -> bool { self.enabled(sym::super_let) }
pub fn supertrait_item_shadowing(&self) -> bool {
self.enabled(sym::supertrait_item_shadowing)
}
pub fn thread_local(&self) -> bool { self.enabled(sym::thread_local) }
pub fn trait_alias(&self) -> bool { self.enabled(sym::trait_alias) }
pub fn transmute_generic_consts(&self) -> bool {
self.enabled(sym::transmute_generic_consts)
}
pub fn transparent_unions(&self) -> bool {
self.enabled(sym::transparent_unions)
}
pub fn trivial_bounds(&self) -> bool { self.enabled(sym::trivial_bounds) }
pub fn try_blocks(&self) -> bool { self.enabled(sym::try_blocks) }
pub fn try_blocks_heterogeneous(&self) -> bool {
self.enabled(sym::try_blocks_heterogeneous)
}
pub fn type_alias_impl_trait(&self) -> bool {
self.enabled(sym::type_alias_impl_trait)
}
pub fn type_changing_struct_update(&self) -> bool {
self.enabled(sym::type_changing_struct_update)
}
pub fn unnamed_enum_variants(&self) -> bool {
self.enabled(sym::unnamed_enum_variants)
}
pub fn unsafe_binders(&self) -> bool { self.enabled(sym::unsafe_binders) }
pub fn unsafe_fields(&self) -> bool { self.enabled(sym::unsafe_fields) }
pub fn unsized_const_params(&self) -> bool {
self.enabled(sym::unsized_const_params)
}
pub fn unsized_fn_params(&self) -> bool {
self.enabled(sym::unsized_fn_params)
}
pub fn used_with_arg(&self) -> bool { self.enabled(sym::used_with_arg) }
pub fn view_types(&self) -> bool { self.enabled(sym::view_types) }
pub fn wasm_target_feature(&self) -> bool {
self.enabled(sym::wasm_target_feature)
}
pub fn where_clause_attrs(&self) -> bool {
self.enabled(sym::where_clause_attrs)
}
pub fn x86_amx_intrinsics(&self) -> bool {
self.enabled(sym::x86_amx_intrinsics)
}
pub fn x87_target_feature(&self) -> bool {
self.enabled(sym::x87_target_feature)
}
pub fn xop_target_feature(&self) -> bool {
self.enabled(sym::xop_target_feature)
}
pub fn xtensa_target_feature(&self) -> bool {
self.enabled(sym::xtensa_target_feature)
}
pub fn yeet_expr(&self) -> bool { self.enabled(sym::yeet_expr) }
pub fn yield_expr(&self) -> bool { self.enabled(sym::yield_expr) }
pub fn incomplete(&self, feature: Symbol) -> bool {
match feature {
f if f == sym::allocator_internals =>
FeatureStatus::Internal == FeatureStatus::Incomplete,
f if f == sym::allow_internal_unsafe =>
FeatureStatus::Internal == FeatureStatus::Incomplete,
f if f == sym::allow_internal_unstable =>
FeatureStatus::Internal == FeatureStatus::Incomplete,
f if f == sym::anonymous_lifetime_in_impl_trait =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::cfg_target_has_reliable_f16_f128 =>
FeatureStatus::Internal == FeatureStatus::Incomplete,
f if f == sym::cfg_target_has_reliable_f16b =>
FeatureStatus::Internal == FeatureStatus::Incomplete,
f if f == sym::cfg_target_has_threads =>
FeatureStatus::Internal == FeatureStatus::Incomplete,
f if f == sym::compiler_builtins =>
FeatureStatus::Internal == FeatureStatus::Incomplete,
f if f == sym::const_param_ty_unchecked =>
FeatureStatus::Internal == FeatureStatus::Incomplete,
f if f == sym::custom_mir =>
FeatureStatus::Internal == FeatureStatus::Incomplete,
f if f == sym::eii_internals =>
FeatureStatus::Internal == FeatureStatus::Incomplete,
f if f == sym::field_representing_type_raw =>
FeatureStatus::Internal == FeatureStatus::Incomplete,
f if f == sym::generic_assert =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::intrinsics =>
FeatureStatus::Internal == FeatureStatus::Incomplete,
f if f == sym::lang_items =>
FeatureStatus::Internal == FeatureStatus::Incomplete,
f if f == sym::link_cfg =>
FeatureStatus::Internal == FeatureStatus::Incomplete,
f if f == sym::link_enzyme_intrinsics =>
FeatureStatus::Internal == FeatureStatus::Incomplete,
f if f == sym::more_maybe_bounds =>
FeatureStatus::Internal == FeatureStatus::Incomplete,
f if f == sym::negative_bounds =>
FeatureStatus::Internal == FeatureStatus::Incomplete,
f if f == sym::pattern_complexity_limit =>
FeatureStatus::Internal == FeatureStatus::Incomplete,
f if f == sym::prelude_import =>
FeatureStatus::Internal == FeatureStatus::Incomplete,
f if f == sym::profiler_runtime =>
FeatureStatus::Internal == FeatureStatus::Incomplete,
f if f == sym::rustc_attrs =>
FeatureStatus::Internal == FeatureStatus::Incomplete,
f if f == sym::staged_api =>
FeatureStatus::Internal == FeatureStatus::Incomplete,
f if f == sym::test_binder_constraints =>
FeatureStatus::Internal == FeatureStatus::Incomplete,
f if f == sym::test_incomplete_feature =>
FeatureStatus::Incomplete == FeatureStatus::Incomplete,
f if f == sym::test_unstable_lint =>
FeatureStatus::Internal == FeatureStatus::Incomplete,
f if f == sym::with_negative_coherence =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::abi_vectorcall =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::auto_traits =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::builtin_syntax =>
FeatureStatus::Internal == FeatureStatus::Incomplete,
f if f == sym::doc_notable_trait =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::dropck_eyepatch =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::fundamental =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::link_llvm_intrinsics =>
FeatureStatus::Internal == FeatureStatus::Incomplete,
f if f == sym::linkage =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::needs_panic_runtime =>
FeatureStatus::Internal == FeatureStatus::Incomplete,
f if f == sym::panic_runtime =>
FeatureStatus::Internal == FeatureStatus::Incomplete,
f if f == sym::pattern_types =>
FeatureStatus::Internal == FeatureStatus::Incomplete,
f if f == sym::repr_simd =>
FeatureStatus::Internal == FeatureStatus::Incomplete,
f if f == sym::rustc_private =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::rustdoc_internals =>
FeatureStatus::Internal == FeatureStatus::Incomplete,
f if f == sym::rustdoc_missing_doc_code_examples =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::sized_hierarchy =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::structural_match =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::unboxed_closures =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::unqualified_local_imports =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::aarch64_unstable_target_feature =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::aarch64_ver_target_feature =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::abi_avr_interrupt =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::abi_cmse_nonsecure_call =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::abi_gpu_kernel =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::abi_msp430_interrupt =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::abi_ptx =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::abi_riscv_interrupt =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::abi_swift =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::abi_x86_interrupt =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::adt_const_params =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::alloc_error_handler =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::apx_target_feature =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::arbitrary_self_types =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::arbitrary_self_types_pointers =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::arm_target_feature =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::asm_const_ptr =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::asm_experimental_arch =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::asm_experimental_reg =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::asm_goto_with_outputs =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::asm_unwind =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::associated_type_defaults =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::async_drop =>
FeatureStatus::Incomplete == FeatureStatus::Incomplete,
f if f == sym::async_fn_in_dyn_trait =>
FeatureStatus::Incomplete == FeatureStatus::Incomplete,
f if f == sym::async_fn_track_caller =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::async_for_loop =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::async_trait_bounds =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::avr_target_feature =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::avx10_target_feature =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::bpf_target_feature =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::c_variadic_experimental_arch =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::cfg_contract_checks =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::cfg_overflow_checks =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::cfg_relocation_model =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::cfg_sanitize =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::cfg_sanitizer_cfi =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::cfg_target_compact =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::cfg_target_has_atomic =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::cfg_target_object_format =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::cfg_target_thread_local =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::cfg_ub_checks =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::cfg_version =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::cfi_encoding =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::checked_type_aliases =>
FeatureStatus::Incomplete == FeatureStatus::Incomplete,
f if f == sym::clflushopt_target_feature =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::closure_lifetime_binder =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::closure_track_caller =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::cmse_nonsecure_entry =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::const_async_blocks =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::const_block_items =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::const_c_variadic =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::const_closures =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::const_destruct =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::const_for =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::const_precise_live_drops =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::const_trait_impl =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::const_try =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::contracts =>
FeatureStatus::Incomplete == FeatureStatus::Incomplete,
f if f == sym::contracts_internals =>
FeatureStatus::Internal == FeatureStatus::Incomplete,
f if f == sym::coroutine_clone =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::coroutines =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::coverage_attribute =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::csky_target_feature =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::custom_inner_attributes =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::custom_test_frameworks =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::decl_macro =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::default_field_values =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::deprecated_suggestion =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::deref_patterns =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::derive_from =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::diagnostic_on_const =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::diagnostic_on_move =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::diagnostic_on_type_error =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::diagnostic_on_unknown =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::diagnostic_on_unmatched_args =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::diagnostic_opaque =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::doc_cfg =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::doc_masked =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::effective_target_features =>
FeatureStatus::Incomplete == FeatureStatus::Incomplete,
f if f == sym::ergonomic_clones =>
FeatureStatus::Incomplete == FeatureStatus::Incomplete,
f if f == sym::ermsb_target_feature =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::exhaustive_patterns =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::explicit_extern_abis =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::explicit_tail_calls =>
FeatureStatus::Incomplete == FeatureStatus::Incomplete,
f if f == sym::export_stable =>
FeatureStatus::Incomplete == FeatureStatus::Incomplete,
f if f == sym::extern_item_impls =>
FeatureStatus::Incomplete == FeatureStatus::Incomplete,
f if f == sym::extern_types =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::f128 =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::f16 =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::f16b =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::ffi_const =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::ffi_pure =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::field_projections =>
FeatureStatus::Incomplete == FeatureStatus::Incomplete,
f if f == sym::final_associated_functions =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::fma4_target_feature =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::fmt_debug =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::fn_align =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::fn_delegation =>
FeatureStatus::Incomplete == FeatureStatus::Incomplete,
f if f == sym::fn_static =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::forced_keywords =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::freeze_impls =>
FeatureStatus::Internal == FeatureStatus::Incomplete,
f if f == sym::frontmatter =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::gca_adts =>
FeatureStatus::Incomplete == FeatureStatus::Incomplete,
f if f == sym::gca_const_items =>
FeatureStatus::Incomplete == FeatureStatus::Incomplete,
f if f == sym::gca_macroless_args =>
FeatureStatus::Incomplete == FeatureStatus::Incomplete,
f if f == sym::gca_macroless_items =>
FeatureStatus::Incomplete == FeatureStatus::Incomplete,
f if f == sym::gca_min_const_items =>
FeatureStatus::Incomplete == FeatureStatus::Incomplete,
f if f == sym::gen_blocks =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::generic_const_exprs =>
FeatureStatus::Incomplete == FeatureStatus::Incomplete,
f if f == sym::generic_const_items =>
FeatureStatus::Incomplete == FeatureStatus::Incomplete,
f if f == sym::generic_const_parameter_types =>
FeatureStatus::Incomplete == FeatureStatus::Incomplete,
f if f == sym::generic_pattern_types =>
FeatureStatus::Incomplete == FeatureStatus::Incomplete,
f if f == sym::global_registration =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::guard_patterns =>
FeatureStatus::Incomplete == FeatureStatus::Incomplete,
f if f == sym::half_open_range_patterns_in_slices =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::hexagon_target_feature =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::impl_restriction =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::impl_trait_in_assoc_type =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::impl_trait_in_bindings =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::impl_trait_in_fn_trait_return =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::import_trait_associated_functions =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::inherent_associated_types =>
FeatureStatus::Incomplete == FeatureStatus::Incomplete,
f if f == sym::instrument_fn =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::intra_doc_pointers =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::lahfsahf_target_feature =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::large_assignments =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::link_arg_attribute =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::loongarch_target_feature =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::loop_hints =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::loop_match =>
FeatureStatus::Incomplete == FeatureStatus::Incomplete,
f if f == sym::m68k_target_feature =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::macro_attr =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::macro_derive =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::macro_guard_matcher =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::macro_metavar_expr =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::macro_metavar_expr_concat =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::marker_trait_attr =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::min_adt_const_params =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::min_specialization =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::mips_target_feature =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::more_qualified_paths =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::movdir64b_target_feature =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::movdiri_target_feature =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::move_expr =>
FeatureStatus::Incomplete == FeatureStatus::Incomplete,
f if f == sym::movrs_target_feature =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::multiple_supertrait_upcastable =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::must_not_suspend =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::mut_ref =>
FeatureStatus::Incomplete == FeatureStatus::Incomplete,
f if f == sym::mut_restriction =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::naked_functions_rustic_abi =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::naked_functions_target_feature =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::named_fn_trait_parameters =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::native_link_modifiers_as_needed =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::negative_impls =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::never_patterns =>
FeatureStatus::Incomplete == FeatureStatus::Incomplete,
f if f == sym::new_range =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::no_core =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::non_exhaustive_omitted_patterns_lint =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::non_lifetime_binders =>
FeatureStatus::Incomplete == FeatureStatus::Incomplete,
f if f == sym::nvptx_target_feature =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::offset_of_enum =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::offset_of_slice =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::patchable_function_entry =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::pin_ergonomics =>
FeatureStatus::Incomplete == FeatureStatus::Incomplete,
f if f == sym::postfix_match =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::powerpc_target_feature =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::prfchw_target_feature =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::proc_macro_hygiene =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::raw_dylib_elf =>
FeatureStatus::Incomplete == FeatureStatus::Incomplete,
f if f == sym::reborrow =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::ref_pat_eat_one_layer_2024 =>
FeatureStatus::Incomplete == FeatureStatus::Incomplete,
f if f == sym::ref_pat_eat_one_layer_2024_structural =>
FeatureStatus::Incomplete == FeatureStatus::Incomplete,
f if f == sym::register_tool =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::return_type_notation =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::riscv_target_feature =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::rtm_target_feature =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::rust_cold_cc =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::rust_preserve_none_cc =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::rust_tail_cc =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::s390x_target_feature =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::sanitize =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::simd_ffi =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::sparc_target_feature =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::specialization =>
FeatureStatus::Incomplete == FeatureStatus::Incomplete,
f if f == sym::splat =>
FeatureStatus::Incomplete == FeatureStatus::Incomplete,
f if f == sym::static_align =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::stmt_expr_attributes =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::strict_provenance_lints =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::super_let =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::supertrait_item_shadowing =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::thread_local =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::trait_alias =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::transmute_generic_consts =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::transparent_unions =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::trivial_bounds =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::try_blocks =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::try_blocks_heterogeneous =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::type_alias_impl_trait =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::type_changing_struct_update =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::unnamed_enum_variants =>
FeatureStatus::Incomplete == FeatureStatus::Incomplete,
f if f == sym::unsafe_binders =>
FeatureStatus::Incomplete == FeatureStatus::Incomplete,
f if f == sym::unsafe_fields =>
FeatureStatus::Incomplete == FeatureStatus::Incomplete,
f if f == sym::unsized_const_params =>
FeatureStatus::Incomplete == FeatureStatus::Incomplete,
f if f == sym::unsized_fn_params =>
FeatureStatus::Internal == FeatureStatus::Incomplete,
f if f == sym::used_with_arg =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::view_types =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::wasm_target_feature =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::where_clause_attrs =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::x86_amx_intrinsics =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::x87_target_feature =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::xop_target_feature =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::xtensa_target_feature =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::yeet_expr =>
FeatureStatus::Default == FeatureStatus::Incomplete,
f if f == sym::yield_expr =>
FeatureStatus::Default == FeatureStatus::Incomplete,
_ if self.enabled_features.contains(&feature) => { false }
_ => {
::core::panicking::panic_fmt(format_args!("`{0}` was not listed in `declare_features`",
feature));
}
}
}
pub fn internal(&self, feature: Symbol) -> bool {
match feature {
f if f == sym::allocator_internals =>
FeatureStatus::Internal == FeatureStatus::Internal,
f if f == sym::allow_internal_unsafe =>
FeatureStatus::Internal == FeatureStatus::Internal,
f if f == sym::allow_internal_unstable =>
FeatureStatus::Internal == FeatureStatus::Internal,
f if f == sym::anonymous_lifetime_in_impl_trait =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::cfg_target_has_reliable_f16_f128 =>
FeatureStatus::Internal == FeatureStatus::Internal,
f if f == sym::cfg_target_has_reliable_f16b =>
FeatureStatus::Internal == FeatureStatus::Internal,
f if f == sym::cfg_target_has_threads =>
FeatureStatus::Internal == FeatureStatus::Internal,
f if f == sym::compiler_builtins =>
FeatureStatus::Internal == FeatureStatus::Internal,
f if f == sym::const_param_ty_unchecked =>
FeatureStatus::Internal == FeatureStatus::Internal,
f if f == sym::custom_mir =>
FeatureStatus::Internal == FeatureStatus::Internal,
f if f == sym::eii_internals =>
FeatureStatus::Internal == FeatureStatus::Internal,
f if f == sym::field_representing_type_raw =>
FeatureStatus::Internal == FeatureStatus::Internal,
f if f == sym::generic_assert =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::intrinsics =>
FeatureStatus::Internal == FeatureStatus::Internal,
f if f == sym::lang_items =>
FeatureStatus::Internal == FeatureStatus::Internal,
f if f == sym::link_cfg =>
FeatureStatus::Internal == FeatureStatus::Internal,
f if f == sym::link_enzyme_intrinsics =>
FeatureStatus::Internal == FeatureStatus::Internal,
f if f == sym::more_maybe_bounds =>
FeatureStatus::Internal == FeatureStatus::Internal,
f if f == sym::negative_bounds =>
FeatureStatus::Internal == FeatureStatus::Internal,
f if f == sym::pattern_complexity_limit =>
FeatureStatus::Internal == FeatureStatus::Internal,
f if f == sym::prelude_import =>
FeatureStatus::Internal == FeatureStatus::Internal,
f if f == sym::profiler_runtime =>
FeatureStatus::Internal == FeatureStatus::Internal,
f if f == sym::rustc_attrs =>
FeatureStatus::Internal == FeatureStatus::Internal,
f if f == sym::staged_api =>
FeatureStatus::Internal == FeatureStatus::Internal,
f if f == sym::test_binder_constraints =>
FeatureStatus::Internal == FeatureStatus::Internal,
f if f == sym::test_incomplete_feature =>
FeatureStatus::Incomplete == FeatureStatus::Internal,
f if f == sym::test_unstable_lint =>
FeatureStatus::Internal == FeatureStatus::Internal,
f if f == sym::with_negative_coherence =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::abi_vectorcall =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::auto_traits =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::builtin_syntax =>
FeatureStatus::Internal == FeatureStatus::Internal,
f if f == sym::doc_notable_trait =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::dropck_eyepatch =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::fundamental =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::link_llvm_intrinsics =>
FeatureStatus::Internal == FeatureStatus::Internal,
f if f == sym::linkage =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::needs_panic_runtime =>
FeatureStatus::Internal == FeatureStatus::Internal,
f if f == sym::panic_runtime =>
FeatureStatus::Internal == FeatureStatus::Internal,
f if f == sym::pattern_types =>
FeatureStatus::Internal == FeatureStatus::Internal,
f if f == sym::repr_simd =>
FeatureStatus::Internal == FeatureStatus::Internal,
f if f == sym::rustc_private =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::rustdoc_internals =>
FeatureStatus::Internal == FeatureStatus::Internal,
f if f == sym::rustdoc_missing_doc_code_examples =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::sized_hierarchy =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::structural_match =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::unboxed_closures =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::unqualified_local_imports =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::aarch64_unstable_target_feature =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::aarch64_ver_target_feature =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::abi_avr_interrupt =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::abi_cmse_nonsecure_call =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::abi_gpu_kernel =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::abi_msp430_interrupt =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::abi_ptx =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::abi_riscv_interrupt =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::abi_swift =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::abi_x86_interrupt =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::adt_const_params =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::alloc_error_handler =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::apx_target_feature =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::arbitrary_self_types =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::arbitrary_self_types_pointers =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::arm_target_feature =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::asm_const_ptr =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::asm_experimental_arch =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::asm_experimental_reg =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::asm_goto_with_outputs =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::asm_unwind =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::associated_type_defaults =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::async_drop =>
FeatureStatus::Incomplete == FeatureStatus::Internal,
f if f == sym::async_fn_in_dyn_trait =>
FeatureStatus::Incomplete == FeatureStatus::Internal,
f if f == sym::async_fn_track_caller =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::async_for_loop =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::async_trait_bounds =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::avr_target_feature =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::avx10_target_feature =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::bpf_target_feature =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::c_variadic_experimental_arch =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::cfg_contract_checks =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::cfg_overflow_checks =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::cfg_relocation_model =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::cfg_sanitize =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::cfg_sanitizer_cfi =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::cfg_target_compact =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::cfg_target_has_atomic =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::cfg_target_object_format =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::cfg_target_thread_local =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::cfg_ub_checks =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::cfg_version =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::cfi_encoding =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::checked_type_aliases =>
FeatureStatus::Incomplete == FeatureStatus::Internal,
f if f == sym::clflushopt_target_feature =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::closure_lifetime_binder =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::closure_track_caller =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::cmse_nonsecure_entry =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::const_async_blocks =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::const_block_items =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::const_c_variadic =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::const_closures =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::const_destruct =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::const_for =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::const_precise_live_drops =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::const_trait_impl =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::const_try =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::contracts =>
FeatureStatus::Incomplete == FeatureStatus::Internal,
f if f == sym::contracts_internals =>
FeatureStatus::Internal == FeatureStatus::Internal,
f if f == sym::coroutine_clone =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::coroutines =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::coverage_attribute =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::csky_target_feature =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::custom_inner_attributes =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::custom_test_frameworks =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::decl_macro =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::default_field_values =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::deprecated_suggestion =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::deref_patterns =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::derive_from =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::diagnostic_on_const =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::diagnostic_on_move =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::diagnostic_on_type_error =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::diagnostic_on_unknown =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::diagnostic_on_unmatched_args =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::diagnostic_opaque =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::doc_cfg =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::doc_masked =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::effective_target_features =>
FeatureStatus::Incomplete == FeatureStatus::Internal,
f if f == sym::ergonomic_clones =>
FeatureStatus::Incomplete == FeatureStatus::Internal,
f if f == sym::ermsb_target_feature =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::exhaustive_patterns =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::explicit_extern_abis =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::explicit_tail_calls =>
FeatureStatus::Incomplete == FeatureStatus::Internal,
f if f == sym::export_stable =>
FeatureStatus::Incomplete == FeatureStatus::Internal,
f if f == sym::extern_item_impls =>
FeatureStatus::Incomplete == FeatureStatus::Internal,
f if f == sym::extern_types =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::f128 =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::f16 =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::f16b =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::ffi_const =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::ffi_pure =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::field_projections =>
FeatureStatus::Incomplete == FeatureStatus::Internal,
f if f == sym::final_associated_functions =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::fma4_target_feature =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::fmt_debug =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::fn_align =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::fn_delegation =>
FeatureStatus::Incomplete == FeatureStatus::Internal,
f if f == sym::fn_static =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::forced_keywords =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::freeze_impls =>
FeatureStatus::Internal == FeatureStatus::Internal,
f if f == sym::frontmatter =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::gca_adts =>
FeatureStatus::Incomplete == FeatureStatus::Internal,
f if f == sym::gca_const_items =>
FeatureStatus::Incomplete == FeatureStatus::Internal,
f if f == sym::gca_macroless_args =>
FeatureStatus::Incomplete == FeatureStatus::Internal,
f if f == sym::gca_macroless_items =>
FeatureStatus::Incomplete == FeatureStatus::Internal,
f if f == sym::gca_min_const_items =>
FeatureStatus::Incomplete == FeatureStatus::Internal,
f if f == sym::gen_blocks =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::generic_const_exprs =>
FeatureStatus::Incomplete == FeatureStatus::Internal,
f if f == sym::generic_const_items =>
FeatureStatus::Incomplete == FeatureStatus::Internal,
f if f == sym::generic_const_parameter_types =>
FeatureStatus::Incomplete == FeatureStatus::Internal,
f if f == sym::generic_pattern_types =>
FeatureStatus::Incomplete == FeatureStatus::Internal,
f if f == sym::global_registration =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::guard_patterns =>
FeatureStatus::Incomplete == FeatureStatus::Internal,
f if f == sym::half_open_range_patterns_in_slices =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::hexagon_target_feature =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::impl_restriction =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::impl_trait_in_assoc_type =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::impl_trait_in_bindings =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::impl_trait_in_fn_trait_return =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::import_trait_associated_functions =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::inherent_associated_types =>
FeatureStatus::Incomplete == FeatureStatus::Internal,
f if f == sym::instrument_fn =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::intra_doc_pointers =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::lahfsahf_target_feature =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::large_assignments =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::link_arg_attribute =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::loongarch_target_feature =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::loop_hints =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::loop_match =>
FeatureStatus::Incomplete == FeatureStatus::Internal,
f if f == sym::m68k_target_feature =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::macro_attr =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::macro_derive =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::macro_guard_matcher =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::macro_metavar_expr =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::macro_metavar_expr_concat =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::marker_trait_attr =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::min_adt_const_params =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::min_specialization =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::mips_target_feature =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::more_qualified_paths =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::movdir64b_target_feature =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::movdiri_target_feature =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::move_expr =>
FeatureStatus::Incomplete == FeatureStatus::Internal,
f if f == sym::movrs_target_feature =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::multiple_supertrait_upcastable =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::must_not_suspend =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::mut_ref =>
FeatureStatus::Incomplete == FeatureStatus::Internal,
f if f == sym::mut_restriction =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::naked_functions_rustic_abi =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::naked_functions_target_feature =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::named_fn_trait_parameters =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::native_link_modifiers_as_needed =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::negative_impls =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::never_patterns =>
FeatureStatus::Incomplete == FeatureStatus::Internal,
f if f == sym::new_range =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::no_core =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::non_exhaustive_omitted_patterns_lint =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::non_lifetime_binders =>
FeatureStatus::Incomplete == FeatureStatus::Internal,
f if f == sym::nvptx_target_feature =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::offset_of_enum =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::offset_of_slice =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::patchable_function_entry =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::pin_ergonomics =>
FeatureStatus::Incomplete == FeatureStatus::Internal,
f if f == sym::postfix_match =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::powerpc_target_feature =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::prfchw_target_feature =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::proc_macro_hygiene =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::raw_dylib_elf =>
FeatureStatus::Incomplete == FeatureStatus::Internal,
f if f == sym::reborrow =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::ref_pat_eat_one_layer_2024 =>
FeatureStatus::Incomplete == FeatureStatus::Internal,
f if f == sym::ref_pat_eat_one_layer_2024_structural =>
FeatureStatus::Incomplete == FeatureStatus::Internal,
f if f == sym::register_tool =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::return_type_notation =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::riscv_target_feature =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::rtm_target_feature =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::rust_cold_cc =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::rust_preserve_none_cc =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::rust_tail_cc =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::s390x_target_feature =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::sanitize =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::simd_ffi =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::sparc_target_feature =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::specialization =>
FeatureStatus::Incomplete == FeatureStatus::Internal,
f if f == sym::splat =>
FeatureStatus::Incomplete == FeatureStatus::Internal,
f if f == sym::static_align =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::stmt_expr_attributes =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::strict_provenance_lints =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::super_let =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::supertrait_item_shadowing =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::thread_local =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::trait_alias =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::transmute_generic_consts =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::transparent_unions =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::trivial_bounds =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::try_blocks =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::try_blocks_heterogeneous =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::type_alias_impl_trait =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::type_changing_struct_update =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::unnamed_enum_variants =>
FeatureStatus::Incomplete == FeatureStatus::Internal,
f if f == sym::unsafe_binders =>
FeatureStatus::Incomplete == FeatureStatus::Internal,
f if f == sym::unsafe_fields =>
FeatureStatus::Incomplete == FeatureStatus::Internal,
f if f == sym::unsized_const_params =>
FeatureStatus::Incomplete == FeatureStatus::Internal,
f if f == sym::unsized_fn_params =>
FeatureStatus::Internal == FeatureStatus::Internal,
f if f == sym::used_with_arg =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::view_types =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::wasm_target_feature =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::where_clause_attrs =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::x86_amx_intrinsics =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::x87_target_feature =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::xop_target_feature =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::xtensa_target_feature =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::yeet_expr =>
FeatureStatus::Default == FeatureStatus::Internal,
f if f == sym::yield_expr =>
FeatureStatus::Default == FeatureStatus::Internal,
_ if self.enabled_features.contains(&feature) => {
let name = feature.as_str();
name == "core_intrinsics" || name.ends_with("_internal") ||
name.ends_with("_internals")
}
_ => {
::core::panicking::panic_fmt(format_args!("`{0}` was not listed in `declare_features`",
feature));
}
}
}
}declare_features! (
216 (internal, allocator_internals, "1.20.0", None),
223 (internal, allow_internal_unsafe, "1.0.0", None),
228 (internal, allow_internal_unstable, "1.0.0", None),
233 (unstable, anonymous_lifetime_in_impl_trait, "1.63.0", None),
235 (internal, cfg_target_has_reliable_f16_f128, "1.88.0", None),
237 (internal, cfg_target_has_reliable_f16b, "1.100.0", None),
239 (internal, cfg_target_has_threads, "1.99.0", None),
241 (internal, compiler_builtins, "1.13.0", None),
243 (internal, const_param_ty_unchecked, "1.97.0", None),
245 (internal, custom_mir, "1.65.0", None),
247 (internal, eii_internals, "1.94.0", None),
249 (internal, field_representing_type_raw, "1.96.0", None),
251 (unstable, generic_assert, "1.63.0", None),
253 (internal, intrinsics, "1.0.0", None),
255 (internal, lang_items, "1.0.0", None),
257 (internal, link_cfg, "1.14.0", None),
259 (internal, link_enzyme_intrinsics, "1.100.0", None),
261 (internal, more_maybe_bounds, "1.82.0", None),
263 (internal, negative_bounds, "1.71.0", None),
265 (internal, pattern_complexity_limit, "1.78.0", None),
267 (internal, prelude_import, "1.2.0", None),
269 (internal, profiler_runtime, "1.18.0", None),
271 (internal, rustc_attrs, "1.0.0", None),
273 (internal, staged_api, "1.0.0", None),
275 (internal, test_binder_constraints, "1.100.0", None),
277 (incomplete, test_incomplete_feature, "1.96.0", None),
279 (internal, test_unstable_lint, "1.60.0", None),
281 (unstable, with_negative_coherence, "1.60.0", None),
284 (unstable, abi_vectorcall, "1.7.0", Some(124485)),
299 (unstable, auto_traits, "1.50.0", Some(13231)),
302 (internal, builtin_syntax, "1.71.0", Some(110680)),
304 (unstable, doc_notable_trait, "1.52.0", Some(45040)),
307 (unstable, dropck_eyepatch, "1.10.0", Some(34761)),
309 (unstable, fundamental, "1.0.0", Some(29635)),
311 (internal, link_llvm_intrinsics, "1.0.0", Some(29602)),
313 (unstable, linkage, "1.0.0", Some(29603)),
315 (internal, needs_panic_runtime, "1.10.0", Some(32837)),
317 (internal, panic_runtime, "1.10.0", Some(32837)),
319 (internal, pattern_types, "1.79.0", Some(123646)),
321 (internal, repr_simd, "1.4.0", Some(27731)),
323 (unstable, rustc_private, "1.0.0", Some(27812)),
325 (internal, rustdoc_internals, "1.58.0", Some(90418)),
327 (unstable, rustdoc_missing_doc_code_examples, "1.31.0", Some(101730)),
329 (unstable, sized_hierarchy, "1.89.0", Some(144404)),
331 (unstable, structural_match, "1.8.0", Some(31434)),
335 (unstable, unboxed_closures, "1.0.0", Some(29625)),
337 (unstable, unqualified_local_imports, "1.83.0", Some(138299)),
339 (unstable, aarch64_unstable_target_feature, "1.82.0", Some(150244)),
353 (unstable, aarch64_ver_target_feature, "1.27.0", Some(150245)),
355 (unstable, abi_avr_interrupt, "1.45.0", Some(69664)),
357 (unstable, abi_cmse_nonsecure_call, "1.90.0", Some(81391)),
359 (unstable, abi_gpu_kernel, "1.86.0", Some(135467)),
361 (unstable, abi_msp430_interrupt, "1.16.0", Some(38487)),
363 (unstable, abi_ptx, "1.15.0", Some(38788)),
365 (unstable, abi_riscv_interrupt, "1.73.0", Some(111889)),
367 (unstable, abi_swift, "1.97.0", Some(156481)),
369 (unstable, abi_x86_interrupt, "1.17.0", Some(40180)),
371 (unstable, adt_const_params, "1.56.0", Some(95174)),
373 (unstable, alloc_error_handler, "1.29.0", Some(51540)),
375 (unstable, apx_target_feature, "1.88.0", Some(139284)),
377 (unstable, arbitrary_self_types, "1.23.0", Some(44874)),
379 (unstable, arbitrary_self_types_pointers, "1.83.0", Some(44874)),
381 (unstable, arm_target_feature, "1.27.0", Some(150246)),
383 (unstable, asm_const_ptr, "1.99.0", Some(128464)),
385 (unstable, asm_experimental_arch, "1.58.0", Some(93335)),
387 (unstable, asm_experimental_reg, "1.85.0", Some(133416)),
389 (unstable, asm_goto_with_outputs, "1.85.0", Some(119364)),
391 (unstable, asm_unwind, "1.58.0", Some(93334)),
393 (unstable, associated_type_defaults, "1.2.0", Some(29661)),
395 (incomplete, async_drop, "1.88.0", Some(126482)),
397 (incomplete, async_fn_in_dyn_trait, "1.85.0", Some(133119)),
399 (unstable, async_fn_track_caller, "1.73.0", Some(110011)),
401 (unstable, async_for_loop, "1.77.0", Some(118898)),
403 (unstable, async_trait_bounds, "1.85.0", Some(62290)),
405 (unstable, avr_target_feature, "1.95.0", Some(146889)),
407 (unstable, avx10_target_feature, "1.88.0", Some(138843)),
409 (unstable, bpf_target_feature, "1.54.0", Some(150247)),
411 (unstable, c_variadic_experimental_arch, "1.97.0", Some(155973)),
414 (unstable, cfg_contract_checks, "1.86.0", Some(128044)),
416 (unstable, cfg_overflow_checks, "1.71.0", Some(111466)),
418 (unstable, cfg_relocation_model, "1.73.0", Some(114929)),
420 (unstable, cfg_sanitize, "1.41.0", Some(39699)),
422 (unstable, cfg_sanitizer_cfi, "1.77.0", Some(89653)),
424 (unstable, cfg_target_compact, "1.63.0", Some(96901)),
426 (unstable, cfg_target_has_atomic, "1.60.0", Some(94039)),
428 (unstable, cfg_target_object_format, "1.97.0", Some(152586)),
430 (unstable, cfg_target_thread_local, "1.7.0", Some(29594)),
432 (unstable, cfg_ub_checks, "1.79.0", Some(123499)),
434 (unstable, cfg_version, "1.45.0", Some(64796)),
436 (unstable, cfi_encoding, "1.71.0", Some(89653)),
438 (incomplete, checked_type_aliases, "1.99.0", Some(112792)),
440 (unstable, clflushopt_target_feature, "1.98.0", Some(157096)),
442 (unstable, closure_lifetime_binder, "1.64.0", Some(97362)),
444 (unstable, closure_track_caller, "1.57.0", Some(87417)),
446 (unstable, cmse_nonsecure_entry, "1.48.0", Some(75835)),
448 (unstable, const_async_blocks, "1.53.0", Some(85368)),
450 (unstable, const_block_items, "1.95.0", Some(149226)),
452 (unstable, const_c_variadic, "1.95.0", Some(151787)),
454 (unstable, const_closures, "1.68.0", Some(106003)),
456 (unstable, const_destruct, "1.85.0", Some(133214)),
458 (unstable, const_for, "1.56.0", Some(87575)),
460 (unstable, const_precise_live_drops, "1.46.0", Some(73255)),
462 (unstable, const_trait_impl, "1.42.0", Some(143874)),
464 (unstable, const_try, "1.56.0", Some(74935)),
466 (incomplete, contracts, "1.86.0", Some(128044)),
468 (internal, contracts_internals, "1.86.0", Some(128044)),
470 (unstable, coroutine_clone, "1.65.0", Some(95360)),
472 (unstable, coroutines, "1.21.0", Some(43122)),
474 (unstable, coverage_attribute, "1.74.0", Some(84605)),
477 (unstable, csky_target_feature, "1.73.0", Some(150248)),
479 (unstable, custom_inner_attributes, "1.30.0", Some(54726)),
481 (unstable, custom_test_frameworks, "1.30.0", Some(50297)),
483 (unstable, decl_macro, "1.17.0", Some(39412)),
485 (unstable, default_field_values, "1.85.0", Some(132162)),
488 (unstable, deprecated_suggestion, "1.61.0", Some(94785)),
490 (unstable, deref_patterns, "1.79.0", Some(87121)),
492 (unstable, derive_from, "1.91.0", Some(144889)),
494 (unstable, diagnostic_on_const, "1.93.0", Some(143874)),
496 (unstable, diagnostic_on_move, "1.96.0", Some(154181)),
498 (unstable, diagnostic_on_type_error, "1.98.0", Some(155382)),
500 (unstable, diagnostic_on_unknown, "1.96.0", Some(152900)),
502 (unstable, diagnostic_on_unmatched_args, "1.97.0", Some(155642)),
504 (unstable, diagnostic_opaque, "1.99.0", Some(158813)),
506 (unstable, doc_cfg, "1.21.0", Some(43781)),
508 (unstable, doc_masked, "1.21.0", Some(44027)),
510 (incomplete, effective_target_features, "1.91.0", Some(143352)),
512 (incomplete, ergonomic_clones, "1.87.0", Some(132290)),
514 (unstable, ermsb_target_feature, "1.49.0", Some(150249)),
516 (unstable, exhaustive_patterns, "1.13.0", Some(51085)),
518 (unstable, explicit_extern_abis, "1.88.0", Some(134986)),
520 (incomplete, explicit_tail_calls, "1.72.0", Some(112788)),
522 (incomplete, export_stable, "1.88.0", Some(139939)),
524 (incomplete, extern_item_impls, "1.94.0", Some(125418)),
526 (unstable, extern_types, "1.23.0", Some(43467)),
528 (unstable, f128, "1.78.0", Some(116909)),
530 (unstable, f16, "1.78.0", Some(116909)),
532 (unstable, f16b, "1.100.0", Some(160630)),
534 (unstable, ffi_const, "1.45.0", Some(58328)),
536 (unstable, ffi_pure, "1.45.0", Some(58329)),
538 (incomplete, field_projections, "1.96.0", Some(145383)),
540 (unstable, final_associated_functions, "1.95.0", Some(131179)),
542 (unstable, fma4_target_feature, "1.97.0", Some(155233)),
544 (unstable, fmt_debug, "1.82.0", Some(129709)),
546 (unstable, fn_align, "1.53.0", Some(82232)),
548 (incomplete, fn_delegation, "1.76.0", Some(118212)),
550 (unstable, fn_static, "1.100.0", Some(148768)),
552 (unstable, forced_keywords, "CURRENT_RUSTC_VERSION", Some(153839)),
554 (internal, freeze_impls, "1.78.0", Some(121675)),
556 (unstable, frontmatter, "1.88.0", Some(136889)),
558 (incomplete, gca_adts, "CURRENT_RUSTC_VERSION", Some(163420)),
560 (incomplete, gca_const_items, "1.95.0", Some(151972)),
562 (incomplete, gca_macroless_args, "1.99.0", Some(159006)),
564 (incomplete, gca_macroless_items, "1.100.0", Some(162540)),
567 (incomplete, gca_min_const_items, "1.84.0", Some(132980)),
570 (unstable, gen_blocks, "1.75.0", Some(117078)),
572 (incomplete, generic_const_exprs, "1.56.0", Some(76560)),
575 (incomplete, generic_const_items, "1.73.0", Some(113521)),
577 (incomplete, generic_const_parameter_types, "1.87.0", Some(137626)),
579 (incomplete, generic_pattern_types, "1.86.0", Some(136574)),
581 (unstable, global_registration, "1.80.0", Some(125119)),
584 (incomplete, guard_patterns, "1.85.0", Some(129967)),
586 (unstable, half_open_range_patterns_in_slices, "1.66.0", Some(67264)),
588 (unstable, hexagon_target_feature, "1.27.0", Some(150250)),
590 (unstable, impl_restriction, "1.97.0", Some(105077)),
592 (unstable, impl_trait_in_assoc_type, "1.70.0", Some(63063)),
594 (unstable, impl_trait_in_bindings, "1.64.0", Some(63065)),
596 (unstable, impl_trait_in_fn_trait_return, "1.64.0", Some(99697)),
598 (unstable, import_trait_associated_functions, "1.86.0", Some(134691)),
600 (incomplete, inherent_associated_types, "1.52.0", Some(8995)),
602 (unstable, instrument_fn, "1.98.0", Some(157081)),
604 (unstable, intra_doc_pointers, "1.51.0", Some(80896)),
606 (unstable, lahfsahf_target_feature, "1.78.0", Some(150251)),
608 (unstable, large_assignments, "1.52.0", Some(83518)),
610 (unstable, link_arg_attribute, "1.76.0", Some(99427)),
613 (unstable, loongarch_target_feature, "1.73.0", Some(150252)),
615 (unstable, loop_hints, "1.98.0", Some(156874)),
617 (incomplete, loop_match, "1.90.0", Some(132306)),
619 (unstable, m68k_target_feature, "1.85.0", Some(134328)),
621 (unstable, macro_attr, "1.91.0", Some(143547)),
623 (unstable, macro_derive, "1.91.0", Some(143549)),
625 (unstable, macro_guard_matcher, "1.96.0", Some(153104)),
627 (unstable, macro_metavar_expr, "1.61.0", Some(83527)),
629 (unstable, macro_metavar_expr_concat, "1.81.0", Some(124225)),
631 (unstable, marker_trait_attr, "1.30.0", Some(29864)),
633 (unstable, min_adt_const_params, "1.96.0", Some(154042)),
636 (unstable, min_specialization, "1.7.0", Some(31844)),
640 (unstable, mips_target_feature, "1.27.0", Some(150253)),
642 (unstable, more_qualified_paths, "1.54.0", Some(86935)),
644 (unstable, movdir64b_target_feature, "CURRENT_RUSTC_VERSION", Some(163741)),
646 (unstable, movdiri_target_feature, "CURRENT_RUSTC_VERSION", Some(163741)),
648 (incomplete, move_expr, "1.97.0", Some(155050)),
650 (unstable, movrs_target_feature, "1.88.0", Some(137976)),
652 (unstable, multiple_supertrait_upcastable, "1.69.0", Some(150833)),
654 (unstable, must_not_suspend, "1.57.0", Some(83310)),
656 (incomplete, mut_ref, "1.79.0", Some(123076)),
658 (unstable, mut_restriction, "1.99.0", Some(105077)),
660 (unstable, naked_functions_rustic_abi, "1.88.0", Some(138997)),
662 (unstable, naked_functions_target_feature, "1.86.0", Some(138568)),
664 (unstable, named_fn_trait_parameters, "1.99.0", Some(158499)),
666 (unstable, native_link_modifiers_as_needed, "1.53.0", Some(81490)),
668 (unstable, negative_impls, "1.44.0", Some(68318)),
670 (incomplete, never_patterns, "1.76.0", Some(118155)),
672 (unstable, new_range, "1.86.0", Some(123741)),
674 (unstable, no_core, "1.3.0", Some(29639)),
676 (unstable, non_exhaustive_omitted_patterns_lint, "1.57.0", Some(89554)),
678 (incomplete, non_lifetime_binders, "1.69.0", Some(108185)),
680 (unstable, nvptx_target_feature, "1.91.0", Some(150254)),
682 (unstable, offset_of_enum, "1.75.0", Some(120141)),
684 (unstable, offset_of_slice, "1.81.0", Some(126151)),
686 (unstable, patchable_function_entry, "1.81.0", Some(123115)),
688 (incomplete, pin_ergonomics, "1.83.0", Some(130494)),
690 (unstable, postfix_match, "1.79.0", Some(121618)),
692 (unstable, powerpc_target_feature, "1.27.0", Some(150255)),
694 (unstable, prfchw_target_feature, "1.78.0", Some(150256)),
696 (unstable, proc_macro_hygiene, "1.30.0", Some(54727)),
698 (incomplete, raw_dylib_elf, "1.87.0", Some(135694)),
700 (unstable, reborrow, "1.91.0", Some(145612)),
702 (incomplete, ref_pat_eat_one_layer_2024, "1.79.0", Some(123076)),
704 (incomplete, ref_pat_eat_one_layer_2024_structural, "1.81.0", Some(123076)),
707 (unstable, register_tool, "1.41.0", Some(66079)),
709 (unstable, return_type_notation, "1.70.0", Some(109417)),
711 (unstable, riscv_target_feature, "1.45.0", Some(150257)),
713 (unstable, rtm_target_feature, "1.35.0", Some(150258)),
715 (unstable, rust_cold_cc, "1.63.0", Some(97544)),
717 (unstable, rust_preserve_none_cc, "1.95.0", Some(151401)),
719 (unstable, rust_tail_cc, "1.98.0", Some(157427)),
721 (unstable, s390x_target_feature, "1.82.0", Some(150259)),
723 (unstable, sanitize, "1.91.0", Some(39699)),
725 (unstable, simd_ffi, "1.0.0", Some(27731)),
727 (unstable, sparc_target_feature, "1.84.0", Some(132783)),
729 (incomplete, specialization, "1.7.0", Some(31844)),
731 (incomplete, splat, "1.98.0", Some(153629)),
734 (unstable, static_align, "1.91.0", Some(146177)),
736 (unstable, stmt_expr_attributes, "1.6.0", Some(15701)),
738 (unstable, strict_provenance_lints, "1.61.0", Some(130351)),
740 (unstable, super_let, "1.88.0", Some(139076)),
742 (unstable, supertrait_item_shadowing, "1.86.0", Some(89151)),
744 (unstable, thread_local, "1.0.0", Some(29594)),
746 (unstable, trait_alias, "1.24.0", Some(41517)),
748 (unstable, transmute_generic_consts, "1.70.0", Some(109929)),
750 (unstable, transparent_unions, "1.37.0", Some(60405)),
752 (unstable, trivial_bounds, "1.28.0", Some(48214)),
754 (unstable, try_blocks, "1.29.0", Some(154391)),
756 (unstable, try_blocks_heterogeneous, "1.94.0", Some(149488)),
758 (unstable, type_alias_impl_trait, "1.38.0", Some(63063)),
760 (unstable, type_changing_struct_update, "1.58.0", Some(86555)),
763 (incomplete, unnamed_enum_variants, "1.98.0", Some(156628)),
765 (incomplete, unsafe_binders, "1.85.0", Some(130516)),
767 (incomplete, unsafe_fields, "1.85.0", Some(132922)),
769 (incomplete, unsized_const_params, "1.82.0", Some(95174)),
772 (internal, unsized_fn_params, "1.49.0", Some(48055)),
774 (unstable, used_with_arg, "1.60.0", Some(93798)),
776 (unstable, view_types, "1.97.0", Some(155938)),
778 (unstable, wasm_target_feature, "1.30.0", Some(150260)),
780 (unstable, where_clause_attrs, "1.87.0", Some(115590)),
782 (unstable, x86_amx_intrinsics, "1.81.0", Some(126622)),
784 (unstable, x87_target_feature, "1.85.0", Some(150261)),
786 (unstable, xop_target_feature, "1.81.0", Some(127208)),
788 (unstable, xtensa_target_feature, "1.98.0", Some(157063)),
790 (unstable, yeet_expr, "1.62.0", Some(96373)),
792 (unstable, yield_expr, "1.87.0", Some(43122)),
794 );
802
803impl Features {
804 pub fn dump_feature_usage_metrics(
805 &self,
806 metrics_path: PathBuf,
807 ) -> Result<(), Box<dyn std::error::Error>> {
808 #[derive(#[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for LibFeature {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
let mut __serde_state =
_serde::Serializer::serialize_struct(__serializer,
"LibFeature", false as usize + 1 + 1)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"timestamp", &self.timestamp)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"symbol", &self.symbol)?;
_serde::ser::SerializeStruct::end(__serde_state)
}
}
};serde::Serialize)]
809 struct LibFeature {
810 timestamp: u128,
811 symbol: String,
812 }
813
814 #[derive(#[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for LangFeature {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
let mut __serde_state =
_serde::Serializer::serialize_struct(__serializer,
"LangFeature", false as usize + 1 + 1 + 1)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"timestamp", &self.timestamp)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"symbol", &self.symbol)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"since", &self.since)?;
_serde::ser::SerializeStruct::end(__serde_state)
}
}
};serde::Serialize)]
815 struct LangFeature {
816 timestamp: u128,
817 symbol: String,
818 since: Option<String>,
819 }
820
821 #[derive(#[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for FeatureUsage {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
let mut __serde_state =
_serde::Serializer::serialize_struct(__serializer,
"FeatureUsage", false as usize + 1 + 1)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"lib_features", &self.lib_features)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"lang_features", &self.lang_features)?;
_serde::ser::SerializeStruct::end(__serde_state)
}
}
};serde::Serialize)]
822 struct FeatureUsage {
823 lib_features: Vec<LibFeature>,
824 lang_features: Vec<LangFeature>,
825 }
826
827 let metrics_file = std::fs::File::create(metrics_path)?;
828 let metrics_file = std::io::BufWriter::new(metrics_file);
829
830 let now = || {
831 SystemTime::now()
832 .duration_since(UNIX_EPOCH)
833 .expect("system time should always be greater than the unix epoch")
834 .as_nanos()
835 };
836
837 let lib_features = self
838 .enabled_lib_features
839 .iter()
840 .map(|EnabledLibFeature { gate_name, .. }| LibFeature {
841 symbol: gate_name.to_string(),
842 timestamp: now(),
843 })
844 .collect();
845
846 let lang_features = self
847 .enabled_lang_features
848 .iter()
849 .map(|EnabledLangFeature { gate_name, stable_since, .. }| LangFeature {
850 symbol: gate_name.to_string(),
851 since: stable_since.map(|since| since.to_string()),
852 timestamp: now(),
853 })
854 .collect();
855
856 let feature_usage = FeatureUsage { lib_features, lang_features };
857
858 serde_json::to_writer(metrics_file, &feature_usage)?;
859
860 Ok(())
861 }
862}
863
864pub const INCOMPATIBLE_FEATURES: &[(Symbol, Symbol)] = &[
868 (sym::ref_pat_eat_one_layer_2024, sym::ref_pat_eat_one_layer_2024_structural),
871];
872
873pub enum DependentFeature {
874 And(&'static [DependentFeature]),
875 Or(&'static [DependentFeature]),
876 Leaf(Symbol),
877}
878
879pub const DEPENDENT_FEATURES: &[(Symbol, DependentFeature)] = &[
881 (
883 sym::gca_adts,
884 DependentFeature::Or(&[
885 DependentFeature::Leaf(sym::min_adt_const_params),
886 DependentFeature::Leaf(sym::adt_const_params),
887 ]),
888 ),
889 (sym::gca_const_items, DependentFeature::Leaf(sym::gca_min_const_items)),
890 (sym::gca_macroless_args, DependentFeature::Leaf(sym::gca_min_const_items)),
891 (sym::gca_macroless_items, DependentFeature::Leaf(sym::gca_min_const_items)),
892 (sym::unsized_const_params, DependentFeature::Leaf(sym::adt_const_params)),
893 ];