pub struct Features {
Show 185 fields pub declared_lang_features: Vec<(Symbol, Span, Option<Symbol>)>, pub declared_lib_features: Vec<(Symbol, Span)>, pub active_features: FxHashSet<Symbol>, pub abi_thiscall: bool, pub abi_unadjusted: bool, pub abi_vectorcall: bool, pub allocator_internals: bool, pub allow_internal_unsafe: bool, pub allow_internal_unstable: bool, pub compiler_builtins: bool, pub intrinsics: bool, pub lang_items: bool, pub no_niche: bool, pub omit_gdb_pretty_printer_section: bool, pub prelude_import: bool, pub profiler_runtime: bool, pub rustc_attrs: bool, pub staged_api: bool, pub test_2018_feature: bool, pub test_unstable_lint: bool, pub unsafe_pin_internals: bool, pub with_negative_coherence: bool, pub auto_traits: bool, pub box_patterns: bool, pub box_syntax: bool, pub doc_notable_trait: bool, pub dropck_eyepatch: bool, pub fundamental: bool, pub link_llvm_intrinsics: bool, pub linkage: bool, pub needs_panic_runtime: bool, pub panic_runtime: bool, pub rustc_allow_const_fn_unstable: bool, pub rustc_private: bool, pub rustdoc_internals: bool, pub start: bool, pub structural_match: bool, pub unboxed_closures: bool, pub aarch64_ver_target_feature: bool, pub arm_target_feature: bool, pub avx512_target_feature: bool, pub bpf_target_feature: bool, pub cmpxchg16b_target_feature: bool, pub ermsb_target_feature: bool, pub f16c_target_feature: bool, pub hexagon_target_feature: bool, pub mips_target_feature: bool, pub movbe_target_feature: bool, pub powerpc_target_feature: bool, pub riscv_target_feature: bool, pub rtm_target_feature: bool, pub sse4a_target_feature: bool, pub tbm_target_feature: bool, pub wasm_target_feature: bool, pub abi_amdgpu_kernel: bool, pub abi_avr_interrupt: bool, pub abi_c_cmse_nonsecure_call: bool, pub abi_efiapi: bool, pub abi_msp430_interrupt: bool, pub abi_ptx: bool, pub abi_x86_interrupt: bool, pub adt_const_params: bool, pub alloc_error_handler: bool, pub arbitrary_enum_discriminant: bool, pub arbitrary_self_types: bool, pub asm_const: bool, pub asm_experimental_arch: bool, pub asm_sym: bool, pub asm_unwind: bool, pub associated_const_equality: bool, pub associated_type_bounds: bool, pub associated_type_defaults: bool, pub async_closure: bool, pub c_unwind: bool, pub c_variadic: bool, pub capture_disjoint_fields: bool, pub cfg_sanitize: bool, pub cfg_target_abi: bool, pub cfg_target_has_atomic: bool, pub cfg_target_has_atomic_equal_alignment: bool, pub cfg_target_thread_local: bool, pub cfg_version: bool, pub closure_track_caller: bool, pub cmse_nonsecure_entry: bool, pub const_async_blocks: bool, pub const_eval_limit: bool, pub const_extern_fn: bool, pub const_fn_floating_point_arithmetic: bool, pub const_for: bool, pub const_mut_refs: bool, pub const_precise_live_drops: bool, pub const_refs_to_cell: bool, pub const_trait_impl: bool, pub const_try: bool, pub custom_inner_attributes: bool, pub custom_test_frameworks: bool, pub debugger_visualizer: bool, pub decl_macro: bool, pub default_alloc_error_handler: bool, pub default_type_parameter_fallback: bool, pub deprecated_safe: bool, pub deprecated_suggestion: bool, pub doc_auto_cfg: bool, pub doc_cfg: bool, pub doc_cfg_hide: bool, pub doc_masked: bool, pub exclusive_range_pattern: bool, pub exhaustive_patterns: bool, pub explicit_generic_args_with_impl_trait: bool, pub extern_types: bool, pub ffi_const: bool, pub ffi_pure: bool, pub ffi_returns_twice: bool, pub fn_align: bool, pub generators: bool, pub generic_arg_infer: bool, pub generic_associated_types: bool, pub generic_associated_types_extended: bool, pub generic_const_exprs: bool, pub half_open_range_patterns: bool, pub if_let_guard: bool, pub imported_main: bool, pub infer_static_outlives_requirements: bool, pub inherent_associated_types: bool, pub inline_const: bool, pub inline_const_pat: bool, pub intra_doc_pointers: bool, pub isa_attribute: bool, pub label_break_value: bool, pub large_assignments: bool, pub let_chains: bool, pub let_else: bool, pub link_cfg: bool, pub lint_reasons: bool, pub macro_metavar_expr: bool, pub marker_trait_attr: bool, pub min_specialization: bool, pub more_qualified_paths: bool, pub must_not_suspend: bool, pub naked_functions: bool, pub native_link_modifiers_as_needed: bool, pub native_link_modifiers_bundle: bool, pub native_link_modifiers_verbatim: bool, pub negative_impls: bool, pub never_type: bool, pub never_type_fallback: bool, pub nll: bool, pub no_core: bool, pub no_coverage: bool, pub no_sanitize: bool, pub non_exhaustive_omitted_patterns_lint: bool, pub object_safe_for_dispatch: bool, pub optimize_attribute: bool, pub platform_intrinsics: bool, pub plugin: bool, pub precise_pointer_size_matching: bool, pub proc_macro_hygiene: bool, pub raw_dylib: bool, pub raw_ref_op: bool, pub register_attr: bool, pub register_tool: bool, pub repr128: bool, pub repr_simd: bool, pub simd_ffi: bool, pub specialization: bool, pub static_nobundle: bool, pub stmt_expr_attributes: bool, pub strict_provenance: bool, pub target_feature_11: bool, pub thread_local: bool, pub trait_alias: bool, pub trait_upcasting: bool, pub transparent_unions: bool, pub trivial_bounds: bool, pub try_blocks: bool, pub type_alias_impl_trait: bool, pub type_ascription: bool, pub type_changing_struct_update: bool, pub unsized_fn_params: bool, pub unsized_locals: bool, pub unsized_tuple_coercion: bool, pub untagged_unions: bool, pub used_with_arg: bool, pub wasm_abi: bool, pub yeet_expr: bool,
Expand description

A set of features to be used by later passes.


declared_lang_features: Vec<(Symbol, Span, Option<Symbol>)>

#![feature] attrs for language features, for error reporting.

declared_lib_features: Vec<(Symbol, Span)>

#![feature] attrs for non-language (library) features.

active_features: FxHashSet<Symbol>

Features enabled for this crate.

abi_thiscall: bool

Allows using the thiscall ABI.

abi_unadjusted: bool

Allows using the unadjusted ABI; perma-unstable.

abi_vectorcall: bool

Allows using the vectorcall ABI.

allocator_internals: bool

Allows using #![needs_allocator], an implementation detail of #[global_allocator].

allow_internal_unsafe: bool

Allows using #[allow_internal_unsafe]. This is an attribute on macro_rules! and can’t use the attribute handling below (it has to be checked before expansion possibly makes macros disappear).

allow_internal_unstable: bool

Allows using #[allow_internal_unstable]. This is an attribute on macro_rules! and can’t use the attribute handling below (it has to be checked before expansion possibly makes macros disappear).

compiler_builtins: bool

Allows identifying the compiler_builtins crate.

intrinsics: bool

Allows using the rust-intrinsic’s “ABI”.

lang_items: bool

Allows using #[lang = ".."] attribute for linking items to special compiler logic.

no_niche: bool

Allows #[repr(no_niche)] (an implementation detail of rustc, it is not on path for eventual stabilization).

omit_gdb_pretty_printer_section: bool

Allows using #[omit_gdb_pretty_printer_section].

prelude_import: bool

Allows using #[prelude_import] on glob use items.

profiler_runtime: bool

Used to identify crates that contain the profiler runtime.

rustc_attrs: bool

Allows using rustc_* attributes (RFC 572).

staged_api: bool

Allows using the #[stable] and #[unstable] attributes.

test_2018_feature: bool

Added for testing E0705; perma-unstable.

test_unstable_lint: bool

Added for testing unstable lints; perma-unstable.

unsafe_pin_internals: bool

Allows non-unsafe —and thus, unsound— access to Pin constructions. Marked incomplete since perma-unstable and unsound.

with_negative_coherence: bool

Use for stable + negative coherence and strict coherence depending on trait’s rustc_strict_coherence value.

auto_traits: bool

Allows features specific to auto traits. Renamed from optin_builtin_traits.

box_patterns: bool

Allows using box in patterns (RFC 469).

box_syntax: bool

Allows using the box $expr syntax.

doc_notable_trait: bool

Allows #[doc(notable_trait)]. Renamed from doc_spotlight.

dropck_eyepatch: bool

Allows using the may_dangle attribute (RFC 1327).

fundamental: bool

Allows using the #[fundamental] attribute.

link_llvm_intrinsics: bool

Allows using #[link_name="llvm.*"].

linkage: bool

Allows using the #[linkage = ".."] attribute.

needs_panic_runtime: bool

Allows declaring with #![needs_panic_runtime] that a panic runtime is needed.

panic_runtime: bool

Allows using the #![panic_runtime] attribute.

rustc_allow_const_fn_unstable: bool

Allows using #[rustc_allow_const_fn_unstable]. This is an attribute on const fn for the same purpose as #[allow_internal_unstable].

rustc_private: bool

Allows using compiler’s own crates.

rustdoc_internals: bool

Allows using internal rustdoc features like doc(primitive) or doc(keyword).

start: bool

Allows using #[start] on a function indicating that it is the program entrypoint.

structural_match: bool

Allows using #[structural_match] which indicates that a type is structurally matchable. FIXME: Subsumed by trait StructuralPartialEq, cannot move to removed until a library feature with the same name exists.

unboxed_closures: bool

Allows using the rust-call ABI.

aarch64_ver_target_feature: boolarm_target_feature: boolavx512_target_feature: boolbpf_target_feature: boolcmpxchg16b_target_feature: boolermsb_target_feature: boolf16c_target_feature: boolhexagon_target_feature: boolmips_target_feature: boolmovbe_target_feature: boolpowerpc_target_feature: boolriscv_target_feature: boolrtm_target_feature: boolsse4a_target_feature: booltbm_target_feature: boolwasm_target_feature: boolabi_amdgpu_kernel: bool

Allows using the amdgpu-kernel ABI.

abi_avr_interrupt: bool

Allows extern "avr-interrupt" fn() and extern "avr-non-blocking-interrupt" fn().

abi_c_cmse_nonsecure_call: bool

Allows extern "C-cmse-nonsecure-call" fn().

abi_efiapi: bool

Allows using the efiapi ABI.

abi_msp430_interrupt: bool

Allows extern "msp430-interrupt" fn().

abi_ptx: bool

Allows extern "ptx-*" fn().

abi_x86_interrupt: bool

Allows extern "x86-interrupt" fn().

adt_const_params: bool

Allows additional const parameter types, such as &'static str or user defined types

alloc_error_handler: bool

Allows defining an #[alloc_error_handler].

arbitrary_enum_discriminant: bool

Allows explicit discriminants on non-unit enum variants.

arbitrary_self_types: bool

Allows trait methods with arbitrary self types.

asm_const: bool

Allows using const operands in inline assembly.

asm_experimental_arch: bool

Enables experimental inline assembly support for additional architectures.

asm_sym: bool

Allows using sym operands in inline assembly.

asm_unwind: bool

Allows the may_unwind option in inline assembly.

associated_const_equality: bool

Allows users to enforce equality of associated constants TraitImpl<AssocConst=3>.

associated_type_bounds: bool

Allows the user of associated type bounds.

associated_type_defaults: bool

Allows associated type defaults.

async_closure: bool

Allows async || body closures.

c_unwind: bool

Allows extern "C-unwind" fn to enable unwinding across ABI boundaries.

c_variadic: bool

Allows using C-variadics.

capture_disjoint_fields: bool

Allows capturing disjoint fields in a closure/generator (RFC 2229).

cfg_sanitize: bool

Allows the use of #[cfg(sanitize = "option")]; set when -Zsanitizer is used.

cfg_target_abi: bool

Allows cfg(target_abi = "...").

cfg_target_has_atomic: bool

Allows cfg(target_has_atomic_load_store = "...").

cfg_target_has_atomic_equal_alignment: bool

Allows cfg(target_has_atomic_equal_alignment = "...").

cfg_target_thread_local: bool

Allows cfg(target_thread_local).

cfg_version: bool

Allow conditional compilation depending on rust version

closure_track_caller: bool

Allows #[track_caller] on closures and generators.

cmse_nonsecure_entry: bool

Allows to use the #[cmse_nonsecure_entry] attribute.

const_async_blocks: bool

Allows async {} expressions in const contexts.

const_eval_limit: boolconst_extern_fn: bool

Allows the definition of const extern fn and const unsafe extern fn.

const_fn_floating_point_arithmetic: bool

Allows basic arithmetic on floating point types in a const fn.

const_for: bool

Allows for _ in _ loops in const contexts.

const_mut_refs: bool

Allows using &mut in constant functions.

const_precise_live_drops: bool

Be more precise when looking for live drops in a const context.

const_refs_to_cell: bool

Allows references to types with interior mutability within constants

const_trait_impl: bool

Allows impl const Trait for T syntax.

const_try: bool

Allows the ? operator in const contexts.

custom_inner_attributes: bool

Allows non-builtin attributes in inner attribute position.

custom_test_frameworks: bool

Allows custom test frameworks with #![test_runner] and #[test_case].

debugger_visualizer: bool

Allows using #[debugger_visualizer].

decl_macro: bool

Allows declarative macros 2.0 (macro).

default_alloc_error_handler: bool

Allows rustc to inject a default alloc_error_handler

default_type_parameter_fallback: bool

Allows default type parameters to influence type inference.

deprecated_safe: bool

Allows using #[deprecated_safe] to deprecate the safeness of a function or trait

deprecated_suggestion: bool

Allows having using suggestion in the #[deprecated] attribute.

doc_auto_cfg: bool

Tells rustdoc to automatically generate #[doc(cfg(...))].

doc_cfg: bool

Allows #[doc(cfg(...))].

doc_cfg_hide: bool

Allows #[doc(cfg_hide(...))].

doc_masked: bool

Allows #[doc(masked)].

exclusive_range_pattern: bool

Allows X..Y patterns.

exhaustive_patterns: bool

Allows exhaustive pattern matching on types that contain uninhabited types.

explicit_generic_args_with_impl_trait: bool

Allows explicit generic arguments specification with impl Trait present.

extern_types: bool

Allows defining extern types.

ffi_const: bool

Allows the use of #[ffi_const] on foreign functions.

ffi_pure: bool

Allows the use of #[ffi_pure] on foreign functions.

ffi_returns_twice: bool

Allows using #[ffi_returns_twice] on foreign functions.

fn_align: bool

Allows using #[repr(align(...))] on function items

generators: bool

Allows defining generators.

generic_arg_infer: bool

Infer generic args for both consts and types.

generic_associated_types: bool

Allows associated types to be generic, e.g., type Foo<T>; (RFC 1598).

generic_associated_types_extended: bool

An extension to the generic_associated_types feature, allowing incomplete features.

generic_const_exprs: bool

Allows non-trivial generic constants which have to have wfness manually propagated to callers

half_open_range_patterns: bool

Allows using ..X, ..=X, ...X, and X.. as a pattern.

if_let_guard: bool

Allows if let guard in match arms.

imported_main: bool

Allows using imported main function

infer_static_outlives_requirements: bool

Allows inferring 'static outlives requirements (RFC 2093).

inherent_associated_types: bool

Allows associated types in inherent impls.

inline_const: bool

Allow anonymous constants from an inline const block

inline_const_pat: bool

Allow anonymous constants from an inline const block in pattern position

intra_doc_pointers: bool

Allows using pointer and reference in intra-doc links

isa_attribute: bool

Allows #[instruction_set(_)] attribute

label_break_value: bool

Allows 'a: { break 'a; }.

