Skip to main content

rustc_span/
symbol.rs

1//! An "interner" is a data structure that associates values with usize tags and
2//! allows bidirectional lookup; i.e., given a value, one can easily find the
3//! type, and vice versa.
4
5use std::hash::{Hash, Hasher};
6use std::{fmt, str};
7
8use rustc_arena::DroplessArena;
9use rustc_data_structures::fx::{FxHashSet, FxIndexSet};
10use rustc_data_structures::stable_hasher::{
11    HashStable, StableCompare, StableHasher, ToStableHashKey,
12};
13use rustc_data_structures::sync::Lock;
14use rustc_macros::{Decodable, Encodable, HashStable_Generic, symbols};
15
16use crate::edit_distance::find_best_match_for_name;
17use crate::{DUMMY_SP, Edition, Span, with_session_globals};
18
19#[cfg(test)]
20mod tests;
21
22// The proc macro code for this is in `compiler/rustc_macros/src/symbols.rs`.
23impl 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", "Alignment", "Any", "Arc",
                        "ArcWeak", "Argument", "Array", "ArrayIntoIter", "AsMut",
                        "AsRef", "AssertParamIsClone", "AssertParamIsCopy",
                        "AssertParamIsEq", "AsyncGenFinished", "AsyncGenPending",
                        "AsyncGenReady", "AtomicBool", "AtomicI8", "AtomicI16",
                        "AtomicI32", "AtomicI64", "AtomicI128", "AtomicIsize",
                        "AtomicPtr", "AtomicU8", "AtomicU16", "AtomicU32",
                        "AtomicU64", "AtomicU128", "AtomicUsize", "AutoTrait",
                        "BTreeEntry", "BTreeMap", "BTreeSet", "BinaryHeap", "Bool",
                        "Borrow", "BorrowMut", "Break", "BuildHasher", "C", "CStr",
                        "C-unwind", "CallOnceFuture", "CallRefFuture", "Capture",
                        "Cell", "Center", "Char", "Child", "Cleanup", "Clone",
                        "CoercePointee", "CoercePointeeValidated", "CoerceUnsized",
                        "Command", "Const", "ConstParamTy", "ConstParamTy_",
                        "Context", "Continue", "ControlFlow", "Copy", "Cow",
                        "Debug", "DebugStruct", "Decodable", "Decoder", "Default",
                        "Deref", "DiagMessage", "Diagnostic", "DirBuilder",
                        "DispatchFromDyn", "Display", "DoubleEndedIterator",
                        "Duration", "DynTrait", "Encodable", "Encoder", "Enum",
                        "Enumerate", "Eq", "Equal", "Err", "Error", "File",
                        "FileType", "Float", "FmtArgumentsNew", "FmtWrite", "Fn",
                        "FnMut", "FnOnce", "Formatter", "Forward", "From",
                        "FromIterator", "FromResidual", "FsOpenOptions",
                        "FsPermissions", "FusedIterator", "Future", "GlobalAlloc",
                        "Hash", "HashMap", "HashMapEntry", "HashSet", "Hasher",
                        "Implied", "InCleanup", "IndexOutput", "Input", "Instant",
                        "Int", "Into", "IntoFuture", "IntoIterator",
                        "IntoIteratorItem", "IoBufRead", "IoLines", "IoRead",
                        "IoSeek", "IoWrite", "IpAddr", "Ipv4Addr", "Ipv6Addr",
                        "IrTyKind", "Is", "Item", "ItemContext", "IterEmpty",
                        "IterOnce", "IterPeekable", "Iterator", "IteratorItem",
                        "IteratorMap", "Layout", "Left", "Lifetime", "LinkedList",
                        "LintDiagnostic", "LintPass", "LocalKey", "Mutex",
                        "MutexGuard", "N", "NonNull", "NonZero", "None", "Normal",
                        "Ok", "Option", "Ord", "Ordering", "OsStr", "OsString",
                        "Other", "Output", "Param", "ParamSet", "PartialEq",
                        "PartialOrd", "Path", "PathBuf", "Pending",
                        "PinCoerceUnsized", "PinDerefMutHelper", "Pointer", "Poll",
                        "ProcMacro", "ProceduralMasqueradeDummyType", "Range",
                        "RangeBounds", "RangeCopy", "RangeFrom", "RangeFromCopy",
                        "RangeFull", "RangeInclusive", "RangeInclusiveCopy",
                        "RangeMax", "RangeMin", "RangeSub", "RangeTo",
                        "RangeToInclusive", "RangeToInclusiveCopy", "Rc", "RcWeak",
                        "Ready", "Receiver", "RefCell", "RefCellRef",
                        "RefCellRefMut", "Reference", "Relaxed", "Release",
                        "Result", "ResumeTy", "Return", "Reverse", "Right", "Rust",
                        "RustaceansAreAwesome", "RwLock", "RwLockReadGuard",
                        "RwLockWriteGuard", "Saturating", "SeekFrom", "SelfTy",
                        "Send", "SeqCst", "Sized", "Slice", "SliceIndex",
                        "SliceIter", "Some", "SpanCtxt", "Stdin", "Str", "String",
                        "Struct", "StructuralPartialEq", "Subdiagnostic",
                        "SymbolIntern", "Sync", "SyncUnsafeCell", "T", "Target",
                        "This", "ToOwned", "ToString", "TokenStream", "Trait",
                        "TrivialClone", "Try", "TryCaptureGeneric",
                        "TryCapturePrintable", "TryFrom", "TryInto", "Tuple", "Ty",
                        "TyCtxt", "TyKind", "Type", "Union", "Unknown", "Unsize",
                        "UnsizedConstParamTy", "Upvars", "Vec", "VecDeque", "Waker",
                        "Wrapper", "Wrapping", "Yield", "_DECLS", "__D", "__H",
                        "__S", "__T", "__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_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_adt", "anon_assoc",
                        "anonymous_lifetime_in_impl_trait", "any",
                        "append_const_msg", "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_ptr",
                        "as_ref", "as_str", "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_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_mod",
                        "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", "bang", "begin_panic", "bench",
                        "bevy_ecs", "bikeshed", "bikeshed_guaranteed_no_drop",
                        "bin", "binaryheap_iter", "bind_by_move_pattern_guards",
                        "bindings_after_at", "bitand", "bitand_assign", "bitor",
                        "bitor_assign", "bitreverse", "bits", "bitxor",
                        "bitxor_assign", "black_box", "block", "blocking", "bool",
                        "bool_then", "borrowck_graphviz_format",
                        "borrowck_graphviz_postflow", "box_new", "box_patterns",
                        "box_syntax", "boxed_slice", "bpf", "bpf_target_feature",
                        "braced_empty_structs", "branch", "breakpoint", "bridge",
                        "bswap", "btreemap_contains_key", "btreemap_insert",
                        "btreeset_iter", "built", "builtin_syntax", "bundle", "c",
                        "c_dash_variadic", "c_str", "c_str_literals", "c_unwind",
                        "c_variadic", "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_emscripten_wasm_eh", "cfg_eval", "cfg_fmt_debug",
                        "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_thread_local", "cfg_target_vendor",
                        "<cfg_trace>", "cfg_ub_checks", "cfg_version", "cfi",
                        "cfi_encoding", "char", "char_is_ascii", "char_to_digit",
                        "child_id", "child_kill", "client", "clippy", "clobber_abi",
                        "clone", "clone_closures", "clone_fn", "clone_from",
                        "closure", "closure_lifetime_binder",
                        "closure_to_fn_coercion", "closure_track_caller", "cmp",
                        "cmp_max", "cmp_min", "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_unsized", "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", "concat_idents",
                        "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_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", "convert_identity", "copy",
                        "copy_closures", "copy_nonoverlapping", "copysignf16",
                        "copysignf32", "copysignf64", "copysignf128", "core",
                        "core_panic", "core_panic_2015_macro",
                        "core_panic_2021_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_as_c_str",
                        "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", "d", "d32", "dbg_macro",
                        "dead_code", "dealloc", "debug", "debug_assert_eq_macro",
                        "debug_assert_macro", "debug_assert_ne_macro",
                        "debug_assertions", "debug_struct",
                        "debug_struct_fields_finish", "debug_tuple",
                        "debug_tuple_fields_finish", "debugger_visualizer",
                        "decl_macro", "declare_lint_pass", "decode", "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", "delayed_bug_from_inside_query", "deny",
                        "deprecated", "deprecated_safe", "deprecated_suggestion",
                        "deref", "deref_method", "deref_mut", "deref_mut_method",
                        "deref_patterns", "deref_pure", "deref_target", "derive",
                        "derive_coerce_pointee", "derive_const", "118304",
                        "derive_default_enum", "derive_from",
                        "derive_smart_pointer", "destruct",
                        "destructuring_assignment", "diagnostic",
                        "diagnostic_namespace", "diagnostic_on_const", "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_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",
                        "e", "edition_panic", "effective_target_features",
                        "effects", "eh_catch_typeinfo", "eh_personality", "eii",
                        "eii_declaration", "eii_impl", "eii_internals",
                        "eii_shared_macro", "element_ty", "emit", "emit_enum",
                        "emit_enum_variant", "emit_enum_variant_arg", "emit_struct",
                        "emit_struct_field", "", "emscripten_wasm_eh", "enable",
                        "encode", "end", "entry_nops", "enumerate_method", "env",
                        "eprint_macro", "eprintln_macro", "eq", "ergonomic_clones",
                        "ermsb_target_feature", "exact_div", "except",
                        "exception-handling", "exclusive_range_pattern",
                        "exhaustive_integer_patterns", "exhaustive_patterns",
                        "existential_type", "exp2f16", "exp2f32", "exp2f64",
                        "exp2f128", "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", "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", "f", "f16", "f16_consts_mod",
                        "f16_epsilon", "f16_nan", "f16c_target_feature", "f32",
                        "f32_consts_mod", "f32_epsilon", "f32_legacy_const_digits",
                        "f32_legacy_const_epsilon", "f32_legacy_const_infinity",
                        "f32_legacy_const_mantissa_dig", "f32_legacy_const_max",
                        "f32_legacy_const_max_10_exp", "f32_legacy_const_max_exp",
                        "f32_legacy_const_min", "f32_legacy_const_min_10_exp",
                        "f32_legacy_const_min_exp", "f32_legacy_const_min_positive",
                        "f32_legacy_const_nan", "f32_legacy_const_neg_infinity",
                        "f32_legacy_const_radix", "f32_nan", "f64",
                        "f64_consts_mod", "f64_epsilon", "f64_legacy_const_digits",
                        "f64_legacy_const_epsilon", "f64_legacy_const_infinity",
                        "f64_legacy_const_mantissa_dig", "f64_legacy_const_max",
                        "f64_legacy_const_max_10_exp", "f64_legacy_const_max_exp",
                        "f64_legacy_const_min", "f64_legacy_const_min_10_exp",
                        "f64_legacy_const_min_exp", "f64_legacy_const_min_positive",
                        "f64_legacy_const_nan", "f64_legacy_const_neg_infinity",
                        "f64_legacy_const_radix", "f64_nan", "f128",
                        "f128_consts_mod", "f128_epsilon", "f128_nan", "fabsf16",
                        "fabsf32", "fabsf64", "fabsf128", "fadd_algebraic",
                        "fadd_fast", "fake_variadic", "fallback", "fdiv_algebraic",
                        "fdiv_fast", "feature", "fence", "🦀", "fetch_update",
                        "ffi", "ffi_const", "ffi_pure", "ffi_returns_twice",
                        "field", "field_init_shorthand", "fields", "file",
                        "file_options", "final_associated_functions", "flags",
                        "float", "float_to_int_unchecked", "floorf16", "floorf32",
                        "floorf64", "floorf128", "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", "format_args",
                        "format_args_capture", "format_args_macro",
                        "format_args_nl", "format_argument", "format_arguments",
                        "format_macro", "framework", "freeze", "freeze_impls",
                        "freg", "frem_algebraic", "frem_fast", "from",
                        "from_desugaring", "from_fn", "from_iter", "from_iter_fn",
                        "from_output", "from_residual", "from_size_align_unchecked",
                        "from_size_alignment_unchecked", "from_str",
                        "from_str_method", "from_str_nonconst", "from_u16",
                        "from_usize", "from_yeet", "frontmatter", "fs_create_dir",
                        "fsub_algebraic", "fsub_fast", "full", "fundamental",
                        "fused_iterator", "future", "future_drop_poll",
                        "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_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", "gt",
                        "guard_patterns", "half_open_range_patterns",
                        "half_open_range_patterns_in_slices", "hash",
                        "hashmap_contains_key", "hashmap_drain_ty",
                        "hashmap_insert", "hashmap_iter_mut_ty", "hashmap_iter_ty",
                        "hashmap_keys_ty", "hashmap_values_mut_ty",
                        "hashmap_values_ty", "hashset_drain_ty", "hashset_iter",
                        "hashset_iter_ty", "hexagon", "hexagon_target_feature",
                        "hidden", "hide", "hint", "homogeneous_aggregate", "host",
                        "html_favicon_url", "html_logo_url", "html_no_source",
                        "html_playground_url", "html_root_url", "hwaddress", "i",
                        "i8", "i8_legacy_const_max", "i8_legacy_const_min",
                        "i8_legacy_fn_max_value", "i8_legacy_fn_min_value",
                        "i8_legacy_mod", "i16", "i16_legacy_const_max",
                        "i16_legacy_const_min", "i16_legacy_fn_max_value",
                        "i16_legacy_fn_min_value", "i16_legacy_mod", "i32",
                        "i32_legacy_const_max", "i32_legacy_const_min",
                        "i32_legacy_fn_max_value", "i32_legacy_fn_min_value",
                        "i32_legacy_mod", "i64", "i64_legacy_const_max",
                        "i64_legacy_const_min", "i64_legacy_fn_max_value",
                        "i64_legacy_fn_min_value", "i64_legacy_mod", "i128",
                        "i128_legacy_const_max", "i128_legacy_const_min",
                        "i128_legacy_fn_max_value", "i128_legacy_fn_min_value",
                        "i128_legacy_mod", "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_trait_in_assoc_type",
                        "impl_trait_in_bindings", "impl_trait_in_fn_trait_return",
                        "impl_trait_projections", "implement_via_object",
                        "implied_by", "import", "import_name_type",
                        "import_shadowing", "import_trait_associated_functions",
                        "imported_main", "in_band_lifetimes", "include",
                        "include_bytes", "include_bytes_macro", "include_str",
                        "include_str_macro", "inclusive_range_syntax", "index",
                        "index_mut", "infer_outlives_requirements",
                        "infer_static_outlives_requirements",
                        "inherent_associated_types", "inherit", "initial",
                        "inlateout", "inline", "inline_const", "inline_const_pat",
                        "inout", "instant_now", "instruction_set", "integer",
                        "integral", "internal", "internal_features",
                        "into_async_iter_into_iter", "into_future", "into_iter",
                        "into_try_type", "intra_doc_pointers", "intrinsics",
                        "intrinsics_unaligned_volatile_load",
                        "intrinsics_unaligned_volatile_store", "io_error_new",
                        "io_errorkind", "io_stderr", "io_stdout",
                        "irrefutable_let_patterns", "is", "is_auto",
                        "is_val_statically_known", "isa_attribute", "isize",
                        "isize_legacy_const_max", "isize_legacy_const_min",
                        "isize_legacy_fn_max_value", "isize_legacy_fn_min_value",
                        "isize_legacy_mod", "issue", "issue_5723_bootstrap",
                        "issue_tracker_base_url", "item", "item_like_imports",
                        "iter", "iter_cloned", "iter_copied", "iter_filter",
                        "iter_mut", "iter_repeat", "iterator",
                        "iterator_collect_fn", "kcfi", "kernel_address",
                        "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", "likely",
                        "line", "link", "link_arg_attribute", "link_args",
                        "link_cfg", "link-arg", "link_llvm_intrinsics", "link_name",
                        "link_ordinal", "link_section", "linkage", "linker",
                        "linker_messages", "linkonce", "linkonce_odr",
                        "lint_reasons", "literal", "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_match", "lr", "lt", "m68k", "m68k_target_feature",
                        "macro_at_most_once_rep", "macro_attr",
                        "macro_attributes_in_derive_output", "macro_concat",
                        "macro_derive", "macro_escape", "macro_export",
                        "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", "matches_macro", "maximumf16",
                        "maximumf32", "maximumf64", "maximumf128", "maxnumf16",
                        "maxnumf32", "maxnumf64", "maxnumf128", "may_dangle",
                        "may_unwind", "maybe_uninit", "maybe_uninit_uninit",
                        "maybe_uninit_zeroed", "mem_align_const", "mem_align_of",
                        "mem_discriminant", "mem_drop", "mem_forget", "mem_replace",
                        "mem_size_const", "mem_size_of", "mem_size_of_val",
                        "mem_swap", "mem_uninitialized", "mem_variant_count",
                        "mem_zeroed", "member_constraints", "memory", "memtag",
                        "message", "meta", "meta_sized", "metadata_type",
                        "mgca_type_const_syntax", "min_const_fn",
                        "min_const_generics", "min_const_unsafe_fn",
                        "min_exhaustive_patterns", "min_generic_const_args",
                        "min_specialization", "min_type_alias_impl_trait",
                        "minimumf16", "minimumf32", "minimumf64", "minimumf128",
                        "minnumf16", "minnumf32", "minnumf64", "minnumf128", "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_deinit", "mir_discriminant", "mir_drop", "mir_field",
                        "mir_goto", "mir_len", "mir_make_place", "mir_move",
                        "mir_offset", "mir_ptr_metadata", "mir_retag", "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", "mmx_reg",
                        "modifiers", "module", "module_path", "more_maybe_bounds",
                        "more_qualified_paths", "more_struct_aliases",
                        "movbe_target_feature", "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",
                        "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_const", "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", "new_v1",
                        "new_v1_formatted", "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",
                        "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_unimplemented", "opaque", "opaque_generic_const_args",
                        "<opaque>", "open_options_new", "ops", "opt_out_copy",
                        "optimize", "optimize_attribute", "optimized",
                        "optin_builtin_traits", "option", "option_env",
                        "option_expect", "option_unwrap", "options", "or",
                        "or_patterns", "ord_cmp_method", "os_str_to_os_string",
                        "os_string_as_os_str", "other", "out", "overflow_checks",
                        "overlapping_marker_traits", "owned_box", "packed",
                        "packed_bundled_libs", "panic", "panic_2015", "panic_2021",
                        "panic_abort", "panic_any", "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", "path_main_separator", "path_to_pathbuf",
                        "pathbuf_as_path", "pattern_complexity_limit",
                        "pattern_parentheses", "pattern_type",
                        "pattern_type_range_trait", "pattern_types",
                        "permissions_from_mode", "phantom_data", "phase", "pic",
                        "pie", "pin", "pin_ergonomics", "pin_macro", "pin_v2",
                        "platform_intrinsics", "plugin", "plugin_registrar",
                        "plugins", "pointee", "pointee_sized", "pointee_trait",
                        "pointer", "poll", "poll_next", "position", "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", "precision", "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", "print_macro", "println_macro",
                        "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", "process_abort", "process_exit",
                        "profiler_builtins", "profiler_runtime", "ptr", "ptr_cast",
                        "ptr_cast_const", "ptr_cast_mut", "ptr_const_is_null",
                        "ptr_copy", "ptr_copy_nonoverlapping", "ptr_eq",
                        "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_read_volatile", "ptr_replace",
                        "ptr_slice_from_raw_parts", "ptr_slice_from_raw_parts_mut",
                        "ptr_swap", "ptr_swap_nonoverlapping",
                        "ptr_without_provenance", "ptr_without_provenance_mut",
                        "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", "range_step", "raw-dylib",
                        "raw_dylib", "raw_dylib_elf", "raw_eq", "raw_identifiers",
                        "raw_ref_op", "re_rebalance_coherence", "read_enum",
                        "read_enum_variant", "read_enum_variant_arg", "read_struct",
                        "read_struct_field", "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", "result_ok_method",
                        "resume", "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", "rt", "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_catch_typeinfo",
                        "rust_eh_personality", "rust_future", "rust_logo",
                        "rust_out", "rust_preserve_none_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_confusables", "rustc_const_stable",
                        "rustc_const_stable_indirect", "rustc_const_unstable",
                        "rustc_conversion_suggestion", "rustc_deallocator",
                        "rustc_def_path", "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_item_bounds", "rustc_dump_predicates",
                        "rustc_dump_user_args", "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_hidden_type_of_opaques", "rustc_if_this_changed",
                        "rustc_inherit_overflow_checks", "rustc_insignificant_dtor",
                        "rustc_intrinsic", "rustc_intrinsic_const_stable_indirect",
                        "rustc_layout", "rustc_layout_scalar_valid_range_end",
                        "rustc_layout_scalar_valid_range_start",
                        "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_never_returns_null_ptr", "rustc_never_type_options",
                        "rustc_no_implicit_autorefs", "rustc_no_implicit_bounds",
                        "rustc_no_mir_inline", "rustc_non_const_trait_method",
                        "rustc_nonnull_optimization_guaranteed", "rustc_nounwind",
                        "rustc_objc_class", "rustc_objc_selector",
                        "rustc_object_lifetime_default", "rustc_offload_kernel",
                        "rustc_on_unimplemented", "rustc_outlives",
                        "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_serialize",
                        "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_symbol_name",
                        "rustc_test_marker", "rustc_then_this_would_need",
                        "rustc_trivial_field_reads",
                        "rustc_unsafe_specialization_marker", "rustc_variance",
                        "rustc_variance_of_opaques", "rustdoc", "rustdoc_internals",
                        "rustdoc_missing_doc_code_examples", "rustfmt",
                        "rvalue_static_promotion", "rwpi", "s", "s390x",
                        "s390x_target_feature", "s390x_target_feature_vector",
                        "safety", "sanitize", "sanitizer_cfi_generalize_pointers",
                        "sanitizer_cfi_normalize_integers", "sanitizer_runtime",
                        "saturating_add", "saturating_div", "saturating_sub",
                        "sdylib", "search_unbox", "select_unpredictable",
                        "self_in_typedefs", "self_struct_ctor", "semiopaque",
                        "sha2", "sha3", "sha512_sm_x86", "shadow_call_stack",
                        "shallow", "shl", "shl_assign", "shorter_tail_lifetimes",
                        "should_panic", "show", "shr", "shr_assign", "sig_dfl",
                        "sig_ign", "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_fmax",
                        "simd_fmin", "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_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_val", "sized",
                        "sized_hierarchy", "skip", "slice", "slice_from_raw_parts",
                        "slice_from_raw_parts_mut", "slice_from_ref",
                        "slice_get_unchecked", "slice_iter", "slice_len_fn",
                        "slice_patterns", "slicing_syntax", "soft", "sparc",
                        "sparc64", "sparc_target_feature", "spe_acc",
                        "specialization", "speed", "spirv", "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_chars", "str_ends_with", "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", "str_len",
                        "str_split_whitespace", "str_starts_with", "str_trim",
                        "str_trim_end", "str_trim_start", "strict_provenance_lints",
                        "string_as_mut_str", "string_as_str",
                        "string_deref_patterns", "string_from_utf8",
                        "string_insert_str", "string_new", "string_push_str",
                        "stringify", "struct_field_attributes", "struct_inherit",
                        "struct_variant", "structural_match", "structural_peq",
                        "sub", "sub_assign", "sub_with_overflow", "suggestion",
                        "super_let", "supertrait_item_shadowing", "sym", "sync",
                        "synthetic", "sys_mutex_lock", "sys_mutex_try_lock",
                        "sys_mutex_unlock", "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_equal_alignment",
                        "target_has_atomic_load_store", "target_has_reliable_f16",
                        "target_has_reliable_f16_math", "target_has_reliable_f128",
                        "target_has_reliable_f128_math", "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_removed_feature", "test_runner", "test_unstable_lint",
                        "thread", "thread_local", "thread_local_macro",
                        "three_way_compare", "thumb2", "thumb-mode", "tmm_reg",
                        "to_owned_method", "to_string", "to_string_method",
                        "to_vec", "todo_macro", "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_from_fn", "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_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_macro", "unit", "universal_impl_trait",
                        "unix", "unlikely", "unmarked_api", "unnamed_fields",
                        "unpin", "unqualified_local_imports", "unreachable",
                        "unreachable_2015", "unreachable_2015_macro",
                        "unreachable_2021", "unreachable_code",
                        "unreachable_display", "unreachable_macro",
                        "unrestricted_attribute_tokens", "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",
                        "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?",
                        "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_copy", "va_end", "va_list",
                        "va_start", "val", "validity", "value", "values", "var",
                        "variant_count", "variants", "vec", "vec_as_mut_slice",
                        "vec_as_slice", "vec_from_elem", "vec_is_empty",
                        "vec_macro", "vec_new", "vec_pop", "vec_reserve",
                        "vec_with_capacity", "vecdeque_iter", "vecdeque_reserve",
                        "vector", "verbatim", "version", "vfp2", "vis",
                        "visible_private_types", "volatile", "volatile_copy_memory",
                        "volatile_copy_nonoverlapping_memory", "volatile_load",
                        "volatile_set_memory", "volatile_store", "vreg",
                        "vreg_low16", "vsreg", "vsx", "vtable_align", "vtable_for",
                        "vtable_size", "warn", "wasip2", "wasm32", "wasm64",
                        "wasm_abi", "wasm_import_module", "wasm_target_feature",
                        "weak", "weak_odr", "where_clause_attrs", "while_let",
                        "whole-archive", "width", "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", "xer", "xmm_reg",
                        "xop_target_feature", "xtensa", "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", "1.95.0-nightly"], extra_symbols)
    }
}symbols! {
24    // This list includes things that are definitely keywords (e.g. `if`), a
25    // few things that are definitely not keywords (e.g. `{{root}}`) and things
26    // where there is disagreement between people and/or documents (such as the
27    // Rust Reference) about whether it is a keyword (e.g. `_`).
28    //
29    // If you modify this list, adjust any relevant `Symbol::{is,can_be}_*`
30    // predicates and `used_keywords`. Also consider adding new keywords to the
31    // `ui/parser/raw/raw-idents.rs` test.
32    Keywords {
33        // Special reserved identifiers used internally for unnamed method
34        // parameters, crate root module, etc.
35        // Matching predicates: `is_special`/`is_reserved`
36        //
37        // tidy-alphabetical-start
38        DollarCrate:        "$crate",
39        PathRoot:           "{{root}}",
40        Underscore:         "_",
41        // tidy-alphabetical-end
42
43        // Keywords that are used in stable Rust.
44        // Matching predicates: `is_used_keyword_always`/`is_reserved`
45        // tidy-alphabetical-start
46        As:                 "as",
47        Break:              "break",
48        Const:              "const",
49        Continue:           "continue",
50        Crate:              "crate",
51        Else:               "else",
52        Enum:               "enum",
53        Extern:             "extern",
54        False:              "false",
55        Fn:                 "fn",
56        For:                "for",
57        If:                 "if",
58        Impl:               "impl",
59        In:                 "in",
60        Let:                "let",
61        Loop:               "loop",
62        Match:              "match",
63        Mod:                "mod",
64        Move:               "move",
65        Mut:                "mut",
66        Pub:                "pub",
67        Ref:                "ref",
68        Return:             "return",
69        SelfLower:          "self",
70        SelfUpper:          "Self",
71        Static:             "static",
72        Struct:             "struct",
73        Super:              "super",
74        Trait:              "trait",
75        True:               "true",
76        Type:               "type",
77        Unsafe:             "unsafe",
78        Use:                "use",
79        Where:              "where",
80        While:              "while",
81        // tidy-alphabetical-end
82
83        // Keywords that are used in unstable Rust or reserved for future use.
84        // Matching predicates: `is_unused_keyword_always`/`is_reserved`
85        // tidy-alphabetical-start
86        Abstract:           "abstract",
87        Become:             "become",
88        Box:                "box",
89        Do:                 "do",
90        Final:              "final",
91        Macro:              "macro",
92        Override:           "override",
93        Priv:               "priv",
94        Typeof:             "typeof",
95        Unsized:            "unsized",
96        Virtual:            "virtual",
97        Yield:              "yield",
98        // tidy-alphabetical-end
99
100        // Edition-specific keywords that are used in stable Rust.
101        // Matching predicates: `is_used_keyword_conditional`/`is_reserved` (if
102        // the edition suffices)
103        // tidy-alphabetical-start
104        Async:              "async", // >= 2018 Edition only
105        Await:              "await", // >= 2018 Edition only
106        Dyn:                "dyn", // >= 2018 Edition only
107        // tidy-alphabetical-end
108
109        // Edition-specific keywords that are used in unstable Rust or reserved for future use.
110        // Matching predicates: `is_unused_keyword_conditional`/`is_reserved` (if
111        // the edition suffices)
112        // tidy-alphabetical-start
113        Gen:                "gen", // >= 2024 Edition only
114        Try:                "try", // >= 2018 Edition only
115        // tidy-alphabetical-end
116
117        // "Lifetime keywords": regular keywords with a leading `'`.
118        // Matching predicates: none
119        // tidy-alphabetical-start
120        StaticLifetime:     "'static",
121        UnderscoreLifetime: "'_",
122        // tidy-alphabetical-end
123
124        // Weak keywords, have special meaning only in specific contexts.
125        // Matching predicates: `is_weak`
126        // tidy-alphabetical-start
127        Auto:               "auto",
128        Builtin:            "builtin",
129        Catch:              "catch",
130        ContractEnsures:    "contract_ensures",
131        ContractRequires:   "contract_requires",
132        Default:            "default",
133        MacroRules:         "macro_rules",
134        Raw:                "raw",
135        Reuse:              "reuse",
136        Safe:               "safe",
137        Union:              "union",
138        Yeet:               "yeet",
139        // tidy-alphabetical-end
140    }
141
142    // Pre-interned symbols that can be referred to with `rustc_span::sym::*`.
143    //
144    // The symbol is the stringified identifier unless otherwise specified, in
145    // which case the name should mention the non-identifier punctuation.
146    // E.g. `sym::proc_dash_macro` represents "proc-macro", and it shouldn't be
147    // called `sym::proc_macro` because then it's easy to mistakenly think it
148    // represents "proc_macro".
149    //
150    // As well as the symbols listed, there are symbols for the strings
151    // "0", "1", ..., "9", which are accessible via `sym::integer`.
152    //
153    // There is currently no checking that all symbols are used; that would be
154    // nice to have.
155    Symbols {
156        // tidy-alphabetical-start
157        Abi,
158        AcqRel,
159        Acquire,
160        Alignment,
161        Any,
162        Arc,
163        ArcWeak,
164        Argument,
165        Array,
166        ArrayIntoIter,
167        AsMut,
168        AsRef,
169        AssertParamIsClone,
170        AssertParamIsCopy,
171        AssertParamIsEq,
172        AsyncGenFinished,
173        AsyncGenPending,
174        AsyncGenReady,
175        AtomicBool,
176        AtomicI8,
177        AtomicI16,
178        AtomicI32,
179        AtomicI64,
180        AtomicI128,
181        AtomicIsize,
182        AtomicPtr,
183        AtomicU8,
184        AtomicU16,
185        AtomicU32,
186        AtomicU64,
187        AtomicU128,
188        AtomicUsize,
189        AutoTrait,
190        BTreeEntry,
191        BTreeMap,
192        BTreeSet,
193        BinaryHeap,
194        Bool,
195        Borrow,
196        BorrowMut,
197        Break,
198        BuildHasher,
199        C,
200        CStr,
201        C_dash_unwind: "C-unwind",
202        CallOnceFuture,
203        CallRefFuture,
204        Capture,
205        Cell,
206        Center,
207        Char,
208        Child,
209        Cleanup,
210        Clone,
211        CoercePointee,
212        CoercePointeeValidated,
213        CoerceUnsized,
214        Command,
215        Const,
216        ConstParamTy,
217        ConstParamTy_,
218        Context,
219        Continue,
220        ControlFlow,
221        Copy,
222        Cow,
223        Debug,
224        DebugStruct,
225        Decodable,
226        Decoder,
227        Default,
228        Deref,
229        DiagMessage,
230        Diagnostic,
231        DirBuilder,
232        DispatchFromDyn,
233        Display,
234        DoubleEndedIterator,
235        Duration,
236        DynTrait,
237        Encodable,
238        Encoder,
239        Enum,
240        Enumerate,
241        Eq,
242        Equal,
243        Err,
244        Error,
245        File,
246        FileType,
247        Float,
248        FmtArgumentsNew,
249        FmtWrite,
250        Fn,
251        FnMut,
252        FnOnce,
253        Formatter,
254        Forward,
255        From,
256        FromIterator,
257        FromResidual,
258        FsOpenOptions,
259        FsPermissions,
260        FusedIterator,
261        Future,
262        GlobalAlloc,
263        Hash,
264        HashMap,
265        HashMapEntry,
266        HashSet,
267        Hasher,
268        Implied,
269        InCleanup,
270        IndexOutput,
271        Input,
272        Instant,
273        Int,
274        Into,
275        IntoFuture,
276        IntoIterator,
277        IntoIteratorItem,
278        IoBufRead,
279        IoLines,
280        IoRead,
281        IoSeek,
282        IoWrite,
283        IpAddr,
284        Ipv4Addr,
285        Ipv6Addr,
286        IrTyKind,
287        Is,
288        Item,
289        ItemContext,
290        IterEmpty,
291        IterOnce,
292        IterPeekable,
293        Iterator,
294        IteratorItem,
295        IteratorMap,
296        Layout,
297        Left,
298        Lifetime,
299        LinkedList,
300        LintDiagnostic,
301        LintPass,
302        LocalKey,
303        Mutex,
304        MutexGuard,
305        N,
306        NonNull,
307        NonZero,
308        None,
309        Normal,
310        Ok,
311        Option,
312        Ord,
313        Ordering,
314        OsStr,
315        OsString,
316        Other,
317        Output,
318        Param,
319        ParamSet,
320        PartialEq,
321        PartialOrd,
322        Path,
323        PathBuf,
324        Pending,
325        PinCoerceUnsized,
326        PinDerefMutHelper,
327        Pointer,
328        Poll,
329        ProcMacro,
330        ProceduralMasqueradeDummyType,
331        Range,
332        RangeBounds,
333        RangeCopy,
334        RangeFrom,
335        RangeFromCopy,
336        RangeFull,
337        RangeInclusive,
338        RangeInclusiveCopy,
339        RangeMax,
340        RangeMin,
341        RangeSub,
342        RangeTo,
343        RangeToInclusive,
344        RangeToInclusiveCopy,
345        Rc,
346        RcWeak,
347        Ready,
348        Receiver,
349        RefCell,
350        RefCellRef,
351        RefCellRefMut,
352        Reference,
353        Relaxed,
354        Release,
355        Result,
356        ResumeTy,
357        Return,
358        Reverse,
359        Right,
360        Rust,
361        RustaceansAreAwesome,
362        RwLock,
363        RwLockReadGuard,
364        RwLockWriteGuard,
365        Saturating,
366        SeekFrom,
367        SelfTy,
368        Send,
369        SeqCst,
370        Sized,
371        Slice,
372        SliceIndex,
373        SliceIter,
374        Some,
375        SpanCtxt,
376        Stdin,
377        Str,
378        String,
379        Struct,
380        StructuralPartialEq,
381        Subdiagnostic,
382        SymbolIntern,
383        Sync,
384        SyncUnsafeCell,
385        T,
386        Target,
387        This,
388        ToOwned,
389        ToString,
390        TokenStream,
391        Trait,
392        TrivialClone,
393        Try,
394        TryCaptureGeneric,
395        TryCapturePrintable,
396        TryFrom,
397        TryInto,
398        Tuple,
399        Ty,
400        TyCtxt,
401        TyKind,
402        Type,
403        Union,
404        Unknown,
405        Unsize,
406        UnsizedConstParamTy,
407        Upvars,
408        Vec,
409        VecDeque,
410        Waker,
411        Wrapper,
412        Wrapping,
413        Yield,
414        _DECLS,
415        __D,
416        __H,
417        __S,
418        __T,
419        __awaitee,
420        __try_var,
421        _t,
422        _task_context,
423        a32,
424        aarch64,
425        aarch64_target_feature,
426        aarch64_unstable_target_feature,
427        aarch64_ver_target_feature,
428        abi,
429        abi_amdgpu_kernel,
430        abi_avr_interrupt,
431        abi_c_cmse_nonsecure_call,
432        abi_cmse_nonsecure_call,
433        abi_custom,
434        abi_efiapi,
435        abi_gpu_kernel,
436        abi_msp430_interrupt,
437        abi_ptx,
438        abi_riscv_interrupt,
439        abi_sysv64,
440        abi_thiscall,
441        abi_unadjusted,
442        abi_vectorcall,
443        abi_x86_interrupt,
444        abort,
445        add,
446        add_assign,
447        add_with_overflow,
448        address,
449        adt_const_params,
450        advanced_slice_patterns,
451        adx_target_feature,
452        aes,
453        aggregate_raw_ptr,
454        alias,
455        align,
456        align_of,
457        align_of_val,
458        alignment,
459        all,
460        alloc,
461        alloc_error_handler,
462        alloc_layout,
463        alloc_zeroed,
464        allocator,
465        allocator_api,
466        allocator_internals,
467        allow,
468        allow_fail,
469        allow_internal_unsafe,
470        allow_internal_unstable,
471        altivec,
472        alu32,
473        always,
474        amdgpu,
475        amdgpu_dispatch_ptr,
476        analysis,
477        and,
478        and_then,
479        anon,
480        anon_adt,
481        anon_assoc,
482        anonymous_lifetime_in_impl_trait,
483        any,
484        append_const_msg,
485        apx_target_feature,
486        arbitrary_enum_discriminant,
487        arbitrary_self_types,
488        arbitrary_self_types_pointers,
489        areg,
490        args,
491        arith_offset,
492        arm,
493        arm64ec,
494        arm_a32: "arm::a32",
495        arm_t32: "arm::t32",
496        arm_target_feature,
497        array,
498        as_dash_needed: "as-needed",
499        as_ptr,
500        as_ref,
501        as_str,
502        asm,
503        asm_cfg,
504        asm_const,
505        asm_experimental_arch,
506        asm_experimental_reg,
507        asm_goto,
508        asm_goto_with_outputs,
509        asm_sym,
510        asm_unwind,
511        assert,
512        assert_eq,
513        assert_eq_macro,
514        assert_inhabited,
515        assert_macro,
516        assert_mem_uninitialized_valid,
517        assert_ne_macro,
518        assert_receiver_is_total_eq,
519        assert_zero_valid,
520        asserting,
521        associated_const_equality,
522        associated_consts,
523        associated_type_bounds,
524        associated_type_defaults,
525        associated_types,
526        assume,
527        assume_init,
528        asterisk: "*",
529        async_await,
530        async_call,
531        async_call_mut,
532        async_call_once,
533        async_closure,
534        async_drop,
535        async_drop_in_place,
536        async_fn,
537        async_fn_in_dyn_trait,
538        async_fn_in_trait,
539        async_fn_kind_helper,
540        async_fn_kind_upvars,
541        async_fn_mut,
542        async_fn_once,
543        async_fn_once_output,
544        async_fn_track_caller,
545        async_fn_traits,
546        async_for_loop,
547        async_gen_internals,
548        async_iterator,
549        async_iterator_poll_next,
550        async_trait_bounds,
551        atomic,
552        atomic_and,
553        atomic_cxchg,
554        atomic_cxchgweak,
555        atomic_fence,
556        atomic_load,
557        atomic_max,
558        atomic_min,
559        atomic_mod,
560        atomic_nand,
561        atomic_or,
562        atomic_singlethreadfence,
563        atomic_store,
564        atomic_umax,
565        atomic_umin,
566        atomic_xadd,
567        atomic_xchg,
568        atomic_xor,
569        atomic_xsub,
570        atomics,
571        att_syntax,
572        attr,
573        attr_literals,
574        attribute,
575        attributes,
576        audit_that,
577        augmented_assignments,
578        auto_cfg,
579        auto_traits,
580        autodiff,
581        autodiff_forward,
582        autodiff_reverse,
583        automatically_derived,
584        available_externally,
585        avr,
586        avr_target_feature,
587        avx,
588        avx10_target_feature,
589        avx512_target_feature,
590        avx512bw,
591        avx512f,
592        await_macro,
593        bang,
594        begin_panic,
595        bench,
596        bevy_ecs,
597        bikeshed,
598        bikeshed_guaranteed_no_drop,
599        bin,
600        binaryheap_iter,
601        bind_by_move_pattern_guards,
602        bindings_after_at,
603        bitand,
604        bitand_assign,
605        bitor,
606        bitor_assign,
607        bitreverse,
608        bits,
609        bitxor,
610        bitxor_assign,
611        black_box,
612        block,
613        blocking,
614        bool,
615        bool_then,
616        borrowck_graphviz_format,
617        borrowck_graphviz_postflow,
618        box_new,
619        box_patterns,
620        box_syntax,
621        boxed_slice,
622        bpf,
623        bpf_target_feature,
624        braced_empty_structs,
625        branch,
626        breakpoint,
627        bridge,
628        bswap,
629        btreemap_contains_key,
630        btreemap_insert,
631        btreeset_iter,
632        built,
633        builtin_syntax,
634        bundle,
635        c,
636        c_dash_variadic,
637        c_str,
638        c_str_literals,
639        c_unwind,
640        c_variadic,
641        c_variadic_naked_functions,
642        c_void,
643        call,
644        call_mut,
645        call_once,
646        call_once_future,
647        call_ref_future,
648        caller,
649        caller_location,
650        capture_disjoint_fields,
651        carrying_mul_add,
652        carryless_mul,
653        catch_unwind,
654        cause,
655        cdylib,
656        ceilf16,
657        ceilf32,
658        ceilf64,
659        ceilf128,
660        cfg,
661        cfg_accessible,
662        cfg_attr,
663        cfg_attr_multi,
664        cfg_attr_trace: "<cfg_attr_trace>", // must not be a valid identifier
665        cfg_boolean_literals,
666        cfg_contract_checks,
667        cfg_doctest,
668        cfg_emscripten_wasm_eh,
669        cfg_eval,
670        cfg_fmt_debug,
671        cfg_overflow_checks,
672        cfg_panic,
673        cfg_relocation_model,
674        cfg_sanitize,
675        cfg_sanitizer_cfi,
676        cfg_select,
677        cfg_target_abi,
678        cfg_target_compact,
679        cfg_target_feature,
680        cfg_target_has_atomic,
681        cfg_target_has_atomic_equal_alignment,
682        cfg_target_has_reliable_f16_f128,
683        cfg_target_thread_local,
684        cfg_target_vendor,
685        cfg_trace: "<cfg_trace>", // must not be a valid identifier
686        cfg_ub_checks,
687        cfg_version,
688        cfi,
689        cfi_encoding,
690        char,
691        char_is_ascii,
692        char_to_digit,
693        child_id,
694        child_kill,
695        client,
696        clippy,
697        clobber_abi,
698        clone,
699        clone_closures,
700        clone_fn,
701        clone_from,
702        closure,
703        closure_lifetime_binder,
704        closure_to_fn_coercion,
705        closure_track_caller,
706        cmp,
707        cmp_max,
708        cmp_min,
709        cmp_ord_max,
710        cmp_ord_min,
711        cmp_partialeq_eq,
712        cmp_partialeq_ne,
713        cmp_partialord_cmp,
714        cmp_partialord_ge,
715        cmp_partialord_gt,
716        cmp_partialord_le,
717        cmp_partialord_lt,
718        cmpxchg16b_target_feature,
719        cmse_nonsecure_entry,
720        coerce_pointee_validated,
721        coerce_shared,
722        coerce_unsized,
723        cold,
724        cold_path,
725        collapse_debuginfo,
726        column,
727        common,
728        compare_bytes,
729        compare_exchange,
730        compare_exchange_weak,
731        compile_error,
732        compiler,
733        compiler_builtins,
734        compiler_copy,
735        compiler_fence,
736        compiler_move,
737        concat,
738        concat_bytes,
739        concat_idents,
740        conservative_impl_trait,
741        console,
742        const_allocate,
743        const_async_blocks,
744        const_block_items,
745        const_c_variadic,
746        const_closures,
747        const_compare_raw_pointers,
748        const_constructor,
749        const_continue,
750        const_deallocate,
751        const_destruct,
752        const_eval_limit,
753        const_eval_select,
754        const_evaluatable_checked,
755        const_extern_fn,
756        const_fn,
757        const_fn_floating_point_arithmetic,
758        const_fn_fn_ptr_basics,
759        const_fn_trait_bound,
760        const_fn_transmute,
761        const_fn_union,
762        const_fn_unsize,
763        const_for,
764        const_format_args,
765        const_generics,
766        const_generics_defaults,
767        const_if_match,
768        const_impl_trait,
769        const_in_array_repeat_expressions,
770        const_indexing,
771        const_let,
772        const_loop,
773        const_make_global,
774        const_mut_refs,
775        const_panic,
776        const_panic_fmt,
777        const_param_ty,
778        const_precise_live_drops,
779        const_ptr_cast,
780        const_raw_ptr_deref,
781        const_raw_ptr_to_usize_cast,
782        const_refs_to_cell,
783        const_refs_to_static,
784        const_trait_bound_opt_out,
785        const_trait_impl,
786        const_try,
787        const_ty_placeholder: "<const_ty>",
788        constant,
789        constructor,
790        contract_build_check_ensures,
791        contract_check_ensures,
792        contract_check_requires,
793        contract_checks,
794        contracts,
795        contracts_ensures,
796        contracts_internals,
797        contracts_requires,
798        convert,
799        convert_identity,
800        copy,
801        copy_closures,
802        copy_nonoverlapping,
803        copysignf16,
804        copysignf32,
805        copysignf64,
806        copysignf128,
807        core,
808        core_panic,
809        core_panic_2015_macro,
810        core_panic_2021_macro,
811        core_panic_macro,
812        coroutine,
813        coroutine_clone,
814        coroutine_resume,
815        coroutine_return,
816        coroutine_state,
817        coroutine_yield,
818        coroutines,
819        cosf16,
820        cosf32,
821        cosf64,
822        cosf128,
823        count,
824        coverage,
825        coverage_attribute,
826        cr,
827        crate_in_paths,
828        crate_local,
829        crate_name,
830        crate_type,
831        crate_visibility_modifier,
832        crt_dash_static: "crt-static",
833        csky,
834        csky_target_feature,
835        cstr_type,
836        cstring_as_c_str,
837        cstring_type,
838        ctlz,
839        ctlz_nonzero,
840        ctpop,
841        ctr,
842        cttz,
843        cttz_nonzero,
844        custom_attribute,
845        custom_code_classes_in_docs,
846        custom_derive,
847        custom_inner_attributes,
848        custom_mir,
849        custom_test_frameworks,
850        d,
851        d32,
852        dbg_macro,
853        dead_code,
854        dealloc,
855        debug,
856        debug_assert_eq_macro,
857        debug_assert_macro,
858        debug_assert_ne_macro,
859        debug_assertions,
860        debug_struct,
861        debug_struct_fields_finish,
862        debug_tuple,
863        debug_tuple_fields_finish,
864        debugger_visualizer,
865        decl_macro,
866        declare_lint_pass,
867        decode,
868        decorated,
869        default_alloc_error_handler,
870        default_field_values,
871        default_fn,
872        default_lib_allocator,
873        default_method_body_is_const,
874        // --------------------------
875        // Lang items which are used only for experiments with auto traits with default bounds.
876        // These lang items are not actually defined in core/std. Experiment is a part of
877        // `MCP: Low level components for async drop`(https://github.com/rust-lang/compiler-team/issues/727)
878        default_trait1,
879        default_trait2,
880        default_trait3,
881        default_trait4,
882        // --------------------------
883        default_type_parameter_fallback,
884        default_type_params,
885        define_opaque,
886        delayed_bug_from_inside_query,
887        deny,
888        deprecated,
889        deprecated_safe,
890        deprecated_suggestion,
891        deref,
892        deref_method,
893        deref_mut,
894        deref_mut_method,
895        deref_patterns,
896        deref_pure,
897        deref_target,
898        derive,
899        derive_coerce_pointee,
900        derive_const,
901        derive_const_issue: "118304",
902        derive_default_enum,
903        derive_from,
904        derive_smart_pointer,
905        destruct,
906        destructuring_assignment,
907        diagnostic,
908        diagnostic_namespace,
909        diagnostic_on_const,
910        dialect,
911        direct,
912        discriminant_kind,
913        discriminant_type,
914        discriminant_value,
915        disjoint_bitor,
916        dispatch_from_dyn,
917        div,
918        div_assign,
919        diverging_block_default,
920        dl,
921        do_not_recommend,
922        doc,
923        doc_alias,
924        doc_auto_cfg,
925        doc_cfg,
926        doc_cfg_hide,
927        doc_keyword,
928        doc_masked,
929        doc_notable_trait,
930        doc_primitive,
931        doc_spotlight,
932        doctest,
933        dotdot: "..",
934        dotdot_in_tuple_patterns,
935        dotdoteq_in_patterns,
936        dreg,
937        dreg_low8,
938        dreg_low16,
939        drop,
940        drop_in_place,
941        drop_types_in_const,
942        dropck_eyepatch,
943        dropck_parametricity,
944        dummy: "<!dummy!>", // use this instead of `sym::empty` for symbols that won't be used
945        dummy_cgu_name,
946        dylib,
947        dyn_compatible_for_dispatch,
948        dyn_metadata,
949        dyn_star,
950        dyn_trait,
951        dynamic_no_pic: "dynamic-no-pic",
952        e,
953        edition_panic,
954        effective_target_features,
955        effects,
956        eh_catch_typeinfo,
957        eh_personality,
958        eii,
959        eii_declaration,
960        eii_impl,
961        eii_internals,
962        eii_shared_macro,
963        element_ty,
964        emit,
965        emit_enum,
966        emit_enum_variant,
967        emit_enum_variant_arg,
968        emit_struct,
969        emit_struct_field,
970        // Notes about `sym::empty`:
971        // - It should only be used when it genuinely means "empty symbol". Use
972        //   `Option<Symbol>` when "no symbol" is a possibility.
973        // - For dummy symbols that are never used and absolutely must be
974        //   present, it's better to use `sym::dummy` than `sym::empty`, because
975        //   it's clearer that it's intended as a dummy value, and more likely
976        //   to be detected if it accidentally does get used.
977        empty: "",
978        emscripten_wasm_eh,
979        enable,
980        encode,
981        end,
982        entry_nops,
983        enumerate_method,
984        env,
985        env_CFG_RELEASE: env!("CFG_RELEASE"),
986        eprint_macro,
987        eprintln_macro,
988        eq,
989        ergonomic_clones,
990        ermsb_target_feature,
991        exact_div,
992        except,
993        exception_handling: "exception-handling",
994        exclusive_range_pattern,
995        exhaustive_integer_patterns,
996        exhaustive_patterns,
997        existential_type,
998        exp2f16,
999        exp2f32,
1000        exp2f64,
1001        exp2f128,
1002        expect,
1003        expected,
1004        expf16,
1005        expf32,
1006        expf64,
1007        expf128,
1008        explicit_extern_abis,
1009        explicit_generic_args_with_impl_trait,
1010        explicit_tail_calls,
1011        export_name,
1012        export_stable,
1013        export_symbols: "export-symbols",
1014        expr,
1015        expr_2021,
1016        expr_fragment_specifier_2024,
1017        extended_key_value_attributes,
1018        extended_varargs_abi_support,
1019        extern_absolute_paths,
1020        extern_crate_item_prelude,
1021        extern_crate_self,
1022        extern_in_paths,
1023        extern_item_impls,
1024        extern_prelude,
1025        extern_system_varargs,
1026        extern_types,
1027        extern_weak,
1028        external,
1029        external_doc,
1030        f,
1031        f16,
1032        f16_consts_mod,
1033        f16_epsilon,
1034        f16_nan,
1035        f16c_target_feature,
1036        f32,
1037        f32_consts_mod,
1038        f32_epsilon,
1039        f32_legacy_const_digits,
1040        f32_legacy_const_epsilon,
1041        f32_legacy_const_infinity,
1042        f32_legacy_const_mantissa_dig,
1043        f32_legacy_const_max,
1044        f32_legacy_const_max_10_exp,
1045        f32_legacy_const_max_exp,
1046        f32_legacy_const_min,
1047        f32_legacy_const_min_10_exp,
1048        f32_legacy_const_min_exp,
1049        f32_legacy_const_min_positive,
1050        f32_legacy_const_nan,
1051        f32_legacy_const_neg_infinity,
1052        f32_legacy_const_radix,
1053        f32_nan,
1054        f64,
1055        f64_consts_mod,
1056        f64_epsilon,
1057        f64_legacy_const_digits,
1058        f64_legacy_const_epsilon,
1059        f64_legacy_const_infinity,
1060        f64_legacy_const_mantissa_dig,
1061        f64_legacy_const_max,
1062        f64_legacy_const_max_10_exp,
1063        f64_legacy_const_max_exp,
1064        f64_legacy_const_min,
1065        f64_legacy_const_min_10_exp,
1066        f64_legacy_const_min_exp,
1067        f64_legacy_const_min_positive,
1068        f64_legacy_const_nan,
1069        f64_legacy_const_neg_infinity,
1070        f64_legacy_const_radix,
1071        f64_nan,
1072        f128,
1073        f128_consts_mod,
1074        f128_epsilon,
1075        f128_nan,
1076        fabsf16,
1077        fabsf32,
1078        fabsf64,
1079        fabsf128,
1080        fadd_algebraic,
1081        fadd_fast,
1082        fake_variadic,
1083        fallback,
1084        fdiv_algebraic,
1085        fdiv_fast,
1086        feature,
1087        fence,
1088        ferris: "🦀",
1089        fetch_update,
1090        ffi,
1091        ffi_const,
1092        ffi_pure,
1093        ffi_returns_twice,
1094        field,
1095        field_init_shorthand,
1096        fields,
1097        file,
1098        file_options,
1099        final_associated_functions,
1100        flags,
1101        float,
1102        float_to_int_unchecked,
1103        floorf16,
1104        floorf32,
1105        floorf64,
1106        floorf128,
1107        fmaf16,
1108        fmaf32,
1109        fmaf64,
1110        fmaf128,
1111        fmt,
1112        fmt_debug,
1113        fmul_algebraic,
1114        fmul_fast,
1115        fmuladdf16,
1116        fmuladdf32,
1117        fmuladdf64,
1118        fmuladdf128,
1119        fn_align,
1120        fn_body,
1121        fn_delegation,
1122        fn_must_use,
1123        fn_mut,
1124        fn_once,
1125        fn_once_output,
1126        fn_ptr_addr,
1127        fn_ptr_trait,
1128        forbid,
1129        force_target_feature,
1130        forget,
1131        format,
1132        format_args,
1133        format_args_capture,
1134        format_args_macro,
1135        format_args_nl,
1136        format_argument,
1137        format_arguments,
1138        format_macro,
1139        framework,
1140        freeze,
1141        freeze_impls,
1142        freg,
1143        frem_algebraic,
1144        frem_fast,
1145        from,
1146        from_desugaring,
1147        from_fn,
1148        from_iter,
1149        from_iter_fn,
1150        from_output,
1151        from_residual,
1152        from_size_align_unchecked,
1153        from_size_alignment_unchecked,
1154        from_str,
1155        from_str_method,
1156        from_str_nonconst,
1157        from_u16,
1158        from_usize,
1159        from_yeet,
1160        frontmatter,
1161        fs_create_dir,
1162        fsub_algebraic,
1163        fsub_fast,
1164        full,
1165        fundamental,
1166        fused_iterator,
1167        future,
1168        future_drop_poll,
1169        future_output,
1170        future_trait,
1171        fxsr,
1172        gdb_script_file,
1173        ge,
1174        gen_blocks,
1175        gen_future,
1176        generator_clone,
1177        generators,
1178        generic_arg_infer,
1179        generic_assert,
1180        generic_associated_types,
1181        generic_associated_types_extended,
1182        generic_const_exprs,
1183        generic_const_items,
1184        generic_const_parameter_types,
1185        generic_param_attrs,
1186        generic_pattern_types,
1187        generics,
1188        get_context,
1189        global_alloc_ty,
1190        global_allocator,
1191        global_asm,
1192        global_registration,
1193        globs,
1194        gt,
1195        guard_patterns,
1196        half_open_range_patterns,
1197        half_open_range_patterns_in_slices,
1198        hash,
1199        hashmap_contains_key,
1200        hashmap_drain_ty,
1201        hashmap_insert,
1202        hashmap_iter_mut_ty,
1203        hashmap_iter_ty,
1204        hashmap_keys_ty,
1205        hashmap_values_mut_ty,
1206        hashmap_values_ty,
1207        hashset_drain_ty,
1208        hashset_iter,
1209        hashset_iter_ty,
1210        hexagon,
1211        hexagon_target_feature,
1212        hidden,
1213        hide,
1214        hint,
1215        homogeneous_aggregate,
1216        host,
1217        html_favicon_url,
1218        html_logo_url,
1219        html_no_source,
1220        html_playground_url,
1221        html_root_url,
1222        hwaddress,
1223        i,
1224        i8,
1225        i8_legacy_const_max,
1226        i8_legacy_const_min,
1227        i8_legacy_fn_max_value,
1228        i8_legacy_fn_min_value,
1229        i8_legacy_mod,
1230        i16,
1231        i16_legacy_const_max,
1232        i16_legacy_const_min,
1233        i16_legacy_fn_max_value,
1234        i16_legacy_fn_min_value,
1235        i16_legacy_mod,
1236        i32,
1237        i32_legacy_const_max,
1238        i32_legacy_const_min,
1239        i32_legacy_fn_max_value,
1240        i32_legacy_fn_min_value,
1241        i32_legacy_mod,
1242        i64,
1243        i64_legacy_const_max,
1244        i64_legacy_const_min,
1245        i64_legacy_fn_max_value,
1246        i64_legacy_fn_min_value,
1247        i64_legacy_mod,
1248        i128,
1249        i128_legacy_const_max,
1250        i128_legacy_const_min,
1251        i128_legacy_fn_max_value,
1252        i128_legacy_fn_min_value,
1253        i128_legacy_mod,
1254        i128_type,
1255        ident,
1256        if_let,
1257        if_let_guard,
1258        if_let_rescope,
1259        if_while_or_patterns,
1260        ignore,
1261        immediate_abort: "immediate-abort",
1262        impl_header_lifetime_elision,
1263        impl_lint_pass,
1264        impl_trait_in_assoc_type,
1265        impl_trait_in_bindings,
1266        impl_trait_in_fn_trait_return,
1267        impl_trait_projections,
1268        implement_via_object,
1269        implied_by,
1270        import,
1271        import_name_type,
1272        import_shadowing,
1273        import_trait_associated_functions,
1274        imported_main,
1275        in_band_lifetimes,
1276        include,
1277        include_bytes,
1278        include_bytes_macro,
1279        include_str,
1280        include_str_macro,
1281        inclusive_range_syntax,
1282        index,
1283        index_mut,
1284        infer_outlives_requirements,
1285        infer_static_outlives_requirements,
1286        inherent_associated_types,
1287        inherit,
1288        initial,
1289        inlateout,
1290        inline,
1291        inline_const,
1292        inline_const_pat,
1293        inout,
1294        instant_now,
1295        instruction_set,
1296        integer_: "integer", // underscore to avoid clashing with the function `sym::integer` below
1297        integral,
1298        internal,
1299        internal_features,
1300        into_async_iter_into_iter,
1301        into_future,
1302        into_iter,
1303        into_try_type,
1304        intra_doc_pointers,
1305        intrinsics,
1306        intrinsics_unaligned_volatile_load,
1307        intrinsics_unaligned_volatile_store,
1308        io_error_new,
1309        io_errorkind,
1310        io_stderr,
1311        io_stdout,
1312        irrefutable_let_patterns,
1313        is,
1314        is_auto,
1315        is_val_statically_known,
1316        isa_attribute,
1317        isize,
1318        isize_legacy_const_max,
1319        isize_legacy_const_min,
1320        isize_legacy_fn_max_value,
1321        isize_legacy_fn_min_value,
1322        isize_legacy_mod,
1323        issue,
1324        issue_5723_bootstrap,
1325        issue_tracker_base_url,
1326        item,
1327        item_like_imports,
1328        iter,
1329        iter_cloned,
1330        iter_copied,
1331        iter_filter,
1332        iter_mut,
1333        iter_repeat,
1334        iterator,
1335        iterator_collect_fn,
1336        kcfi,
1337        kernel_address,
1338        keylocker_x86,
1339        keyword,
1340        kind,
1341        kreg,
1342        kreg0,
1343        label,
1344        label_break_value,
1345        lahfsahf_target_feature,
1346        lang,
1347        lang_items,
1348        large_assignments,
1349        last,
1350        lateout,
1351        lazy_normalization_consts,
1352        lazy_type_alias,
1353        le,
1354        legacy_receiver,
1355        len,
1356        let_chains,
1357        let_else,
1358        lhs,
1359        lib,
1360        libc,
1361        lifetime,
1362        lifetime_capture_rules_2024,
1363        lifetimes,
1364        likely,
1365        line,
1366        link,
1367        link_arg_attribute,
1368        link_args,
1369        link_cfg,
1370        link_dash_arg: "link-arg",
1371        link_llvm_intrinsics,
1372        link_name,
1373        link_ordinal,
1374        link_section,
1375        linkage,
1376        linker,
1377        linker_messages,
1378        linkonce,
1379        linkonce_odr,
1380        lint_reasons,
1381        literal,
1382        load,
1383        loaded_from_disk,
1384        local,
1385        local_inner_macros,
1386        log2f16,
1387        log2f32,
1388        log2f64,
1389        log2f128,
1390        log10f16,
1391        log10f32,
1392        log10f64,
1393        log10f128,
1394        log_syntax,
1395        logf16,
1396        logf32,
1397        logf64,
1398        logf128,
1399        loongarch32,
1400        loongarch64,
1401        loongarch_target_feature,
1402        loop_break_value,
1403        loop_match,
1404        lr,
1405        lt,
1406        m68k,
1407        m68k_target_feature,
1408        macro_at_most_once_rep,
1409        macro_attr,
1410        macro_attributes_in_derive_output,
1411        macro_concat,
1412        macro_derive,
1413        macro_escape,
1414        macro_export,
1415        macro_lifetime_matcher,
1416        macro_literal_matcher,
1417        macro_metavar_expr,
1418        macro_metavar_expr_concat,
1419        macro_reexport,
1420        macro_use,
1421        macro_vis_matcher,
1422        macros_in_extern,
1423        main,
1424        managed_boxes,
1425        manually_drop,
1426        map,
1427        map_err,
1428        marker,
1429        marker_trait_attr,
1430        masked,
1431        match_beginning_vert,
1432        match_default_bindings,
1433        matches_macro,
1434        maximumf16,
1435        maximumf32,
1436        maximumf64,
1437        maximumf128,
1438        maxnumf16,
1439        maxnumf32,
1440        maxnumf64,
1441        maxnumf128,
1442        may_dangle,
1443        may_unwind,
1444        maybe_uninit,
1445        maybe_uninit_uninit,
1446        maybe_uninit_zeroed,
1447        mem_align_const,
1448        mem_align_of,
1449        mem_discriminant,
1450        mem_drop,
1451        mem_forget,
1452        mem_replace,
1453        mem_size_const,
1454        mem_size_of,
1455        mem_size_of_val,
1456        mem_swap,
1457        mem_uninitialized,
1458        mem_variant_count,
1459        mem_zeroed,
1460        member_constraints,
1461        memory,
1462        memtag,
1463        message,
1464        meta,
1465        meta_sized,
1466        metadata_type,
1467        mgca_type_const_syntax,
1468        min_const_fn,
1469        min_const_generics,
1470        min_const_unsafe_fn,
1471        min_exhaustive_patterns,
1472        min_generic_const_args,
1473        min_specialization,
1474        min_type_alias_impl_trait,
1475        minimumf16,
1476        minimumf32,
1477        minimumf64,
1478        minimumf128,
1479        minnumf16,
1480        minnumf32,
1481        minnumf64,
1482        minnumf128,
1483        mips,
1484        mips32r6,
1485        mips64,
1486        mips64r6,
1487        mips_target_feature,
1488        mir_assume,
1489        mir_basic_block,
1490        mir_call,
1491        mir_cast_ptr_to_ptr,
1492        mir_cast_transmute,
1493        mir_cast_unsize,
1494        mir_checked,
1495        mir_debuginfo,
1496        mir_deinit,
1497        mir_discriminant,
1498        mir_drop,
1499        mir_field,
1500        mir_goto,
1501        mir_len,
1502        mir_make_place,
1503        mir_move,
1504        mir_offset,
1505        mir_ptr_metadata,
1506        mir_retag,
1507        mir_return,
1508        mir_return_to,
1509        mir_set_discriminant,
1510        mir_static,
1511        mir_static_mut,
1512        mir_storage_dead,
1513        mir_storage_live,
1514        mir_tail_call,
1515        mir_unreachable,
1516        mir_unwind_cleanup,
1517        mir_unwind_continue,
1518        mir_unwind_resume,
1519        mir_unwind_terminate,
1520        mir_unwind_terminate_reason,
1521        mir_unwind_unreachable,
1522        mir_variant,
1523        miri,
1524        mmx_reg,
1525        modifiers,
1526        module,
1527        module_path,
1528        more_maybe_bounds,
1529        more_qualified_paths,
1530        more_struct_aliases,
1531        movbe_target_feature,
1532        move_ref_pattern,
1533        move_size_limit,
1534        movrs_target_feature,
1535        msp430,
1536        mul,
1537        mul_assign,
1538        mul_with_overflow,
1539        multiple_supertrait_upcastable,
1540        must_not_suspend,
1541        must_use,
1542        mut_preserve_binding_mode_2024,
1543        mut_ref,
1544        mutable,
1545        naked,
1546        naked_asm,
1547        naked_functions,
1548        naked_functions_rustic_abi,
1549        naked_functions_target_feature,
1550        name,
1551        names,
1552        native_link_modifiers,
1553        native_link_modifiers_as_needed,
1554        native_link_modifiers_bundle,
1555        native_link_modifiers_verbatim,
1556        native_link_modifiers_whole_archive,
1557        natvis_file,
1558        ne,
1559        needs_allocator,
1560        needs_drop,
1561        needs_panic_runtime,
1562        neg,
1563        negate_unsigned,
1564        negative_bounds,
1565        negative_impls,
1566        neon,
1567        nested,
1568        never,
1569        never_patterns,
1570        never_type,
1571        never_type_fallback,
1572        new,
1573        new_binary,
1574        new_const,
1575        new_debug,
1576        new_debug_noop,
1577        new_display,
1578        new_lower_exp,
1579        new_lower_hex,
1580        new_octal,
1581        new_pointer,
1582        new_range,
1583        new_unchecked,
1584        new_upper_exp,
1585        new_upper_hex,
1586        new_v1,
1587        new_v1_formatted,
1588        next,
1589        niko,
1590        nll,
1591        no,
1592        no_builtins,
1593        no_core,
1594        no_coverage,
1595        no_crate_inject,
1596        no_debug,
1597        no_default_passes,
1598        no_implicit_prelude,
1599        no_inline,
1600        no_link,
1601        no_main,
1602        no_mangle,
1603        no_sanitize,
1604        no_stack_check,
1605        no_std,
1606        nomem,
1607        non_ascii_idents,
1608        non_exhaustive,
1609        non_exhaustive_omitted_patterns_lint,
1610        non_lifetime_binders,
1611        non_modrs_mods,
1612        nonblocking,
1613        none,
1614        nontemporal_store,
1615        noop_method_borrow,
1616        noop_method_clone,
1617        noop_method_deref,
1618        noprefix,
1619        noreturn,
1620        nostack,
1621        not,
1622        notable_trait,
1623        note,
1624        null,
1625        nvptx64,
1626        nvptx_target_feature,
1627        object_safe_for_dispatch,
1628        of,
1629        off,
1630        offload,
1631        offset,
1632        offset_of,
1633        offset_of_enum,
1634        offset_of_nested,
1635        offset_of_slice,
1636        ok_or_else,
1637        old_name,
1638        omit_gdb_pretty_printer_section,
1639        on,
1640        on_const,
1641        on_unimplemented,
1642        opaque,
1643        opaque_generic_const_args,
1644        opaque_module_name_placeholder: "<opaque>",
1645        open_options_new,
1646        ops,
1647        opt_out_copy,
1648        optimize,
1649        optimize_attribute,
1650        optimized,
1651        optin_builtin_traits,
1652        option,
1653        option_env,
1654        option_expect,
1655        option_unwrap,
1656        options,
1657        or,
1658        or_patterns,
1659        ord_cmp_method,
1660        os_str_to_os_string,
1661        os_string_as_os_str,
1662        other,
1663        out,
1664        overflow_checks,
1665        overlapping_marker_traits,
1666        owned_box,
1667        packed,
1668        packed_bundled_libs,
1669        panic,
1670        panic_2015,
1671        panic_2021,
1672        panic_abort,
1673        panic_any,
1674        panic_bounds_check,
1675        panic_cannot_unwind,
1676        panic_const_add_overflow,
1677        panic_const_async_fn_resumed,
1678        panic_const_async_fn_resumed_drop,
1679        panic_const_async_fn_resumed_panic,
1680        panic_const_async_gen_fn_resumed,
1681        panic_const_async_gen_fn_resumed_drop,
1682        panic_const_async_gen_fn_resumed_panic,
1683        panic_const_coroutine_resumed,
1684        panic_const_coroutine_resumed_drop,
1685        panic_const_coroutine_resumed_panic,
1686        panic_const_div_by_zero,
1687        panic_const_div_overflow,
1688        panic_const_gen_fn_none,
1689        panic_const_gen_fn_none_drop,
1690        panic_const_gen_fn_none_panic,
1691        panic_const_mul_overflow,
1692        panic_const_neg_overflow,
1693        panic_const_rem_by_zero,
1694        panic_const_rem_overflow,
1695        panic_const_shl_overflow,
1696        panic_const_shr_overflow,
1697        panic_const_sub_overflow,
1698        panic_display,
1699        panic_fmt,
1700        panic_handler,
1701        panic_impl,
1702        panic_implementation,
1703        panic_in_cleanup,
1704        panic_info,
1705        panic_invalid_enum_construction,
1706        panic_location,
1707        panic_misaligned_pointer_dereference,
1708        panic_nounwind,
1709        panic_null_pointer_dereference,
1710        panic_runtime,
1711        panic_str_2015,
1712        panic_unwind,
1713        panicking,
1714        param_attrs,
1715        parent_label,
1716        partial_cmp,
1717        partial_ord,
1718        passes,
1719        pat,
1720        pat_param,
1721        patchable_function_entry,
1722        path,
1723        path_main_separator,
1724        path_to_pathbuf,
1725        pathbuf_as_path,
1726        pattern_complexity_limit,
1727        pattern_parentheses,
1728        pattern_type,
1729        pattern_type_range_trait,
1730        pattern_types,
1731        permissions_from_mode,
1732        phantom_data,
1733        phase,
1734        pic,
1735        pie,
1736        pin,
1737        pin_ergonomics,
1738        pin_macro,
1739        pin_v2,
1740        platform_intrinsics,
1741        plugin,
1742        plugin_registrar,
1743        plugins,
1744        pointee,
1745        pointee_sized,
1746        pointee_trait,
1747        pointer,
1748        poll,
1749        poll_next,
1750        position,
1751        post_cleanup: "post-cleanup",
1752        post_dash_lto: "post-lto",
1753        postfix_match,
1754        powerpc,
1755        powerpc64,
1756        powerpc_target_feature,
1757        powf16,
1758        powf32,
1759        powf64,
1760        powf128,
1761        powif16,
1762        powif32,
1763        powif64,
1764        powif128,
1765        pre_dash_lto: "pre-lto",
1766        precise_capturing,
1767        precise_capturing_in_traits,
1768        precise_pointer_size_matching,
1769        precision,
1770        predicates,
1771        pref_align_of,
1772        prefetch_read_data,
1773        prefetch_read_instruction,
1774        prefetch_write_data,
1775        prefetch_write_instruction,
1776        prefix_nops,
1777        preg,
1778        prelude,
1779        prelude_import,
1780        preserves_flags,
1781        prfchw_target_feature,
1782        print_macro,
1783        println_macro,
1784        proc_dash_macro: "proc-macro",
1785        proc_macro,
1786        proc_macro_attribute,
1787        proc_macro_derive,
1788        proc_macro_expr,
1789        proc_macro_gen,
1790        proc_macro_hygiene,
1791        proc_macro_internals,
1792        proc_macro_mod,
1793        proc_macro_non_items,
1794        proc_macro_path_invoc,
1795        process_abort,
1796        process_exit,
1797        profiler_builtins,
1798        profiler_runtime,
1799        ptr,
1800        ptr_cast,
1801        ptr_cast_const,
1802        ptr_cast_mut,
1803        ptr_const_is_null,
1804        ptr_copy,
1805        ptr_copy_nonoverlapping,
1806        ptr_eq,
1807        ptr_from_ref,
1808        ptr_guaranteed_cmp,
1809        ptr_is_null,
1810        ptr_mask,
1811        ptr_metadata,
1812        ptr_null,
1813        ptr_null_mut,
1814        ptr_offset_from,
1815        ptr_offset_from_unsigned,
1816        ptr_read,
1817        ptr_read_unaligned,
1818        ptr_read_volatile,
1819        ptr_replace,
1820        ptr_slice_from_raw_parts,
1821        ptr_slice_from_raw_parts_mut,
1822        ptr_swap,
1823        ptr_swap_nonoverlapping,
1824        ptr_without_provenance,
1825        ptr_without_provenance_mut,
1826        ptr_write,
1827        ptr_write_bytes,
1828        ptr_write_unaligned,
1829        ptr_write_volatile,
1830        pub_macro_rules,
1831        pub_restricted,
1832        public,
1833        pure,
1834        pushpop_unsafe,
1835        qreg,
1836        qreg_low4,
1837        qreg_low8,
1838        quad_precision_float,
1839        question_mark,
1840        quote,
1841        range_inclusive_new,
1842        range_step,
1843        raw_dash_dylib: "raw-dylib",
1844        raw_dylib,
1845        raw_dylib_elf,
1846        raw_eq,
1847        raw_identifiers,
1848        raw_ref_op,
1849        re_rebalance_coherence,
1850        read_enum,
1851        read_enum_variant,
1852        read_enum_variant_arg,
1853        read_struct,
1854        read_struct_field,
1855        read_via_copy,
1856        readonly,
1857        realloc,
1858        realtime,
1859        reason,
1860        reborrow,
1861        receiver,
1862        receiver_target,
1863        recursion_limit,
1864        reexport_test_harness_main,
1865        ref_pat_eat_one_layer_2024,
1866        ref_pat_eat_one_layer_2024_structural,
1867        ref_pat_everywhere,
1868        ref_unwind_safe_trait,
1869        reference,
1870        reflect,
1871        reg,
1872        reg16,
1873        reg32,
1874        reg64,
1875        reg_abcd,
1876        reg_addr,
1877        reg_byte,
1878        reg_data,
1879        reg_iw,
1880        reg_nonzero,
1881        reg_pair,
1882        reg_ptr,
1883        reg_upper,
1884        register_attr,
1885        register_tool,
1886        relaxed_adts,
1887        relaxed_struct_unsize,
1888        relocation_model,
1889        rem,
1890        rem_assign,
1891        repr,
1892        repr128,
1893        repr_align,
1894        repr_align_enum,
1895        repr_packed,
1896        repr_simd,
1897        repr_transparent,
1898        require,
1899        reserve_x18: "reserve-x18",
1900        residual,
1901        result,
1902        result_ffi_guarantees,
1903        result_ok_method,
1904        resume,
1905        return_position_impl_trait_in_trait,
1906        return_type_notation,
1907        riscv32,
1908        riscv64,
1909        riscv_target_feature,
1910        rlib,
1911        ropi,
1912        ropi_rwpi: "ropi-rwpi",
1913        rotate_left,
1914        rotate_right,
1915        round_ties_even_f16,
1916        round_ties_even_f32,
1917        round_ties_even_f64,
1918        round_ties_even_f128,
1919        roundf16,
1920        roundf32,
1921        roundf64,
1922        roundf128,
1923        rt,
1924        rtm_target_feature,
1925        runtime,
1926        rust,
1927        rust_2015,
1928        rust_2018,
1929        rust_2018_preview,
1930        rust_2021,
1931        rust_2024,
1932        rust_analyzer,
1933        rust_begin_unwind,
1934        rust_cold_cc,
1935        rust_eh_catch_typeinfo,
1936        rust_eh_personality,
1937        rust_future,
1938        rust_logo,
1939        rust_out,
1940        rust_preserve_none_cc,
1941        rustc,
1942        rustc_abi,
1943        // FIXME(#82232, #143834): temporary name to mitigate `#[align]` nameres ambiguity
1944        rustc_align,
1945        rustc_align_static,
1946        rustc_allocator,
1947        rustc_allocator_zeroed,
1948        rustc_allocator_zeroed_variant,
1949        rustc_allow_const_fn_unstable,
1950        rustc_allow_incoherent_impl,
1951        rustc_allowed_through_unstable_modules,
1952        rustc_as_ptr,
1953        rustc_attrs,
1954        rustc_autodiff,
1955        rustc_builtin_macro,
1956        rustc_capture_analysis,
1957        rustc_clean,
1958        rustc_coherence_is_core,
1959        rustc_coinductive,
1960        rustc_confusables,
1961        rustc_const_stable,
1962        rustc_const_stable_indirect,
1963        rustc_const_unstable,
1964        rustc_conversion_suggestion,
1965        rustc_deallocator,
1966        rustc_def_path,
1967        rustc_default_body_unstable,
1968        rustc_delayed_bug_from_inside_query,
1969        rustc_deny_explicit_impl,
1970        rustc_deprecated_safe_2024,
1971        rustc_diagnostic_item,
1972        rustc_diagnostic_macros,
1973        rustc_do_not_const_check,
1974        rustc_doc_primitive,
1975        rustc_driver,
1976        rustc_dummy,
1977        rustc_dump_def_parents,
1978        rustc_dump_item_bounds,
1979        rustc_dump_predicates,
1980        rustc_dump_user_args,
1981        rustc_dump_vtable,
1982        rustc_dyn_incompatible_trait,
1983        rustc_effective_visibility,
1984        rustc_eii_foreign_item,
1985        rustc_evaluate_where_clauses,
1986        rustc_expected_cgu_reuse,
1987        rustc_force_inline,
1988        rustc_has_incoherent_inherent_impls,
1989        rustc_hidden_type_of_opaques,
1990        rustc_if_this_changed,
1991        rustc_inherit_overflow_checks,
1992        rustc_insignificant_dtor,
1993        rustc_intrinsic,
1994        rustc_intrinsic_const_stable_indirect,
1995        rustc_layout,
1996        rustc_layout_scalar_valid_range_end,
1997        rustc_layout_scalar_valid_range_start,
1998        rustc_legacy_const_generics,
1999        rustc_lint_opt_deny_field_access,
2000        rustc_lint_opt_ty,
2001        rustc_lint_query_instability,
2002        rustc_lint_untracked_query_information,
2003        rustc_macro_transparency,
2004        rustc_main,
2005        rustc_mir,
2006        rustc_must_implement_one_of,
2007        rustc_never_returns_null_ptr,
2008        rustc_never_type_options,
2009        rustc_no_implicit_autorefs,
2010        rustc_no_implicit_bounds,
2011        rustc_no_mir_inline,
2012        rustc_non_const_trait_method,
2013        rustc_nonnull_optimization_guaranteed,
2014        rustc_nounwind,
2015        rustc_objc_class,
2016        rustc_objc_selector,
2017        rustc_object_lifetime_default,
2018        rustc_offload_kernel,
2019        rustc_on_unimplemented,
2020        rustc_outlives,
2021        rustc_paren_sugar,
2022        rustc_partition_codegened,
2023        rustc_partition_reused,
2024        rustc_pass_by_value,
2025        rustc_pass_indirectly_in_non_rustic_abis,
2026        rustc_peek,
2027        rustc_peek_liveness,
2028        rustc_peek_maybe_init,
2029        rustc_peek_maybe_uninit,
2030        rustc_preserve_ub_checks,
2031        rustc_private,
2032        rustc_proc_macro_decls,
2033        rustc_promotable,
2034        rustc_pub_transparent,
2035        rustc_reallocator,
2036        rustc_regions,
2037        rustc_reservation_impl,
2038        rustc_scalable_vector,
2039        rustc_serialize,
2040        rustc_should_not_be_called_on_const_items,
2041        rustc_simd_monomorphize_lane_limit,
2042        rustc_skip_during_method_dispatch,
2043        rustc_specialization_trait,
2044        rustc_std_internal_symbol,
2045        rustc_strict_coherence,
2046        rustc_symbol_name,
2047        rustc_test_marker,
2048        rustc_then_this_would_need,
2049        rustc_trivial_field_reads,
2050        rustc_unsafe_specialization_marker,
2051        rustc_variance,
2052        rustc_variance_of_opaques,
2053        rustdoc,
2054        rustdoc_internals,
2055        rustdoc_missing_doc_code_examples,
2056        rustfmt,
2057        rvalue_static_promotion,
2058        rwpi,
2059        s,
2060        s390x,
2061        s390x_target_feature,
2062        s390x_target_feature_vector,
2063        safety,
2064        sanitize,
2065        sanitizer_cfi_generalize_pointers,
2066        sanitizer_cfi_normalize_integers,
2067        sanitizer_runtime,
2068        saturating_add,
2069        saturating_div,
2070        saturating_sub,
2071        sdylib,
2072        search_unbox,
2073        select_unpredictable,
2074        self_in_typedefs,
2075        self_struct_ctor,
2076        semiopaque,
2077        sha2,
2078        sha3,
2079        sha512_sm_x86,
2080        shadow_call_stack,
2081        shallow,
2082        shl,
2083        shl_assign,
2084        shorter_tail_lifetimes,
2085        should_panic,
2086        show,
2087        shr,
2088        shr_assign,
2089        sig_dfl,
2090        sig_ign,
2091        signed,
2092        simd,
2093        simd_add,
2094        simd_and,
2095        simd_arith_offset,
2096        simd_as,
2097        simd_bitmask,
2098        simd_bitreverse,
2099        simd_bswap,
2100        simd_carryless_mul,
2101        simd_cast,
2102        simd_cast_ptr,
2103        simd_ceil,
2104        simd_ctlz,
2105        simd_ctpop,
2106        simd_cttz,
2107        simd_div,
2108        simd_eq,
2109        simd_expose_provenance,
2110        simd_extract,
2111        simd_extract_dyn,
2112        simd_fabs,
2113        simd_fcos,
2114        simd_fexp,
2115        simd_fexp2,
2116        simd_ffi,
2117        simd_flog,
2118        simd_flog2,
2119        simd_flog10,
2120        simd_floor,
2121        simd_fma,
2122        simd_fmax,
2123        simd_fmin,
2124        simd_fsin,
2125        simd_fsqrt,
2126        simd_funnel_shl,
2127        simd_funnel_shr,
2128        simd_gather,
2129        simd_ge,
2130        simd_gt,
2131        simd_insert,
2132        simd_insert_dyn,
2133        simd_le,
2134        simd_lt,
2135        simd_masked_load,
2136        simd_masked_store,
2137        simd_mul,
2138        simd_ne,
2139        simd_neg,
2140        simd_or,
2141        simd_reduce_add_ordered,
2142        simd_reduce_add_unordered,
2143        simd_reduce_all,
2144        simd_reduce_and,
2145        simd_reduce_any,
2146        simd_reduce_max,
2147        simd_reduce_min,
2148        simd_reduce_mul_ordered,
2149        simd_reduce_mul_unordered,
2150        simd_reduce_or,
2151        simd_reduce_xor,
2152        simd_relaxed_fma,
2153        simd_rem,
2154        simd_round,
2155        simd_round_ties_even,
2156        simd_saturating_add,
2157        simd_saturating_sub,
2158        simd_scatter,
2159        simd_select,
2160        simd_select_bitmask,
2161        simd_shl,
2162        simd_shr,
2163        simd_shuffle,
2164        simd_shuffle_const_generic,
2165        simd_splat,
2166        simd_sub,
2167        simd_trunc,
2168        simd_with_exposed_provenance,
2169        simd_xor,
2170        since,
2171        sinf16,
2172        sinf32,
2173        sinf64,
2174        sinf128,
2175        size,
2176        size_of,
2177        size_of_val,
2178        sized,
2179        sized_hierarchy,
2180        skip,
2181        slice,
2182        slice_from_raw_parts,
2183        slice_from_raw_parts_mut,
2184        slice_from_ref,
2185        slice_get_unchecked,
2186        slice_iter,
2187        slice_len_fn,
2188        slice_patterns,
2189        slicing_syntax,
2190        soft,
2191        sparc,
2192        sparc64,
2193        sparc_target_feature,
2194        spe_acc,
2195        specialization,
2196        speed,
2197        spirv,
2198        spotlight,
2199        sqrtf16,
2200        sqrtf32,
2201        sqrtf64,
2202        sqrtf128,
2203        sreg,
2204        sreg_low16,
2205        sse,
2206        sse2,
2207        sse4a_target_feature,
2208        stable,
2209        staged_api,
2210        start,
2211        state,
2212        static_align,
2213        static_in_const,
2214        static_nobundle,
2215        static_recursion,
2216        staticlib,
2217        std,
2218        std_lib_injection,
2219        std_panic,
2220        std_panic_2015_macro,
2221        std_panic_macro,
2222        stmt,
2223        stmt_expr_attributes,
2224        stop_after_dataflow,
2225        store,
2226        str,
2227        str_chars,
2228        str_ends_with,
2229        str_from_utf8,
2230        str_from_utf8_mut,
2231        str_from_utf8_unchecked,
2232        str_from_utf8_unchecked_mut,
2233        str_inherent_from_utf8,
2234        str_inherent_from_utf8_mut,
2235        str_inherent_from_utf8_unchecked,
2236        str_inherent_from_utf8_unchecked_mut,
2237        str_len,
2238        str_split_whitespace,
2239        str_starts_with,
2240        str_trim,
2241        str_trim_end,
2242        str_trim_start,
2243        strict_provenance_lints,
2244        string_as_mut_str,
2245        string_as_str,
2246        string_deref_patterns,
2247        string_from_utf8,
2248        string_insert_str,
2249        string_new,
2250        string_push_str,
2251        stringify,
2252        struct_field_attributes,
2253        struct_inherit,
2254        struct_variant,
2255        structural_match,
2256        structural_peq,
2257        sub,
2258        sub_assign,
2259        sub_with_overflow,
2260        suggestion,
2261        super_let,
2262        supertrait_item_shadowing,
2263        sym,
2264        sync,
2265        synthetic,
2266        sys_mutex_lock,
2267        sys_mutex_try_lock,
2268        sys_mutex_unlock,
2269        t32,
2270        target,
2271        target_abi,
2272        target_arch,
2273        target_endian,
2274        target_env,
2275        target_family,
2276        target_feature,
2277        target_feature_11,
2278        target_feature_inline_always,
2279        target_has_atomic,
2280        target_has_atomic_equal_alignment,
2281        target_has_atomic_load_store,
2282        target_has_reliable_f16,
2283        target_has_reliable_f16_math,
2284        target_has_reliable_f128,
2285        target_has_reliable_f128_math,
2286        target_os,
2287        target_pointer_width,
2288        target_thread_local,
2289        target_vendor,
2290        tbm_target_feature,
2291        termination,
2292        termination_trait,
2293        termination_trait_test,
2294        test,
2295        test_2018_feature,
2296        test_accepted_feature,
2297        test_case,
2298        test_removed_feature,
2299        test_runner,
2300        test_unstable_lint,
2301        thread,
2302        thread_local,
2303        thread_local_macro,
2304        three_way_compare,
2305        thumb2,
2306        thumb_mode: "thumb-mode",
2307        tmm_reg,
2308        to_owned_method,
2309        to_string,
2310        to_string_method,
2311        to_vec,
2312        todo_macro,
2313        tool_attributes,
2314        tool_lints,
2315        trace_macros,
2316        track_caller,
2317        trait_alias,
2318        trait_ty,
2319        trait_upcasting,
2320        transmute,
2321        transmute_generic_consts,
2322        transmute_opts,
2323        transmute_trait,
2324        transmute_unchecked,
2325        transparent,
2326        transparent_enums,
2327        transparent_unions,
2328        trivial_bounds,
2329        trivial_clone,
2330        truncf16,
2331        truncf32,
2332        truncf64,
2333        truncf128,
2334        try_blocks,
2335        try_blocks_heterogeneous,
2336        try_capture,
2337        try_from,
2338        try_from_fn,
2339        try_into,
2340        try_trait_v2,
2341        try_trait_v2_residual,
2342        try_update,
2343        tt,
2344        tuple,
2345        tuple_indexing,
2346        tuple_trait,
2347        two_phase,
2348        ty,
2349        type_alias_enum_variants,
2350        type_alias_impl_trait,
2351        type_ascribe,
2352        type_ascription,
2353        type_changing_struct_update,
2354        type_id,
2355        type_id_eq,
2356        type_info,
2357        type_ir,
2358        type_ir_infer_ctxt_like,
2359        type_ir_inherent,
2360        type_ir_interner,
2361        type_length_limit,
2362        type_macros,
2363        type_name,
2364        type_of,
2365        type_privacy_lints,
2366        typed_swap_nonoverlapping,
2367        u8,
2368        u8_legacy_const_max,
2369        u8_legacy_const_min,
2370        u8_legacy_fn_max_value,
2371        u8_legacy_fn_min_value,
2372        u8_legacy_mod,
2373        u16,
2374        u16_legacy_const_max,
2375        u16_legacy_const_min,
2376        u16_legacy_fn_max_value,
2377        u16_legacy_fn_min_value,
2378        u16_legacy_mod,
2379        u32,
2380        u32_legacy_const_max,
2381        u32_legacy_const_min,
2382        u32_legacy_fn_max_value,
2383        u32_legacy_fn_min_value,
2384        u32_legacy_mod,
2385        u64,
2386        u64_legacy_const_max,
2387        u64_legacy_const_min,
2388        u64_legacy_fn_max_value,
2389        u64_legacy_fn_min_value,
2390        u64_legacy_mod,
2391        u128,
2392        u128_legacy_const_max,
2393        u128_legacy_const_min,
2394        u128_legacy_fn_max_value,
2395        u128_legacy_fn_min_value,
2396        u128_legacy_mod,
2397        ub_checks,
2398        unaligned_volatile_load,
2399        unaligned_volatile_store,
2400        unboxed_closures,
2401        unchecked_add,
2402        unchecked_div,
2403        unchecked_funnel_shl,
2404        unchecked_funnel_shr,
2405        unchecked_mul,
2406        unchecked_rem,
2407        unchecked_shl,
2408        unchecked_shr,
2409        unchecked_sub,
2410        undecorated,
2411        underscore_const_names,
2412        underscore_imports,
2413        underscore_lifetimes,
2414        uniform_paths,
2415        unimplemented_macro,
2416        unit,
2417        universal_impl_trait,
2418        unix,
2419        unlikely,
2420        unmarked_api,
2421        unnamed_fields,
2422        unpin,
2423        unqualified_local_imports,
2424        unreachable,
2425        unreachable_2015,
2426        unreachable_2015_macro,
2427        unreachable_2021,
2428        unreachable_code,
2429        unreachable_display,
2430        unreachable_macro,
2431        unrestricted_attribute_tokens,
2432        unsafe_attributes,
2433        unsafe_binders,
2434        unsafe_block_in_unsafe_fn,
2435        unsafe_cell,
2436        unsafe_cell_raw_get,
2437        unsafe_eii,
2438        unsafe_extern_blocks,
2439        unsafe_fields,
2440        unsafe_no_drop_flag,
2441        unsafe_pinned,
2442        unsafe_unpin,
2443        unsize,
2444        unsized_const_param_ty,
2445        unsized_const_params,
2446        unsized_fn_params,
2447        unsized_locals,
2448        unsized_tuple_coercion,
2449        unstable,
2450        unstable_feature_bound,
2451        unstable_location_reason_default: "this crate is being loaded from the sysroot, an \
2452                          unstable location; did you mean to load this crate \
2453                          from crates.io via `Cargo.toml` instead?",
2454        untagged_unions,
2455        unused_imports,
2456        unwind,
2457        unwind_attributes,
2458        unwind_safe_trait,
2459        unwrap,
2460        unwrap_binder,
2461        unwrap_or,
2462        update,
2463        use_cloned,
2464        use_extern_macros,
2465        use_nested_groups,
2466        used,
2467        used_with_arg,
2468        using,
2469        usize,
2470        usize_legacy_const_max,
2471        usize_legacy_const_min,
2472        usize_legacy_fn_max_value,
2473        usize_legacy_fn_min_value,
2474        usize_legacy_mod,
2475        v1,
2476        v8plus,
2477        va_arg,
2478        va_copy,
2479        va_end,
2480        va_list,
2481        va_start,
2482        val,
2483        validity,
2484        value,
2485        values,
2486        var,
2487        variant_count,
2488        variants,
2489        vec,
2490        vec_as_mut_slice,
2491        vec_as_slice,
2492        vec_from_elem,
2493        vec_is_empty,
2494        vec_macro,
2495        vec_new,
2496        vec_pop,
2497        vec_reserve,
2498        vec_with_capacity,
2499        vecdeque_iter,
2500        vecdeque_reserve,
2501        vector,
2502        verbatim,
2503        version,
2504        vfp2,
2505        vis,
2506        visible_private_types,
2507        volatile,
2508        volatile_copy_memory,
2509        volatile_copy_nonoverlapping_memory,
2510        volatile_load,
2511        volatile_set_memory,
2512        volatile_store,
2513        vreg,
2514        vreg_low16,
2515        vsreg,
2516        vsx,
2517        vtable_align,
2518        vtable_for,
2519        vtable_size,
2520        warn,
2521        wasip2,
2522        wasm32,
2523        wasm64,
2524        wasm_abi,
2525        wasm_import_module,
2526        wasm_target_feature,
2527        weak,
2528        weak_odr,
2529        where_clause_attrs,
2530        while_let,
2531        whole_dash_archive: "whole-archive",
2532        width,
2533        windows,
2534        windows_subsystem,
2535        with_negative_coherence,
2536        wrap_binder,
2537        wrapping_add,
2538        wrapping_div,
2539        wrapping_mul,
2540        wrapping_rem,
2541        wrapping_rem_euclid,
2542        wrapping_sub,
2543        wreg,
2544        write_box_via_move,
2545        write_bytes,
2546        write_fmt,
2547        write_macro,
2548        write_str,
2549        write_via_move,
2550        writeln_macro,
2551        x86,
2552        x86_64,
2553        x86_amx_intrinsics,
2554        x87_reg,
2555        x87_target_feature,
2556        xer,
2557        xmm_reg,
2558        xop_target_feature,
2559        xtensa,
2560        yeet_desugar_details,
2561        yeet_expr,
2562        yes,
2563        yield_expr,
2564        ymm_reg,
2565        yreg,
2566        zca,
2567        zfh,
2568        zfhmin,
2569        zmm_reg,
2570        ztso,
2571        // tidy-alphabetical-end
2572    }
2573}
2574
2575/// Symbols for crates that are part of the stable standard library: `std`, `core`, `alloc`, and
2576/// `proc_macro`.
2577pub const STDLIB_STABLE_CRATES: &[Symbol] = &[sym::std, sym::core, sym::alloc, sym::proc_macro];
2578
2579#[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_receiver_is_total_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<Symbol>;
        let _: ::core::cmp::AssertParamIsEq<Span>;
    }
}Eq, const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for Ident where __CTX: crate::HashStableContext {
            #[inline]
            fn hash_stable(&self, __hcx: &mut __CTX,
                __hasher:
                    &mut ::rustc_data_structures::stable_hasher::StableHasher) {
                match *self {
                    Ident { name: ref __binding_0, span: ref __binding_1 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                }
            }
        }
    };HashStable_Generic, 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)]
