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