large_assignments: boollet_chains: bool

Allows if/while p && let q = r && ... chains.

let_else: bool

Allows let...else statements.

link_cfg: bool

Allows #[link(..., cfg(..))].

lint_reasons: bool

Allows using reason in lint attributes and the #[expect(lint)] lint check.

macro_metavar_expr: bool

Give access to additional metadata about declarative macro meta-variables.

marker_trait_attr: bool

Allows #[marker] on certain traits allowing overlapping implementations.

min_specialization: bool

A minimal, sound subset of specialization intended to be used by the standard library until the soundness issues with specialization are fixed.

more_qualified_paths: bool

Allows qualified paths in struct expressions, struct patterns and tuple struct patterns.

must_not_suspend: bool

Allows the #[must_not_suspend] attribute.

naked_functions: bool

Allows using #[naked] on functions.

native_link_modifiers_as_needed: bool

Allows specifying the as-needed link modifier

native_link_modifiers_bundle: bool

Allows specifying the bundle link modifier

native_link_modifiers_verbatim: bool

Allows specifying the verbatim link modifier

negative_impls: bool

Allow negative trait implementations.

never_type: bool

Allows the ! type. Does not imply ‘exhaustive_patterns’ (below) any more.

never_type_fallback: bool

Allows diverging expressions to fall back to ! rather than ().