2580pub struct Ident {
2581    /// `name` should never be the empty symbol. If you are considering that,
2582    /// you are probably conflating "empty identifier with "no identifier" and
2583    /// you should use `Option<Ident>` instead.
2584    /// Trying to construct an `Ident` with an empty name will trigger debug assertions.
2585    pub name: Symbol,
2586    pub span: Span,
2587}
2588
2589impl Ident {
2590    #[inline]
2591    /// Constructs a new identifier from a symbol and a span.
2592    pub fn new(name: Symbol, span: Span) -> Ident {
2593        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);
2594        Ident { name, span }
2595    }
2596
2597    /// Constructs a new identifier with a dummy span.
2598    #[inline]
2599    pub fn with_dummy_span(name: Symbol) -> Ident {
2600        Ident::new(name, DUMMY_SP)
2601    }
2602
2603    // For dummy identifiers that are never used and absolutely must be
2604    // present. Note that this does *not* use the empty symbol; `sym::dummy`
2605    // makes it clear that it's intended as a dummy value, and is more likely
2606    // to be detected if it accidentally does get used.
2607    #[inline]
2608    pub fn dummy() -> Ident {
2609        Ident::with_dummy_span(sym::dummy)
2610    }
2611
2612    /// Maps a string to an identifier with a dummy span.
2613    pub fn from_str(string: &str) -> Ident {
2614        Ident::with_dummy_span(Symbol::intern(string))
2615    }
2616
2617    /// Maps a string and a span to an identifier.
2618    pub fn from_str_and_span(string: &str, span: Span) -> Ident {
2619        Ident::new(Symbol::intern(string), span)
2620    }
2621
2622    /// Replaces `lo` and `hi` with those from `span`, but keep hygiene context.
2623    pub fn with_span_pos(self, span: Span) -> Ident {
2624        Ident::new(self.name, span.with_ctxt(self.span.ctxt()))
2625    }
2626
2627    /// Creates a new ident with the same span and name with leading quote removed, if any.
2628    /// Calling it on a `'` ident will return an empty ident, which triggers debug assertions.
2629    pub fn without_first_quote(self) -> Ident {
2630        self.as_str()
2631            .strip_prefix('\'')
2632            .map_or(self, |name| Ident::new(Symbol::intern(name), self.span))
2633    }
2634
2635    /// "Normalize" ident for use in comparisons using "item hygiene".
2636    /// Identifiers with same string value become same if they came from the same macro 2.0 macro
2637    /// (e.g., `macro` item, but not `macro_rules` item) and stay different if they came from
2638    /// different macro 2.0 macros.
2639    /// Technically, this operation strips all non-opaque marks from ident's syntactic context.
2640    pub fn normalize_to_macros_2_0(self) -> Ident {
2641        Ident::new(self.name, self.span.normalize_to_macros_2_0())
2642    }
2643
2644    /// "Normalize" ident for use in comparisons using "local variable hygiene".
2645    /// Identifiers with same string value become same if they came from the same non-transparent
2646    /// macro (e.g., `macro` or `macro_rules!` items) and stay different if they came from different
2647    /// non-transparent macros.
2648    /// Technically, this operation strips all transparent marks from ident's syntactic context.
2649    #[inline]
2650    pub fn normalize_to_macro_rules(self) -> Ident {
2651        Ident::new(self.name, self.span.normalize_to_macro_rules())
2652    }
2653
2654    /// Access the underlying string. This is a slowish operation because it
2655    /// requires locking the symbol interner.
2656    ///
2657    /// Note that the lifetime of the return value is a lie. See
2658    /// `Symbol::as_str()` for details.
2659    pub fn as_str(&self) -> &str {
2660        self.name.as_str()
2661    }
2662}
2663
2664impl PartialEq for Ident {
2665    #[inline]
2666    fn eq(&self, rhs: &Self) -> bool {
2667        self.name == rhs.name && self.span.eq_ctxt(rhs.span)
2668    }
2669}
2670
2671impl Hash for Ident {
2672    fn hash<H: Hasher>(&self, state: &mut H) {
2673        self.name.hash(state);
2674        self.span.ctxt().hash(state);
2675    }
2676}
2677
2678impl fmt::Debug for Ident {
2679    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
2680        fmt::Display::fmt(self, f)?;
2681        fmt::Debug::fmt(&self.span.ctxt(), f)
2682    }
2683}
2684
2685/// This implementation is supposed to be used in error messages, so it's expected to be identical
2686/// to printing the original identifier token written in source code (`token_to_string`),
2687/// except that AST identifiers don't keep the rawness flag, so we have to guess it.
2688impl fmt::Display for Ident {
2689    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
2690        fmt::Display::fmt(&IdentPrinter::new(self.name, self.guess_print_mode(), None), f)
2691    }
2692}
2693
2694pub enum IdentPrintMode {
2695    Normal,
2696    RawIdent,
2697    RawLifetime,
2698}
2699
2700/// The most general type to print identifiers.
2701///
2702/// AST pretty-printer is used as a fallback for turning AST structures into token streams for
2703/// proc macros. Additionally, proc macros may stringify their input and expect it survive the
2704/// stringification (especially true for proc macro derives written between Rust 1.15 and 1.30).
2705/// So we need to somehow pretty-print `$crate` in a way preserving at least some of its
2706/// hygiene data, most importantly name of the crate it refers to.
2707/// As a result we print `$crate` as `crate` if it refers to the local crate
2708/// and as `::other_crate_name` if it refers to some other crate.
2709/// Note, that this is only done if the ident token is printed from inside of AST pretty-printing,
2710/// but not otherwise. Pretty-printing is the only way for proc macros to discover token contents,
2711/// so we should not perform this lossy conversion if the top level call to the pretty-printer was
2712/// done for a token stream or a single token.
2713pub struct IdentPrinter {
2714    symbol: Symbol,
2715    mode: IdentPrintMode,
2716    /// Span used for retrieving the crate name to which `$crate` refers to,
2717    /// if this field is `None` then the `$crate` conversion doesn't happen.
2718    convert_dollar_crate: Option<Span>,
2719}
2720
2721impl IdentPrinter {
2722    /// The most general `IdentPrinter` constructor. Do not use this.
2723    pub fn new(
2724        symbol: Symbol,
2725        mode: IdentPrintMode,
2726        convert_dollar_crate: Option<Span>,
2727    ) -> IdentPrinter {
2728        IdentPrinter { symbol, mode, convert_dollar_crate }
2729    }
2730
2731    /// This implementation is supposed to be used when printing identifiers
2732    /// as a part of pretty-printing for larger AST pieces.
2733    /// Do not use this either.
2734    pub fn for_ast_ident(ident: Ident, mode: IdentPrintMode) -> IdentPrinter {
2735        IdentPrinter::new(ident.name, mode, Some(ident.span))
2736    }
2737}
2738
2739impl fmt::Display for IdentPrinter {
2740    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
2741        let s = match self.mode {
2742            IdentPrintMode::Normal
2743                if self.symbol == kw::DollarCrate
2744                    && let Some(span) = self.convert_dollar_crate =>
2745            {
2746                let converted = span.ctxt().dollar_crate_name();
2747                if !converted.is_path_segment_keyword() {
2748                    f.write_str("::")?;
2749                }
2750                converted
2751            }
2752            IdentPrintMode::Normal => self.symbol,
2753            IdentPrintMode::RawIdent => {
2754                f.write_str("r#")?;
2755                self.symbol
2756            }
2757            IdentPrintMode::RawLifetime => {
2758                f.write_str("'r#")?;
2759                let s = self
2760                    .symbol
2761                    .as_str()
2762                    .strip_prefix("'")
2763                    .expect("only lifetime idents should be passed with RawLifetime mode");
2764                Symbol::intern(s)
2765            }
2766        };
2767        s.fmt(f)
2768    }
2769}
2770
2771/// A newtype around `Ident` that calls [Ident::normalize_to_macro_rules] on
2772/// construction for "local variable hygiene" comparisons.
2773///
2774/// Use this type when you need to compare identifiers according to macro_rules hygiene.
2775/// This ensures compile-time safety and avoids manual normalization calls.
2776#[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_receiver_is_total_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)]
2777pub struct MacroRulesNormalizedIdent(Ident);
2778
2779impl MacroRulesNormalizedIdent {
2780    #[inline]
2781    pub fn new(ident: Ident) -> Self {
2782        MacroRulesNormalizedIdent(ident.normalize_to_macro_rules())
2783    }
2784}
2785
2786impl fmt::Debug for MacroRulesNormalizedIdent {
2787    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
2788        fmt::Debug::fmt(&self.0, f)
2789    }
2790}
2791
2792impl fmt::Display for MacroRulesNormalizedIdent {
2793    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
2794        fmt::Display::fmt(&self.0, f)
2795    }
2796}
2797
2798/// An interned UTF-8 string.
2799///
2800/// Internally, a `Symbol` is implemented as an index, and all operations
2801/// (including hashing, equality, and ordering) operate on that index. The use
2802/// of `rustc_index::newtype_index!` means that `Option<Symbol>` only takes up 4 bytes,
2803/// because `rustc_index::newtype_index!` reserves the last 256 values for tagging purposes.
2804///
2805/// Note that `Symbol` cannot directly be a `rustc_index::newtype_index!` because it
2806/// implements `fmt::Debug`, `Encodable`, and `Decodable` in special ways.
2807#[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_receiver_is_total_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::cmp::PartialOrd::partial_cmp(&self.0, &other.0)
    }
}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)]
2808pub struct Symbol(SymbolIndex);
2809
2810// Used within both `Symbol` and `ByteSymbol`.
2811impl ::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! {
2812    #[orderable]
2813    struct SymbolIndex {}
2814}
2815
2816impl Symbol {
2817    /// Avoid this except for things like deserialization of previously
2818    /// serialized symbols, and testing. Use `intern` instead.
2819    pub const fn new(n: u32) -> Self {
2820        Symbol(SymbolIndex::from_u32(n))
2821    }
2822
2823    /// Maps a string to its interned representation.
2824    #[rustc_diagnostic_item = "SymbolIntern"]
2825    pub fn intern(str: &str) -> Self {
2826        with_session_globals(|session_globals| session_globals.symbol_interner.intern_str(str))
2827    }
2828
2829    /// Access the underlying string. This is a slowish operation because it
2830    /// requires locking the symbol interner.
2831    ///
2832    /// Note that the lifetime of the return value is a lie. It's not the same
2833    /// as `&self`, but actually tied to the lifetime of the underlying
2834    /// interner. Interners are long-lived, and there are very few of them, and
2835    /// this function is typically used for short-lived things, so in practice
2836    /// it works out ok.
2837    pub fn as_str(&self) -> &str {
2838        with_session_globals(|session_globals| unsafe {
2839            std::mem::transmute::<&str, &str>(session_globals.symbol_interner.get_str(*self))
2840        })
2841    }
2842
2843    pub fn as_u32(self) -> u32 {
2844        self.0.as_u32()
2845    }
2846
2847    pub fn is_empty(self) -> bool {
2848        self == sym::empty
2849    }
2850
2851    /// This method is supposed to be used in error messages, so it's expected to be
2852    /// identical to printing the original identifier token written in source code
2853    /// (`token_to_string`, `Ident::to_string`), except that symbols don't keep the rawness flag
2854    /// or edition, so we have to guess the rawness using the global edition.
2855    pub fn to_ident_string(self) -> String {
2856        // Avoid creating an empty identifier, because that asserts in debug builds.
2857        if self == sym::empty { String::new() } else { Ident::with_dummy_span(self).to_string() }
2858    }
2859
2860    /// Checks if `self` is similar to any symbol in `candidates`.
2861    ///
2862    /// The returned boolean represents whether the candidate is the same symbol with a different
2863    /// casing.
2864    ///
2865    /// All the candidates are assumed to be lowercase.
2866    pub fn find_similar(
2867        self,
2868        candidates: &[Symbol],
2869    ) -> Option<(Symbol, /* is incorrect case */ bool)> {
2870        let lowercase = self.as_str().to_lowercase();
2871        let lowercase_sym = Symbol::intern(&lowercase);
2872        if candidates.contains(&lowercase_sym) {
2873            Some((lowercase_sym, true))
2874        } else if let Some(similar_sym) = find_best_match_for_name(candidates, self, None) {
2875            Some((similar_sym, false))
2876        } else {
2877            None
2878        }
2879    }
2880}
2881
2882impl fmt::Debug for Symbol {
2883    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
2884        fmt::Debug::fmt(self.as_str(), f)
2885    }
2886}
2887
2888impl fmt::Display for Symbol {
2889    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
2890        fmt::Display::fmt(self.as_str(), f)
2891    }
2892}
2893
2894impl<CTX> HashStable<CTX> for Symbol {
2895    #[inline]
2896    fn hash_stable(&self, hcx: &mut CTX, hasher: &mut StableHasher) {
2897        self.as_str().hash_stable(hcx, hasher);
2898    }
2899}
2900
2901impl<CTX> ToStableHashKey<CTX> for Symbol {
2902    type KeyType = String;
2903    #[inline]
2904    fn to_stable_hash_key(&self, _: &CTX) -> String {
2905        self.as_str().to_string()
2906    }
2907}
2908
2909impl StableCompare for Symbol {
2910    const CAN_USE_UNSTABLE_SORT: bool = true;
2911
2912    fn stable_cmp(&self, other: &Self) -> std::cmp::Ordering {
2913        self.as_str().cmp(other.as_str())
2914    }
2915}
2916
2917/// Like `Symbol`, but for byte strings. `ByteSymbol` is used less widely, so
2918/// it has fewer operations defined than `Symbol`.
2919#[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_receiver_is_total_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::cmp::PartialOrd::partial_cmp(&self.0, &other.0)
    }
}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)]
2920pub struct ByteSymbol(SymbolIndex);
2921
2922impl ByteSymbol {
2923    /// Avoid this except for things like deserialization of previously
2924    /// serialized symbols, and testing. Use `intern` instead.
2925    pub const fn new(n: u32) -> Self {
2926        ByteSymbol(SymbolIndex::from_u32(n))
2927    }
2928
2929    /// Maps a string to its interned representation.
2930    pub fn intern(byte_str: &[u8]) -> Self {
2931        with_session_globals(|session_globals| {
2932            session_globals.symbol_interner.intern_byte_str(byte_str)
2933        })
2934    }
2935
2936    /// Like `Symbol::as_str`.
2937    pub fn as_byte_str(&self) -> &[u8] {
2938        with_session_globals(|session_globals| unsafe {
2939            std::mem::transmute::<&[u8], &[u8]>(session_globals.symbol_interner.get_byte_str(*self))
2940        })
2941    }
2942
2943    pub fn as_u32(self) -> u32 {
2944        self.0.as_u32()
2945    }
2946}
2947
2948impl fmt::Debug for ByteSymbol {
2949    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
2950        fmt::Debug::fmt(self.as_byte_str(), f)
2951    }
2952}
2953
2954impl<CTX> HashStable<CTX> for ByteSymbol {
2955    #[inline]
2956    fn hash_stable(&self, hcx: &mut CTX, hasher: &mut StableHasher) {
2957        self.as_byte_str().hash_stable(hcx, hasher);
2958    }
2959}
2960
2961// Interner used for both `Symbol`s and `ByteSymbol`s. If a string and a byte
2962// string with identical contents (e.g. "foo" and b"foo") are both interned,
2963// only one copy will be stored and the resulting `Symbol` and `ByteSymbol`
2964// will have the same index.
2965pub(crate) struct Interner(Lock<InternerInner>);
2966
2967// The `&'static [u8]`s in this type actually point into the arena.
2968//
2969// This type is private to prevent accidentally constructing more than one
2970// `Interner` on the same thread, which makes it easy to mix up `Symbol`s
2971// between `Interner`s.
2972struct InternerInner {
2973    arena: DroplessArena,
2974    byte_strs: FxIndexSet<&'static [u8]>,
2975}
2976
2977impl Interner {
2978    // These arguments are `&str`, but because of the sharing, we are
2979    // effectively pre-interning all these strings for both `Symbol` and
2980    // `ByteSymbol`.
2981    fn prefill(init: &[&'static str], extra: &[&'static str]) -> Self {
2982        let byte_strs = FxIndexSet::from_iter(
2983            init.iter().copied().chain(extra.iter().copied()).map(|str| str.as_bytes()),
2984        );
2985
2986        // The order in which duplicates are reported is irrelevant.
2987        #[expect(rustc::potential_query_instability)]
2988        if byte_strs.len() != init.len() + extra.len() {
2989            {
    ::core::panicking::panic_fmt(format_args!("duplicate symbols in the rustc symbol list and the extra symbols added by the driver: {0:?}",
            FxHashSet::intersection(&init.iter().copied().collect(),
                    &extra.iter().copied().collect()).collect::<Vec<_>>()));
}panic!(
2990                "duplicate symbols in the rustc symbol list and the extra symbols added by the driver: {:?}",
2991                FxHashSet::intersection(
2992                    &init.iter().copied().collect(),
2993                    &extra.iter().copied().collect(),
2994                )
2995                .collect::<Vec<_>>()
2996            )
2997        }
2998
2999        Interner(Lock::new(InternerInner { arena: Default::default(), byte_strs }))
3000    }
3001
3002    fn intern_str(&self, str: &str) -> Symbol {
3003        Symbol::new(self.intern_inner(str.as_bytes()))
3004    }
3005
3006    fn intern_byte_str(&self, byte_str: &[u8]) -> ByteSymbol {
3007        ByteSymbol::new(self.intern_inner(byte_str))
3008    }
3009
3010    #[inline]
3011    fn intern_inner(&self, byte_str: &[u8]) -> u32 {
3012        let mut inner = self.0.lock();
3013        if let Some(idx) = inner.byte_strs.get_index_of(byte_str) {
3014            return idx as u32;
3015        }
3016
3017        let byte_str: &[u8] = inner.arena.alloc_slice(byte_str);
3018
3019        // SAFETY: we can extend the arena allocation to `'static` because we
3020        // only access these while the arena is still alive.
3021        let byte_str: &'static [u8] = unsafe { &*(byte_str as *const [u8]) };
3022
3023        // This second hash table lookup can be avoided by using `RawEntryMut`,
3024        // but this code path isn't hot enough for it to be worth it. See
3025        // #91445 for details.
3026        let (idx, is_new) = inner.byte_strs.insert_full(byte_str);
3027        if true {
    if !is_new { ::core::panicking::panic("assertion failed: is_new") };
};debug_assert!(is_new); // due to the get_index_of check above
3028
3029        idx as u32
3030    }
3031
3032    /// Get the symbol as a string.
3033    ///
3034    /// [`Symbol::as_str()`] should be used in preference to this function.
3035    fn get_str(&self, symbol: Symbol) -> &str {
3036        let byte_str = self.get_inner(symbol.0.as_usize());
3037        // SAFETY: known to be a UTF8 string because it's a `Symbol`.
3038        unsafe { str::from_utf8_unchecked(byte_str) }
3039    }
3040
3041    /// Get the symbol as a string.
3042    ///
3043    /// [`ByteSymbol::as_byte_str()`] should be used in preference to this function.
3044    fn get_byte_str(&self, symbol: ByteSymbol) -> &[u8] {
3045        self.get_inner(symbol.0.as_usize())
3046    }
3047
3048    fn get_inner(&self, index: usize) -> &[u8] {
3049        self.0.lock().byte_strs.get_index(index).unwrap()
3050    }
3051}
3052
3053// This module has a very short name because it's used a lot.
3054/// This module contains all the defined keyword `Symbol`s.
3055///
3056/// Given that `kw` is imported, use them like `kw::keyword_name`.
3057/// For example `kw::Loop` or `kw::Break`.
3058pub mod kw {
3059    pub use super::kw_generated::*;
3060}
3061
3062// This module has a very short name because it's used a lot.
3063/// This module contains all the defined non-keyword `Symbol`s.
3064///
3065/// Given that `sym` is imported, use them like `sym::symbol_name`.
3066/// For example `sym::rustfmt` or `sym::u8`.
3067pub mod sym {
3068    // Used from a macro in `librustc_feature/accepted.rs`
3069    use super::Symbol;
3070    pub use super::kw::MacroRules as macro_rules;
3071    #[doc(inline)]
3072    pub use super::sym_generated::*;
3073
3074    /// Get the symbol for an integer.
3075    ///
3076    /// The first few non-negative integers each have a static symbol and therefore
3077    /// are fast.
3078    pub fn integer<N: TryInto<usize> + Copy + itoa::Integer>(n: N) -> Symbol {
3079        if let Result::Ok(idx) = n.try_into() {
3080            if idx < 10 {
3081                return Symbol::new(super::SYMBOL_DIGITS_BASE + idx as u32);
3082            }
3083        }
3084        let mut buffer = itoa::Buffer::new();
3085        let printed = buffer.format(n);
3086        Symbol::intern(printed)
3087    }
3088}
3089
3090impl Symbol {
3091    fn is_special(self) -> bool {
3092        self <= kw::Underscore
3093    }
3094
3095    fn is_used_keyword_always(self) -> bool {
3096        self >= kw::As && self <= kw::While
3097    }
3098
3099    fn is_unused_keyword_always(self) -> bool {
3100        self >= kw::Abstract && self <= kw::Yield
3101    }
3102
3103    fn is_used_keyword_conditional(self, edition: impl FnOnce() -> Edition) -> bool {
3104        (self >= kw::Async && self <= kw::Dyn) && edition() >= Edition::Edition2018
3105    }
3106
3107    fn is_unused_keyword_conditional(self, edition: impl Copy + FnOnce() -> Edition) -> bool {
3108        self == kw::Gen && edition().at_least_rust_2024()
3109            || self == kw::Try && edition().at_least_rust_2018()
3110    }
3111
3112    pub fn is_reserved(self, edition: impl Copy + FnOnce() -> Edition) -> bool {
3113        self.is_special()
3114            || self.is_used_keyword_always()
3115            || self.is_unused_keyword_always()
3116            || self.is_used_keyword_conditional(edition)
3117            || self.is_unused_keyword_conditional(edition)
3118    }
3119
3120    pub fn is_weak(self) -> bool {
3121        self >= kw::Auto && self <= kw::Yeet
3122    }
3123
3124    /// A keyword or reserved identifier that can be used as a path segment.
3125    pub fn is_path_segment_keyword(self) -> bool {
3126        self == kw::Super
3127            || self == kw::SelfLower
3128            || self == kw::SelfUpper
3129            || self == kw::Crate
3130            || self == kw::PathRoot
3131            || self == kw::DollarCrate
3132    }
3133
3134    /// Returns `true` if the symbol is `true` or `false`.
3135    pub fn is_bool_lit(self) -> bool {
3136        self == kw::True || self == kw::False
3137    }
3138
3139    /// Returns `true` if this symbol can be a raw identifier.
3140    pub fn can_be_raw(self) -> bool {
3141        self != sym::empty && self != kw::Underscore && !self.is_path_segment_keyword()
3142    }
3143
3144    /// Was this symbol index predefined in the compiler's `symbols!` macro?
3145    /// Note: this applies to both `Symbol`s and `ByteSymbol`s, which is why it
3146    /// takes a `u32` argument instead of a `&self` argument. Use with care.
3147    pub fn is_predefined(index: u32) -> bool {
3148        index < PREDEFINED_SYMBOLS_COUNT
3149    }
3150}
3151
3152impl Ident {
3153    /// Returns `true` for reserved identifiers used internally for elided lifetimes,
3154    /// unnamed method parameters, crate root module, error recovery etc.
3155    pub fn is_special(self) -> bool {
3156        self.name.is_special()
3157    }
3158
3159    /// Returns `true` if the token is a keyword used in the language.
3160    pub fn is_used_keyword(self) -> bool {
3161        // Note: `span.edition()` is relatively expensive, don't call it unless necessary.
3162        self.name.is_used_keyword_always()
3163            || self.name.is_used_keyword_conditional(|| self.span.edition())
3164    }
3165
3166    /// Returns `true` if the token is a keyword reserved for possible future use.
3167    pub fn is_unused_keyword(self) -> bool {
3168        // Note: `span.edition()` is relatively expensive, don't call it unless necessary.
3169        self.name.is_unused_keyword_always()
3170            || self.name.is_unused_keyword_conditional(|| self.span.edition())
3171    }
3172
3173    /// Returns `true` if the token is either a special identifier or a keyword.
3174    pub fn is_reserved(self) -> bool {
3175        // Note: `span.edition()` is relatively expensive, don't call it unless necessary.
3176        self.name.is_reserved(|| self.span.edition())
3177    }
3178
3179    /// A keyword or reserved identifier that can be used as a path segment.
3180    pub fn is_path_segment_keyword(self) -> bool {
3181        self.name.is_path_segment_keyword()
3182    }
3183
3184    /// We see this identifier in a normal identifier position, like variable name or a type.
3185    /// How was it written originally? Did it use the raw form? Let's try to guess.
3186    pub fn is_raw_guess(self) -> bool {
3187        self.name.can_be_raw() && self.is_reserved()
3188    }
3189
3190    /// Given the name of a lifetime without the first quote (`'`),
3191    /// returns whether the lifetime name is reserved (therefore invalid)
3192    pub fn is_reserved_lifetime(self) -> bool {
3193        self.is_reserved() && ![kw::Underscore, kw::Static].contains(&self.name)
3194    }
3195
3196    pub fn is_raw_lifetime_guess(self) -> bool {
3197        // Check that the name isn't just a single quote.
3198        // `self.without_first_quote()` would return empty ident, which triggers debug assert.
3199        if self.name.as_str() == "'" {
3200            return false;
3201        }
3202        let ident_without_apostrophe = self.without_first_quote();
3203        ident_without_apostrophe.name != self.name
3204            && ident_without_apostrophe.name.can_be_raw()
3205            && ident_without_apostrophe.is_reserved_lifetime()
3206    }
3207
3208    pub fn guess_print_mode(self) -> IdentPrintMode {
3209        if self.is_raw_lifetime_guess() {
3210            IdentPrintMode::RawLifetime
3211        } else if self.is_raw_guess() {
3212            IdentPrintMode::RawIdent
3213        } else {
3214            IdentPrintMode::Normal
3215        }
3216    }
3217
3218    /// Whether this would be the identifier for a tuple field like `self.0`, as
3219    /// opposed to a named field like `self.thing`.
3220    pub fn is_numeric(self) -> bool {
3221        self.as_str().bytes().all(|b| b.is_ascii_digit())
3222    }
3223}
3224
3225/// Collect all the keywords in a given edition into a vector.
3226///
3227/// *Note:* Please update this if a new keyword is added beyond the current
3228/// range.
3229pub fn used_keywords(edition: impl Copy + FnOnce() -> Edition) -> Vec<Symbol> {
3230    (kw::DollarCrate.as_u32()..kw::Yeet.as_u32())
3231        .filter_map(|kw| {
3232            let kw = Symbol::new(kw);
3233            if kw.is_used_keyword_always() || kw.is_used_keyword_conditional(edition) {
3234                Some(kw)
3235            } else {
3236                None
3237            }
3238        })
3239        .collect()
3240}