1use std::hash::{BuildHasher, Hash, Hasher};
6use std::{fmt, str};
7
8use rustc_arena::DroplessArena;
9use rustc_data_structures::fx::FxBuildHasher;
10use rustc_data_structures::hash_table::{Entry, HashTable};
11use rustc_data_structures::stable_hash::{StableCompare, StableHash, StableHashCtxt, StableHasher};
12use rustc_data_structures::sync::Lock;
13use rustc_macros::{Decodable, Encodable, StableHash, symbols};
14
15use crate::edit_distance::find_best_match_for_name;
16use crate::{DUMMY_SP, Edition, Span, with_session_globals};
17
18#[cfg(test)]
19mod tests;
20
21impl Interner {
#[doc =
r" Creates an `Interner` with the predefined symbols from the `symbols!` macro and"]
#[doc = r" any extra symbols provided by external drivers such as Clippy"]
pub(crate) fn with_extra_symbols(extra_symbols: &[&'static str]) -> Self {
Interner::prefill(&["$crate", "{{root}}", "_", "as", "break", "const",
"continue", "crate", "else", "enum", "extern", "false",
"fn", "for", "if", "impl", "in", "let", "loop", "match",
"mod", "move", "mut", "pub", "ref", "return", "self",
"Self", "static", "struct", "super", "trait", "true",
"type", "unsafe", "use", "where", "while", "abstract",
"become", "box", "do", "final", "macro", "override", "priv",
"typeof", "unsized", "virtual", "yield", "async", "await",
"dyn", "gen", "try", "'static", "'_", "auto", "builtin",
"catch", "contract_ensures", "contract_requires", "default",
"macro_rules", "raw", "reuse", "safe", "union", "yeet",
"Abi", "AcqRel", "Acquire", "Active", "ActiveOnly",
"Alignment", "Arc", "ArcWeak", "Array", "AsMut", "AsRef",
"AssertParamIsClone", "AssertParamIsCopy",
"AssertParamIsEq", "AsyncGenFinished", "AsyncGenPending",
"AsyncGenReady", "Atomic", "BTreeMap", "Bool", "Borrow",
"BorrowMut", "Break", "BuildHasher", "CStr",
"CallOnceFuture", "CallRefFuture", "Capture", "Cell",
"Char", "Cleanup", "Client", "Clone", "CoercePointee",
"CoercePointeeValidated", "CoerceUnsized", "Const",
"ConstParamTy", "ConstParamTy_", "Context", "Continue",
"ControlFlow", "Copy", "Cow", "Debug", "Default", "Deref",
"DispatchFromDyn", "Display", "Dual", "DualOnly", "Dualv",
"DualvOnly", "Duplicated", "DuplicatedOnly", "DynTrait",
"Enum", "Eq", "Equal", "Err", "Expected", "ExternC",
"ExternRust", "Float", "FmtArgumentsNew", "Fn", "FnMut",
"FnOnce", "FnPtr", "Formatter", "Forward", "Found", "From",
"FromIterator", "FromResidual", "GlobalAlloc", "Hash",
"HashMap", "HashSet", "Hasher", "InCleanup", "IndexOutput",
"Input", "Int", "Into", "IntoFuture", "IntoIterator",
"IntoIteratorItem", "IoBufReader", "IrTyKind", "Item",
"ItemContext", "Iterator", "IteratorItem", "IteratorMap",
"Layout", "Lifetime", "LintPass", "LocalKey", "Mutex",
"MutexGuard", "Named", "NonNull", "NonZero", "None",
"Normal", "Ok", "Option", "Ord", "Ordering", "Other",
"Output", "ParamSet", "PartialEq", "PartialOrd", "Pending",
"PinDerefMutHelper", "Pointer", "Poll", "Range",
"RangeCopy", "RangeFrom", "RangeFromCopy", "RangeFull",
"RangeInclusive", "RangeInclusiveCopy", "RangeMax",
"RangeMin", "RangeSub", "RangeTo", "RangeToInclusive",
"RangeToInclusiveCopy", "Rc", "RcWeak", "Ready", "Reborrow",
"RefCell", "Reference", "Relaxed", "Release", "Result",
"ResumeTy", "Reverse", "Rust", "RustEmbed",
"RustaceansAreAwesome", "RwLock", "RwLockReadGuard",
"RwLockWriteGuard", "SelfTy", "Send", "SeqCst", "Sized",
"Slice", "SliceIndex", "Some", "Source", "SpanCtxt",
"StdinLock", "Str", "String", "Struct",
"StructuralPartialEq", "SymbolIntern", "Sync",
"SyncUnsafeCell", "Target", "This", "TokenStream",
"TrivialClone", "Try", "TryCaptureGeneric",
"TryCapturePrintable", "TryFrom", "TryInto", "Tuple", "Ty",
"TyCtxt", "TyKind", "Type", "Union", "Unresolved", "Unsize",
"Vec", "Wrapper", "_DECLS", "__H", "__S", "__awaitee",
"__try_var", "_t", "_task_context", "a32", "aarch64",
"aarch64_target_feature", "aarch64_unstable_target_feature",
"aarch64_ver_target_feature", "abi", "abi_amdgpu_kernel",
"abi_avr_interrupt", "abi_c_cmse_nonsecure_call",
"abi_cmse_nonsecure_call", "abi_custom", "abi_efiapi",
"abi_gpu_kernel", "abi_msp430_interrupt", "abi_ptx",
"abi_riscv_interrupt", "abi_swift", "abi_sysv64",
"abi_thiscall", "abi_unadjusted", "abi_vectorcall",
"abi_x86_interrupt", "abort", "add", "add_assign",
"add_with_overflow", "address", "adt_const_params",
"advanced_slice_patterns", "adx_target_feature", "aes",
"aggregate_raw_ptr", "alias", "align", "align_of",
"align_of_val", "alignment", "all", "alloc",
"alloc_error_handler", "alloc_layout", "alloc_zeroed",
"allocator", "allocator_api", "allocator_internals",
"allow", "allow_fail", "allow_internal_unsafe",
"allow_internal_unstable", "altivec", "alu32", "always",
"amdgpu", "amdgpu_dispatch_ptr", "analysis", "and",
"and_then", "anon", "anon_assoc",
"anonymous_lifetime_in_impl_trait", "any",
"apx_target_feature", "arbitrary_enum_discriminant",
"arbitrary_self_types", "arbitrary_self_types_pointers",
"areg", "args", "arith_offset", "arm", "arm64ec",
"arm::a32", "arm::t32", "arm_target_feature", "array",
"as-needed", "as_ref", "asm", "asm_cfg", "asm_const",
"asm_experimental_arch", "asm_experimental_reg", "asm_goto",
"asm_goto_with_outputs", "asm_sym", "asm_unwind", "assert",
"assert_eq", "assert_eq_macro", "assert_fields_are_eq",
"assert_inhabited", "assert_macro",
"assert_mem_uninitialized_valid", "assert_ne_macro",
"assert_receiver_is_total_eq", "assert_zero_valid",
"asserting", "associated_const_equality",
"associated_consts", "associated_type_bounds",
"associated_type_defaults", "associated_types", "assume",
"assume_init", "*", "async_await", "async_call",
"async_call_mut", "async_call_once", "async_closure",
"async_drop", "async_drop_in_place", "async_fn",
"async_fn_in_dyn_trait", "async_fn_in_trait",
"async_fn_kind_helper", "async_fn_kind_upvars",
"async_fn_mut", "async_fn_once", "async_fn_once_output",
"async_fn_track_caller", "async_fn_traits",
"async_for_loop", "async_gen_internals", "async_iterator",
"async_iterator_poll_next", "async_trait_bounds", "atomic",
"atomic_and", "atomic_cxchg", "atomic_cxchgweak",
"atomic_fence", "atomic_load", "atomic_max", "atomic_min",
"atomic_nand", "atomic_or", "atomic_singlethreadfence",
"atomic_store", "atomic_umax", "atomic_umin", "atomic_xadd",
"atomic_xchg", "atomic_xor", "atomic_xsub", "atomics",
"att_syntax", "attr", "attr_literals", "attribute",
"attributes", "audit_that", "augmented_assignments",
"auto_cfg", "auto_traits", "autodiff", "autodiff_forward",
"autodiff_reverse", "automatically_derived",
"available_externally", "avr", "avr_target_feature", "avx",
"avx10_target_feature", "avx512_target_feature", "avx512bw",
"avx512f", "await_macro", "backchain", "backend_repr",
"begin_panic", "bench", "bevy_ecs", "bikeshed",
"bikeshed_guaranteed_no_drop", "bin",
"bind_by_move_pattern_guards", "bindings_after_at",
"bitand", "bitand_assign", "bitor", "bitor_assign",
"bitreverse", "bits", "bitxor", "bitxor_assign",
"black_box", "block", "blocking", "bool",
"borrowck_graphviz_format", "borrowck_graphviz_postflow",
"box_new", "box_patterns", "box_syntax", "boxed_slice",
"bpf", "bpf_target_feature", "braced_empty_structs",
"branch", "breakpoint", "breg", "bridge", "bswap", "built",
"builtin_syntax", "bundle", "c_dash_variadic",
"c_str_literals", "c_unwind", "c_variadic",
"c_variadic_experimental_arch",
"c_variadic_naked_functions", "c_void", "call", "call_mut",
"call_once", "call_once_future", "call_ref_future",
"caller", "caller_location", "capture_disjoint_fields",
"carrying_mul_add", "carryless_mul", "catch_unwind",
"cause", "cdylib", "ceilf16", "ceilf32", "ceilf64",
"ceilf128", "cfg", "cfg_accessible", "cfg_attr",
"cfg_attr_multi", "<cfg_attr_trace>",
"cfg_boolean_literals", "cfg_contract_checks",
"cfg_doctest", "cfg_eval", "cfg_overflow_checks",
"cfg_panic", "cfg_relocation_model", "cfg_sanitize",
"cfg_sanitizer_cfi", "cfg_select", "cfg_target_abi",
"cfg_target_compact", "cfg_target_feature",
"cfg_target_has_atomic",
"cfg_target_has_atomic_equal_alignment",
"cfg_target_has_reliable_f16_f128",
"cfg_target_object_format", "cfg_target_thread_local",
"cfg_target_vendor", "<cfg_trace>", "cfg_ub_checks",
"cfg_version", "cfi", "cfi_encoding", "char",
"clflushopt_target_feature", "client", "clippy",
"clobber_abi", "clone", "clone_closures", "clone_fn",
"clone_from", "closure", "closure_lifetime_binder",
"closure_to_fn_coercion", "closure_track_caller", "cmp",
"cmp_ord_max", "cmp_ord_min", "cmp_partialeq_eq",
"cmp_partialeq_ne", "cmp_partialord_cmp",
"cmp_partialord_ge", "cmp_partialord_gt",
"cmp_partialord_le", "cmp_partialord_lt",
"cmpxchg16b_target_feature", "cmse_nonsecure_entry",
"coerce_pointee_validated", "coerce_shared",
"coerce_shared_target", "coerce_unsized", "coff", "cold",
"cold_path", "collapse_debuginfo", "column", "common",
"compare_bytes", "compare_exchange",
"compare_exchange_weak", "compile_error", "compiler",
"compiler_builtins", "compiler_copy", "compiler_fence",
"compiler_move", "concat", "concat_bytes",
"conservative_impl_trait", "console", "const_allocate",
"const_async_blocks", "const_block_items",
"const_c_variadic", "const_closures",
"const_compare_raw_pointers", "const_constructor",
"const_continue", "const_deallocate", "const_destruct",
"const_eval_limit", "const_eval_select",
"const_evaluatable_checked", "const_extern_fn", "const_fn",
"const_fn_floating_point_arithmetic",
"const_fn_fn_ptr_basics", "const_fn_trait_bound",
"const_fn_transmute", "const_fn_union", "const_fn_unsize",
"const_for", "const_format_args", "const_generics",
"const_generics_defaults", "const_if_match",
"const_impl_trait", "const_in_array_repeat_expressions",
"const_indexing", "const_let", "const_loop",
"const_make_global", "const_mut_refs", "const_panic",
"const_panic_fmt", "const_param_ty",
"const_param_ty_unchecked", "const_precise_live_drops",
"const_ptr_cast", "const_raw_ptr_deref",
"const_raw_ptr_to_usize_cast", "const_refs_to_cell",
"const_refs_to_static", "const_trait_bound_opt_out",
"const_trait_impl", "const_try", "<const_ty>", "constant",
"constructor", "contract_build_check_ensures",
"contract_check_ensures", "contract_check_requires",
"contract_checks", "contracts", "contracts_ensures",
"contracts_internals", "contracts_requires", "convert",
"coprocessor", "copy", "copy_closures",
"copy_nonoverlapping", "copysignf16", "copysignf32",
"copysignf64", "copysignf128", "core", "core_panic",
"core_panic_2015_macro", "core_panic_macro", "coroutine",
"coroutine_clone", "coroutine_resume", "coroutine_return",
"coroutine_state", "coroutine_yield", "coroutines",
"cosf16", "cosf32", "cosf64", "cosf128", "count",
"coverage", "coverage_attribute", "cr", "crate_in_paths",
"crate_local", "crate_name", "crate_type",
"crate_visibility_modifier", "crt-static", "csky",
"csky_target_feature", "cstr_type", "cstring_type", "ctlz",
"ctlz_nonzero", "ctpop", "ctr", "cttz", "cttz_nonzero",
"custom_attribute", "custom_code_classes_in_docs",
"custom_derive", "custom_inner_attributes", "custom_mir",
"custom_test_frameworks", "d32", "dead_code",
"dead_code_pub_in_binary", "dealloc", "debug",
"debug_assert_eq_macro", "debug_assert_macro",
"debug_assert_ne_macro", "debug_assertions",
"debug_struct_fields_finish", "debug_tuple_fields_finish",
"debugger_visualizer", "decl_macro", "declare_lint_pass",
"decorated", "default_alloc_error_handler",
"default_field_values", "default_fn",
"default_lib_allocator", "default_method_body_is_const",
"default_trait1", "default_trait2", "default_trait3",
"default_trait4", "default_type_parameter_fallback",
"default_type_params", "define_opaque", "deny",
"deprecated", "deprecated_safe", "deprecated_suggestion",
"deref", "deref_method", "deref_mut", "deref_patterns",
"deref_pure", "deref_target", "derive", "derive_const",
"118304", "derive_default_enum", "derive_from",
"derive_smart_pointer", "destruct",
"destructuring_assignment", "diagnostic",
"diagnostic_namespace", "diagnostic_on_const",
"diagnostic_on_move", "diagnostic_on_type_error",
"diagnostic_on_unknown", "diagnostic_on_unmatch_args",
"diagnostic_on_unmatched_args", "dialect", "direct",
"discriminant_kind", "discriminant_type",
"discriminant_value", "disjoint_bitor", "dispatch_from_dyn",
"div", "div_assign", "diverging_block_default", "dl",
"do_not_recommend", "doc", "doc_alias", "doc_auto_cfg",
"doc_cfg", "doc_cfg_hide", "doc_keyword", "doc_masked",
"doc_notable_trait", "doc_primitive", "doc_spotlight",
"doctest", "dotdot_in_tuple_patterns",
"dotdoteq_in_patterns", "dreg", "dreg_low8", "dreg_low16",
"drop", "drop_glue", "drop_in_place", "drop_types_in_const",
"dropck_eyepatch", "dropck_parametricity", "<!dummy!>",
"dummy_cgu_name", "dylib", "dyn_compatible_for_dispatch",
"dyn_metadata", "dyn_star", "dyn_trait", "dynamic-no-pic",
"edition_panic", "effective_target_features", "effects",
"eh_personality", "eii", "eii_declaration", "eii_internals",
"eii_shared_macro", "element_ty", "elf", "", "{}", "[]",
"()", "enable", "end", "entry_nops", "env", "eq",
"ergonomic_clones", "ermsb_target_feature", "exact_div",
"except", "exception", "exception-handling",
"exclusive_range_pattern", "exhaustive_integer_patterns",
"exhaustive_patterns", "existential_type", "exp2f16",
"exp2f32", "exp2f64", "exp2f128", "expand1", "expand2",
"expect", "expected", "expf16", "expf32", "expf64",
"expf128", "explicit_extern_abis",
"explicit_generic_args_with_impl_trait",
"explicit_tail_calls", "export_name", "export_stable",
"export-symbols", "expr", "expr_2021",
"expr_fragment_specifier_2024",
"extended_key_value_attributes",
"extended_varargs_abi_support", "extendedl32r",
"extern_absolute_paths", "extern_crate_item_prelude",
"extern_crate_self", "extern_in_paths", "extern_item_impls",
"extern_prelude", "extern_system_varargs", "extern_types",
"extern_weak", "external", "external_doc", "f16", "f16_nan",
"f16c_target_feature", "f32", "f32_nan", "f64", "f64_nan",
"f128", "f128_nan", "fabs", "fadd_algebraic", "fadd_fast",
"fake_variadic", "fallback", "fdiv_algebraic", "fdiv_fast",
"feature", "fence", "🦀", "fetch_update", "ffi_const",
"ffi_pure", "ffi_returns_twice", "field", "field_base",
"field_init_shorthand", "field_of", "field_offset",
"field_projections", "field_representing_type",
"field_representing_type_actual_type_id",
"field_representing_type_raw", "field_type", "fields",
"file", "final_associated_functions",
"float_to_int_unchecked", "floorf16", "floorf32",
"floorf64", "floorf128", "fma4_target_feature", "fmaf16",
"fmaf32", "fmaf64", "fmaf128", "fmt", "fmt_debug",
"fmul_algebraic", "fmul_fast", "fmuladdf16", "fmuladdf32",
"fmuladdf64", "fmuladdf128", "fn_align", "fn_body",
"fn_delegation", "fn_must_use", "fn_mut", "fn_once",
"fn_once_output", "fn_ptr_addr", "fn_ptr_trait", "forbid",
"force_target_feature", "forget", "format_args",
"format_args_capture", "format_args_nl", "format_argument",
"format_arguments", "format_macro", "format_placeholder",
"format_unsafe_arg", "fp", "framework", "freeze",
"freeze_impls", "freg", "frem_algebraic", "frem_fast",
"from", "from_desugaring", "from_iter", "from_output",
"from_residual", "from_size_align_unchecked",
"from_size_alignment_unchecked", "from_str",
"from_str_nonconst", "from_usize", "from_yeet",
"frontmatter", "fsub_algebraic", "fsub_fast", "full",
"fundamental", "fused_iterator", "future_output",
"future_trait", "fxsr", "gdb_script_file", "ge",
"gen_blocks", "gen_future", "generator_clone", "generators",
"generic_arg_infer", "generic_assert",
"generic_associated_types",
"generic_associated_types_extended", "generic_const_args",
"generic_const_exprs", "generic_const_items",
"generic_const_parameter_types", "generic_param_attrs",
"generic_pattern_types", "generics", "get_context",
"global_alloc_ty", "global_allocator", "global_asm",
"global_registration", "globs", "gpu-kernel",
"gpu_launch_sized_workgroup_mem", "gt", "guard",
"guard_patterns", "half_open_range_patterns",
"half_open_range_patterns_in_slices", "hash", "hexagon",
"hexagon_target_feature", "hidden", "hide",
"highpriinterrupts", "hint", "homogeneous_aggregate",
"html_favicon_url", "html_logo_url", "html_no_source",
"html_playground_url", "html_root_url", "hvx",
"hvx-length64b", "hvx-length128b", "hwaddress", "i8", "i16",
"i32", "i64", "i128", "i128_type", "ident", "if_let",
"if_let_guard", "if_let_rescope", "if_while_or_patterns",
"ignore", "immediate-abort", "impl_header_lifetime_elision",
"impl_lint_pass", "impl_restriction",
"impl_trait_in_assoc_type", "impl_trait_in_bindings",
"impl_trait_in_fn_trait_return", "impl_trait_projections",
"implied_by", "import", "import_name_type",
"import_shadowing", "import_trait_associated_functions",
"imported_main", "in_band_lifetimes", "include",
"include_bytes", "include_str", "inclusive_range_syntax",
"incomplete_features", "index", "index_mut",
"infer_outlives_requirements",
"infer_static_outlives_requirements",
"inherent_associated_types", "initial", "inlateout",
"inline", "inline_const", "inline_const_pat", "inout",
"inputs", "instruction_set", "instrument_fn", "integer",
"integral", "internal", "internal_eq_trait_method_impls",
"internal_features", "interrupt",
"into_async_iter_into_iter", "into_future", "into_iter",
"into_try_type", "intra_doc_pointers", "intrinsics",
"irrefutable_let_patterns", "is", "is_auto",
"is_val_statically_known", "isa_attribute", "isize",
"issue", "issue_5723_bootstrap", "issue_tracker_base_url",
"item", "item_like_imports", "iter", "iter_mut", "iterator",
"iterator_collect_fn", "kcfi", "kernel_address",
"kernel_hwaddress", "keylocker_x86", "keyword", "kind",
"kreg", "kreg0", "label", "label_break_value",
"lahfsahf_target_feature", "lang", "lang_items",
"large_assignments", "last", "lateout",
"lazy_normalization_consts", "lazy_type_alias", "le",
"legacy_receiver", "len", "let_chains", "let_else", "lhs",
"lib", "libc", "lifetime", "lifetime_capture_rules_2024",
"lifetimes", "line", "link", "link_arg_attribute",
"link_args", "link_cfg", "link-arg", "link_llvm_intrinsics",
"link_name", "link_ordinal", "link_section", "linkage",
"linker", "linker_info", "linker_messages", "linkonce",
"linkonce_odr", "lint_reasons", "literal", "little", "big",
"load", "loaded_from_disk", "local", "local_inner_macros",
"log2f16", "log2f32", "log2f64", "log2f128", "log10f16",
"log10f32", "log10f64", "log10f128", "log_syntax", "logf16",
"logf32", "logf64", "logf128", "loongarch32", "loongarch64",
"loongarch_target_feature", "loop_break_value",
"loop_hints", "loop_match", "lr", "lt", "m68k",
"m68k_target_feature", "mac16", "mach-o",
"macro_at_most_once_rep", "macro_attr",
"macro_attributes_in_derive_output", "macro_derive",
"macro_escape", "macro_export", "macro_guard_matcher",
"macro_lifetime_matcher", "macro_literal_matcher",
"macro_metavar_expr", "macro_metavar_expr_concat",
"macro_reexport", "macro_use", "macro_vis_matcher",
"macros_in_extern", "main", "managed_boxes",
"manually_drop", "map", "map_err", "marker",
"marker_trait_attr", "masked", "match_beginning_vert",
"match_default_bindings", "maximum_number_nsz_f16",
"maximum_number_nsz_f32", "maximum_number_nsz_f64",
"maximum_number_nsz_f128", "maximumf16", "maximumf32",
"maximumf64", "maximumf128", "may_dangle", "may_unwind",
"maybe_dangling", "maybe_uninit", "maybe_uninit_uninit",
"maybe_uninit_zeroed", "mem", "mem_align_const",
"mem_discriminant", "mem_drop", "mem_forget",
"mem_size_const", "mem_swap", "mem_uninitialized",
"mem_variant_count", "mem_zeroed", "member_constraints",
"memory", "memtag", "message", "meta", "meta_sized",
"metadata_type", "mgca_type_const_syntax",
"min_adt_const_params", "min_const_fn",
"min_const_generics", "min_const_unsafe_fn",
"min_exhaustive_patterns", "min_generic_const_args",
"min_specialization", "min_type_alias_impl_trait",
"minimum_number_nsz_f16", "minimum_number_nsz_f32",
"minimum_number_nsz_f64", "minimum_number_nsz_f128",
"minimumf16", "minimumf32", "minimumf64", "minimumf128",
"mips", "mips32r6", "mips64", "mips64r6",
"mips_target_feature", "mir_assume", "mir_basic_block",
"mir_call", "mir_cast_ptr_to_ptr", "mir_cast_transmute",
"mir_cast_unsize", "mir_checked", "mir_debuginfo",
"mir_discriminant", "mir_drop", "mir_field", "mir_goto",
"mir_make_place", "mir_move", "mir_offset",
"mir_ptr_metadata", "mir_return", "mir_return_to",
"mir_set_discriminant", "mir_static", "mir_static_mut",
"mir_storage_dead", "mir_storage_live", "mir_tail_call",
"mir_unreachable", "mir_unwind_cleanup",
"mir_unwind_continue", "mir_unwind_resume",
"mir_unwind_terminate", "mir_unwind_terminate_reason",
"mir_unwind_unreachable", "mir_variant", "miri", "misc",
"miscsr", "mmx_reg", "modifiers", "module", "module_path",
"more_maybe_bounds", "more_qualified_paths",
"more_struct_aliases", "movbe_target_feature", "move_expr",
"move_ref_pattern", "move_size_limit",
"movrs_target_feature", "msp430", "mul", "mul_assign",
"mul_with_overflow", "multiple_supertrait_upcastable",
"must_not_suspend", "must_use",
"mut_preserve_binding_mode_2024", "mut_ref",
"mut_restriction", "mutable", "naked", "naked_asm",
"naked_functions", "naked_functions_rustic_abi",
"naked_functions_target_feature", "name", "names",
"native_link_modifiers", "native_link_modifiers_as_needed",
"native_link_modifiers_bundle",
"native_link_modifiers_verbatim",
"native_link_modifiers_whole_archive", "natvis_file", "ne",
"needs_allocator", "needs_drop", "needs_panic_runtime",
"neg", "negate_unsigned", "negative_bounds",
"negative_impls", "neon", "nested", "never",
"never_patterns", "never_type", "never_type_fallback",
"new", "new_binary", "new_debug", "new_debug_noop",
"new_display", "new_lower_exp", "new_lower_hex",
"new_octal", "new_pointer", "new_range", "new_unchecked",
"new_upper_exp", "new_upper_hex", "next", "niko", "nll",
"no", "no_builtins", "no_core", "no_coverage",
"no_crate_inject", "no_debug", "no_default_passes",
"no_implicit_prelude", "no_inline", "no_link", "no_main",
"no_mangle", "no_sanitize", "no_stack_check", "no_std",
"nomem", "non_ascii_idents", "non_exhaustive",
"non_exhaustive_omitted_patterns_lint",
"non_lifetime_binders", "non_modrs_mods", "nonblocking",
"none", "nontemporal_store", "noop_method_borrow",
"noop_method_clone", "noop_method_deref", "noprefix",
"noreturn", "nostack", "not", "notable_trait", "note",
"null", "nvptx64", "nvptx_target_feature",
"object_safe_for_dispatch", "of", "off", "offload",
"offload_kernel", "offset", "offset_of", "offset_of_enum",
"offset_of_nested", "offset_of_slice", "ok_or_else",
"old_name", "omit_gdb_pretty_printer_section", "on",
"on_const", "on_move", "on_type_error", "on_unimplemented",
"on_unknown", "on_unmatched_args", "opaque", "<opaque>",
"ops", "opt_out_copy", "optimize", "optimize_attribute",
"optimized", "optin_builtin_traits", "option", "option_env",
"options", "or", "or_patterns", "ord_cmp_method", "other",
"out", "output", "overflow_checks",
"overlapping_marker_traits", "owned_box", "packed",
"packed_bundled_libs", "panic", "panic_2015", "panic_2021",
"panic_abort", "panic_bounds_check", "panic_cannot_unwind",
"panic_const_add_overflow", "panic_const_async_fn_resumed",
"panic_const_async_fn_resumed_drop",
"panic_const_async_fn_resumed_panic",
"panic_const_async_gen_fn_resumed",
"panic_const_async_gen_fn_resumed_drop",
"panic_const_async_gen_fn_resumed_panic",
"panic_const_coroutine_resumed",
"panic_const_coroutine_resumed_drop",
"panic_const_coroutine_resumed_panic",
"panic_const_div_by_zero", "panic_const_div_overflow",
"panic_const_gen_fn_none", "panic_const_gen_fn_none_drop",
"panic_const_gen_fn_none_panic", "panic_const_mul_overflow",
"panic_const_neg_overflow", "panic_const_rem_by_zero",
"panic_const_rem_overflow", "panic_const_shl_overflow",
"panic_const_shr_overflow", "panic_const_sub_overflow",
"panic_display", "panic_fmt", "panic_handler", "panic_impl",
"panic_implementation", "panic_in_cleanup", "panic_info",
"panic_invalid_enum_construction", "panic_location",
"panic_misaligned_pointer_dereference", "panic_nounwind",
"panic_null_pointer_dereference", "panic_runtime",
"panic_str_2015", "panic_unwind", "panicking",
"param_attrs", "parent_label", "partial_cmp", "partial_ord",
"passes", "pat", "pat_param", "patchable_function_entry",
"path", "pattern_complexity_limit", "pattern_parentheses",
"pattern_type", "pattern_type_range_trait", "pattern_types",
"phantom_data", "phase", "pic", "pie", "pin", "pin_drop",
"pin_ergonomics", "pin_v2", "platform_intrinsics", "plugin",
"plugin_registrar", "plugins", "pointee", "pointee_sized",
"pointee_trait", "pointer", "poll", "post-cleanup",
"post-lto", "postfix_match", "powerpc", "powerpc64",
"powerpc_target_feature", "powf16", "powf32", "powf64",
"powf128", "powif16", "powif32", "powif64", "powif128",
"pre-lto", "precise_capturing",
"precise_capturing_in_traits",
"precise_pointer_size_matching", "predicates",
"pref_align_of", "prefetch_read_data",
"prefetch_read_instruction", "prefetch_write_data",
"prefetch_write_instruction", "prefix_nops", "preg",
"prelude", "prelude_import", "preserves_flags",
"prfchw_target_feature", "prid", "primitive", "proc-macro",
"proc_macro", "proc_macro_attribute", "proc_macro_derive",
"proc_macro_expr", "proc_macro_gen", "proc_macro_hygiene",
"proc_macro_internals", "proc_macro_mod",
"proc_macro_non_items", "proc_macro_path_invoc",
"profiler_runtime", "ptr", "ptr_cast", "ptr_cast_const",
"ptr_cast_mut", "ptr_const_is_null", "ptr_copy",
"ptr_copy_nonoverlapping", "ptr_from_ref",
"ptr_guaranteed_cmp", "ptr_is_null", "ptr_mask",
"ptr_metadata", "ptr_null", "ptr_null_mut",
"ptr_offset_from", "ptr_offset_from_unsigned", "ptr_read",
"ptr_read_unaligned", "ptr_replace", "ptr_swap",
"ptr_swap_nonoverlapping", "ptr_write", "ptr_write_bytes",
"ptr_write_unaligned", "ptr_write_volatile",
"pub_macro_rules", "pub_restricted", "public", "pure",
"pushpop_unsafe", "qreg", "qreg_low4", "qreg_low8",
"quad_precision_float", "question_mark", "quote",
"range_inclusive_new", "raw-dylib", "raw_dylib",
"raw_dylib_elf", "raw_eq", "raw_identifiers", "raw_ref_op",
"re_rebalance_coherence", "read_via_copy", "readonly",
"realloc", "realtime", "reason", "reborrow", "receiver",
"receiver_target", "recursion_limit",
"reexport_test_harness_main", "ref_pat_eat_one_layer_2024",
"ref_pat_eat_one_layer_2024_structural",
"ref_pat_everywhere", "ref_unwind_safe_trait", "reference",
"reflect", "reg", "reg16", "reg32", "reg64", "reg_abcd",
"reg_addr", "reg_byte", "reg_data", "reg_iw", "reg_nonzero",
"reg_pair", "reg_ptr", "reg_upper", "register_attr",
"register_tool", "relaxed_adts", "relaxed_struct_unsize",
"relocation_model", "rem", "rem_assign", "repr", "repr128",
"repr_align", "repr_align_enum", "repr_packed", "repr_simd",
"repr_transparent", "require", "reserve-x18", "residual",
"result", "result_ffi_guarantees", "return_address",
"return_position_impl_trait_in_trait",
"return_type_notation", "->", "riscv32", "riscv64",
"riscv_target_feature", "rlib", "ropi", "ropi-rwpi",
"rotate_left", "rotate_right", "round_ties_even_f16",
"round_ties_even_f32", "round_ties_even_f64",
"round_ties_even_f128", "roundf16", "roundf32", "roundf64",
"roundf128", "rtm_target_feature", "runtime", "rust",
"rust_2015", "rust_2018", "rust_2018_preview", "rust_2021",
"rust_2024", "rust_analyzer", "rust_begin_unwind",
"rust_cold_cc", "rust_eh_personality", "rust_future",
"rust_logo", "rust_out", "rust_preserve_none_cc",
"rust_tail_cc", "rustc", "rustc_abi", "rustc_align",
"rustc_align_static", "rustc_allocator",
"rustc_allocator_zeroed", "rustc_allocator_zeroed_variant",
"rustc_allow_const_fn_unstable",
"rustc_allow_incoherent_impl",
"rustc_allowed_through_unstable_modules", "rustc_as_ptr",
"rustc_attrs", "rustc_autodiff", "rustc_builtin_macro",
"rustc_capture_analysis", "rustc_clean",
"rustc_coherence_is_core", "rustc_coinductive",
"rustc_comptime", "rustc_confusables", "rustc_const_stable",
"rustc_const_stable_indirect", "rustc_const_unstable",
"rustc_conversion_suggestion", "rustc_deallocator",
"rustc_default_body_unstable",
"rustc_delayed_bug_from_inside_query",
"rustc_deny_explicit_impl", "rustc_deprecated_safe_2024",
"rustc_diagnostic_item", "rustc_diagnostic_macros",
"rustc_do_not_const_check", "rustc_doc_primitive",
"rustc_driver", "rustc_dummy", "rustc_dump_def_parents",
"rustc_dump_def_path", "rustc_dump_generics",
"rustc_dump_hidden_type_of_opaques",
"rustc_dump_inferred_outlives", "rustc_dump_item_bounds",
"rustc_dump_layout", "rustc_dump_object_lifetime_defaults",
"rustc_dump_predicates", "rustc_dump_symbol_name",
"rustc_dump_user_args", "rustc_dump_variances",
"rustc_dump_variances_of_opaques", "rustc_dump_vtable",
"rustc_dyn_incompatible_trait",
"rustc_effective_visibility", "rustc_eii_foreign_item",
"rustc_evaluate_where_clauses", "rustc_expected_cgu_reuse",
"rustc_force_inline", "rustc_has_incoherent_inherent_impls",
"rustc_if_this_changed", "rustc_inherit_overflow_checks",
"rustc_insignificant_dtor", "rustc_intrinsic",
"rustc_intrinsic_const_stable_indirect",
"rustc_legacy_const_generics",
"rustc_lint_opt_deny_field_access", "rustc_lint_opt_ty",
"rustc_lint_query_instability",
"rustc_lint_untracked_query_information",
"rustc_macro_transparency", "rustc_main", "rustc_mir",
"rustc_must_implement_one_of",
"rustc_must_match_exhaustively",
"rustc_never_returns_null_ptr", "rustc_never_type_options",
"rustc_no_implicit_autorefs", "rustc_no_implicit_bounds",
"rustc_no_mir_inline", "rustc_no_writable",
"rustc_non_const_trait_method",
"rustc_nonnull_optimization_guaranteed", "rustc_nounwind",
"rustc_objc_class", "rustc_objc_selector",
"rustc_offload_kernel", "rustc_on_unimplemented",
"rustc_paren_sugar", "rustc_partition_codegened",
"rustc_partition_reused", "rustc_pass_by_value",
"rustc_pass_indirectly_in_non_rustic_abis", "rustc_peek",
"rustc_peek_liveness", "rustc_peek_maybe_init",
"rustc_peek_maybe_uninit", "rustc_preserve_ub_checks",
"rustc_private", "rustc_proc_macro_decls",
"rustc_promotable", "rustc_pub_transparent",
"rustc_reallocator", "rustc_regions",
"rustc_reservation_impl", "rustc_scalable_vector",
"rustc_should_not_be_called_on_const_items",
"rustc_simd_monomorphize_lane_limit",
"rustc_skip_during_method_dispatch",
"rustc_specialization_trait", "rustc_std_internal_symbol",
"rustc_strict_coherence", "rustc_test_marker",
"rustc_then_this_would_need", "rustc_trivial_field_reads",
"rustc_unsafe_specialization_marker", "rustdoc",
"rustdoc_internals", "rustdoc_missing_doc_code_examples",
"rustfmt", "rvalue_static_promotion", "rvector", "rwpi",
"s32c1i", "s390x", "s390x_target_feature",
"s390x_target_feature_vector", "safety", "sanitize",
"sanitizer_cfi_generalize_pointers",
"sanitizer_cfi_normalize_integers", "sanitizer_runtime",
"saturating_add", "saturating_sub", "sdylib",
"search_unbox", "select_unpredictable", "self_in_typedefs",
"self_struct_ctor", "semiopaque", "sgpr32", "sgpr64",
"sgpr96", "sgpr128", "sgpr256", "sgpr512", "sha2", "sha3",
"sha512_sm_x86", "shadow_call_stack", "shallow", "shl",
"shl_assign", "shorter_tail_lifetimes", "should_panic",
"show", "shr", "shr_assign", "signed", "simd", "simd_add",
"simd_and", "simd_arith_offset", "simd_as", "simd_bitmask",
"simd_bitreverse", "simd_bswap", "simd_carryless_mul",
"simd_cast", "simd_cast_ptr", "simd_ceil", "simd_ctlz",
"simd_ctpop", "simd_cttz", "simd_div", "simd_eq",
"simd_expose_provenance", "simd_extract",
"simd_extract_dyn", "simd_fabs", "simd_fcos", "simd_fexp",
"simd_fexp2", "simd_ffi", "simd_flog", "simd_flog2",
"simd_flog10", "simd_floor", "simd_fma", "simd_fsin",
"simd_fsqrt", "simd_funnel_shl", "simd_funnel_shr",
"simd_gather", "simd_ge", "simd_gt", "simd_insert",
"simd_insert_dyn", "simd_le", "simd_lt", "simd_masked_load",
"simd_masked_store", "simd_maximum_number_nsz",
"simd_minimum_number_nsz", "simd_mul", "simd_ne",
"simd_neg", "simd_or", "simd_reduce_add_ordered",
"simd_reduce_add_unordered", "simd_reduce_all",
"simd_reduce_and", "simd_reduce_any", "simd_reduce_max",
"simd_reduce_min", "simd_reduce_mul_ordered",
"simd_reduce_mul_unordered", "simd_reduce_or",
"simd_reduce_xor", "simd_relaxed_fma", "simd_rem",
"simd_round", "simd_round_ties_even", "simd_saturating_add",
"simd_saturating_sub", "simd_scatter", "simd_select",
"simd_select_bitmask", "simd_shl", "simd_shr",
"simd_shuffle", "simd_shuffle_const_generic", "simd_splat",
"simd_sub", "simd_trunc", "simd_with_exposed_provenance",
"simd_xor", "since", "sinf16", "sinf32", "sinf64",
"sinf128", "size", "size_of", "size_of_type_id",
"size_of_val", "sized", "sized_hierarchy", "slice",
"slice_from_raw_parts", "slice_from_raw_parts_mut",
"slice_get_unchecked", "slice_len_fn", "slice_patterns",
"slicing_syntax", "soft-float", "sparc", "sparc64",
"sparc_target_feature", "spe_acc", "specialization",
"speed", "spirv", "splat", "spotlight", "sqrtf16",
"sqrtf32", "sqrtf64", "sqrtf128", "sreg", "sreg_low16",
"sse", "sse2", "sse4a_target_feature", "stable",
"staged_api", "start", "state", "static_align",
"static_in_const", "static_nobundle", "static_recursion",
"staticlib", "std", "std_lib_injection", "std_panic",
"std_panic_2015_macro", "std_panic_macro", "stmt",
"stmt_expr_attributes", "stop_after_dataflow", "store",
"str", "str_from_utf8", "str_from_utf8_mut",
"str_from_utf8_unchecked", "str_from_utf8_unchecked_mut",
"str_inherent_from_utf8", "str_inherent_from_utf8_mut",
"str_inherent_from_utf8_unchecked",
"str_inherent_from_utf8_unchecked_mut",
"strict_provenance_lints", "string_deref_patterns",
"stringify", "struct_field_attributes", "struct_inherit",
"struct_variant", "structural_match", "structural_peq",
"sub", "sub_assign", "sub_with_overflow", "suggestion",
"super_let", "supertrait_item_shadowing", "sve_cast",
"sve_tuple_create2", "sve_tuple_create3",
"sve_tuple_create4", "sve_tuple_get", "sve_tuple_set",
"sym", "sync", "synthetic", "t32", "target", "target_abi",
"target_arch", "target_endian", "target_env",
"target_family", "target_feature", "target_feature_11",
"target_feature_inline_always", "target_has_atomic",
"target_has_atomic_load_store",
"target_has_atomic_primitive_alignment",
"target_has_reliable_f16", "target_has_reliable_f16_math",
"target_has_reliable_f128", "target_has_reliable_f128_math",
"target_object_format", "target_os", "target_pointer_width",
"target_thread_local", "target_vendor",
"tbm_target_feature", "termination", "termination_trait",
"termination_trait_test", "test", "test_2018_feature",
"test_accepted_feature", "test_case",
"test_incomplete_feature", "test_removed_feature",
"test_runner", "test_unstable_lint", "thread",
"thread_local", "threadptr", "three_way_compare", "thumb2",
"thumb-mode", "time", "tmm_reg", "to_owned_method",
"to_string", "to_vec", "tool_attributes", "tool_lints",
"trace_macros", "track_caller", "trait_alias", "trait_ty",
"trait_upcasting", "transmute", "transmute_generic_consts",
"transmute_opts", "transmute_trait", "transmute_unchecked",
"transparent", "transparent_enums", "transparent_unions",
"trivial_bounds", "trivial_clone", "truncf16", "truncf32",
"truncf64", "truncf128", "try_blocks",
"try_blocks_heterogeneous", "try_capture", "try_from",
"try_into", "try_trait_v2", "try_trait_v2_residual",
"try_update", "tt", "tuple", "tuple_indexing",
"tuple_trait", "two_phase", "ty",
"type_alias_enum_variants", "type_alias_impl_trait",
"type_ascribe", "type_ascription",
"type_changing_struct_update", "type_id", "type_id_eq",
"type_id_field_representing_type", "type_id_fields",
"type_id_variants", "type_id_vtable", "type_info",
"type_ir", "type_ir_infer_ctxt_like", "type_ir_inherent",
"type_ir_interner", "type_length_limit", "type_macros",
"type_name", "type_of", "type_privacy_lints",
"typed_swap_nonoverlapping", "u8", "u8_legacy_const_max",
"u8_legacy_const_min", "u8_legacy_fn_max_value",
"u8_legacy_fn_min_value", "u8_legacy_mod", "u16",
"u16_legacy_const_max", "u16_legacy_const_min",
"u16_legacy_fn_max_value", "u16_legacy_fn_min_value",
"u16_legacy_mod", "u32", "u32_legacy_const_max",
"u32_legacy_const_min", "u32_legacy_fn_max_value",
"u32_legacy_fn_min_value", "u32_legacy_mod", "u64",
"u64_legacy_const_max", "u64_legacy_const_min",
"u64_legacy_fn_max_value", "u64_legacy_fn_min_value",
"u64_legacy_mod", "u128", "u128_legacy_const_max",
"u128_legacy_const_min", "u128_legacy_fn_max_value",
"u128_legacy_fn_min_value", "u128_legacy_mod", "ub_checks",
"unaligned_volatile_load", "unaligned_volatile_store",
"unboxed_closures", "unchecked_add", "unchecked_div",
"unchecked_funnel_shl", "unchecked_funnel_shr",
"unchecked_mul", "unchecked_rem", "unchecked_shl",
"unchecked_shr", "unchecked_sub", "undecorated",
"underscore_const_names", "underscore_imports",
"underscore_lifetimes", "uniform_paths", "unimplemented",
"unit", "universal_impl_trait", "unix", "unlikely",
"unmarked_api", "unnamed_enum_variants", "unnamed_fields",
"unpin", "unqualified_local_imports", "unreachable",
"unreachable_2015", "unreachable_2015_macro",
"unreachable_2021", "unreachable_code",
"unreachable_display", "unreachable_macro",
"unrestricted_attribute_tokens", "unroll",
"unsafe_attributes", "unsafe_binders",
"unsafe_block_in_unsafe_fn", "unsafe_cell",
"unsafe_cell_raw_get", "unsafe_eii", "unsafe_extern_blocks",
"unsafe_fields", "unsafe_no_drop_flag", "unsafe_pinned",
"unsafe_unpin", "unsafety", "unsize",
"unsized_const_param_ty", "unsized_const_params",
"unsized_fn_params", "unsized_locals",
"unsized_tuple_coercion", "unstable",
"unstable_feature_bound",
"this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via `Cargo.toml` instead?",
"unstable_removed", "untagged_unions", "unused_imports",
"unwind", "unwind_attributes", "unwind_safe_trait",
"unwrap", "unwrap_binder", "unwrap_or", "update",
"use_cloned", "use_extern_macros", "use_nested_groups",
"used", "used_with_arg", "using", "usize",
"usize_legacy_const_max", "usize_legacy_const_min",
"usize_legacy_fn_max_value", "usize_legacy_fn_min_value",
"usize_legacy_mod", "v1", "v8plus", "va_arg", "va_arg_safe",
"va_copy", "va_end", "va_list", "va_start", "val",
"validity", "value", "values", "var", "variadic",
"variant_count", "variants", "vec", "vector", "verbatim",
"version", "vfp2", "vgpr16", "vgpr32", "vgpr64", "vgpr96",
"vgpr128", "vgpr160", "vgpr192", "vgpr224", "vgpr256",
"vgpr288", "vgpr320", "vgpr352", "vgpr384", "vgpr512",
"vgpr1024", "view_types", "vis", "visible_private_types",
"volatile", "volatile_copy_memory",
"volatile_copy_nonoverlapping_memory", "volatile_load",
"volatile_set_memory", "volatile_store", "vreg",
"vreg_low16", "vreg_pair", "vsreg", "vsx", "vtable_align",
"vtable_size", "warn", "wasip2", "wasm", "wasm32", "wasm64",
"wasm_abi", "wasm_import_module", "wasm_target_feature",
"weak", "weak_odr", "where_clause_attrs", "while_let",
"whole-archive", "width", "windowed", "windows",
"windows_subsystem", "with_negative_coherence",
"wrap_binder", "wrapping_add", "wrapping_div",
"wrapping_mul", "wrapping_rem", "wrapping_rem_euclid",
"wrapping_sub", "wreg", "write_box_via_move", "write_bytes",
"write_fmt", "write_macro", "write_str", "write_via_move",
"writeln_macro", "x86", "x86_64", "x86_amx_intrinsics",
"x87_reg", "x87_target_feature", "xcoff", "xer", "xloop",
"xmm_reg", "xop_target_feature", "xtensa",
"xtensa_target_feature", "yeet_desugar_details",
"yeet_expr", "yes", "yield_expr", "ymm_reg", "yreg", "zca",
"zfh", "zfhmin", "zmm_reg", "ztso", "0", "1", "2", "3", "4",
"5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G",
"H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S",
"T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e",
"f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q",
"r", "s", "t", "u", "v", "w", "x", "y", "z",
"1.98.0-nightly"], extra_symbols)
}
}symbols! {
23 Keywords {
32 DollarCrate: "$crate",
38 PathRoot: "{{root}}",
39 Underscore: "_",
40 As: "as",
46 Break: "break",
47 Const: "const",
48 Continue: "continue",
49 Crate: "crate",
50 Else: "else",
51 Enum: "enum",
52 Extern: "extern",
53 False: "false",
54 Fn: "fn",
55 For: "for",
56 If: "if",
57 Impl: "impl",
58 In: "in",
59 Let: "let",
60 Loop: "loop",
61 Match: "match",
62 Mod: "mod",
63 Move: "move",
64 Mut: "mut",
65 Pub: "pub",
66 Ref: "ref",
67 Return: "return",
68 SelfLower: "self",
69 SelfUpper: "Self",
70 Static: "static",
71 Struct: "struct",
72 Super: "super",
73 Trait: "trait",
74 True: "true",
75 Type: "type",
76 Unsafe: "unsafe",
77 Use: "use",
78 Where: "where",
79 While: "while",
80 Abstract: "abstract",
86 Become: "become",
87 Box: "box",
88 Do: "do",
89 Final: "final",
90 Macro: "macro",
91 Override: "override",
92 Priv: "priv",
93 Typeof: "typeof",
94 Unsized: "unsized",
95 Virtual: "virtual",
96 Yield: "yield",
97 Async: "async", Await: "await", Dyn: "dyn", Gen: "gen", Try: "try", StaticLifetime: "'static",
120 UnderscoreLifetime: "'_",
121 Auto: "auto",
127 Builtin: "builtin",
128 Catch: "catch",
129 ContractEnsures: "contract_ensures",
130 ContractRequires: "contract_requires",
131 Default: "default",
132 MacroRules: "macro_rules",
133 Raw: "raw",
134 Reuse: "reuse",
135 Safe: "safe",
136 Union: "union",
137 Yeet: "yeet",
138 }
140
141 Symbols {
155 Abi,
157 AcqRel,
158 Acquire,
159 Active,
160 ActiveOnly,
161 Alignment,
162 Arc,
163 ArcWeak,
164 Array,
165 AsMut,
166 AsRef,
167 AssertParamIsClone,
168 AssertParamIsCopy,
169 AssertParamIsEq,
170 AsyncGenFinished,
171 AsyncGenPending,
172 AsyncGenReady,
173 Atomic,
174 BTreeMap,
175 Bool,
176 Borrow,
177 BorrowMut,
178 Break,
179 BuildHasher,
180 CStr,
181 CallOnceFuture,
182 CallRefFuture,
183 Capture,
184 Cell,
185 Char,
186 Cleanup,
187 Client,
188 Clone,
189 CoercePointee,
190 CoercePointeeValidated,
191 CoerceUnsized,
192 Const,
193 ConstParamTy,
194 ConstParamTy_,
195 Context,
196 Continue,
197 ControlFlow,
198 Copy,
199 Cow,
200 Debug,
201 Default,
202 Deref,
203 DispatchFromDyn,
204 Display,
205 Dual,
206 DualOnly,
207 Dualv,
208 DualvOnly,
209 Duplicated,
210 DuplicatedOnly,
211 DynTrait,
212 Enum,
213 Eq,
214 Equal,
215 Err,
216 Expected,
217 ExternC,
218 ExternRust,
219 Float,
220 FmtArgumentsNew,
221 Fn,
222 FnMut,
223 FnOnce,
224 FnPtr,
225 Formatter,
226 Forward,
227 Found,
228 From,
229 FromIterator,
230 FromResidual,
231 GlobalAlloc,
232 Hash,
233 HashMap,
234 HashSet,
235 Hasher,
236 InCleanup,
237 IndexOutput,
238 Input,
239 Int,
240 Into,
241 IntoFuture,
242 IntoIterator,
243 IntoIteratorItem,
244 IoBufReader,
245 IrTyKind,
246 Item,
247 ItemContext,
248 Iterator,
249 IteratorItem,
250 IteratorMap,
251 Layout,
252 Lifetime,
253 LintPass,
254 LocalKey,
255 Mutex,
256 MutexGuard,
257 Named,
258 NonNull,
259 NonZero,
260 None,
261 Normal,
262 Ok,
263 Option,
264 Ord,
265 Ordering,
266 Other,
267 Output,
268 ParamSet,
269 PartialEq,
270 PartialOrd,
271 Pending,
272 PinDerefMutHelper,
273 Pointer,
274 Poll,
275 Range,
276 RangeCopy,
277 RangeFrom,
278 RangeFromCopy,
279 RangeFull,
280 RangeInclusive,
281 RangeInclusiveCopy,
282 RangeMax,
283 RangeMin,
284 RangeSub,
285 RangeTo,
286 RangeToInclusive,
287 RangeToInclusiveCopy,
288 Rc,
289 RcWeak,
290 Ready,
291 Reborrow,
292 RefCell,
293 Reference,
294 Relaxed,
295 Release,
296 Result,
297 ResumeTy,
298 Reverse,
299 Rust,
300 RustEmbed,
302 RustaceansAreAwesome,
303 RwLock,
304 RwLockReadGuard,
305 RwLockWriteGuard,
306 SelfTy,
307 Send,
308 SeqCst,
309 Sized,
310 Slice,
311 SliceIndex,
312 Some,
313 Source,
314 SpanCtxt,
315 StdinLock,
316 Str,
317 String,
318 Struct,
319 StructuralPartialEq,
320 SymbolIntern,
321 Sync,
322 SyncUnsafeCell,
323 Target,
324 This,
325 TokenStream,
326 TrivialClone,
327 Try,
328 TryCaptureGeneric,
329 TryCapturePrintable,
330 TryFrom,
331 TryInto,
332 Tuple,
333 Ty,
334 TyCtxt,
335 TyKind,
336 Type,
337 Union,
338 Unresolved,
339 Unsize,
340 Vec,
341 Wrapper,
342 _DECLS,
343 __H,
344 __S,
345 __awaitee,
346 __try_var,
347 _t,
348 _task_context,
349 a32,
350 aarch64,
351 aarch64_target_feature,
352 aarch64_unstable_target_feature,
353 aarch64_ver_target_feature,
354 abi,
355 abi_amdgpu_kernel,
356 abi_avr_interrupt,
357 abi_c_cmse_nonsecure_call,
358 abi_cmse_nonsecure_call,
359 abi_custom,
360 abi_efiapi,
361 abi_gpu_kernel,
362 abi_msp430_interrupt,
363 abi_ptx,
364 abi_riscv_interrupt,
365 abi_swift,
366 abi_sysv64,
367 abi_thiscall,
368 abi_unadjusted,
369 abi_vectorcall,
370 abi_x86_interrupt,
371 abort,
372 add,
373 add_assign,
374 add_with_overflow,
375 address,
376 adt_const_params,
377 advanced_slice_patterns,
378 adx_target_feature,
379 aes,
380 aggregate_raw_ptr,
381 alias,
382 align,
383 align_of,
384 align_of_val,
385 alignment,
386 all,
387 alloc,
388 alloc_error_handler,
389 alloc_layout,
390 alloc_zeroed,
391 allocator,
392 allocator_api,
393 allocator_internals,
394 allow,
395 allow_fail,
396 allow_internal_unsafe,
397 allow_internal_unstable,
398 altivec,
399 alu32,
400 always,
401 amdgpu,
402 amdgpu_dispatch_ptr,
403 analysis,
404 and,
405 and_then,
406 anon,
407 anon_assoc,
408 anonymous_lifetime_in_impl_trait,
409 any,
410 apx_target_feature,
411 arbitrary_enum_discriminant,
412 arbitrary_self_types,
413 arbitrary_self_types_pointers,
414 areg,
415 args,
416 arith_offset,
417 arm,
418 arm64ec,
419 arm_a32: "arm::a32",
420 arm_t32: "arm::t32",
421 arm_target_feature,
422 array,
423 as_dash_needed: "as-needed",
424 as_ref,
425 asm,
426 asm_cfg,
427 asm_const,
428 asm_experimental_arch,
429 asm_experimental_reg,
430 asm_goto,
431 asm_goto_with_outputs,
432 asm_sym,
433 asm_unwind,
434 assert,
435 assert_eq,
436 assert_eq_macro,
437 assert_fields_are_eq,
438 assert_inhabited,
439 assert_macro,
440 assert_mem_uninitialized_valid,
441 assert_ne_macro,
442 assert_receiver_is_total_eq,
443 assert_zero_valid,
444 asserting,
445 associated_const_equality,
446 associated_consts,
447 associated_type_bounds,
448 associated_type_defaults,
449 associated_types,
450 assume,
451 assume_init,
452 asterisk: "*",
453 async_await,
454 async_call,
455 async_call_mut,
456 async_call_once,
457 async_closure,
458 async_drop,
459 async_drop_in_place,
460 async_fn,
461 async_fn_in_dyn_trait,
462 async_fn_in_trait,
463 async_fn_kind_helper,
464 async_fn_kind_upvars,
465 async_fn_mut,
466 async_fn_once,
467 async_fn_once_output,
468 async_fn_track_caller,
469 async_fn_traits,
470 async_for_loop,
471 async_gen_internals,
472 async_iterator,
473 async_iterator_poll_next,
474 async_trait_bounds,
475 atomic,
476 atomic_and,
477 atomic_cxchg,
478 atomic_cxchgweak,
479 atomic_fence,
480 atomic_load,
481 atomic_max,
482 atomic_min,
483 atomic_nand,
484 atomic_or,
485 atomic_singlethreadfence,
486 atomic_store,
487 atomic_umax,
488 atomic_umin,
489 atomic_xadd,
490 atomic_xchg,
491 atomic_xor,
492 atomic_xsub,
493 atomics,
494 att_syntax,
495 attr,
496 attr_literals,
497 attribute,
498 attributes,
499 audit_that,
500 augmented_assignments,
501 auto_cfg,
502 auto_traits,
503 autodiff,
504 autodiff_forward,
505 autodiff_reverse,
506 automatically_derived,
507 available_externally,
508 avr,
509 avr_target_feature,
510 avx,
511 avx10_target_feature,
512 avx512_target_feature,
513 avx512bw,
514 avx512f,
515 await_macro,
516 backchain,
517 backend_repr,
518 begin_panic,
519 bench,
520 bevy_ecs,
521 bikeshed,
522 bikeshed_guaranteed_no_drop,
523 bin,
524 bind_by_move_pattern_guards,
525 bindings_after_at,
526 bitand,
527 bitand_assign,
528 bitor,
529 bitor_assign,
530 bitreverse,
531 bits,
532 bitxor,
533 bitxor_assign,
534 black_box,
535 block,
536 blocking,
537 bool,
538 borrowck_graphviz_format,
539 borrowck_graphviz_postflow,
540 box_new,
541 box_patterns,
542 box_syntax,
543 boxed_slice,
544 bpf,
545 bpf_target_feature,
546 braced_empty_structs,
547 branch,
548 breakpoint,
549 breg,
550 bridge,
551 bswap,
552 built,
553 builtin_syntax,
554 bundle,
555 c_dash_variadic,
556 c_str_literals,
557 c_unwind,
558 c_variadic,
559 c_variadic_experimental_arch,
560 c_variadic_naked_functions,
561 c_void,
562 call,
563 call_mut,
564 call_once,
565 call_once_future,
566 call_ref_future,
567 caller,
568 caller_location,
569 capture_disjoint_fields,
570 carrying_mul_add,
571 carryless_mul,
572 catch_unwind,
573 cause,
574 cdylib,
575 ceilf16,
576 ceilf32,
577 ceilf64,
578 ceilf128,
579 cfg,
580 cfg_accessible,
581 cfg_attr,
582 cfg_attr_multi,
583 cfg_attr_trace: "<cfg_attr_trace>", cfg_boolean_literals,
585 cfg_contract_checks,
586 cfg_doctest,
587 cfg_eval,
588 cfg_overflow_checks,
589 cfg_panic,
590 cfg_relocation_model,
591 cfg_sanitize,
592 cfg_sanitizer_cfi,
593 cfg_select,
594 cfg_target_abi,
595 cfg_target_compact,
596 cfg_target_feature,
597 cfg_target_has_atomic,
598 cfg_target_has_atomic_equal_alignment,
599 cfg_target_has_reliable_f16_f128,
600 cfg_target_object_format,
601 cfg_target_thread_local,
602 cfg_target_vendor,
603 cfg_trace: "<cfg_trace>", cfg_ub_checks,
605 cfg_version,
606 cfi,
607 cfi_encoding,
608 char,
609 clflushopt_target_feature,
610 client,
611 clippy,
612 clobber_abi,
613 clone,
614 clone_closures,
615 clone_fn,
616 clone_from,
617 closure,
618 closure_lifetime_binder,
619 closure_to_fn_coercion,
620 closure_track_caller,
621 cmp,
622 cmp_ord_max,
623 cmp_ord_min,
624 cmp_partialeq_eq,
625 cmp_partialeq_ne,
626 cmp_partialord_cmp,
627 cmp_partialord_ge,
628 cmp_partialord_gt,
629 cmp_partialord_le,
630 cmp_partialord_lt,
631 cmpxchg16b_target_feature,
632 cmse_nonsecure_entry,
633 coerce_pointee_validated,
634 coerce_shared,
635 coerce_shared_target,
636 coerce_unsized,
637 coff,
638 cold,
639 cold_path,
640 collapse_debuginfo,
641 column,
642 common,
643 compare_bytes,
644 compare_exchange,
645 compare_exchange_weak,
646 compile_error,
647 compiler,
648 compiler_builtins,
649 compiler_copy,
650 compiler_fence,
651 compiler_move,
652 concat,
653 concat_bytes,
654 conservative_impl_trait,
655 console,
656 const_allocate,
657 const_async_blocks,
658 const_block_items,
659 const_c_variadic,
660 const_closures,
661 const_compare_raw_pointers,
662 const_constructor,
663 const_continue,
664 const_deallocate,
665 const_destruct,
666 const_eval_limit,
667 const_eval_select,
668 const_evaluatable_checked,
669 const_extern_fn,
670 const_fn,
671 const_fn_floating_point_arithmetic,
672 const_fn_fn_ptr_basics,
673 const_fn_trait_bound,
674 const_fn_transmute,
675 const_fn_union,
676 const_fn_unsize,
677 const_for,
678 const_format_args,
679 const_generics,
680 const_generics_defaults,
681 const_if_match,
682 const_impl_trait,
683 const_in_array_repeat_expressions,
684 const_indexing,
685 const_let,
686 const_loop,
687 const_make_global,
688 const_mut_refs,
689 const_panic,
690 const_panic_fmt,
691 const_param_ty,
692 const_param_ty_unchecked,
693 const_precise_live_drops,
694 const_ptr_cast,
695 const_raw_ptr_deref,
696 const_raw_ptr_to_usize_cast,
697 const_refs_to_cell,
698 const_refs_to_static,
699 const_trait_bound_opt_out,
700 const_trait_impl,
701 const_try,
702 const_ty_placeholder: "<const_ty>",
703 constant,
704 constructor,
705 contract_build_check_ensures,
706 contract_check_ensures,
707 contract_check_requires,
708 contract_checks,
709 contracts,
710 contracts_ensures,
711 contracts_internals,
712 contracts_requires,
713 convert,
714 coprocessor,
715 copy,
716 copy_closures,
717 copy_nonoverlapping,
718 copysignf16,
719 copysignf32,
720 copysignf64,
721 copysignf128,
722 core,
723 core_panic,
724 core_panic_2015_macro,
725 core_panic_macro,
726 coroutine,
727 coroutine_clone,
728 coroutine_resume,
729 coroutine_return,
730 coroutine_state,
731 coroutine_yield,
732 coroutines,
733 cosf16,
734 cosf32,
735 cosf64,
736 cosf128,
737 count,
738 coverage,
739 coverage_attribute,
740 cr,
741 crate_in_paths,
742 crate_local,
743 crate_name,
744 crate_type,
745 crate_visibility_modifier,
746 crt_dash_static: "crt-static",
747 csky,
748 csky_target_feature,
749 cstr_type,
750 cstring_type,
751 ctlz,
752 ctlz_nonzero,
753 ctpop,
754 ctr,
755 cttz,
756 cttz_nonzero,
757 custom_attribute,
758 custom_code_classes_in_docs,
759 custom_derive,
760 custom_inner_attributes,
761 custom_mir,
762 custom_test_frameworks,
763 d32,
764 dead_code,
765 dead_code_pub_in_binary,
766 dealloc,
767 debug,
768 debug_assert_eq_macro,
769 debug_assert_macro,
770 debug_assert_ne_macro,
771 debug_assertions,
772 debug_struct_fields_finish,
773 debug_tuple_fields_finish,
774 debugger_visualizer,
775 decl_macro,
776 declare_lint_pass,
777 decorated,
778 default_alloc_error_handler,
779 default_field_values,
780 default_fn,
781 default_lib_allocator,
782 default_method_body_is_const,
783 default_trait1,
788 default_trait2,
789 default_trait3,
790 default_trait4,
791 default_type_parameter_fallback,
793 default_type_params,
794 define_opaque,
795 deny,
796 deprecated,
797 deprecated_safe,
798 deprecated_suggestion,
799 deref,
800 deref_method,
801 deref_mut,
802 deref_patterns,
803 deref_pure,
804 deref_target,
805 derive,
806 derive_const,
807 derive_const_issue: "118304",
808 derive_default_enum,
809 derive_from,
810 derive_smart_pointer,
811 destruct,
812 destructuring_assignment,
813 diagnostic,
814 diagnostic_namespace,
815 diagnostic_on_const,
816 diagnostic_on_move,
817 diagnostic_on_type_error,
818 diagnostic_on_unknown,
819 diagnostic_on_unmatch_args,
820 diagnostic_on_unmatched_args,
821 dialect,
822 direct,
823 discriminant_kind,
824 discriminant_type,
825 discriminant_value,
826 disjoint_bitor,
827 dispatch_from_dyn,
828 div,
829 div_assign,
830 diverging_block_default,
831 dl,
832 do_not_recommend,
833 doc,
834 doc_alias,
835 doc_auto_cfg,
836 doc_cfg,
837 doc_cfg_hide,
838 doc_keyword,
839 doc_masked,
840 doc_notable_trait,
841 doc_primitive,
842 doc_spotlight,
843 doctest,
844 dotdot_in_tuple_patterns,
845 dotdoteq_in_patterns,
846 dreg,
847 dreg_low8,
848 dreg_low16,
849 drop,
850 drop_glue,
851 drop_in_place,
852 drop_types_in_const,
853 dropck_eyepatch,
854 dropck_parametricity,
855 dummy: "<!dummy!>", dummy_cgu_name,
857 dylib,
858 dyn_compatible_for_dispatch,
859 dyn_metadata,
860 dyn_star,
861 dyn_trait,
862 dynamic_no_pic: "dynamic-no-pic",
863 edition_panic,
864 effective_target_features,
865 effects,
866 eh_personality,
867 eii,
868 eii_declaration,
869 eii_internals,
870 eii_shared_macro,
871 element_ty,
872 elf,
873 empty: "",
881 empty_braces: "{}",
882 empty_brackets: "[]",
883 empty_parens: "()",
884 enable,
885 end,
886 entry_nops,
887 env,
888 env_CFG_RELEASE: env!("CFG_RELEASE"),
889 eq,
890 ergonomic_clones,
891 ermsb_target_feature,
892 exact_div,
893 except,
894 exception,
895 exception_handling: "exception-handling",
896 exclusive_range_pattern,
897 exhaustive_integer_patterns,
898 exhaustive_patterns,
899 existential_type,
900 exp2f16,
901 exp2f32,
902 exp2f64,
903 exp2f128,
904 expand1,
905 expand2,
906 expect,
907 expected,
908 expf16,
909 expf32,
910 expf64,
911 expf128,
912 explicit_extern_abis,
913 explicit_generic_args_with_impl_trait,
914 explicit_tail_calls,
915 export_name,
916 export_stable,
917 export_symbols: "export-symbols",
918 expr,
919 expr_2021,
920 expr_fragment_specifier_2024,
921 extended_key_value_attributes,
922 extended_varargs_abi_support,
923 extendedl32r,
924 extern_absolute_paths,
925 extern_crate_item_prelude,
926 extern_crate_self,
927 extern_in_paths,
928 extern_item_impls,
929 extern_prelude,
930 extern_system_varargs,
931 extern_types,
932 extern_weak,
933 external,
934 external_doc,
935 f16,
936 f16_nan,
937 f16c_target_feature,
938 f32,
939 f32_nan,
940 f64,
941 f64_nan,
942 f128,
943 f128_nan,
944 fabs,
945 fadd_algebraic,
946 fadd_fast,
947 fake_variadic,
948 fallback,
949 fdiv_algebraic,
950 fdiv_fast,
951 feature,
952 fence,
953 ferris: "🦀",
954 fetch_update,
955 ffi_const,
956 ffi_pure,
957 ffi_returns_twice,
958 field,
959 field_base,
960 field_init_shorthand,
961 field_of,
962 field_offset,
963 field_projections,
964 field_representing_type,
965 field_representing_type_actual_type_id,
966 field_representing_type_raw,
967 field_type,
968 fields,
969 file,
970 final_associated_functions,
971 float_to_int_unchecked,
972 floorf16,
973 floorf32,
974 floorf64,
975 floorf128,
976 fma4_target_feature,
977 fmaf16,
978 fmaf32,
979 fmaf64,
980 fmaf128,
981 fmt,
982 fmt_debug,
983 fmul_algebraic,
984 fmul_fast,
985 fmuladdf16,
986 fmuladdf32,
987 fmuladdf64,
988 fmuladdf128,
989 fn_align,
990 fn_body,
991 fn_delegation,
992 fn_must_use,
993 fn_mut,
994 fn_once,
995 fn_once_output,
996 fn_ptr_addr,
997 fn_ptr_trait,
998 forbid,
999 force_target_feature,
1000 forget,
1001 format_args,
1002 format_args_capture,
1003 format_args_nl,
1004 format_argument,
1005 format_arguments,
1006 format_macro,
1007 format_placeholder,
1008 format_unsafe_arg,
1009 fp,
1010 framework,
1011 freeze,
1012 freeze_impls,
1013 freg,
1014 frem_algebraic,
1015 frem_fast,
1016 from,
1017 from_desugaring,
1018 from_iter,
1019 from_output,
1020 from_residual,
1021 from_size_align_unchecked,
1022 from_size_alignment_unchecked,
1023 from_str,
1024 from_str_nonconst,
1025 from_usize,
1026 from_yeet,
1027 frontmatter,
1028 fsub_algebraic,
1029 fsub_fast,
1030 full,
1031 fundamental,
1032 fused_iterator,
1033 future_output,
1034 future_trait,
1035 fxsr,
1036 gdb_script_file,
1037 ge,
1038 gen_blocks,
1039 gen_future,
1040 generator_clone,
1041 generators,
1042 generic_arg_infer,
1043 generic_assert,
1044 generic_associated_types,
1045 generic_associated_types_extended,
1046 generic_const_args,
1047 generic_const_exprs,
1048 generic_const_items,
1049 generic_const_parameter_types,
1050 generic_param_attrs,
1051 generic_pattern_types,
1052 generics,
1053 get_context,
1054 global_alloc_ty,
1055 global_allocator,
1056 global_asm,
1057 global_registration,
1058 globs,
1059 gpu_kernel: "gpu-kernel",
1060 gpu_launch_sized_workgroup_mem,
1061 gt,
1062 guard,
1063 guard_patterns,
1064 half_open_range_patterns,
1065 half_open_range_patterns_in_slices,
1066 hash,
1067 hexagon,
1068 hexagon_target_feature,
1069 hidden,
1070 hide,
1071 highpriinterrupts,
1072 hint,
1073 homogeneous_aggregate,
1074 html_favicon_url,
1075 html_logo_url,
1076 html_no_source,
1077 html_playground_url,
1078 html_root_url,
1079 hvx,
1080 hvx_length64b: "hvx-length64b",
1081 hvx_length128b: "hvx-length128b",
1082 hwaddress,
1083 i8,
1084 i16,
1085 i32,
1086 i64,
1087 i128,
1088 i128_type,
1089 ident,
1090 if_let,
1091 if_let_guard,
1092 if_let_rescope,
1093 if_while_or_patterns,
1094 ignore,
1095 immediate_abort: "immediate-abort",
1096 impl_header_lifetime_elision,
1097 impl_lint_pass,
1098 impl_restriction,
1099 impl_trait_in_assoc_type,
1100 impl_trait_in_bindings,
1101 impl_trait_in_fn_trait_return,
1102 impl_trait_projections,
1103 implied_by,
1104 import,
1105 import_name_type,
1106 import_shadowing,
1107 import_trait_associated_functions,
1108 imported_main,
1109 in_band_lifetimes,
1110 include,
1111 include_bytes,
1112 include_str,
1113 inclusive_range_syntax,
1114 incomplete_features,
1115 index,
1116 index_mut,
1117 infer_outlives_requirements,
1118 infer_static_outlives_requirements,
1119 inherent_associated_types,
1120 initial,
1121 inlateout,
1122 inline,
1123 inline_const,
1124 inline_const_pat,
1125 inout,
1126 inputs,
1127 instruction_set,
1128 instrument_fn,
1129 integer_: "integer", integral,
1131 internal,
1132 internal_eq_trait_method_impls,
1133 internal_features,
1134 interrupt,
1135 into_async_iter_into_iter,
1136 into_future,
1137 into_iter,
1138 into_try_type,
1139 intra_doc_pointers,
1140 intrinsics,
1141 irrefutable_let_patterns,
1142 is,
1143 is_auto,
1144 is_val_statically_known,
1145 isa_attribute,
1146 isize,
1147 issue,
1148 issue_5723_bootstrap,
1149 issue_tracker_base_url,
1150 item,
1151 item_like_imports,
1152 iter,
1153 iter_mut,
1154 iterator,
1155 iterator_collect_fn,
1156 kcfi,
1157 kernel_address,
1158 kernel_hwaddress,
1159 keylocker_x86,
1160 keyword,
1161 kind,
1162 kreg,
1163 kreg0,
1164 label,
1165 label_break_value,
1166 lahfsahf_target_feature,
1167 lang,
1168 lang_items,
1169 large_assignments,
1170 last,
1171 lateout,
1172 lazy_normalization_consts,
1173 lazy_type_alias,
1174 le,
1175 legacy_receiver,
1176 len,
1177 let_chains,
1178 let_else,
1179 lhs,
1180 lib,
1181 libc,
1182 lifetime,
1183 lifetime_capture_rules_2024,
1184 lifetimes,
1185 line,
1186 link,
1187 link_arg_attribute,
1188 link_args,
1189 link_cfg,
1190 link_dash_arg: "link-arg",
1191 link_llvm_intrinsics,
1192 link_name,
1193 link_ordinal,
1194 link_section,
1195 linkage,
1196 linker,
1197 linker_info,
1198 linker_messages,
1199 linkonce,
1200 linkonce_odr,
1201 lint_reasons,
1202 literal,
1203 little, big,
1204 load,
1205 loaded_from_disk,
1206 local,
1207 local_inner_macros,
1208 log2f16,
1209 log2f32,
1210 log2f64,
1211 log2f128,
1212 log10f16,
1213 log10f32,
1214 log10f64,
1215 log10f128,
1216 log_syntax,
1217 logf16,
1218 logf32,
1219 logf64,
1220 logf128,
1221 loongarch32,
1222 loongarch64,
1223 loongarch_target_feature,
1224 loop_break_value,
1225 loop_hints,
1226 loop_match,
1227 lr,
1228 lt,
1229 m68k,
1230 m68k_target_feature,
1231 mac16,
1232 macho: "mach-o",
1233 macro_at_most_once_rep,
1234 macro_attr,
1235 macro_attributes_in_derive_output,
1236 macro_derive,
1237 macro_escape,
1238 macro_export,
1239 macro_guard_matcher,
1240 macro_lifetime_matcher,
1241 macro_literal_matcher,
1242 macro_metavar_expr,
1243 macro_metavar_expr_concat,
1244 macro_reexport,
1245 macro_use,
1246 macro_vis_matcher,
1247 macros_in_extern,
1248 main,
1249 managed_boxes,
1250 manually_drop,
1251 map,
1252 map_err,
1253 marker,
1254 marker_trait_attr,
1255 masked,
1256 match_beginning_vert,
1257 match_default_bindings,
1258 maximum_number_nsz_f16,
1259 maximum_number_nsz_f32,
1260 maximum_number_nsz_f64,
1261 maximum_number_nsz_f128,
1262 maximumf16,
1263 maximumf32,
1264 maximumf64,
1265 maximumf128,
1266 may_dangle,
1267 may_unwind,
1268 maybe_dangling,
1269 maybe_uninit,
1270 maybe_uninit_uninit,
1271 maybe_uninit_zeroed,
1272 mem,
1273 mem_align_const,
1274 mem_discriminant,
1275 mem_drop,
1276 mem_forget,
1277 mem_size_const,
1278 mem_swap,
1279 mem_uninitialized,
1280 mem_variant_count,
1281 mem_zeroed,
1282 member_constraints,
1283 memory,
1284 memtag,
1285 message,
1286 meta,
1287 meta_sized,
1288 metadata_type,
1289 mgca_type_const_syntax,
1290 min_adt_const_params,
1291 min_const_fn,
1292 min_const_generics,
1293 min_const_unsafe_fn,
1294 min_exhaustive_patterns,
1295 min_generic_const_args,
1296 min_specialization,
1297 min_type_alias_impl_trait,
1298 minimum_number_nsz_f16,
1299 minimum_number_nsz_f32,
1300 minimum_number_nsz_f64,
1301 minimum_number_nsz_f128,
1302 minimumf16,
1303 minimumf32,
1304 minimumf64,
1305 minimumf128,
1306 mips,
1307 mips32r6,
1308 mips64,
1309 mips64r6,
1310 mips_target_feature,
1311 mir_assume,
1312 mir_basic_block,
1313 mir_call,
1314 mir_cast_ptr_to_ptr,
1315 mir_cast_transmute,
1316 mir_cast_unsize,
1317 mir_checked,
1318 mir_debuginfo,
1319 mir_discriminant,
1320 mir_drop,
1321 mir_field,
1322 mir_goto,
1323 mir_make_place,
1324 mir_move,
1325 mir_offset,
1326 mir_ptr_metadata,
1327 mir_return,
1328 mir_return_to,
1329 mir_set_discriminant,
1330 mir_static,
1331 mir_static_mut,
1332 mir_storage_dead,
1333 mir_storage_live,
1334 mir_tail_call,
1335 mir_unreachable,
1336 mir_unwind_cleanup,
1337 mir_unwind_continue,
1338 mir_unwind_resume,
1339 mir_unwind_terminate,
1340 mir_unwind_terminate_reason,
1341 mir_unwind_unreachable,
1342 mir_variant,
1343 miri,
1344 misc,
1345 miscsr,
1346 mmx_reg,
1347 modifiers,
1348 module,
1349 module_path,
1350 more_maybe_bounds,
1351 more_qualified_paths,
1352 more_struct_aliases,
1353 movbe_target_feature,
1354 move_expr,
1355 move_ref_pattern,
1356 move_size_limit,
1357 movrs_target_feature,
1358 msp430,
1359 mul,
1360 mul_assign,
1361 mul_with_overflow,
1362 multiple_supertrait_upcastable,
1363 must_not_suspend,
1364 must_use,
1365 mut_preserve_binding_mode_2024,
1366 mut_ref,
1367 mut_restriction,
1368 mutable,
1369 naked,
1370 naked_asm,
1371 naked_functions,
1372 naked_functions_rustic_abi,
1373 naked_functions_target_feature,
1374 name,
1375 names,
1376 native_link_modifiers,
1377 native_link_modifiers_as_needed,
1378 native_link_modifiers_bundle,
1379 native_link_modifiers_verbatim,
1380 native_link_modifiers_whole_archive,
1381 natvis_file,
1382 ne,
1383 needs_allocator,
1384 needs_drop,
1385 needs_panic_runtime,
1386 neg,
1387 negate_unsigned,
1388 negative_bounds,
1389 negative_impls,
1390 neon,
1391 nested,
1392 never,
1393 never_patterns,
1394 never_type,
1395 never_type_fallback,
1396 new,
1397 new_binary,
1398 new_debug,
1399 new_debug_noop,
1400 new_display,
1401 new_lower_exp,
1402 new_lower_hex,
1403 new_octal,
1404 new_pointer,
1405 new_range,
1406 new_unchecked,
1407 new_upper_exp,
1408 new_upper_hex,
1409 next,
1410 niko,
1411 nll,
1412 no,
1413 no_builtins,
1414 no_core,
1415 no_coverage,
1416 no_crate_inject,
1417 no_debug,
1418 no_default_passes,
1419 no_implicit_prelude,
1420 no_inline,
1421 no_link,
1422 no_main,
1423 no_mangle,
1424 no_sanitize,
1425 no_stack_check,
1426 no_std,
1427 nomem,
1428 non_ascii_idents,
1429 non_exhaustive,
1430 non_exhaustive_omitted_patterns_lint,
1431 non_lifetime_binders,
1432 non_modrs_mods,
1433 nonblocking,
1434 none,
1435 nontemporal_store,
1436 noop_method_borrow,
1437 noop_method_clone,
1438 noop_method_deref,
1439 noprefix,
1440 noreturn,
1441 nostack,
1442 not,
1443 notable_trait,
1444 note,
1445 null,
1446 nvptx64,
1447 nvptx_target_feature,
1448 object_safe_for_dispatch,
1449 of,
1450 off,
1451 offload,
1452 offload_kernel,
1453 offset,
1454 offset_of,
1455 offset_of_enum,
1456 offset_of_nested,
1457 offset_of_slice,
1458 ok_or_else,
1459 old_name,
1460 omit_gdb_pretty_printer_section,
1461 on,
1462 on_const,
1463 on_move,
1464 on_type_error,
1465 on_unimplemented,
1466 on_unknown,
1467 on_unmatched_args,
1468 opaque,
1469 opaque_module_name_placeholder: "<opaque>",
1470 ops,
1471 opt_out_copy,
1472 optimize,
1473 optimize_attribute,
1474 optimized,
1475 optin_builtin_traits,
1476 option,
1477 option_env,
1478 options,
1479 or,
1480 or_patterns,
1481 ord_cmp_method,
1482 other,
1483 out,
1484 output,
1485 overflow_checks,
1486 overlapping_marker_traits,
1487 owned_box,
1488 packed,
1489 packed_bundled_libs,
1490 panic,
1491 panic_2015,
1492 panic_2021,
1493 panic_abort,
1494 panic_bounds_check,
1495 panic_cannot_unwind,
1496 panic_const_add_overflow,
1497 panic_const_async_fn_resumed,
1498 panic_const_async_fn_resumed_drop,
1499 panic_const_async_fn_resumed_panic,
1500 panic_const_async_gen_fn_resumed,
1501 panic_const_async_gen_fn_resumed_drop,
1502 panic_const_async_gen_fn_resumed_panic,
1503 panic_const_coroutine_resumed,
1504 panic_const_coroutine_resumed_drop,
1505 panic_const_coroutine_resumed_panic,
1506 panic_const_div_by_zero,
1507 panic_const_div_overflow,
1508 panic_const_gen_fn_none,
1509 panic_const_gen_fn_none_drop,
1510 panic_const_gen_fn_none_panic,
1511 panic_const_mul_overflow,
1512 panic_const_neg_overflow,
1513 panic_const_rem_by_zero,
1514 panic_const_rem_overflow,
1515 panic_const_shl_overflow,
1516 panic_const_shr_overflow,
1517 panic_const_sub_overflow,
1518 panic_display,
1519 panic_fmt,
1520 panic_handler,
1521 panic_impl,
1522 panic_implementation,
1523 panic_in_cleanup,
1524 panic_info,
1525 panic_invalid_enum_construction,
1526 panic_location,
1527 panic_misaligned_pointer_dereference,
1528 panic_nounwind,
1529 panic_null_pointer_dereference,
1530 panic_runtime,
1531 panic_str_2015,
1532 panic_unwind,
1533 panicking,
1534 param_attrs,
1535 parent_label,
1536 partial_cmp,
1537 partial_ord,
1538 passes,
1539 pat,
1540 pat_param,
1541 patchable_function_entry,
1542 path,
1543 pattern_complexity_limit,
1544 pattern_parentheses,
1545 pattern_type,
1546 pattern_type_range_trait,
1547 pattern_types,
1548 phantom_data,
1549 phase,
1550 pic,
1551 pie,
1552 pin,
1553 pin_drop,
1554 pin_ergonomics,
1555 pin_v2,
1556 platform_intrinsics,
1557 plugin,
1558 plugin_registrar,
1559 plugins,
1560 pointee,
1561 pointee_sized,
1562 pointee_trait,
1563 pointer,
1564 poll,
1565 post_cleanup: "post-cleanup",
1566 post_dash_lto: "post-lto",
1567 postfix_match,
1568 powerpc,
1569 powerpc64,
1570 powerpc_target_feature,
1571 powf16,
1572 powf32,
1573 powf64,
1574 powf128,
1575 powif16,
1576 powif32,
1577 powif64,
1578 powif128,
1579 pre_dash_lto: "pre-lto",
1580 precise_capturing,
1581 precise_capturing_in_traits,
1582 precise_pointer_size_matching,
1583 predicates,
1584 pref_align_of,
1585 prefetch_read_data,
1586 prefetch_read_instruction,
1587 prefetch_write_data,
1588 prefetch_write_instruction,
1589 prefix_nops,
1590 preg,
1591 prelude,
1592 prelude_import,
1593 preserves_flags,
1594 prfchw_target_feature,
1595 prid,
1596 primitive,
1597 proc_dash_macro: "proc-macro",
1598 proc_macro,
1599 proc_macro_attribute,
1600 proc_macro_derive,
1601 proc_macro_expr,
1602 proc_macro_gen,
1603 proc_macro_hygiene,
1604 proc_macro_internals,
1605 proc_macro_mod,
1606 proc_macro_non_items,
1607 proc_macro_path_invoc,
1608 profiler_runtime,
1609 ptr,
1610 ptr_cast,
1611 ptr_cast_const,
1612 ptr_cast_mut,
1613 ptr_const_is_null,
1614 ptr_copy,
1615 ptr_copy_nonoverlapping,
1616 ptr_from_ref,
1617 ptr_guaranteed_cmp,
1618 ptr_is_null,
1619 ptr_mask,
1620 ptr_metadata,
1621 ptr_null,
1622 ptr_null_mut,
1623 ptr_offset_from,
1624 ptr_offset_from_unsigned,
1625 ptr_read,
1626 ptr_read_unaligned,
1627 ptr_replace,
1628 ptr_swap,
1629 ptr_swap_nonoverlapping,
1630 ptr_write,
1631 ptr_write_bytes,
1632 ptr_write_unaligned,
1633 ptr_write_volatile,
1634 pub_macro_rules,
1635 pub_restricted,
1636 public,
1637 pure,
1638 pushpop_unsafe,
1639 qreg,
1640 qreg_low4,
1641 qreg_low8,
1642 quad_precision_float,
1643 question_mark,
1644 quote,
1645 range_inclusive_new,
1646 raw_dash_dylib: "raw-dylib",
1647 raw_dylib,
1648 raw_dylib_elf,
1649 raw_eq,
1650 raw_identifiers,
1651 raw_ref_op,
1652 re_rebalance_coherence,
1653 read_via_copy,
1654 readonly,
1655 realloc,
1656 realtime,
1657 reason,
1658 reborrow,
1659 receiver,
1660 receiver_target,
1661 recursion_limit,
1662 reexport_test_harness_main,
1663 ref_pat_eat_one_layer_2024,
1664 ref_pat_eat_one_layer_2024_structural,
1665 ref_pat_everywhere,
1666 ref_unwind_safe_trait,
1667 reference,
1668 reflect,
1669 reg,
1670 reg16,
1671 reg32,
1672 reg64,
1673 reg_abcd,
1674 reg_addr,
1675 reg_byte,
1676 reg_data,
1677 reg_iw,
1678 reg_nonzero,
1679 reg_pair,
1680 reg_ptr,
1681 reg_upper,
1682 register_attr,
1683 register_tool,
1684 relaxed_adts,
1685 relaxed_struct_unsize,
1686 relocation_model,
1687 rem,
1688 rem_assign,
1689 repr,
1690 repr128,
1691 repr_align,
1692 repr_align_enum,
1693 repr_packed,
1694 repr_simd,
1695 repr_transparent,
1696 require,
1697 reserve_x18: "reserve-x18",
1698 residual,
1699 result,
1700 result_ffi_guarantees,
1701 return_address,
1702 return_position_impl_trait_in_trait,
1703 return_type_notation,
1704 right_arrow: "->",
1705 riscv32,
1706 riscv64,
1707 riscv_target_feature,
1708 rlib,
1709 ropi,
1710 ropi_rwpi: "ropi-rwpi",
1711 rotate_left,
1712 rotate_right,
1713 round_ties_even_f16,
1714 round_ties_even_f32,
1715 round_ties_even_f64,
1716 round_ties_even_f128,
1717 roundf16,
1718 roundf32,
1719 roundf64,
1720 roundf128,
1721 rtm_target_feature,
1722 runtime,
1723 rust,
1724 rust_2015,
1725 rust_2018,
1726 rust_2018_preview,
1727 rust_2021,
1728 rust_2024,
1729 rust_analyzer,
1730 rust_begin_unwind,
1731 rust_cold_cc,
1732 rust_eh_personality,
1733 rust_future,
1734 rust_logo,
1735 rust_out,
1736 rust_preserve_none_cc,
1737 rust_tail_cc,
1738 rustc,
1739 rustc_abi,
1740 rustc_align,
1742 rustc_align_static,
1743 rustc_allocator,
1744 rustc_allocator_zeroed,
1745 rustc_allocator_zeroed_variant,
1746 rustc_allow_const_fn_unstable,
1747 rustc_allow_incoherent_impl,
1748 rustc_allowed_through_unstable_modules,
1749 rustc_as_ptr,
1750 rustc_attrs,
1751 rustc_autodiff,
1752 rustc_builtin_macro,
1753 rustc_capture_analysis,
1754 rustc_clean,
1755 rustc_coherence_is_core,
1756 rustc_coinductive,
1757 rustc_comptime,
1758 rustc_confusables,
1759 rustc_const_stable,
1760 rustc_const_stable_indirect,
1761 rustc_const_unstable,
1762 rustc_conversion_suggestion,
1763 rustc_deallocator,
1764 rustc_default_body_unstable,
1765 rustc_delayed_bug_from_inside_query,
1766 rustc_deny_explicit_impl,
1767 rustc_deprecated_safe_2024,
1768 rustc_diagnostic_item,
1769 rustc_diagnostic_macros,
1770 rustc_do_not_const_check,
1771 rustc_doc_primitive,
1772 rustc_driver,
1773 rustc_dummy,
1774 rustc_dump_def_parents,
1775 rustc_dump_def_path,
1776 rustc_dump_generics,
1777 rustc_dump_hidden_type_of_opaques,
1778 rustc_dump_inferred_outlives,
1779 rustc_dump_item_bounds,
1780 rustc_dump_layout,
1781 rustc_dump_object_lifetime_defaults,
1782 rustc_dump_predicates,
1783 rustc_dump_symbol_name,
1784 rustc_dump_user_args,
1785 rustc_dump_variances,
1786 rustc_dump_variances_of_opaques,
1787 rustc_dump_vtable,
1788 rustc_dyn_incompatible_trait,
1789 rustc_effective_visibility,
1790 rustc_eii_foreign_item,
1791 rustc_evaluate_where_clauses,
1792 rustc_expected_cgu_reuse,
1793 rustc_force_inline,
1794 rustc_has_incoherent_inherent_impls,
1795 rustc_if_this_changed,
1796 rustc_inherit_overflow_checks,
1797 rustc_insignificant_dtor,
1798 rustc_intrinsic,
1799 rustc_intrinsic_const_stable_indirect,
1800 rustc_legacy_const_generics,
1801 rustc_lint_opt_deny_field_access,
1802 rustc_lint_opt_ty,
1803 rustc_lint_query_instability,
1804 rustc_lint_untracked_query_information,
1805 rustc_macro_transparency,
1806 rustc_main,
1807 rustc_mir,
1808 rustc_must_implement_one_of,
1809 rustc_must_match_exhaustively,
1810 rustc_never_returns_null_ptr,
1811 rustc_never_type_options,
1812 rustc_no_implicit_autorefs,
1813 rustc_no_implicit_bounds,
1814 rustc_no_mir_inline,
1815 rustc_no_writable,
1816 rustc_non_const_trait_method,
1817 rustc_nonnull_optimization_guaranteed,
1818 rustc_nounwind,
1819 rustc_objc_class,
1820 rustc_objc_selector,
1821 rustc_offload_kernel,
1822 rustc_on_unimplemented,
1823 rustc_paren_sugar,
1824 rustc_partition_codegened,
1825 rustc_partition_reused,
1826 rustc_pass_by_value,
1827 rustc_pass_indirectly_in_non_rustic_abis,
1828 rustc_peek,
1829 rustc_peek_liveness,
1830 rustc_peek_maybe_init,
1831 rustc_peek_maybe_uninit,
1832 rustc_preserve_ub_checks,
1833 rustc_private,
1834 rustc_proc_macro_decls,
1835 rustc_promotable,
1836 rustc_pub_transparent,
1837 rustc_reallocator,
1838 rustc_regions,
1839 rustc_reservation_impl,
1840 rustc_scalable_vector,
1841 rustc_should_not_be_called_on_const_items,
1842 rustc_simd_monomorphize_lane_limit,
1843 rustc_skip_during_method_dispatch,
1844 rustc_specialization_trait,
1845 rustc_std_internal_symbol,
1846 rustc_strict_coherence,
1847 rustc_test_marker,
1848 rustc_then_this_would_need,
1849 rustc_trivial_field_reads,
1850 rustc_unsafe_specialization_marker,
1851 rustdoc,
1852 rustdoc_internals,
1853 rustdoc_missing_doc_code_examples,
1854 rustfmt,
1855 rvalue_static_promotion,
1856 rvector,
1857 rwpi,
1858 s32c1i,
1859 s390x,
1860 s390x_target_feature,
1861 s390x_target_feature_vector,
1862 safety,
1863 sanitize,
1864 sanitizer_cfi_generalize_pointers,
1865 sanitizer_cfi_normalize_integers,
1866 sanitizer_runtime,
1867 saturating_add,
1868 saturating_sub,
1869 sdylib,
1870 search_unbox,
1871 select_unpredictable,
1872 self_in_typedefs,
1873 self_struct_ctor,
1874 semiopaque,
1875 sgpr32,
1876 sgpr64,
1877 sgpr96,
1878 sgpr128,
1879 sgpr256,
1880 sgpr512,
1881 sha2,
1882 sha3,
1883 sha512_sm_x86,
1884 shadow_call_stack,
1885 shallow,
1886 shl,
1887 shl_assign,
1888 shorter_tail_lifetimes,
1889 should_panic,
1890 show,
1891 shr,
1892 shr_assign,
1893 signed,
1894 simd,
1895 simd_add,
1896 simd_and,
1897 simd_arith_offset,
1898 simd_as,
1899 simd_bitmask,
1900 simd_bitreverse,
1901 simd_bswap,
1902 simd_carryless_mul,
1903 simd_cast,
1904 simd_cast_ptr,
1905 simd_ceil,
1906 simd_ctlz,
1907 simd_ctpop,
1908 simd_cttz,
1909 simd_div,
1910 simd_eq,
1911 simd_expose_provenance,
1912 simd_extract,
1913 simd_extract_dyn,
1914 simd_fabs,
1915 simd_fcos,
1916 simd_fexp,
1917 simd_fexp2,
1918 simd_ffi,
1919 simd_flog,
1920 simd_flog2,
1921 simd_flog10,
1922 simd_floor,
1923 simd_fma,
1924 simd_fsin,
1925 simd_fsqrt,
1926 simd_funnel_shl,
1927 simd_funnel_shr,
1928 simd_gather,
1929 simd_ge,
1930 simd_gt,
1931 simd_insert,
1932 simd_insert_dyn,
1933 simd_le,
1934 simd_lt,
1935 simd_masked_load,
1936 simd_masked_store,
1937 simd_maximum_number_nsz,
1938 simd_minimum_number_nsz,
1939 simd_mul,
1940 simd_ne,
1941 simd_neg,
1942 simd_or,
1943 simd_reduce_add_ordered,
1944 simd_reduce_add_unordered,
1945 simd_reduce_all,
1946 simd_reduce_and,
1947 simd_reduce_any,
1948 simd_reduce_max,
1949 simd_reduce_min,
1950 simd_reduce_mul_ordered,
1951 simd_reduce_mul_unordered,
1952 simd_reduce_or,
1953 simd_reduce_xor,
1954 simd_relaxed_fma,
1955 simd_rem,
1956 simd_round,
1957 simd_round_ties_even,
1958 simd_saturating_add,
1959 simd_saturating_sub,
1960 simd_scatter,
1961 simd_select,
1962 simd_select_bitmask,
1963 simd_shl,
1964 simd_shr,
1965 simd_shuffle,
1966 simd_shuffle_const_generic,
1967 simd_splat,
1968 simd_sub,
1969 simd_trunc,
1970 simd_with_exposed_provenance,
1971 simd_xor,
1972 since,
1973 sinf16,
1974 sinf32,
1975 sinf64,
1976 sinf128,
1977 size,
1978 size_of,
1979 size_of_type_id,
1980 size_of_val,
1981 sized,
1982 sized_hierarchy,
1983 slice,
1984 slice_from_raw_parts,
1985 slice_from_raw_parts_mut,
1986 slice_get_unchecked,
1987 slice_len_fn,
1988 slice_patterns,
1989 slicing_syntax,
1990 soft_float: "soft-float",
1991 sparc,
1992 sparc64,
1993 sparc_target_feature,
1994 spe_acc,
1995 specialization,
1996 speed,
1997 spirv,
1998 splat,
1999 spotlight,
2000 sqrtf16,
2001 sqrtf32,
2002 sqrtf64,
2003 sqrtf128,
2004 sreg,
2005 sreg_low16,
2006 sse,
2007 sse2,
2008 sse4a_target_feature,
2009 stable,
2010 staged_api,
2011 start,
2012 state,
2013 static_align,
2014 static_in_const,
2015 static_nobundle,
2016 static_recursion,
2017 staticlib,
2018 std,
2019 std_lib_injection,
2020 std_panic,
2021 std_panic_2015_macro,
2022 std_panic_macro,
2023 stmt,
2024 stmt_expr_attributes,
2025 stop_after_dataflow,
2026 store,
2027 str,
2028 str_from_utf8,
2029 str_from_utf8_mut,
2030 str_from_utf8_unchecked,
2031 str_from_utf8_unchecked_mut,
2032 str_inherent_from_utf8,
2033 str_inherent_from_utf8_mut,
2034 str_inherent_from_utf8_unchecked,
2035 str_inherent_from_utf8_unchecked_mut,
2036 strict_provenance_lints,
2037 string_deref_patterns,
2038 stringify,
2039 struct_field_attributes,
2040 struct_inherit,
2041 struct_variant,
2042 structural_match,
2043 structural_peq,
2044 sub,
2045 sub_assign,
2046 sub_with_overflow,
2047 suggestion,
2048 super_let,
2049 supertrait_item_shadowing,
2050 sve_cast,
2051 sve_tuple_create2,
2052 sve_tuple_create3,
2053 sve_tuple_create4,
2054 sve_tuple_get,
2055 sve_tuple_set,
2056 sym,
2057 sync,
2058 synthetic,
2059 t32,
2060 target,
2061 target_abi,
2062 target_arch,
2063 target_endian,
2064 target_env,
2065 target_family,
2066 target_feature,
2067 target_feature_11,
2068 target_feature_inline_always,
2069 target_has_atomic,
2070 target_has_atomic_load_store,
2071 target_has_atomic_primitive_alignment,
2072 target_has_reliable_f16,
2073 target_has_reliable_f16_math,
2074 target_has_reliable_f128,
2075 target_has_reliable_f128_math,
2076 target_object_format,
2077 target_os,
2078 target_pointer_width,
2079 target_thread_local,
2080 target_vendor,
2081 tbm_target_feature,
2082 termination,
2083 termination_trait,
2084 termination_trait_test,
2085 test,
2086 test_2018_feature,
2087 test_accepted_feature,
2088 test_case,
2089 test_incomplete_feature,
2090 test_removed_feature,
2091 test_runner,
2092 test_unstable_lint,
2093 thread,
2094 thread_local,
2095 threadptr,
2096 three_way_compare,
2097 thumb2,
2098 thumb_mode: "thumb-mode",
2099 time,
2100 tmm_reg,
2101 to_owned_method,
2102 to_string,
2103 to_vec,
2104 tool_attributes,
2105 tool_lints,
2106 trace_macros,
2107 track_caller,
2108 trait_alias,
2109 trait_ty,
2110 trait_upcasting,
2111 transmute,
2112 transmute_generic_consts,
2113 transmute_opts,
2114 transmute_trait,
2115 transmute_unchecked,
2116 transparent,
2117 transparent_enums,
2118 transparent_unions,
2119 trivial_bounds,
2120 trivial_clone,
2121 truncf16,
2122 truncf32,
2123 truncf64,
2124 truncf128,
2125 try_blocks,
2126 try_blocks_heterogeneous,
2127 try_capture,
2128 try_from,
2129 try_into,
2130 try_trait_v2,
2131 try_trait_v2_residual,
2132 try_update,
2133 tt,
2134 tuple,
2135 tuple_indexing,
2136 tuple_trait,
2137 two_phase,
2138 ty,
2139 type_alias_enum_variants,
2140 type_alias_impl_trait,
2141 type_ascribe,
2142 type_ascription,
2143 type_changing_struct_update,
2144 type_id,
2145 type_id_eq,
2146 type_id_field_representing_type,
2147 type_id_fields,
2148 type_id_variants,
2149 type_id_vtable,
2150 type_info,
2151 type_ir,
2152 type_ir_infer_ctxt_like,
2153 type_ir_inherent,
2154 type_ir_interner,
2155 type_length_limit,
2156 type_macros,
2157 type_name,
2158 type_of,
2159 type_privacy_lints,
2160 typed_swap_nonoverlapping,
2161 u8,
2162 u8_legacy_const_max,
2163 u8_legacy_const_min,
2164 u8_legacy_fn_max_value,
2165 u8_legacy_fn_min_value,
2166 u8_legacy_mod,
2167 u16,
2168 u16_legacy_const_max,
2169 u16_legacy_const_min,
2170 u16_legacy_fn_max_value,
2171 u16_legacy_fn_min_value,
2172 u16_legacy_mod,
2173 u32,
2174 u32_legacy_const_max,
2175 u32_legacy_const_min,
2176 u32_legacy_fn_max_value,
2177 u32_legacy_fn_min_value,
2178 u32_legacy_mod,
2179 u64,
2180 u64_legacy_const_max,
2181 u64_legacy_const_min,
2182 u64_legacy_fn_max_value,
2183 u64_legacy_fn_min_value,
2184 u64_legacy_mod,
2185 u128,
2186 u128_legacy_const_max,
2187 u128_legacy_const_min,
2188 u128_legacy_fn_max_value,
2189 u128_legacy_fn_min_value,
2190 u128_legacy_mod,
2191 ub_checks,
2192 unaligned_volatile_load,
2193 unaligned_volatile_store,
2194 unboxed_closures,
2195 unchecked_add,
2196 unchecked_div,
2197 unchecked_funnel_shl,
2198 unchecked_funnel_shr,
2199 unchecked_mul,
2200 unchecked_rem,
2201 unchecked_shl,
2202 unchecked_shr,
2203 unchecked_sub,
2204 undecorated,
2205 underscore_const_names,
2206 underscore_imports,
2207 underscore_lifetimes,
2208 uniform_paths,
2209 unimplemented,
2210 unit,
2211 universal_impl_trait,
2212 unix,
2213 unlikely,
2214 unmarked_api,
2215 unnamed_enum_variants,
2216 unnamed_fields,
2217 unpin,
2218 unqualified_local_imports,
2219 unreachable,
2220 unreachable_2015,
2221 unreachable_2015_macro,
2222 unreachable_2021,
2223 unreachable_code,
2224 unreachable_display,
2225 unreachable_macro,
2226 unrestricted_attribute_tokens,
2227 unroll,
2228 unsafe_attributes,
2229 unsafe_binders,
2230 unsafe_block_in_unsafe_fn,
2231 unsafe_cell,
2232 unsafe_cell_raw_get,
2233 unsafe_eii,
2234 unsafe_extern_blocks,
2235 unsafe_fields,
2236 unsafe_no_drop_flag,
2237 unsafe_pinned,
2238 unsafe_unpin,
2239 unsafety,
2240 unsize,
2241 unsized_const_param_ty,
2242 unsized_const_params,
2243 unsized_fn_params,
2244 unsized_locals,
2245 unsized_tuple_coercion,
2246 unstable,
2247 unstable_feature_bound,
2248 unstable_location_reason_default: "this crate is being loaded from the sysroot, an \
2249 unstable location; did you mean to load this crate \
2250 from crates.io via `Cargo.toml` instead?",
2251 unstable_removed,
2252 untagged_unions,
2253 unused_imports,
2254 unwind,
2255 unwind_attributes,
2256 unwind_safe_trait,
2257 unwrap,
2258 unwrap_binder,
2259 unwrap_or,
2260 update,
2261 use_cloned,
2262 use_extern_macros,
2263 use_nested_groups,
2264 used,
2265 used_with_arg,
2266 using,
2267 usize,
2268 usize_legacy_const_max,
2269 usize_legacy_const_min,
2270 usize_legacy_fn_max_value,
2271 usize_legacy_fn_min_value,
2272 usize_legacy_mod,
2273 v1,
2274 v8plus,
2275 va_arg,
2276 va_arg_safe,
2277 va_copy,
2278 va_end,
2279 va_list,
2280 va_start,
2281 val,
2282 validity,
2283 value,
2284 values,
2285 var,
2286 variadic,
2287 variant_count,
2288 variants,
2289 vec,
2290 vector,
2291 verbatim,
2292 version,
2293 vfp2,
2294 vgpr16,
2295 vgpr32,
2296 vgpr64,
2297 vgpr96,
2298 vgpr128,
2299 vgpr160,
2300 vgpr192,
2301 vgpr224,
2302 vgpr256,
2303 vgpr288,
2304 vgpr320,
2305 vgpr352,
2306 vgpr384,
2307 vgpr512,
2308 vgpr1024,
2309 view_types,
2310 vis,
2311 visible_private_types,
2312 volatile,
2313 volatile_copy_memory,
2314 volatile_copy_nonoverlapping_memory,
2315 volatile_load,
2316 volatile_set_memory,
2317 volatile_store,
2318 vreg,
2319 vreg_low16,
2320 vreg_pair,
2321 vsreg,
2322 vsx,
2323 vtable_align,
2324 vtable_size,
2325 warn,
2326 wasip2,
2327 wasm,
2328 wasm32,
2329 wasm64,
2330 wasm_abi,
2331 wasm_import_module,
2332 wasm_target_feature,
2333 weak,
2334 weak_odr,
2335 where_clause_attrs,
2336 while_let,
2337 whole_dash_archive: "whole-archive",
2338 width,
2339 windowed,
2340 windows,
2341 windows_subsystem,
2342 with_negative_coherence,
2343 wrap_binder,
2344 wrapping_add,
2345 wrapping_div,
2346 wrapping_mul,
2347 wrapping_rem,
2348 wrapping_rem_euclid,
2349 wrapping_sub,
2350 wreg,
2351 write_box_via_move,
2352 write_bytes,
2353 write_fmt,
2354 write_macro,
2355 write_str,
2356 write_via_move,
2357 writeln_macro,
2358 x86,
2359 x86_64,
2360 x86_amx_intrinsics,
2361 x87_reg,
2362 x87_target_feature,
2363 xcoff,
2364 xer,
2365 xloop,
2366 xmm_reg,
2367 xop_target_feature,
2368 xtensa,
2369 xtensa_target_feature,
2370 yeet_desugar_details,
2371 yeet_expr,
2372 yes,
2373 yield_expr,
2374 ymm_reg,
2375 yreg,
2376 zca,
2377 zfh,
2378 zfhmin,
2379 zmm_reg,
2380 ztso,
2381 }
2383}
2384
2385pub const STDLIB_STABLE_CRATES: &[Symbol] = &[sym::std, sym::core, sym::alloc, sym::proc_macro];
2388
2389#[derive(#[automatically_derived]
impl ::core::marker::Copy for Ident { }Copy, #[automatically_derived]
impl ::core::clone::Clone for Ident {
#[inline]
fn clone(&self) -> Ident {
let _: ::core::clone::AssertParamIsClone<Symbol>;
let _: ::core::clone::AssertParamIsClone<Span>;
*self
}
}Clone, #[automatically_derived]
impl ::core::cmp::Eq for Ident {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<Symbol>;
let _: ::core::cmp::AssertParamIsEq<Span>;
}
}Eq, const _: () =
{
impl ::rustc_data_structures::stable_hash::StableHash for Ident {
#[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 {
Ident { name: ref __binding_0, span: ref __binding_1 } => {
{ __binding_0.stable_hash(__hcx, __hasher); }
{ __binding_1.stable_hash(__hcx, __hasher); }
}
}
}
}
};StableHash, const _: () =
{
impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
for Ident {
fn encode(&self, __encoder: &mut __E) {
match *self {
Ident { name: ref __binding_0, span: ref __binding_1 } => {
::rustc_serialize::Encodable::<__E>::encode(__binding_0,
__encoder);
::rustc_serialize::Encodable::<__E>::encode(__binding_1,
__encoder);
}
}
}
}
};Encodable, const _: () =
{
impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
for Ident {
fn decode(__decoder: &mut __D) -> Self {
Ident {
name: ::rustc_serialize::Decodable::decode(__decoder),
span: ::rustc_serialize::Decodable::decode(__decoder),
}
}
}
};Decodable)]
2390pub struct Ident {
2391 pub name: Symbol,
2396 pub span: Span,
2397}
2398
2399impl Ident {
2400 #[inline]
2401 pub fn new(name: Symbol, span: Span) -> Ident {
2403 if true {
{
match (&name, &sym::empty) {
(left_val, right_val) => {
if *left_val == *right_val {
let kind = ::core::panicking::AssertKind::Ne;
::core::panicking::assert_failed(kind, &*left_val,
&*right_val, ::core::option::Option::None);
}
}
}
};
};debug_assert_ne!(name, sym::empty);
2404 Ident { name, span }
2405 }
2406
2407 #[inline]
2409 pub fn with_dummy_span(name: Symbol) -> Ident {
2410 Ident::new(name, DUMMY_SP)
2411 }
2412
2413 #[inline]
2418 pub fn dummy() -> Ident {
2419 Ident::with_dummy_span(sym::dummy)
2420 }
2421
2422 pub fn from_str(string: &str) -> Ident {
2424 Ident::with_dummy_span(Symbol::intern(string))
2425 }
2426
2427 pub fn from_str_and_span(string: &str, span: Span) -> Ident {
2429 Ident::new(Symbol::intern(string), span)
2430 }
2431
2432 pub fn with_span_pos(self, span: Span) -> Ident {
2434 Ident::new(self.name, span.with_ctxt(self.span.ctxt()))
2435 }
2436
2437 pub fn without_first_quote(self) -> Ident {
2440 self.as_str()
2441 .strip_prefix('\'')
2442 .map_or(self, |name| Ident::new(Symbol::intern(name), self.span))
2443 }
2444
2445 pub fn normalize_to_macros_2_0(self) -> Ident {
2451 Ident::new(self.name, self.span.normalize_to_macros_2_0())
2452 }
2453
2454 #[inline]
2460 pub fn normalize_to_macro_rules(self) -> Ident {
2461 Ident::new(self.name, self.span.normalize_to_macro_rules())
2462 }
2463
2464 pub fn as_str(&self) -> &str {
2470 self.name.as_str()
2471 }
2472}
2473
2474impl PartialEq for Ident {
2475 #[inline]
2476 fn eq(&self, rhs: &Self) -> bool {
2477 self.name == rhs.name && self.span.eq_ctxt(rhs.span)
2478 }
2479}
2480
2481impl Hash for Ident {
2482 fn hash<H: Hasher>(&self, state: &mut H) {
2483 self.name.hash(state);
2484 self.span.ctxt().hash(state);
2485 }
2486}
2487
2488impl fmt::Debug for Ident {
2489 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
2490 fmt::Display::fmt(self, f)?;
2491 fmt::Debug::fmt(&self.span.ctxt(), f)
2492 }
2493}
2494
2495impl fmt::Display for Ident {
2499 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
2500 fmt::Display::fmt(&IdentPrinter::new(self.name, self.guess_print_mode(), None), f)
2501 }
2502}
2503
2504pub enum IdentPrintMode {
2505 Normal,
2506 RawIdent,
2507 RawLifetime,
2508}
2509
2510pub struct IdentPrinter {
2524 symbol: Symbol,
2525 mode: IdentPrintMode,
2526 convert_dollar_crate: Option<Span>,
2529}
2530
2531impl IdentPrinter {
2532 pub fn new(
2534 symbol: Symbol,
2535 mode: IdentPrintMode,
2536 convert_dollar_crate: Option<Span>,
2537 ) -> IdentPrinter {
2538 IdentPrinter { symbol, mode, convert_dollar_crate }
2539 }
2540
2541 pub fn for_ast_ident(ident: Ident, mode: IdentPrintMode) -> IdentPrinter {
2545 IdentPrinter::new(ident.name, mode, Some(ident.span))
2546 }
2547}
2548
2549impl fmt::Display for IdentPrinter {
2550 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
2551 let s = match self.mode {
2552 IdentPrintMode::Normal
2553 if self.symbol == kw::DollarCrate
2554 && let Some(span) = self.convert_dollar_crate =>
2555 {
2556 let converted = span.ctxt().dollar_crate_name();
2557 if !converted.is_path_segment_keyword() {
2558 f.write_str("::")?;
2559 }
2560 converted
2561 }
2562 IdentPrintMode::Normal => self.symbol,
2563 IdentPrintMode::RawIdent => {
2564 f.write_str("r#")?;
2565 self.symbol
2566 }
2567 IdentPrintMode::RawLifetime => {
2568 f.write_str("'r#")?;
2569 let s = self
2570 .symbol
2571 .as_str()
2572 .strip_prefix("'")
2573 .expect("only lifetime idents should be passed with RawLifetime mode");
2574 Symbol::intern(s)
2575 }
2576 };
2577 s.fmt(f)
2578 }
2579}
2580
2581#[derive(#[automatically_derived]
impl ::core::marker::Copy for MacroRulesNormalizedIdent { }Copy, #[automatically_derived]
impl ::core::clone::Clone for MacroRulesNormalizedIdent {
#[inline]
fn clone(&self) -> MacroRulesNormalizedIdent {
let _: ::core::clone::AssertParamIsClone<Ident>;
*self
}
}Clone, #[automatically_derived]
impl ::core::cmp::Eq for MacroRulesNormalizedIdent {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<Ident>;
}
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for MacroRulesNormalizedIdent {
#[inline]
fn eq(&self, other: &MacroRulesNormalizedIdent) -> bool {
self.0 == other.0
}
}PartialEq, #[automatically_derived]
impl ::core::hash::Hash for MacroRulesNormalizedIdent {
#[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
::core::hash::Hash::hash(&self.0, state)
}
}Hash)]
2587pub struct MacroRulesNormalizedIdent(Ident);
2588
2589impl MacroRulesNormalizedIdent {
2590 #[inline]
2591 pub fn new(ident: Ident) -> Self {
2592 MacroRulesNormalizedIdent(ident.normalize_to_macro_rules())
2593 }
2594
2595 pub fn symbol(&self) -> Symbol {
2596 self.0.name
2597 }
2598
2599 pub fn ident(&self) -> Ident {
2600 self.0
2601 }
2602}
2603
2604impl fmt::Debug for MacroRulesNormalizedIdent {
2605 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
2606 fmt::Debug::fmt(&self.0, f)
2607 }
2608}
2609
2610impl fmt::Display for MacroRulesNormalizedIdent {
2611 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
2612 fmt::Display::fmt(&self.0, f)
2613 }
2614}
2615
2616#[derive(#[automatically_derived]
impl ::core::clone::Clone for Symbol {
#[inline]
fn clone(&self) -> Symbol {
let _: ::core::clone::AssertParamIsClone<SymbolIndex>;
*self
}
}Clone, #[automatically_derived]
impl ::core::marker::Copy for Symbol { }Copy, #[automatically_derived]
impl ::core::cmp::PartialEq for Symbol {
#[inline]
fn eq(&self, other: &Symbol) -> bool { self.0 == other.0 }
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for Symbol {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<SymbolIndex>;
}
}Eq, #[automatically_derived]
impl ::core::cmp::PartialOrd for Symbol {
#[inline]
fn partial_cmp(&self, other: &Symbol)
-> ::core::option::Option<::core::cmp::Ordering> {
::core::option::Option::Some(::core::cmp::Ord::cmp(self, other))
}
}PartialOrd, #[automatically_derived]
impl ::core::cmp::Ord for Symbol {
#[inline]
fn cmp(&self, other: &Symbol) -> ::core::cmp::Ordering {
::core::cmp::Ord::cmp(&self.0, &other.0)
}
}Ord, #[automatically_derived]
impl ::core::hash::Hash for Symbol {
#[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
::core::hash::Hash::hash(&self.0, state)
}
}Hash)]
2626pub struct Symbol(SymbolIndex);
2627
2628impl ::std::fmt::Debug for SymbolIndex {
fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
fmt.write_fmt(format_args!("{0}", self.as_u32()))
}
}rustc_index::newtype_index! {
2630 #[orderable]
2631 struct SymbolIndex {}
2632}
2633
2634impl Symbol {
2635 pub const fn new(n: u32) -> Self {
2638 Symbol(SymbolIndex::from_u32(n))
2639 }
2640
2641 #[rustc_diagnostic_item = "SymbolIntern"]
2643 pub fn intern(str: &str) -> Self {
2644 with_session_globals(|session_globals| session_globals.symbol_interner.intern_str(str))
2645 }
2646
2647 pub fn as_str(&self) -> &str {
2656 with_session_globals(|session_globals| unsafe {
2657 std::mem::transmute::<&str, &str>(session_globals.symbol_interner.get_str(*self))
2658 })
2659 }
2660
2661 pub fn as_u32(self) -> u32 {
2662 self.0.as_u32()
2663 }
2664
2665 pub fn is_empty(self) -> bool {
2666 self == sym::empty
2667 }
2668
2669 pub fn to_ident_string(self) -> String {
2674 if self == sym::empty { String::new() } else { Ident::with_dummy_span(self).to_string() }
2676 }
2677
2678 pub fn find_similar(
2685 self,
2686 candidates: &[Symbol],
2687 ) -> Option<(Symbol, bool)> {
2688 let lowercase = self.as_str().to_lowercase();
2689 let lowercase_sym = Symbol::intern(&lowercase);
2690 if candidates.contains(&lowercase_sym) {
2691 Some((lowercase_sym, true))
2692 } else if let Some(similar_sym) = find_best_match_for_name(candidates, self, None) {
2693 Some((similar_sym, false))
2694 } else {
2695 None
2696 }
2697 }
2698}
2699
2700impl fmt::Debug for Symbol {
2701 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
2702 fmt::Debug::fmt(self.as_str(), f)
2703 }
2704}
2705
2706impl fmt::Display for Symbol {
2707 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
2708 fmt::Display::fmt(self.as_str(), f)
2709 }
2710}
2711
2712impl StableHash for Symbol {
2713 #[inline]
2714 fn stable_hash<Hcx: StableHashCtxt>(&self, hcx: &mut Hcx, hasher: &mut StableHasher) {
2715 self.as_str().stable_hash(hcx, hasher);
2716 }
2717}
2718
2719impl StableCompare for Symbol {
2720 const CAN_USE_UNSTABLE_SORT: bool = true;
2721
2722 fn stable_cmp(&self, other: &Self) -> std::cmp::Ordering {
2723 self.as_str().cmp(other.as_str())
2724 }
2725}
2726
2727#[derive(#[automatically_derived]
impl ::core::clone::Clone for ByteSymbol {
#[inline]
fn clone(&self) -> ByteSymbol {
let _: ::core::clone::AssertParamIsClone<SymbolIndex>;
*self
}
}Clone, #[automatically_derived]
impl ::core::marker::Copy for ByteSymbol { }Copy, #[automatically_derived]
impl ::core::cmp::PartialEq for ByteSymbol {
#[inline]
fn eq(&self, other: &ByteSymbol) -> bool { self.0 == other.0 }
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for ByteSymbol {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<SymbolIndex>;
}
}Eq, #[automatically_derived]
impl ::core::cmp::PartialOrd for ByteSymbol {
#[inline]
fn partial_cmp(&self, other: &ByteSymbol)
-> ::core::option::Option<::core::cmp::Ordering> {
::core::option::Option::Some(::core::cmp::Ord::cmp(self, other))
}
}PartialOrd, #[automatically_derived]
impl ::core::cmp::Ord for ByteSymbol {
#[inline]
fn cmp(&self, other: &ByteSymbol) -> ::core::cmp::Ordering {
::core::cmp::Ord::cmp(&self.0, &other.0)
}
}Ord, #[automatically_derived]
impl ::core::hash::Hash for ByteSymbol {
#[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
::core::hash::Hash::hash(&self.0, state)
}
}Hash)]
2730pub struct ByteSymbol(SymbolIndex);
2731
2732impl ByteSymbol {
2733 pub const fn new(n: u32) -> Self {
2736 ByteSymbol(SymbolIndex::from_u32(n))
2737 }
2738
2739 pub fn intern(byte_str: &[u8]) -> Self {
2741 with_session_globals(|session_globals| {
2742 session_globals.symbol_interner.intern_byte_str(byte_str)
2743 })
2744 }
2745
2746 pub fn as_byte_str(&self) -> &[u8] {
2748 with_session_globals(|session_globals| unsafe {
2749 std::mem::transmute::<&[u8], &[u8]>(session_globals.symbol_interner.get_byte_str(*self))
2750 })
2751 }
2752
2753 pub fn as_u32(self) -> u32 {
2754 self.0.as_u32()
2755 }
2756}
2757
2758impl fmt::Debug for ByteSymbol {
2759 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
2760 fmt::Debug::fmt(self.as_byte_str(), f)
2761 }
2762}
2763
2764impl StableHash for ByteSymbol {
2765 #[inline]
2766 fn stable_hash<Hcx: StableHashCtxt>(&self, hcx: &mut Hcx, hasher: &mut StableHasher) {
2767 self.as_byte_str().stable_hash(hcx, hasher);
2768 }
2769}
2770
2771pub(crate) struct Interner(Lock<InternerInner>);
2776
2777struct InternerInner {
2783 arena: DroplessArena,
2784 indices: HashTable<(&'static [u8], u32)>,
2785 byte_strs: Vec<&'static [u8]>,
2786}
2787
2788impl Interner {
2789 fn prefill(init: &[&'static str], extra: &[&'static str]) -> Self {
2793 let values = init.iter().copied().chain(extra.iter().copied()).map(|str| str.as_bytes());
2794 let (size_hint, _) = values.size_hint();
2795 let mut conflicting_values: Vec<&[u8]> = Vec::new();
2796
2797 let mut indices: HashTable<(&'static [u8], u32)> = HashTable::with_capacity(size_hint);
2798 let hasher = FxBuildHasher::default();
2799
2800 let mut byte_strs: Vec<&'static [u8]> = Vec::with_capacity(size_hint);
2801
2802 for v in values {
2803 match indices.entry(hasher.hash_one(&v), |&(s, _)| s == v, |&(s, _)| hasher.hash_one(s))
2804 {
2805 Entry::Occupied(v) => conflicting_values.push(v.get().0),
2806 Entry::Vacant(view) => {
2807 view.insert((v, byte_strs.len() as u32));
2808 byte_strs.push(v);
2809 }
2810 }
2811 }
2812
2813 if conflicting_values.len() != 0 {
2814 {
::core::panicking::panic_fmt(format_args!("duplicate symbols in the rustc symbol list and the extra symbols added by the driver: {0:?}",
conflicting_values));
}panic!(
2815 "duplicate symbols in the rustc symbol list and the extra symbols added by the driver: {:?}",
2816 conflicting_values
2817 )
2818 }
2819
2820 Interner(Lock::new(InternerInner { arena: Default::default(), indices, byte_strs }))
2821 }
2822
2823 fn intern_str(&self, str: &str) -> Symbol {
2824 Symbol::new(self.intern_inner(str.as_bytes()))
2825 }
2826
2827 fn intern_byte_str(&self, byte_str: &[u8]) -> ByteSymbol {
2828 ByteSymbol::new(self.intern_inner(byte_str))
2829 }
2830
2831 #[inline]
2832 fn intern_inner(&self, byte_str: &[u8]) -> u32 {
2833 let hasher = FxBuildHasher::default();
2834 let hash_of_byte_str = hasher.hash_one(byte_str);
2835
2836 self.0.with_lock(|inner| {
2837 match inner.indices.entry(
2838 hash_of_byte_str,
2839 |&(s, _)| s == byte_str,
2840 |&(s, _)| hasher.hash_one(s),
2841 ) {
2842 Entry::Occupied(v) => v.get().1,
2843 Entry::Vacant(view) => {
2844 let byte_str: &[u8] = inner.arena.alloc_slice(byte_str);
2845
2846 let byte_str: &'static [u8] = unsafe { &*(byte_str as *const [u8]) };
2849 let idx = inner.byte_strs.len() as u32;
2850 view.insert((byte_str, idx));
2851 inner.byte_strs.push(byte_str);
2852 idx
2853 }
2854 }
2855 })
2856 }
2857
2858 fn get_str(&self, symbol: Symbol) -> &str {
2862 let byte_str = self.get_inner(symbol.0.as_usize());
2863 unsafe { str::from_utf8_unchecked(byte_str) }
2865 }
2866
2867 fn get_byte_str(&self, symbol: ByteSymbol) -> &[u8] {
2871 self.get_inner(symbol.0.as_usize())
2872 }
2873
2874 fn get_inner(&self, index: usize) -> &[u8] {
2875 self.0.with_lock(|inner| inner.byte_strs[index])
2876 }
2877}
2878
2879pub mod kw {
2885 pub use super::kw_generated::*;
2886}
2887
2888pub mod sym {
2894 use super::Symbol;
2896 pub use super::kw::MacroRules as macro_rules;
2897 #[doc(inline)]
2898 pub use super::sym_generated::*;
2899
2900 pub const C: Symbol = ascii_letter_digit('C').unwrap();
2902
2903 #[expect(non_upper_case_globals)]
2905 pub const f: Symbol = ascii_letter_digit('f').unwrap();
2906 #[expect(non_upper_case_globals)]
2907 pub const d: Symbol = ascii_letter_digit('d').unwrap();
2908
2909 pub fn integer<N: TryInto<usize> + Copy + itoa::Integer>(n: N) -> Symbol {
2914 if let Result::Ok(idx) = n.try_into() {
2915 if idx < 10 {
2916 return Symbol::new(super::SYMBOL_DIGITS_BASE + idx as u32);
2917 }
2918 }
2919 let mut buffer = itoa::Buffer::new();
2920 let printed = buffer.format(n);
2921 Symbol::intern(printed)
2922 }
2923
2924 pub const fn ascii_letter_digit(c: char) -> Option<Symbol> {
2925 let i = c as u32;
2926 Option::Some(Symbol::new(match c {
2927 '0'..='9' => super::SYMBOL_DIGITS_BASE + (i - '0' as u32),
2928 'A'..='Z' => super::SYMBOL_UPPERCASE_LETTERS_BASE + (i - 'A' as u32),
2929 'a'..='z' => super::SYMBOL_LOWERCASE_LETTERS_BASE + (i - 'a' as u32),
2930 _ => return Option::None,
2931 }))
2932 }
2933
2934 pub fn character(c: char) -> Symbol {
2935 ascii_letter_digit(c).unwrap_or_else(|| {
2936 let mut buf: [u8; char::MAX_LEN_UTF8] = Default::default();
2937 Symbol::intern(c.encode_utf8(&mut buf))
2938 })
2939 }
2940}
2941
2942impl Symbol {
2943 fn is_special(self) -> bool {
2944 self <= kw::Underscore
2945 }
2946
2947 fn is_used_keyword_always(self) -> bool {
2948 self >= kw::As && self <= kw::While
2949 }
2950
2951 fn is_unused_keyword_always(self) -> bool {
2952 self >= kw::Abstract && self <= kw::Yield
2953 }
2954
2955 fn is_used_keyword_conditional(self, edition: impl FnOnce() -> Edition) -> bool {
2956 (self >= kw::Async && self <= kw::Dyn) && edition() >= Edition::Edition2018
2957 }
2958
2959 fn is_unused_keyword_conditional(self, edition: impl Copy + FnOnce() -> Edition) -> bool {
2960 self == kw::Gen && edition().at_least_rust_2024()
2961 || self == kw::Try && edition().at_least_rust_2018()
2962 }
2963
2964 pub fn is_reserved(self, edition: impl Copy + FnOnce() -> Edition) -> bool {
2965 self.is_special()
2966 || self.is_used_keyword_always()
2967 || self.is_unused_keyword_always()
2968 || self.is_used_keyword_conditional(edition)
2969 || self.is_unused_keyword_conditional(edition)
2970 }
2971
2972 pub fn is_weak(self) -> bool {
2973 self >= kw::Auto && self <= kw::Yeet
2974 }
2975
2976 pub fn is_path_segment_keyword(self) -> bool {
2978 self == kw::Super
2979 || self == kw::SelfLower
2980 || self == kw::SelfUpper
2981 || self == kw::Crate
2982 || self == kw::PathRoot
2983 || self == kw::DollarCrate
2984 }
2985
2986 pub fn is_bool_lit(self) -> bool {
2988 self == kw::True || self == kw::False
2989 }
2990
2991 pub fn can_be_raw(self) -> bool {
2993 self != sym::empty && self != kw::Underscore && !self.is_path_segment_keyword()
2994 }
2995
2996 pub fn is_predefined(index: u32) -> bool {
3000 index < PREDEFINED_SYMBOLS_COUNT
3001 }
3002}
3003
3004impl Ident {
3005 pub fn is_special(self) -> bool {
3008 self.name.is_special()
3009 }
3010
3011 pub fn is_used_keyword(self) -> bool {
3013 self.name.is_used_keyword_always()
3015 || self.name.is_used_keyword_conditional(|| self.span.edition())
3016 }
3017
3018 pub fn is_unused_keyword(self) -> bool {
3020 self.name.is_unused_keyword_always()
3022 || self.name.is_unused_keyword_conditional(|| self.span.edition())
3023 }
3024
3025 pub fn is_reserved(self) -> bool {
3027 self.name.is_reserved(|| self.span.edition())
3029 }
3030
3031 pub fn is_path_segment_keyword(self) -> bool {
3033 self.name.is_path_segment_keyword()
3034 }
3035
3036 pub fn is_raw_guess(self) -> bool {
3039 self.name.can_be_raw() && self.is_reserved()
3040 }
3041
3042 pub fn is_reserved_lifetime(self) -> bool {
3045 self.is_reserved() && ![kw::Underscore, kw::Static].contains(&self.name)
3046 }
3047
3048 pub fn is_raw_lifetime_guess(self) -> bool {
3049 if self.name.as_str() == "'" {
3052 return false;
3053 }
3054 let ident_without_apostrophe = self.without_first_quote();
3055 ident_without_apostrophe.name != self.name
3056 && ident_without_apostrophe.name.can_be_raw()
3057 && ident_without_apostrophe.is_reserved_lifetime()
3058 }
3059
3060 pub fn guess_print_mode(self) -> IdentPrintMode {
3061 if self.is_raw_lifetime_guess() {
3062 IdentPrintMode::RawLifetime
3063 } else if self.is_raw_guess() {
3064 IdentPrintMode::RawIdent
3065 } else {
3066 IdentPrintMode::Normal
3067 }
3068 }
3069
3070 pub fn is_numeric(self) -> bool {
3073 self.as_str().bytes().all(|b| b.is_ascii_digit())
3074 }
3075}
3076
3077pub fn used_keywords(edition: impl Copy + FnOnce() -> Edition) -> Vec<Symbol> {
3082 (kw::DollarCrate.as_u32()..kw::Yeet.as_u32())
3083 .filter_map(|kw| {
3084 let kw = Symbol::new(kw);
3085 if kw.is_used_keyword_always() || kw.is_used_keyword_conditional(edition) {
3086 Some(kw)
3087 } else {
3088 None
3089 }
3090 })
3091 .collect()
3092}