nll: bool

Allows using non lexical lifetimes (RFC 2094).

no_core: bool

Allows #![no_core].

no_coverage: bool

Allows function attribute #[no_coverage], to bypass coverage instrumentation of that function.

no_sanitize: bool

Allows the use of no_sanitize attribute.

non_exhaustive_omitted_patterns_lint: bool

Allows using the non_exhaustive_omitted_patterns lint.

object_safe_for_dispatch: bool

Allows making dyn Trait well-formed even if Trait is not object safe. In that case, dyn Trait: Trait does not hold. Moreover, coercions and casts in safe Rust to dyn Trait for such a Trait is also forbidden.

optimize_attribute: bool

Allows using #[optimize(X)].

platform_intrinsics: bool

Allows extern "platform-intrinsic" { ... }.

plugin: bool

Allows using #![plugin(myplugin)].

precise_pointer_size_matching: bool

Allows exhaustive integer pattern matching on usize and isize.

proc_macro_hygiene: bool

Allows macro attributes on expressions, statements and non-inline modules.

raw_dylib: bool

Allows the use of raw-dylibs (RFC 2627).

raw_ref_op: bool

Allows &raw const $place_expr and &raw mut $place_expr expressions.

register_attr: bool

Allows using the #[register_attr] attribute.

register_tool: bool

Allows using the #[register_tool] attribute.

repr128: bool

Allows the #[repr(i128)] attribute for enums.

repr_simd: bool

Allows repr(simd) and importing the various simd intrinsics.

simd_ffi: bool

Allows the use of SIMD types in functions declared in extern blocks.

specialization: bool

Allows specialization of implementations (RFC 1210).

static_nobundle: bool

Allows #[link(kind="static-nobundle"...)].

stmt_expr_attributes: bool

Allows attributes on expressions and non-item statements.

strict_provenance: bool

Allows lints part of the strict provenance effort.

target_feature_11: bool

Allows the use of #[target_feature] on safe functions.

thread_local: bool

Allows using #[thread_local] on static items.

trait_alias: bool

Allows defining trait X = A + B; alias items.

trait_upcasting: bool

Allows upcasting trait objects via supertraits. Trait upcasting is casting, e.g., dyn Foo -> dyn Bar where Foo: Bar.

transparent_unions: bool

Allows #[repr(transparent)] on unions (RFC 2645).

trivial_bounds: bool

Allows inconsistent bounds in where clauses.

try_blocks: bool

Allows using try {...} expressions.

type_alias_impl_trait: bool

Allows impl Trait to be used inside type aliases (RFC 2515).

type_ascription: bool

Allows the use of type ascription in expressions.

type_changing_struct_update: bool

Allows creation of instances of a struct by moving fields that have not changed from prior instances of the same struct (RFC #2528)

unsized_fn_params: bool

Allows unsized fn parameters.

unsized_locals: bool

Allows unsized rvalues at arguments and parameters.

unsized_tuple_coercion: bool

Allows unsized tuple coercion.

untagged_unions: bool

Allows unions to implement Drop. Moreover, unions may now include fields that don’t implement Copy as long as they don’t have any drop glue. This is checked recursively. On encountering type variable where no progress can be made, T: Copy is used as a substitute for “no drop glue”.

NOTE: A limited form of union U { ... } was accepted in 1.19.0.

used_with_arg: bool

Allows using the #[used(linker)] (or #[used(compiler)]) attribute.

wasm_abi: bool

Allows extern "wasm" fn

yeet_expr: bool

Allows do yeet expressions


Is the given feature active?

Is the given feature enabled?

Panics if the symbol doesn’t correspond to a declared feature.

Some features are known to be incomplete and using them is likely to have unanticipated results, such as compiler crashes. We warn the user about these to alert them.

Trait Implementations

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

Formats the value using the given formatter. Read more

Returns the “default value” for a type. Read more

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

The resulting type after obtaining ownership.

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.


Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference’s “Type Layout” chapter for details on type layout guarantees.

Size: 264 bytes