Skip to main content

rustc_attr_ir/
lang_items.rs

1//! Defines lang items.
2//!
3//! Language items are items that represent concepts intrinsic to the language
4//! itself. Examples are:
5//!
6//! * Traits that specify "kinds"; e.g., `Sync`, `Send`.
7//! * Traits that represent operators; e.g., `Add`, `Sub`, `Index`.
8//! * Functions called by the compiler itself.
9
10use rustc_data_structures::fx::FxIndexMap;
11use rustc_data_structures::stable_hash::{StableHash, StableHashCtxt, StableHasher};
12use rustc_macros::{BlobDecodable, Encodable, PrintAttribute, StableHash};
13use rustc_span::def_id::DefId;
14use rustc_span::{Symbol, kw, sym};
15
16use crate::PrintAttribute;
17use crate::target::{AssocCtxt, MethodKind, Target};
18
19/// All of the lang items, defined or not.
20/// Defined lang items can come from the current crate or its dependencies.
21#[derive(const _: () =
    {
        impl ::rustc_data_structures::stable_hash::StableHash for
            LanguageItems {
            #[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 {
                    LanguageItems {
                        items: ref __binding_0,
                        reverse_items: ref __binding_1,
                        missing: ref __binding_2 } => {
                        { __binding_0.stable_hash(__hcx, __hasher); }
                        { __binding_1.stable_hash(__hcx, __hasher); }
                        { __binding_2.stable_hash(__hcx, __hasher); }
                    }
                }
            }
        }
    };StableHash, #[automatically_derived]impl ::core::fmt::Debug for LanguageItems {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field3_finish(f,
            "LanguageItems items reverse_items missing", &self.items,
            &self.reverse_items, &&self.missing)
    }
}Debug)]
22pub struct LanguageItems {
23    /// Mappings from lang items to their possibly found [`DefId`]s.
24    /// The index corresponds to the order in [`LangItem`].
25    items: [Option<DefId>; std::mem::variant_count::<LangItem>()],
26    reverse_items: FxIndexMap<DefId, LangItem>,
27    /// Lang items that were not found during collection.
28    pub missing: Vec<LangItem>,
29}
30
31impl LanguageItems {
32    /// Construct an empty collection of lang items and no missing ones.
33    pub fn new() -> Self {
34        Self {
35            items: [None; std::mem::variant_count::<LangItem>()],
36            reverse_items: FxIndexMap::default(),
37            missing: Vec::new(),
38        }
39    }
40
41    pub fn get(&self, item: LangItem) -> Option<DefId> {
42        self.items[item as usize]
43    }
44
45    pub fn set(&mut self, item: LangItem, def_id: DefId) {
46        self.items[item as usize] = Some(def_id);
47        let preexisting = self.reverse_items.insert(def_id, item);
48
49        // This needs to be a bijection.
50        if let Some(preexisting) = preexisting {
51            {
    ::core::panicking::panic_fmt(format_args!("For the bijection of LangItem <=> DefId to work,one item DefId may only be assigned one LangItem. Separate the LangItem definitions for {0:?} and {1:?}.",
            item, preexisting));
};panic!(
52                "For the bijection of LangItem <=> DefId to work,\
53                one item DefId may only be assigned one LangItem. \
54                Separate the LangItem definitions for {item:?} and {preexisting:?}."
55            );
56        }
57    }
58
59    pub fn from_def_id(&self, def_id: DefId) -> Option<LangItem> {
60        self.reverse_items.get(&def_id).copied()
61    }
62
63    pub fn iter(&self) -> impl Iterator<Item = (LangItem, DefId)> {
64        self.items
65            .iter()
66            .enumerate()
67            .filter_map(|(i, id)| id.map(|id| (LangItem::from_u32(i as u32).unwrap(), id)))
68    }
69
70    /// Remove any missing items from the list that aren't actually missing
71    pub fn trim_missing(&mut self) {
72        self.missing.retain(|&item| self.items[item as usize].is_none());
73    }
74}
75
76// The actual lang items defined come at the end of this file in one handy table.
77// So you probably just want to nip down to the end.
78macro_rules! language_item_table {
79    (
80        $( $(#[$attr:meta])* $variant:ident, $module:ident :: $name:ident, $method:ident, $target:expr, $generics:expr; )*
81    ) => {
82        /// A representation of all the valid lang items in Rust.
83        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Encodable, BlobDecodable, PrintAttribute)]
84        pub enum LangItem {
85            $(
86                #[doc = concat!("The `", stringify!($name), "` lang item.")]
87                $(#[$attr])*
88                $variant,
89            )*
90        }
91
92        impl LangItem {
93            fn from_u32(u: u32) -> Option<LangItem> {
94                // This implementation is clumsy, but makes no assumptions
95                // about how discriminant tags are allocated within the
96                // range `0 .. std::mem::variant_count::<LangItem>()`.
97                $(if u == LangItem::$variant as u32 {
98                    return Some(LangItem::$variant)
99                })*
100                None
101            }
102
103            /// Returns the `name` symbol in `#[lang = "$name"]`.
104            /// For example, [`LangItem::PartialEq`]`.name()`
105            /// would result in [`sym::eq`] since it is `#[lang = "eq"]`.
106            pub fn name(self) -> Symbol {
107                match self {
108                    $( LangItem::$variant => $module::$name, )*
109                }
110            }
111
112            /// Opposite of [`LangItem::name`]
113            pub fn from_name(name: Symbol) -> Option<Self> {
114                match name {
115                    $( $module::$name => Some(LangItem::$variant), )*
116                    _ => None,
117                }
118            }
119
120            /// Returns the name of the `LangItem` enum variant.
121            // This method is used by Clippy for internal lints.
122            pub fn variant_name(self) -> &'static str {
123                match self {
124                    $( LangItem::$variant => stringify!($variant), )*
125                }
126            }
127
128            pub fn target(self) -> Target {
129                match self {
130                    $( LangItem::$variant => $target, )*
131                }
132            }
133
134            pub fn required_generics(&self) -> GenericRequirement {
135                match self {
136                    $( LangItem::$variant => $generics, )*
137                }
138            }
139        }
140
141        impl LanguageItems {
142            $(
143                #[doc = concat!("Returns the [`DefId`] of the `", stringify!($name), "` lang item if it is defined.")]
144                pub fn $method(&self) -> Option<DefId> {
145                    self.items[LangItem::$variant as usize]
146                }
147            )*
148        }
149    }
150}
151
152impl StableHash for LangItem {
153    fn stable_hash<Hcx: StableHashCtxt>(&self, _: &mut Hcx, hasher: &mut StableHasher) {
154        ::std::hash::Hash::hash(self, hasher);
155    }
156}
157
158/// A representation of all the valid lang items in Rust.
pub enum LangItem {

    #[doc = "The `sized` lang item."]
    Sized,

    #[doc = "The `meta_sized` lang item."]
    MetaSized,

    #[doc = "The `pointee_sized` lang item."]
    PointeeSized,

    #[doc = "The `unsize` lang item."]
    Unsize,

    #[doc = "The `mem_align_const` lang item."]
    AlignOf,

    #[doc = "The `mem_size_const` lang item."]
    SizeOf,

    #[doc = "The `offset_of` lang item."]
    OffsetOf,

    #[doc = "The `structural_peq` lang item."]
    #[doc =
    r#" Trait injected by `#[derive(PartialEq)]`, (i.e. "Partial EQ")."#]
    StructuralPeq,

    #[doc = "The `copy` lang item."]
    Copy,

    #[doc = "The `clone` lang item."]
    Clone,

    #[doc = "The `clone_fn` lang item."]
    CloneFn,

    #[doc = "The `use_cloned` lang item."]
    UseCloned,

    #[doc = "The `trivial_clone` lang item."]
    TrivialClone,

    #[doc = "The `sync` lang item."]
    Sync,

    #[doc = "The `discriminant_kind` lang item."]
    DiscriminantKind,

    #[doc = "The `discriminant_type` lang item."]
    #[doc = r" The associated item of the `DiscriminantKind` trait."]
    Discriminant,

    #[doc = "The `pointee_trait` lang item."]
    PointeeTrait,

    #[doc = "The `metadata_type` lang item."]
    Metadata,

    #[doc = "The `dyn_metadata` lang item."]
    DynMetadata,

    #[doc = "The `non_null` lang item."]
    NonNull,

    #[doc = "The `freeze` lang item."]
    Freeze,

    #[doc = "The `unsafe_unpin` lang item."]
    UnsafeUnpin,

    #[doc = "The `fn_ptr_trait` lang item."]
    FnPtrTrait,

    #[doc = "The `fn_ptr_as_ptr` lang item."]
    FnPtrAsPtr,

    #[doc = "The `fn_ptr_from_ptr` lang item."]
    FnPtrFromPtr,

    #[doc = "The `code` lang item."]
    Code,

    #[doc = "The `drop` lang item."]
    Drop,

    #[doc = "The `destruct` lang item."]
    Destruct,

    #[doc = "The `async_drop` lang item."]
    AsyncDrop,

    #[doc = "The `async_drop_in_place` lang item."]
    AsyncDropInPlace,

    #[doc = "The `coerce_unsized` lang item."]
    CoerceUnsized,

    #[doc = "The `dispatch_from_dyn` lang item."]
    DispatchFromDyn,

    #[doc = "The `try_as_dyn` lang item."]
    TryAsDyn,

    #[doc = "The `transmute_opts` lang item."]
    TransmuteOpts,

    #[doc = "The `transmute_trait` lang item."]
    TransmuteTrait,

    #[doc = "The `add` lang item."]
    Add,

    #[doc = "The `sub` lang item."]
    Sub,

    #[doc = "The `mul` lang item."]
    Mul,

    #[doc = "The `div` lang item."]
    Div,

    #[doc = "The `rem` lang item."]
    Rem,

    #[doc = "The `neg` lang item."]
    Neg,

    #[doc = "The `not` lang item."]
    Not,

    #[doc = "The `bitxor` lang item."]
    BitXor,

    #[doc = "The `bitand` lang item."]
    BitAnd,

    #[doc = "The `bitor` lang item."]
    BitOr,

    #[doc = "The `shl` lang item."]
    Shl,

    #[doc = "The `shr` lang item."]
    Shr,

    #[doc = "The `add_assign` lang item."]
    AddAssign,

    #[doc = "The `sub_assign` lang item."]
    SubAssign,

    #[doc = "The `mul_assign` lang item."]
    MulAssign,

    #[doc = "The `div_assign` lang item."]
    DivAssign,

    #[doc = "The `rem_assign` lang item."]
    RemAssign,

    #[doc = "The `bitxor_assign` lang item."]
    BitXorAssign,

    #[doc = "The `bitand_assign` lang item."]
    BitAndAssign,

    #[doc = "The `bitor_assign` lang item."]
    BitOrAssign,

    #[doc = "The `shl_assign` lang item."]
    ShlAssign,

    #[doc = "The `shr_assign` lang item."]
    ShrAssign,

    #[doc = "The `index` lang item."]
    Index,

    #[doc = "The `index_mut` lang item."]
    IndexMut,

    #[doc = "The `unsafe_cell` lang item."]
    UnsafeCell,

    #[doc = "The `covariant_unsafe_cell` lang item."]
    CovariantUnsafeCell,

    #[doc = "The `unsafe_pinned` lang item."]
    UnsafePinned,

    #[doc = "The `va_arg_safe` lang item."]
    VaArgSafe,

    #[doc = "The `va_list` lang item."]
    VaList,

    #[doc = "The `complex` lang item."]
    Complex,

    #[doc = "The `ppcf128` lang item."]
    PpcF128,

    #[doc = "The `deref` lang item."]
    Deref,

    #[doc = "The `deref_mut` lang item."]
    DerefMut,

    #[doc = "The `deref_pure` lang item."]
    DerefPure,

    #[doc = "The `deref_target` lang item."]
    DerefTarget,

    #[doc = "The `receiver` lang item."]
    Receiver,

    #[doc = "The `receiver_target` lang item."]
    ReceiverTarget,

    #[doc = "The `legacy_receiver` lang item."]
    LegacyReceiver,

    #[doc = "The `Fn` lang item."]
    Fn,

    #[doc = "The `fn_mut` lang item."]
    FnMut,

    #[doc = "The `fn_once` lang item."]
    FnOnce,

    #[doc = "The `fn_static` lang item."]
    FnStatic,

    #[doc = "The `async_fn` lang item."]
    AsyncFn,

    #[doc = "The `async_fn_mut` lang item."]
    AsyncFnMut,

    #[doc = "The `async_fn_once` lang item."]
    AsyncFnOnce,

    #[doc = "The `async_fn_once_output` lang item."]
    AsyncFnOnceOutput,

    #[doc = "The `call_once_future` lang item."]
    CallOnceFuture,

    #[doc = "The `call_ref_future` lang item."]
    CallRefFuture,

    #[doc = "The `async_fn_kind_helper` lang item."]
    AsyncFnKindHelper,

    #[doc = "The `async_fn_kind_upvars` lang item."]
    AsyncFnKindUpvars,

    #[doc = "The `fn_once_output` lang item."]
    FnOnceOutput,

    #[doc = "The `iterator` lang item."]
    Iterator,

    #[doc = "The `fused_iterator` lang item."]
    FusedIterator,

    #[doc = "The `future_trait` lang item."]
    Future,

    #[doc = "The `future_output` lang item."]
    FutureOutput,

    #[doc = "The `async_iterator` lang item."]
    AsyncIterator,

    #[doc = "The `coroutine_state` lang item."]
    CoroutineState,

    #[doc = "The `coroutine` lang item."]
    Coroutine,

    #[doc = "The `coroutine_return` lang item."]
    CoroutineReturn,

    #[doc = "The `coroutine_yield` lang item."]
    CoroutineYield,

    #[doc = "The `coroutine_resume` lang item."]
    CoroutineResume,

    #[doc = "The `unpin` lang item."]
    Unpin,

    #[doc = "The `Pin` lang item."]
    Pin,

    #[doc = "The `Ordering` lang item."]
    OrderingEnum,

    #[doc = "The `eq` lang item."]
    PartialEq,

    #[doc = "The `partial_ord` lang item."]
    PartialOrd,

    #[doc = "The `c_void` lang item."]
    CVoid,

    #[doc = "The `f16b` lang item."]
    F16B,

    #[doc = "The `type_info` lang item."]
    Type,

    #[doc = "The `type_info_generic` lang item."]
    TypeGeneric,

    #[doc = "The `type_id` lang item."]
    TypeId,

    #[doc = "The `panic` lang item."]
    Panic,

    #[doc = "The `panic_nounwind` lang item."]
    PanicNounwind,

    #[doc = "The `panic_fmt` lang item."]
    PanicFmt,

    #[doc = "The `panic_display` lang item."]
    PanicDisplay,

    #[doc = "The `const_panic_fmt` lang item."]
    ConstPanicFmt,

    #[doc = "The `panic_bounds_check` lang item."]
    PanicBoundsCheck,

    #[doc = "The `panic_misaligned_pointer_dereference` lang item."]
    PanicMisalignedPointerDereference,

    #[doc = "The `panic_info` lang item."]
    PanicInfo,

    #[doc = "The `panic_location` lang item."]
    PanicLocation,

    #[doc = "The `panic_impl` lang item."]
    PanicImpl,

    #[doc = "The `panic_cannot_unwind` lang item."]
    PanicCannotUnwind,

    #[doc = "The `panic_in_cleanup` lang item."]
    PanicInCleanup,

    #[doc = "The `panic_const_add_overflow` lang item."]
    #[doc = r" Constant panic messages, used for codegen of MIR asserts."]
    PanicAddOverflow,

    #[doc = "The `panic_const_sub_overflow` lang item."]
    PanicSubOverflow,

    #[doc = "The `panic_const_mul_overflow` lang item."]
    PanicMulOverflow,

    #[doc = "The `panic_const_div_overflow` lang item."]
    PanicDivOverflow,

    #[doc = "The `panic_const_rem_overflow` lang item."]
    PanicRemOverflow,

    #[doc = "The `panic_const_neg_overflow` lang item."]
    PanicNegOverflow,

    #[doc = "The `panic_const_shr_overflow` lang item."]
    PanicShrOverflow,

    #[doc = "The `panic_const_shl_overflow` lang item."]
    PanicShlOverflow,

    #[doc = "The `panic_const_div_by_zero` lang item."]
    PanicDivZero,

    #[doc = "The `panic_const_rem_by_zero` lang item."]
    PanicRemZero,

    #[doc = "The `panic_const_coroutine_resumed` lang item."]
    PanicCoroutineResumed,

    #[doc = "The `panic_const_async_fn_resumed` lang item."]
    PanicAsyncFnResumed,

    #[doc = "The `panic_const_async_gen_fn_resumed` lang item."]
    PanicAsyncGenFnResumed,

    #[doc = "The `panic_const_gen_fn_none` lang item."]
    PanicGenFnNone,

    #[doc = "The `panic_const_coroutine_resumed_panic` lang item."]
    PanicCoroutineResumedPanic,

    #[doc = "The `panic_const_async_fn_resumed_panic` lang item."]
    PanicAsyncFnResumedPanic,

    #[doc = "The `panic_const_async_gen_fn_resumed_panic` lang item."]
    PanicAsyncGenFnResumedPanic,

    #[doc = "The `panic_const_gen_fn_none_panic` lang item."]
    PanicGenFnNonePanic,

    #[doc = "The `panic_null_pointer_dereference` lang item."]
    PanicNullPointerDereference,

    #[doc = "The `panic_null_reference_constructed` lang item."]
    PanicNullReferenceConstructed,

    #[doc = "The `panic_invalid_enum_construction` lang item."]
    PanicInvalidEnumConstruction,

    #[doc = "The `panic_const_coroutine_resumed_drop` lang item."]
    PanicCoroutineResumedDrop,

    #[doc = "The `panic_const_async_fn_resumed_drop` lang item."]
    PanicAsyncFnResumedDrop,

    #[doc = "The `panic_const_async_gen_fn_resumed_drop` lang item."]
    PanicAsyncGenFnResumedDrop,

    #[doc = "The `panic_const_gen_fn_none_drop` lang item."]
    PanicGenFnNoneDrop,

    #[doc = "The `begin_panic` lang item."]
    #[doc =
    r" libstd panic entry point. Necessary for const eval to be able to catch it"]
    BeginPanic,

    #[doc = "The `format_argument` lang item."]
    FormatArgument,

    #[doc = "The `format_arguments` lang item."]
    FormatArguments,

    #[doc = "The `drop_glue` lang item."]
    DropGlue,

    #[doc = "The `alloc_layout` lang item."]
    AllocLayout,

    #[doc = "The `start` lang item."]
    #[doc =
    r#" For all binary crates without `#![no_main]`, Rust will generate a "main" function."#]
    #[doc =
    r#" The exact name and signature are target-dependent. The "main" function will invoke"#]
    #[doc =
    r" this lang item, passing it the `argc` and `argv` (or null, if those don't exist"]
    #[doc =
    r" on the current target) as well as the user-defined `fn main` from the binary crate."]
    Start,

    #[doc = "The `eh_personality` lang item."]
    EhPersonality,

    #[doc = "The `compiler_move` lang item."]
    CompilerMove,

    #[doc = "The `compiler_copy` lang item."]
    CompilerCopy,

    #[doc = "The `owned_box` lang item."]
    OwnedBox,

    #[doc = "The `global_alloc_ty` lang item."]
    GlobalAlloc,

    #[doc = "The `phantom_data` lang item."]
    PhantomData,

    #[doc = "The `manually_drop` lang item."]
    ManuallyDrop,

    #[doc = "The `maybe_dangling` lang item."]
    MaybeDangling,

    #[doc = "The `bikeshed_guaranteed_no_drop` lang item."]
    BikeshedGuaranteedNoDrop,

    #[doc = "The `maybe_uninit` lang item."]
    MaybeUninit,

    #[doc = "The `termination` lang item."]
    Termination,

    #[doc = "The `Try` lang item."]
    Try,

    #[doc = "The `tuple_trait` lang item."]
    Tuple,

    #[doc = "The `slice_len_fn` lang item."]
    SliceLen,

    #[doc = "The `from_residual` lang item."]
    TryTraitFromResidual,

    #[doc = "The `from_output` lang item."]
    TryTraitFromOutput,

    #[doc = "The `branch` lang item."]
    TryTraitBranch,

    #[doc = "The `from_yeet` lang item."]
    TryTraitFromYeet,

    #[doc = "The `into_try_type` lang item."]
    ResidualIntoTryType,

    #[doc = "The `coerce_pointee_validated` lang item."]
    CoercePointeeValidated,

    #[doc = "The `const_param_ty` lang item."]
    ConstParamTy,

    #[doc = "The `Poll` lang item."]
    Poll,

    #[doc = "The `Ready` lang item."]
    PollReady,

    #[doc = "The `Pending` lang item."]
    PollPending,

    #[doc = "The `AsyncGenReady` lang item."]
    AsyncGenReady,

    #[doc = "The `AsyncGenPending` lang item."]
    AsyncGenPending,

    #[doc = "The `AsyncGenFinished` lang item."]
    AsyncGenFinished,

    #[doc = "The `ResumeTy` lang item."]
    ResumeTy,

    #[doc = "The `get_context` lang item."]
    GetContext,

    #[doc = "The `Context` lang item."]
    Context,

    #[doc = "The `poll` lang item."]
    FuturePoll,

    #[doc = "The `async_iterator_poll_next` lang item."]
    AsyncIteratorPollNext,

    #[doc = "The `into_async_iter_into_iter` lang item."]
    IntoAsyncIterIntoIter,

    #[doc = "The `Option` lang item."]
    Option,

    #[doc = "The `Some` lang item."]
    OptionSome,

    #[doc = "The `None` lang item."]
    OptionNone,

    #[doc = "The `Ok` lang item."]
    ResultOk,

    #[doc = "The `Err` lang item."]
    ResultErr,

    #[doc = "The `Continue` lang item."]
    ControlFlowContinue,

    #[doc = "The `Break` lang item."]
    ControlFlowBreak,

    #[doc = "The `into_future` lang item."]
    IntoFutureIntoFuture,

    #[doc = "The `into_iter` lang item."]
    IntoIterIntoIter,

    #[doc = "The `next` lang item."]
    IteratorNext,

    #[doc = "The `new_unchecked` lang item."]
    PinNewUnchecked,

    #[doc = "The `RangeFrom` lang item."]
    RangeFrom,

    #[doc = "The `RangeFull` lang item."]
    RangeFull,

    #[doc = "The `RangeInclusive` lang item."]
    RangeInclusiveStruct,

    #[doc = "The `range_inclusive_new` lang item."]
    RangeInclusiveNew,

    #[doc = "The `Range` lang item."]
    Range,

    #[doc = "The `RangeToInclusive` lang item."]
    RangeToInclusive,

    #[doc = "The `RangeTo` lang item."]
    RangeTo,

    #[doc = "The `RangeMax` lang item."]
    RangeMax,

    #[doc = "The `RangeMin` lang item."]
    RangeMin,

    #[doc = "The `RangeSub` lang item."]
    RangeSub,

    #[doc = "The `RangeFromCopy` lang item."]
    RangeFromCopy,

    #[doc = "The `RangeCopy` lang item."]
    RangeCopy,

    #[doc = "The `RangeInclusiveCopy` lang item."]
    RangeInclusiveCopy,

    #[doc = "The `RangeToInclusiveCopy` lang item."]
    RangeToInclusiveCopy,

    #[doc = "The `String` lang item."]
    String,

    #[doc = "The `CStr` lang item."]
    CStr,

    #[doc = "The `contract_build_check_ensures` lang item."]
    ContractBuildCheckEnsures,

    #[doc = "The `contract_check_requires` lang item."]
    ContractCheckRequires,

    #[doc = "The `default_trait4` lang item."]
    DefaultTrait4,

    #[doc = "The `default_trait3` lang item."]
    DefaultTrait3,

    #[doc = "The `default_trait2` lang item."]
    DefaultTrait2,

    #[doc = "The `default_trait1` lang item."]
    DefaultTrait1,

    #[doc = "The `contract_check_ensures` lang item."]
    ContractCheckEnsures,

    #[doc = "The `reborrow` lang item."]
    Reborrow,

    #[doc = "The `coerce_shared` lang item."]
    CoerceShared,

    #[doc = "The `field_representing_type` lang item."]
    FieldRepresentingType,

    #[doc = "The `field` lang item."]
    Field,

    #[doc = "The `field_base` lang item."]
    FieldBase,

    #[doc = "The `field_type` lang item."]
    FieldType,

    #[doc = "The `field_offset` lang item."]
    FieldOffset,

    #[doc = "The `From` lang item."]
    From,

    #[doc = "The `from` lang item."]
    FromFn,

    #[doc = "The `FnPtr` lang item."]
    FnPtr,
}
#[automatically_derived]impl ::core::fmt::Debug for LangItem {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_c_like_enum_write_str(f,
            "Sized MetaSized PointeeSized Unsize AlignOf SizeOf OffsetOf StructuralPeq Copy Clone CloneFn UseCloned TrivialClone Sync DiscriminantKind Discriminant PointeeTrait Metadata DynMetadata NonNull Freeze UnsafeUnpin FnPtrTrait FnPtrAsPtr FnPtrFromPtr Code Drop Destruct AsyncDrop AsyncDropInPlace CoerceUnsized DispatchFromDyn TryAsDyn TransmuteOpts TransmuteTrait Add Sub Mul Div Rem Neg Not BitXor BitAnd BitOr Shl Shr AddAssign SubAssign MulAssign DivAssign RemAssign BitXorAssign BitAndAssign BitOrAssign ShlAssign ShrAssign Index IndexMut UnsafeCell CovariantUnsafeCell UnsafePinned VaArgSafe VaList Complex PpcF128 Deref DerefMut DerefPure DerefTarget Receiver ReceiverTarget LegacyReceiver Fn FnMut FnOnce FnStatic AsyncFn AsyncFnMut AsyncFnOnce AsyncFnOnceOutput CallOnceFuture CallRefFuture AsyncFnKindHelper AsyncFnKindUpvars FnOnceOutput Iterator FusedIterator Future FutureOutput AsyncIterator CoroutineState Coroutine CoroutineReturn CoroutineYield CoroutineResume Unpin Pin OrderingEnum PartialEq PartialOrd CVoid F16B Type TypeGeneric TypeId Panic PanicNounwind PanicFmt PanicDisplay ConstPanicFmt PanicBoundsCheck PanicMisalignedPointerDereference PanicInfo PanicLocation PanicImpl PanicCannotUnwind PanicInCleanup PanicAddOverflow PanicSubOverflow PanicMulOverflow PanicDivOverflow PanicRemOverflow PanicNegOverflow PanicShrOverflow PanicShlOverflow PanicDivZero PanicRemZero PanicCoroutineResumed PanicAsyncFnResumed PanicAsyncGenFnResumed PanicGenFnNone PanicCoroutineResumedPanic PanicAsyncFnResumedPanic PanicAsyncGenFnResumedPanic PanicGenFnNonePanic PanicNullPointerDereference PanicNullReferenceConstructed PanicInvalidEnumConstruction PanicCoroutineResumedDrop PanicAsyncFnResumedDrop PanicAsyncGenFnResumedDrop PanicGenFnNoneDrop BeginPanic FormatArgument FormatArguments DropGlue AllocLayout Start EhPersonality CompilerMove CompilerCopy OwnedBox GlobalAlloc PhantomData ManuallyDrop MaybeDangling BikeshedGuaranteedNoDrop MaybeUninit Termination Try Tuple SliceLen TryTraitFromResidual TryTraitFromOutput TryTraitBranch TryTraitFromYeet ResidualIntoTryType CoercePointeeValidated ConstParamTy Poll PollReady PollPending AsyncGenReady AsyncGenPending AsyncGenFinished ResumeTy GetContext Context FuturePoll AsyncIteratorPollNext IntoAsyncIterIntoIter Option OptionSome OptionNone ResultOk ResultErr ControlFlowContinue ControlFlowBreak IntoFutureIntoFuture IntoIterIntoIter IteratorNext PinNewUnchecked RangeFrom RangeFull RangeInclusiveStruct RangeInclusiveNew Range RangeToInclusive RangeTo RangeMax RangeMin RangeSub RangeFromCopy RangeCopy RangeInclusiveCopy RangeToInclusiveCopy String CStr ContractBuildCheckEnsures ContractCheckRequires DefaultTrait4 DefaultTrait3 DefaultTrait2 DefaultTrait1 ContractCheckEnsures Reborrow CoerceShared FieldRepresentingType Field FieldBase FieldType FieldOffset From FromFn FnPtr",
            match self {
                LangItem::Sized => 0usize,
                LangItem::MetaSized => 6usize,
                LangItem::PointeeSized => 16usize,
                LangItem::Unsize => 29usize,
                LangItem::AlignOf => 36usize,
                LangItem::SizeOf => 44usize,
                LangItem::OffsetOf => 51usize,
                LangItem::StructuralPeq => 60usize,
                LangItem::Copy => 74usize,
                LangItem::Clone => 79usize,
                LangItem::CloneFn => 85usize,
                LangItem::UseCloned => 93usize,
                LangItem::TrivialClone => 103usize,
                LangItem::Sync => 116usize,
                LangItem::DiscriminantKind => 121usize,
                LangItem::Discriminant => 138usize,
                LangItem::PointeeTrait => 151usize,
                LangItem::Metadata => 164usize,
                LangItem::DynMetadata => 173usize,
                LangItem::NonNull => 185usize,
                LangItem::Freeze => 193usize,
                LangItem::UnsafeUnpin => 200usize,
                LangItem::FnPtrTrait => 212usize,
                LangItem::FnPtrAsPtr => 223usize,
                LangItem::FnPtrFromPtr => 234usize,
                LangItem::Code => 247usize,
                LangItem::Drop => 252usize,
                LangItem::Destruct => 257usize,
                LangItem::AsyncDrop => 266usize,
                LangItem::AsyncDropInPlace => 276usize,
                LangItem::CoerceUnsized => 293usize,
                LangItem::DispatchFromDyn => 307usize,
                LangItem::TryAsDyn => 323usize,
                LangItem::TransmuteOpts => 332usize,
                LangItem::TransmuteTrait => 346usize,
                LangItem::Add => 361usize,
                LangItem::Sub => 365usize,
                LangItem::Mul => 369usize,
                LangItem::Div => 373usize,
                LangItem::Rem => 377usize,
                LangItem::Neg => 381usize,
                LangItem::Not => 385usize,
                LangItem::BitXor => 389usize,
                LangItem::BitAnd => 396usize,
                LangItem::BitOr => 403usize,
                LangItem::Shl => 409usize,
                LangItem::Shr => 413usize,
                LangItem::AddAssign => 417usize,
                LangItem::SubAssign => 427usize,
                LangItem::MulAssign => 437usize,
                LangItem::DivAssign => 447usize,
                LangItem::RemAssign => 457usize,
                LangItem::BitXorAssign => 467usize,
                LangItem::BitAndAssign => 480usize,
                LangItem::BitOrAssign => 493usize,
                LangItem::ShlAssign => 505usize,
                LangItem::ShrAssign => 515usize,
                LangItem::Index => 525usize,
                LangItem::IndexMut => 531usize,
                LangItem::UnsafeCell => 540usize,
                LangItem::CovariantUnsafeCell => 551usize,
                LangItem::UnsafePinned => 571usize,
                LangItem::VaArgSafe => 584usize,
                LangItem::VaList => 594usize,
                LangItem::Complex => 601usize,
                LangItem::PpcF128 => 609usize,
                LangItem::Deref => 617usize,
                LangItem::DerefMut => 623usize,
                LangItem::DerefPure => 632usize,
                LangItem::DerefTarget => 642usize,
                LangItem::Receiver => 654usize,
                LangItem::ReceiverTarget => 663usize,
                LangItem::LegacyReceiver => 678usize,
                LangItem::Fn => 693usize,
                LangItem::FnMut => 696usize,
                LangItem::FnOnce => 702usize,
                LangItem::FnStatic => 709usize,
                LangItem::AsyncFn => 718usize,
                LangItem::AsyncFnMut => 726usize,
                LangItem::AsyncFnOnce => 737usize,
                LangItem::AsyncFnOnceOutput => 749usize,
                LangItem::CallOnceFuture => 767usize,
                LangItem::CallRefFuture => 782usize,
                LangItem::AsyncFnKindHelper => 796usize,
                LangItem::AsyncFnKindUpvars => 814usize,
                LangItem::FnOnceOutput => 832usize,
                LangItem::Iterator => 845usize,
                LangItem::FusedIterator => 854usize,
                LangItem::Future => 868usize,
                LangItem::FutureOutput => 875usize,
                LangItem::AsyncIterator => 888usize,
                LangItem::CoroutineState => 902usize,
                LangItem::Coroutine => 917usize,
                LangItem::CoroutineReturn => 927usize,
                LangItem::CoroutineYield => 943usize,
                LangItem::CoroutineResume => 958usize,
                LangItem::Unpin => 974usize,
                LangItem::Pin => 980usize,
                LangItem::OrderingEnum => 984usize,
                LangItem::PartialEq => 997usize,
                LangItem::PartialOrd => 1007usize,
                LangItem::CVoid => 1018usize,
                LangItem::F16B => 1024usize,
                LangItem::Type => 1029usize,
                LangItem::TypeGeneric => 1034usize,
                LangItem::TypeId => 1046usize,
                LangItem::Panic => 1053usize,
                LangItem::PanicNounwind => 1059usize,
                LangItem::PanicFmt => 1073usize,
                LangItem::PanicDisplay => 1082usize,
                LangItem::ConstPanicFmt => 1095usize,
                LangItem::PanicBoundsCheck => 1109usize,
                LangItem::PanicMisalignedPointerDereference => 1126usize,
                LangItem::PanicInfo => 1160usize,
                LangItem::PanicLocation => 1170usize,
                LangItem::PanicImpl => 1184usize,
                LangItem::PanicCannotUnwind => 1194usize,
                LangItem::PanicInCleanup => 1212usize,
                LangItem::PanicAddOverflow => 1227usize,
                LangItem::PanicSubOverflow => 1244usize,
                LangItem::PanicMulOverflow => 1261usize,
                LangItem::PanicDivOverflow => 1278usize,
                LangItem::PanicRemOverflow => 1295usize,
                LangItem::PanicNegOverflow => 1312usize,
                LangItem::PanicShrOverflow => 1329usize,
                LangItem::PanicShlOverflow => 1346usize,
                LangItem::PanicDivZero => 1363usize,
                LangItem::PanicRemZero => 1376usize,
                LangItem::PanicCoroutineResumed => 1389usize,
                LangItem::PanicAsyncFnResumed => 1411usize,
                LangItem::PanicAsyncGenFnResumed => 1431usize,
                LangItem::PanicGenFnNone => 1454usize,
                LangItem::PanicCoroutineResumedPanic => 1469usize,
                LangItem::PanicAsyncFnResumedPanic => 1496usize,
                LangItem::PanicAsyncGenFnResumedPanic => 1521usize,
                LangItem::PanicGenFnNonePanic => 1549usize,
                LangItem::PanicNullPointerDereference => 1569usize,
                LangItem::PanicNullReferenceConstructed => 1597usize,
                LangItem::PanicInvalidEnumConstruction => 1627usize,
                LangItem::PanicCoroutineResumedDrop => 1656usize,
                LangItem::PanicAsyncFnResumedDrop => 1682usize,
                LangItem::PanicAsyncGenFnResumedDrop => 1706usize,
                LangItem::PanicGenFnNoneDrop => 1733usize,
                LangItem::BeginPanic => 1752usize,
                LangItem::FormatArgument => 1763usize,
                LangItem::FormatArguments => 1778usize,
                LangItem::DropGlue => 1794usize,
                LangItem::AllocLayout => 1803usize,
                LangItem::Start => 1815usize,
                LangItem::EhPersonality => 1821usize,
                LangItem::CompilerMove => 1835usize,
                LangItem::CompilerCopy => 1848usize,
                LangItem::OwnedBox => 1861usize,
                LangItem::GlobalAlloc => 1870usize,
                LangItem::PhantomData => 1882usize,
                LangItem::ManuallyDrop => 1894usize,
                LangItem::MaybeDangling => 1907usize,
                LangItem::BikeshedGuaranteedNoDrop => 1921usize,
                LangItem::MaybeUninit => 1946usize,
                LangItem::Termination => 1958usize,
                LangItem::Try => 1970usize,
                LangItem::Tuple => 1974usize,
                LangItem::SliceLen => 1980usize,
                LangItem::TryTraitFromResidual => 1989usize,
                LangItem::TryTraitFromOutput => 2010usize,
                LangItem::TryTraitBranch => 2029usize,
                LangItem::TryTraitFromYeet => 2044usize,
                LangItem::ResidualIntoTryType => 2061usize,
                LangItem::CoercePointeeValidated => 2081usize,
                LangItem::ConstParamTy => 2104usize,
                LangItem::Poll => 2117usize,
                LangItem::PollReady => 2122usize,
                LangItem::PollPending => 2132usize,
                LangItem::AsyncGenReady => 2144usize,
                LangItem::AsyncGenPending => 2158usize,
                LangItem::AsyncGenFinished => 2174usize,
                LangItem::ResumeTy => 2191usize,
                LangItem::GetContext => 2200usize,
                LangItem::Context => 2211usize,
                LangItem::FuturePoll => 2219usize,
                LangItem::AsyncIteratorPollNext => 2230usize,
                LangItem::IntoAsyncIterIntoIter => 2252usize,
                LangItem::Option => 2274usize,
                LangItem::OptionSome => 2281usize,
                LangItem::OptionNone => 2292usize,
                LangItem::ResultOk => 2303usize,
                LangItem::ResultErr => 2312usize,
                LangItem::ControlFlowContinue => 2322usize,
                LangItem::ControlFlowBreak => 2342usize,
                LangItem::IntoFutureIntoFuture => 2359usize,
                LangItem::IntoIterIntoIter => 2380usize,
                LangItem::IteratorNext => 2397usize,
                LangItem::PinNewUnchecked => 2410usize,
                LangItem::RangeFrom => 2426usize,
                LangItem::RangeFull => 2436usize,
                LangItem::RangeInclusiveStruct => 2446usize,
                LangItem::RangeInclusiveNew => 2467usize,
                LangItem::Range => 2485usize,
                LangItem::RangeToInclusive => 2491usize,
                LangItem::RangeTo => 2508usize,
                LangItem::RangeMax => 2516usize,
                LangItem::RangeMin => 2525usize,
                LangItem::RangeSub => 2534usize,
                LangItem::RangeFromCopy => 2543usize,
                LangItem::RangeCopy => 2557usize,
                LangItem::RangeInclusiveCopy => 2567usize,
                LangItem::RangeToInclusiveCopy => 2586usize,
                LangItem::String => 2607usize,
                LangItem::CStr => 2614usize,
                LangItem::ContractBuildCheckEnsures => 2619usize,
                LangItem::ContractCheckRequires => 2645usize,
                LangItem::DefaultTrait4 => 2667usize,
                LangItem::DefaultTrait3 => 2681usize,
                LangItem::DefaultTrait2 => 2695usize,
                LangItem::DefaultTrait1 => 2709usize,
                LangItem::ContractCheckEnsures => 2723usize,
                LangItem::Reborrow => 2744usize,
                LangItem::CoerceShared => 2753usize,
                LangItem::FieldRepresentingType => 2766usize,
                LangItem::Field => 2788usize,
                LangItem::FieldBase => 2794usize,
                LangItem::FieldType => 2804usize,
                LangItem::FieldOffset => 2814usize,
                LangItem::From => 2826usize,
                LangItem::FromFn => 2831usize,
                LangItem::FnPtr => 2838usize,
            })
    }
}
#[automatically_derived]impl ::core::marker::Copy for LangItem { }
#[automatically_derived]#[doc(hidden)]unsafe impl ::core::clone::TrivialClone
    for LangItem {
}
#[automatically_derived]impl ::core::clone::Clone for LangItem {
    #[inline]
    fn clone(&self) -> Self { *self }
}
#[automatically_derived]impl ::core::marker::StructuralPartialEq for LangItem
    {
}
#[automatically_derived]impl ::core::cmp::PartialEq for LangItem {
    #[inline]
    fn eq(&self, other: &Self) -> bool {
        ::core::intrinsics::discriminant_value(self) ==
            ::core::intrinsics::discriminant_value(other)
    }
}
#[automatically_derived]impl ::core::cmp::Eq for LangItem { }
#[automatically_derived]impl ::core::hash::Hash for LangItem {
    #[inline]
    fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
        ::core::hash::Hash::hash(&::core::intrinsics::discriminant_value(self),
            state)
    }
}
const _: () =
    {
        impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
            for LangItem {
            fn encode(&self, __encoder: &mut __E) {
                let disc =
                    match *self {
                        LangItem::Sized => { 0usize }
                        LangItem::MetaSized => { 1usize }
                        LangItem::PointeeSized => { 2usize }
                        LangItem::Unsize => { 3usize }
                        LangItem::AlignOf => { 4usize }
                        LangItem::SizeOf => { 5usize }
                        LangItem::OffsetOf => { 6usize }
                        LangItem::StructuralPeq => { 7usize }
                        LangItem::Copy => { 8usize }
                        LangItem::Clone => { 9usize }
                        LangItem::CloneFn => { 10usize }
                        LangItem::UseCloned => { 11usize }
                        LangItem::TrivialClone => { 12usize }
                        LangItem::Sync => { 13usize }
                        LangItem::DiscriminantKind => { 14usize }
                        LangItem::Discriminant => { 15usize }
                        LangItem::PointeeTrait => { 16usize }
                        LangItem::Metadata => { 17usize }
                        LangItem::DynMetadata => { 18usize }
                        LangItem::NonNull => { 19usize }
                        LangItem::Freeze => { 20usize }
                        LangItem::UnsafeUnpin => { 21usize }
                        LangItem::FnPtrTrait => { 22usize }
                        LangItem::FnPtrAsPtr => { 23usize }
                        LangItem::FnPtrFromPtr => { 24usize }
                        LangItem::Code => { 25usize }
                        LangItem::Drop => { 26usize }
                        LangItem::Destruct => { 27usize }
                        LangItem::AsyncDrop => { 28usize }
                        LangItem::AsyncDropInPlace => { 29usize }
                        LangItem::CoerceUnsized => { 30usize }
                        LangItem::DispatchFromDyn => { 31usize }
                        LangItem::TryAsDyn => { 32usize }
                        LangItem::TransmuteOpts => { 33usize }
                        LangItem::TransmuteTrait => { 34usize }
                        LangItem::Add => { 35usize }
                        LangItem::Sub => { 36usize }
                        LangItem::Mul => { 37usize }
                        LangItem::Div => { 38usize }
                        LangItem::Rem => { 39usize }
                        LangItem::Neg => { 40usize }
                        LangItem::Not => { 41usize }
                        LangItem::BitXor => { 42usize }
                        LangItem::BitAnd => { 43usize }
                        LangItem::BitOr => { 44usize }
                        LangItem::Shl => { 45usize }
                        LangItem::Shr => { 46usize }
                        LangItem::AddAssign => { 47usize }
                        LangItem::SubAssign => { 48usize }
                        LangItem::MulAssign => { 49usize }
                        LangItem::DivAssign => { 50usize }
                        LangItem::RemAssign => { 51usize }
                        LangItem::BitXorAssign => { 52usize }
                        LangItem::BitAndAssign => { 53usize }
                        LangItem::BitOrAssign => { 54usize }
                        LangItem::ShlAssign => { 55usize }
                        LangItem::ShrAssign => { 56usize }
                        LangItem::Index => { 57usize }
                        LangItem::IndexMut => { 58usize }
                        LangItem::UnsafeCell => { 59usize }
                        LangItem::CovariantUnsafeCell => { 60usize }
                        LangItem::UnsafePinned => { 61usize }
                        LangItem::VaArgSafe => { 62usize }
                        LangItem::VaList => { 63usize }
                        LangItem::Complex => { 64usize }
                        LangItem::PpcF128 => { 65usize }
                        LangItem::Deref => { 66usize }
                        LangItem::DerefMut => { 67usize }
                        LangItem::DerefPure => { 68usize }
                        LangItem::DerefTarget => { 69usize }
                        LangItem::Receiver => { 70usize }
                        LangItem::ReceiverTarget => { 71usize }
                        LangItem::LegacyReceiver => { 72usize }
                        LangItem::Fn => { 73usize }
                        LangItem::FnMut => { 74usize }
                        LangItem::FnOnce => { 75usize }
                        LangItem::FnStatic => { 76usize }
                        LangItem::AsyncFn => { 77usize }
                        LangItem::AsyncFnMut => { 78usize }
                        LangItem::AsyncFnOnce => { 79usize }
                        LangItem::AsyncFnOnceOutput => { 80usize }
                        LangItem::CallOnceFuture => { 81usize }
                        LangItem::CallRefFuture => { 82usize }
                        LangItem::AsyncFnKindHelper => { 83usize }
                        LangItem::AsyncFnKindUpvars => { 84usize }
                        LangItem::FnOnceOutput => { 85usize }
                        LangItem::Iterator => { 86usize }
                        LangItem::FusedIterator => { 87usize }
                        LangItem::Future => { 88usize }
                        LangItem::FutureOutput => { 89usize }
                        LangItem::AsyncIterator => { 90usize }
                        LangItem::CoroutineState => { 91usize }
                        LangItem::Coroutine => { 92usize }
                        LangItem::CoroutineReturn => { 93usize }
                        LangItem::CoroutineYield => { 94usize }
                        LangItem::CoroutineResume => { 95usize }
                        LangItem::Unpin => { 96usize }
                        LangItem::Pin => { 97usize }
                        LangItem::OrderingEnum => { 98usize }
                        LangItem::PartialEq => { 99usize }
                        LangItem::PartialOrd => { 100usize }
                        LangItem::CVoid => { 101usize }
                        LangItem::F16B => { 102usize }
                        LangItem::Type => { 103usize }
                        LangItem::TypeGeneric => { 104usize }
                        LangItem::TypeId => { 105usize }
                        LangItem::Panic => { 106usize }
                        LangItem::PanicNounwind => { 107usize }
                        LangItem::PanicFmt => { 108usize }
                        LangItem::PanicDisplay => { 109usize }
                        LangItem::ConstPanicFmt => { 110usize }
                        LangItem::PanicBoundsCheck => { 111usize }
                        LangItem::PanicMisalignedPointerDereference => { 112usize }
                        LangItem::PanicInfo => { 113usize }
                        LangItem::PanicLocation => { 114usize }
                        LangItem::PanicImpl => { 115usize }
                        LangItem::PanicCannotUnwind => { 116usize }
                        LangItem::PanicInCleanup => { 117usize }
                        LangItem::PanicAddOverflow => { 118usize }
                        LangItem::PanicSubOverflow => { 119usize }
                        LangItem::PanicMulOverflow => { 120usize }
                        LangItem::PanicDivOverflow => { 121usize }
                        LangItem::PanicRemOverflow => { 122usize }
                        LangItem::PanicNegOverflow => { 123usize }
                        LangItem::PanicShrOverflow => { 124usize }
                        LangItem::PanicShlOverflow => { 125usize }
                        LangItem::PanicDivZero => { 126usize }
                        LangItem::PanicRemZero => { 127usize }
                        LangItem::PanicCoroutineResumed => { 128usize }
                        LangItem::PanicAsyncFnResumed => { 129usize }
                        LangItem::PanicAsyncGenFnResumed => { 130usize }
                        LangItem::PanicGenFnNone => { 131usize }
                        LangItem::PanicCoroutineResumedPanic => { 132usize }
                        LangItem::PanicAsyncFnResumedPanic => { 133usize }
                        LangItem::PanicAsyncGenFnResumedPanic => { 134usize }
                        LangItem::PanicGenFnNonePanic => { 135usize }
                        LangItem::PanicNullPointerDereference => { 136usize }
                        LangItem::PanicNullReferenceConstructed => { 137usize }
                        LangItem::PanicInvalidEnumConstruction => { 138usize }
                        LangItem::PanicCoroutineResumedDrop => { 139usize }
                        LangItem::PanicAsyncFnResumedDrop => { 140usize }
                        LangItem::PanicAsyncGenFnResumedDrop => { 141usize }
                        LangItem::PanicGenFnNoneDrop => { 142usize }
                        LangItem::BeginPanic => { 143usize }
                        LangItem::FormatArgument => { 144usize }
                        LangItem::FormatArguments => { 145usize }
                        LangItem::DropGlue => { 146usize }
                        LangItem::AllocLayout => { 147usize }
                        LangItem::Start => { 148usize }
                        LangItem::EhPersonality => { 149usize }
                        LangItem::CompilerMove => { 150usize }
                        LangItem::CompilerCopy => { 151usize }
                        LangItem::OwnedBox => { 152usize }
                        LangItem::GlobalAlloc => { 153usize }
                        LangItem::PhantomData => { 154usize }
                        LangItem::ManuallyDrop => { 155usize }
                        LangItem::MaybeDangling => { 156usize }
                        LangItem::BikeshedGuaranteedNoDrop => { 157usize }
                        LangItem::MaybeUninit => { 158usize }
                        LangItem::Termination => { 159usize }
                        LangItem::Try => { 160usize }
                        LangItem::Tuple => { 161usize }
                        LangItem::SliceLen => { 162usize }
                        LangItem::TryTraitFromResidual => { 163usize }
                        LangItem::TryTraitFromOutput => { 164usize }
                        LangItem::TryTraitBranch => { 165usize }
                        LangItem::TryTraitFromYeet => { 166usize }
                        LangItem::ResidualIntoTryType => { 167usize }
                        LangItem::CoercePointeeValidated => { 168usize }
                        LangItem::ConstParamTy => { 169usize }
                        LangItem::Poll => { 170usize }
                        LangItem::PollReady => { 171usize }
                        LangItem::PollPending => { 172usize }
                        LangItem::AsyncGenReady => { 173usize }
                        LangItem::AsyncGenPending => { 174usize }
                        LangItem::AsyncGenFinished => { 175usize }
                        LangItem::ResumeTy => { 176usize }
                        LangItem::GetContext => { 177usize }
                        LangItem::Context => { 178usize }
                        LangItem::FuturePoll => { 179usize }
                        LangItem::AsyncIteratorPollNext => { 180usize }
                        LangItem::IntoAsyncIterIntoIter => { 181usize }
                        LangItem::Option => { 182usize }
                        LangItem::OptionSome => { 183usize }
                        LangItem::OptionNone => { 184usize }
                        LangItem::ResultOk => { 185usize }
                        LangItem::ResultErr => { 186usize }
                        LangItem::ControlFlowContinue => { 187usize }
                        LangItem::ControlFlowBreak => { 188usize }
                        LangItem::IntoFutureIntoFuture => { 189usize }
                        LangItem::IntoIterIntoIter => { 190usize }
                        LangItem::IteratorNext => { 191usize }
                        LangItem::PinNewUnchecked => { 192usize }
                        LangItem::RangeFrom => { 193usize }
                        LangItem::RangeFull => { 194usize }
                        LangItem::RangeInclusiveStruct => { 195usize }
                        LangItem::RangeInclusiveNew => { 196usize }
                        LangItem::Range => { 197usize }
                        LangItem::RangeToInclusive => { 198usize }
                        LangItem::RangeTo => { 199usize }
                        LangItem::RangeMax => { 200usize }
                        LangItem::RangeMin => { 201usize }
                        LangItem::RangeSub => { 202usize }
                        LangItem::RangeFromCopy => { 203usize }
                        LangItem::RangeCopy => { 204usize }
                        LangItem::RangeInclusiveCopy => { 205usize }
                        LangItem::RangeToInclusiveCopy => { 206usize }
                        LangItem::String => { 207usize }
                        LangItem::CStr => { 208usize }
                        LangItem::ContractBuildCheckEnsures => { 209usize }
                        LangItem::ContractCheckRequires => { 210usize }
                        LangItem::DefaultTrait4 => { 211usize }
                        LangItem::DefaultTrait3 => { 212usize }
                        LangItem::DefaultTrait2 => { 213usize }
                        LangItem::DefaultTrait1 => { 214usize }
                        LangItem::ContractCheckEnsures => { 215usize }
                        LangItem::Reborrow => { 216usize }
                        LangItem::CoerceShared => { 217usize }
                        LangItem::FieldRepresentingType => { 218usize }
                        LangItem::Field => { 219usize }
                        LangItem::FieldBase => { 220usize }
                        LangItem::FieldType => { 221usize }
                        LangItem::FieldOffset => { 222usize }
                        LangItem::From => { 223usize }
                        LangItem::FromFn => { 224usize }
                        LangItem::FnPtr => { 225usize }
                    };
                ::rustc_serialize::Encoder::emit_u8(__encoder, disc as u8);
            }
        }
    };
const _: () =
    {
        impl<__D: ::rustc_span::BlobDecoder> ::rustc_serialize::Decodable<__D>
            for LangItem {
            fn decode(__decoder: &mut __D) -> Self {
                match ::rustc_serialize::Decoder::read_u8(__decoder) as usize
                    {
                    0usize => { LangItem::Sized }
                    1usize => { LangItem::MetaSized }
                    2usize => { LangItem::PointeeSized }
                    3usize => { LangItem::Unsize }
                    4usize => { LangItem::AlignOf }
                    5usize => { LangItem::SizeOf }
                    6usize => { LangItem::OffsetOf }
                    7usize => { LangItem::StructuralPeq }
                    8usize => { LangItem::Copy }
                    9usize => { LangItem::Clone }
                    10usize => { LangItem::CloneFn }
                    11usize => { LangItem::UseCloned }
                    12usize => { LangItem::TrivialClone }
                    13usize => { LangItem::Sync }
                    14usize => { LangItem::DiscriminantKind }
                    15usize => { LangItem::Discriminant }
                    16usize => { LangItem::PointeeTrait }
                    17usize => { LangItem::Metadata }
                    18usize => { LangItem::DynMetadata }
                    19usize => { LangItem::NonNull }
                    20usize => { LangItem::Freeze }
                    21usize => { LangItem::UnsafeUnpin }
                    22usize => { LangItem::FnPtrTrait }
                    23usize => { LangItem::FnPtrAsPtr }
                    24usize => { LangItem::FnPtrFromPtr }
                    25usize => { LangItem::Code }
                    26usize => { LangItem::Drop }
                    27usize => { LangItem::Destruct }
                    28usize => { LangItem::AsyncDrop }
                    29usize => { LangItem::AsyncDropInPlace }
                    30usize => { LangItem::CoerceUnsized }
                    31usize => { LangItem::DispatchFromDyn }
                    32usize => { LangItem::TryAsDyn }
                    33usize => { LangItem::TransmuteOpts }
                    34usize => { LangItem::TransmuteTrait }
                    35usize => { LangItem::Add }
                    36usize => { LangItem::Sub }
                    37usize => { LangItem::Mul }
                    38usize => { LangItem::Div }
                    39usize => { LangItem::Rem }
                    40usize => { LangItem::Neg }
                    41usize => { LangItem::Not }
                    42usize => { LangItem::BitXor }
                    43usize => { LangItem::BitAnd }
                    44usize => { LangItem::BitOr }
                    45usize => { LangItem::Shl }
                    46usize => { LangItem::Shr }
                    47usize => { LangItem::AddAssign }
                    48usize => { LangItem::SubAssign }
                    49usize => { LangItem::MulAssign }
                    50usize => { LangItem::DivAssign }
                    51usize => { LangItem::RemAssign }
                    52usize => { LangItem::BitXorAssign }
                    53usize => { LangItem::BitAndAssign }
                    54usize => { LangItem::BitOrAssign }
                    55usize => { LangItem::ShlAssign }
                    56usize => { LangItem::ShrAssign }
                    57usize => { LangItem::Index }
                    58usize => { LangItem::IndexMut }
                    59usize => { LangItem::UnsafeCell }
                    60usize => { LangItem::CovariantUnsafeCell }
                    61usize => { LangItem::UnsafePinned }
                    62usize => { LangItem::VaArgSafe }
                    63usize => { LangItem::VaList }
                    64usize => { LangItem::Complex }
                    65usize => { LangItem::PpcF128 }
                    66usize => { LangItem::Deref }
                    67usize => { LangItem::DerefMut }
                    68usize => { LangItem::DerefPure }
                    69usize => { LangItem::DerefTarget }
                    70usize => { LangItem::Receiver }
                    71usize => { LangItem::ReceiverTarget }
                    72usize => { LangItem::LegacyReceiver }
                    73usize => { LangItem::Fn }
                    74usize => { LangItem::FnMut }
                    75usize => { LangItem::FnOnce }
                    76usize => { LangItem::FnStatic }
                    77usize => { LangItem::AsyncFn }
                    78usize => { LangItem::AsyncFnMut }
                    79usize => { LangItem::AsyncFnOnce }
                    80usize => { LangItem::AsyncFnOnceOutput }
                    81usize => { LangItem::CallOnceFuture }
                    82usize => { LangItem::CallRefFuture }
                    83usize => { LangItem::AsyncFnKindHelper }
                    84usize => { LangItem::AsyncFnKindUpvars }
                    85usize => { LangItem::FnOnceOutput }
                    86usize => { LangItem::Iterator }
                    87usize => { LangItem::FusedIterator }
                    88usize => { LangItem::Future }
                    89usize => { LangItem::FutureOutput }
                    90usize => { LangItem::AsyncIterator }
                    91usize => { LangItem::CoroutineState }
                    92usize => { LangItem::Coroutine }
                    93usize => { LangItem::CoroutineReturn }
                    94usize => { LangItem::CoroutineYield }
                    95usize => { LangItem::CoroutineResume }
                    96usize => { LangItem::Unpin }
                    97usize => { LangItem::Pin }
                    98usize => { LangItem::OrderingEnum }
                    99usize => { LangItem::PartialEq }
                    100usize => { LangItem::PartialOrd }
                    101usize => { LangItem::CVoid }
                    102usize => { LangItem::F16B }
                    103usize => { LangItem::Type }
                    104usize => { LangItem::TypeGeneric }
                    105usize => { LangItem::TypeId }
                    106usize => { LangItem::Panic }
                    107usize => { LangItem::PanicNounwind }
                    108usize => { LangItem::PanicFmt }
                    109usize => { LangItem::PanicDisplay }
                    110usize => { LangItem::ConstPanicFmt }
                    111usize => { LangItem::PanicBoundsCheck }
                    112usize => { LangItem::PanicMisalignedPointerDereference }
                    113usize => { LangItem::PanicInfo }
                    114usize => { LangItem::PanicLocation }
                    115usize => { LangItem::PanicImpl }
                    116usize => { LangItem::PanicCannotUnwind }
                    117usize => { LangItem::PanicInCleanup }
                    118usize => { LangItem::PanicAddOverflow }
                    119usize => { LangItem::PanicSubOverflow }
                    120usize => { LangItem::PanicMulOverflow }
                    121usize => { LangItem::PanicDivOverflow }
                    122usize => { LangItem::PanicRemOverflow }
                    123usize => { LangItem::PanicNegOverflow }
                    124usize => { LangItem::PanicShrOverflow }
                    125usize => { LangItem::PanicShlOverflow }
                    126usize => { LangItem::PanicDivZero }
                    127usize => { LangItem::PanicRemZero }
                    128usize => { LangItem::PanicCoroutineResumed }
                    129usize => { LangItem::PanicAsyncFnResumed }
                    130usize => { LangItem::PanicAsyncGenFnResumed }
                    131usize => { LangItem::PanicGenFnNone }
                    132usize => { LangItem::PanicCoroutineResumedPanic }
                    133usize => { LangItem::PanicAsyncFnResumedPanic }
                    134usize => { LangItem::PanicAsyncGenFnResumedPanic }
                    135usize => { LangItem::PanicGenFnNonePanic }
                    136usize => { LangItem::PanicNullPointerDereference }
                    137usize => { LangItem::PanicNullReferenceConstructed }
                    138usize => { LangItem::PanicInvalidEnumConstruction }
                    139usize => { LangItem::PanicCoroutineResumedDrop }
                    140usize => { LangItem::PanicAsyncFnResumedDrop }
                    141usize => { LangItem::PanicAsyncGenFnResumedDrop }
                    142usize => { LangItem::PanicGenFnNoneDrop }
                    143usize => { LangItem::BeginPanic }
                    144usize => { LangItem::FormatArgument }
                    145usize => { LangItem::FormatArguments }
                    146usize => { LangItem::DropGlue }
                    147usize => { LangItem::AllocLayout }
                    148usize => { LangItem::Start }
                    149usize => { LangItem::EhPersonality }
                    150usize => { LangItem::CompilerMove }
                    151usize => { LangItem::CompilerCopy }
                    152usize => { LangItem::OwnedBox }
                    153usize => { LangItem::GlobalAlloc }
                    154usize => { LangItem::PhantomData }
                    155usize => { LangItem::ManuallyDrop }
                    156usize => { LangItem::MaybeDangling }
                    157usize => { LangItem::BikeshedGuaranteedNoDrop }
                    158usize => { LangItem::MaybeUninit }
                    159usize => { LangItem::Termination }
                    160usize => { LangItem::Try }
                    161usize => { LangItem::Tuple }
                    162usize => { LangItem::SliceLen }
                    163usize => { LangItem::TryTraitFromResidual }
                    164usize => { LangItem::TryTraitFromOutput }
                    165usize => { LangItem::TryTraitBranch }
                    166usize => { LangItem::TryTraitFromYeet }
                    167usize => { LangItem::ResidualIntoTryType }
                    168usize => { LangItem::CoercePointeeValidated }
                    169usize => { LangItem::ConstParamTy }
                    170usize => { LangItem::Poll }
                    171usize => { LangItem::PollReady }
                    172usize => { LangItem::PollPending }
                    173usize => { LangItem::AsyncGenReady }
                    174usize => { LangItem::AsyncGenPending }
                    175usize => { LangItem::AsyncGenFinished }
                    176usize => { LangItem::ResumeTy }
                    177usize => { LangItem::GetContext }
                    178usize => { LangItem::Context }
                    179usize => { LangItem::FuturePoll }
                    180usize => { LangItem::AsyncIteratorPollNext }
                    181usize => { LangItem::IntoAsyncIterIntoIter }
                    182usize => { LangItem::Option }
                    183usize => { LangItem::OptionSome }
                    184usize => { LangItem::OptionNone }
                    185usize => { LangItem::ResultOk }
                    186usize => { LangItem::ResultErr }
                    187usize => { LangItem::ControlFlowContinue }
                    188usize => { LangItem::ControlFlowBreak }
                    189usize => { LangItem::IntoFutureIntoFuture }
                    190usize => { LangItem::IntoIterIntoIter }
                    191usize => { LangItem::IteratorNext }
                    192usize => { LangItem::PinNewUnchecked }
                    193usize => { LangItem::RangeFrom }
                    194usize => { LangItem::RangeFull }
                    195usize => { LangItem::RangeInclusiveStruct }
                    196usize => { LangItem::RangeInclusiveNew }
                    197usize => { LangItem::Range }
                    198usize => { LangItem::RangeToInclusive }
                    199usize => { LangItem::RangeTo }
                    200usize => { LangItem::RangeMax }
                    201usize => { LangItem::RangeMin }
                    202usize => { LangItem::RangeSub }
                    203usize => { LangItem::RangeFromCopy }
                    204usize => { LangItem::RangeCopy }
                    205usize => { LangItem::RangeInclusiveCopy }
                    206usize => { LangItem::RangeToInclusiveCopy }
                    207usize => { LangItem::String }
                    208usize => { LangItem::CStr }
                    209usize => { LangItem::ContractBuildCheckEnsures }
                    210usize => { LangItem::ContractCheckRequires }
                    211usize => { LangItem::DefaultTrait4 }
                    212usize => { LangItem::DefaultTrait3 }
                    213usize => { LangItem::DefaultTrait2 }
                    214usize => { LangItem::DefaultTrait1 }
                    215usize => { LangItem::ContractCheckEnsures }
                    216usize => { LangItem::Reborrow }
                    217usize => { LangItem::CoerceShared }
                    218usize => { LangItem::FieldRepresentingType }
                    219usize => { LangItem::Field }
                    220usize => { LangItem::FieldBase }
                    221usize => { LangItem::FieldType }
                    222usize => { LangItem::FieldOffset }
                    223usize => { LangItem::From }
                    224usize => { LangItem::FromFn }
                    225usize => { LangItem::FnPtr }
                    n => {
                        ::core::panicking::panic_fmt(format_args!("invalid enum variant tag while decoding `LangItem`, expected 0..226, actual {0}",
                                n));
                    }
                }
            }
        }
    };
const _: () =
    {
        #[allow(unused)]
        impl PrintAttribute for LangItem {
            fn should_render(&self) -> bool { true }
            fn print_attribute(&self,
                __p: &mut rustc_ast_pretty::pp::Printer) {
                match self {
                    Self::Sized => { __p.word("Sized") }
                    Self::MetaSized => { __p.word("MetaSized") }
                    Self::PointeeSized => { __p.word("PointeeSized") }
                    Self::Unsize => { __p.word("Unsize") }
                    Self::AlignOf => { __p.word("AlignOf") }
                    Self::SizeOf => { __p.word("SizeOf") }
                    Self::OffsetOf => { __p.word("OffsetOf") }
                    Self::StructuralPeq => { __p.word("StructuralPeq") }
                    Self::Copy => { __p.word("Copy") }
                    Self::Clone => { __p.word("Clone") }
                    Self::CloneFn => { __p.word("CloneFn") }
                    Self::UseCloned => { __p.word("UseCloned") }
                    Self::TrivialClone => { __p.word("TrivialClone") }
                    Self::Sync => { __p.word("Sync") }
                    Self::DiscriminantKind => { __p.word("DiscriminantKind") }
                    Self::Discriminant => { __p.word("Discriminant") }
                    Self::PointeeTrait => { __p.word("PointeeTrait") }
                    Self::Metadata => { __p.word("Metadata") }
                    Self::DynMetadata => { __p.word("DynMetadata") }
                    Self::NonNull => { __p.word("NonNull") }
                    Self::Freeze => { __p.word("Freeze") }
                    Self::UnsafeUnpin => { __p.word("UnsafeUnpin") }
                    Self::FnPtrTrait => { __p.word("FnPtrTrait") }
                    Self::FnPtrAsPtr => { __p.word("FnPtrAsPtr") }
                    Self::FnPtrFromPtr => { __p.word("FnPtrFromPtr") }
                    Self::Code => { __p.word("Code") }
                    Self::Drop => { __p.word("Drop") }
                    Self::Destruct => { __p.word("Destruct") }
                    Self::AsyncDrop => { __p.word("AsyncDrop") }
                    Self::AsyncDropInPlace => { __p.word("AsyncDropInPlace") }
                    Self::CoerceUnsized => { __p.word("CoerceUnsized") }
                    Self::DispatchFromDyn => { __p.word("DispatchFromDyn") }
                    Self::TryAsDyn => { __p.word("TryAsDyn") }
                    Self::TransmuteOpts => { __p.word("TransmuteOpts") }
                    Self::TransmuteTrait => { __p.word("TransmuteTrait") }
                    Self::Add => { __p.word("Add") }
                    Self::Sub => { __p.word("Sub") }
                    Self::Mul => { __p.word("Mul") }
                    Self::Div => { __p.word("Div") }
                    Self::Rem => { __p.word("Rem") }
                    Self::Neg => { __p.word("Neg") }
                    Self::Not => { __p.word("Not") }
                    Self::BitXor => { __p.word("BitXor") }
                    Self::BitAnd => { __p.word("BitAnd") }
                    Self::BitOr => { __p.word("BitOr") }
                    Self::Shl => { __p.word("Shl") }
                    Self::Shr => { __p.word("Shr") }
                    Self::AddAssign => { __p.word("AddAssign") }
                    Self::SubAssign => { __p.word("SubAssign") }
                    Self::MulAssign => { __p.word("MulAssign") }
                    Self::DivAssign => { __p.word("DivAssign") }
                    Self::RemAssign => { __p.word("RemAssign") }
                    Self::BitXorAssign => { __p.word("BitXorAssign") }
                    Self::BitAndAssign => { __p.word("BitAndAssign") }
                    Self::BitOrAssign => { __p.word("BitOrAssign") }
                    Self::ShlAssign => { __p.word("ShlAssign") }
                    Self::ShrAssign => { __p.word("ShrAssign") }
                    Self::Index => { __p.word("Index") }
                    Self::IndexMut => { __p.word("IndexMut") }
                    Self::UnsafeCell => { __p.word("UnsafeCell") }
                    Self::CovariantUnsafeCell => {
                        __p.word("CovariantUnsafeCell")
                    }
                    Self::UnsafePinned => { __p.word("UnsafePinned") }
                    Self::VaArgSafe => { __p.word("VaArgSafe") }
                    Self::VaList => { __p.word("VaList") }
                    Self::Complex => { __p.word("Complex") }
                    Self::PpcF128 => { __p.word("PpcF128") }
                    Self::Deref => { __p.word("Deref") }
                    Self::DerefMut => { __p.word("DerefMut") }
                    Self::DerefPure => { __p.word("DerefPure") }
                    Self::DerefTarget => { __p.word("DerefTarget") }
                    Self::Receiver => { __p.word("Receiver") }
                    Self::ReceiverTarget => { __p.word("ReceiverTarget") }
                    Self::LegacyReceiver => { __p.word("LegacyReceiver") }
                    Self::Fn => { __p.word("Fn") }
                    Self::FnMut => { __p.word("FnMut") }
                    Self::FnOnce => { __p.word("FnOnce") }
                    Self::FnStatic => { __p.word("FnStatic") }
                    Self::AsyncFn => { __p.word("AsyncFn") }
                    Self::AsyncFnMut => { __p.word("AsyncFnMut") }
                    Self::AsyncFnOnce => { __p.word("AsyncFnOnce") }
                    Self::AsyncFnOnceOutput => { __p.word("AsyncFnOnceOutput") }
                    Self::CallOnceFuture => { __p.word("CallOnceFuture") }
                    Self::CallRefFuture => { __p.word("CallRefFuture") }
                    Self::AsyncFnKindHelper => { __p.word("AsyncFnKindHelper") }
                    Self::AsyncFnKindUpvars => { __p.word("AsyncFnKindUpvars") }
                    Self::FnOnceOutput => { __p.word("FnOnceOutput") }
                    Self::Iterator => { __p.word("Iterator") }
                    Self::FusedIterator => { __p.word("FusedIterator") }
                    Self::Future => { __p.word("Future") }
                    Self::FutureOutput => { __p.word("FutureOutput") }
                    Self::AsyncIterator => { __p.word("AsyncIterator") }
                    Self::CoroutineState => { __p.word("CoroutineState") }
                    Self::Coroutine => { __p.word("Coroutine") }
                    Self::CoroutineReturn => { __p.word("CoroutineReturn") }
                    Self::CoroutineYield => { __p.word("CoroutineYield") }
                    Self::CoroutineResume => { __p.word("CoroutineResume") }
                    Self::Unpin => { __p.word("Unpin") }
                    Self::Pin => { __p.word("Pin") }
                    Self::OrderingEnum => { __p.word("OrderingEnum") }
                    Self::PartialEq => { __p.word("PartialEq") }
                    Self::PartialOrd => { __p.word("PartialOrd") }
                    Self::CVoid => { __p.word("CVoid") }
                    Self::F16B => { __p.word("F16B") }
                    Self::Type => { __p.word("Type") }
                    Self::TypeGeneric => { __p.word("TypeGeneric") }
                    Self::TypeId => { __p.word("TypeId") }
                    Self::Panic => { __p.word("Panic") }
                    Self::PanicNounwind => { __p.word("PanicNounwind") }
                    Self::PanicFmt => { __p.word("PanicFmt") }
                    Self::PanicDisplay => { __p.word("PanicDisplay") }
                    Self::ConstPanicFmt => { __p.word("ConstPanicFmt") }
                    Self::PanicBoundsCheck => { __p.word("PanicBoundsCheck") }
                    Self::PanicMisalignedPointerDereference => {
                        __p.word("PanicMisalignedPointerDereference")
                    }
                    Self::PanicInfo => { __p.word("PanicInfo") }
                    Self::PanicLocation => { __p.word("PanicLocation") }
                    Self::PanicImpl => { __p.word("PanicImpl") }
                    Self::PanicCannotUnwind => { __p.word("PanicCannotUnwind") }
                    Self::PanicInCleanup => { __p.word("PanicInCleanup") }
                    Self::PanicAddOverflow => { __p.word("PanicAddOverflow") }
                    Self::PanicSubOverflow => { __p.word("PanicSubOverflow") }
                    Self::PanicMulOverflow => { __p.word("PanicMulOverflow") }
                    Self::PanicDivOverflow => { __p.word("PanicDivOverflow") }
                    Self::PanicRemOverflow => { __p.word("PanicRemOverflow") }
                    Self::PanicNegOverflow => { __p.word("PanicNegOverflow") }
                    Self::PanicShrOverflow => { __p.word("PanicShrOverflow") }
                    Self::PanicShlOverflow => { __p.word("PanicShlOverflow") }
                    Self::PanicDivZero => { __p.word("PanicDivZero") }
                    Self::PanicRemZero => { __p.word("PanicRemZero") }
                    Self::PanicCoroutineResumed => {
                        __p.word("PanicCoroutineResumed")
                    }
                    Self::PanicAsyncFnResumed => {
                        __p.word("PanicAsyncFnResumed")
                    }
                    Self::PanicAsyncGenFnResumed => {
                        __p.word("PanicAsyncGenFnResumed")
                    }
                    Self::PanicGenFnNone => { __p.word("PanicGenFnNone") }
                    Self::PanicCoroutineResumedPanic => {
                        __p.word("PanicCoroutineResumedPanic")
                    }
                    Self::PanicAsyncFnResumedPanic => {
                        __p.word("PanicAsyncFnResumedPanic")
                    }
                    Self::PanicAsyncGenFnResumedPanic => {
                        __p.word("PanicAsyncGenFnResumedPanic")
                    }
                    Self::PanicGenFnNonePanic => {
                        __p.word("PanicGenFnNonePanic")
                    }
                    Self::PanicNullPointerDereference => {
                        __p.word("PanicNullPointerDereference")
                    }
                    Self::PanicNullReferenceConstructed => {
                        __p.word("PanicNullReferenceConstructed")
                    }
                    Self::PanicInvalidEnumConstruction => {
                        __p.word("PanicInvalidEnumConstruction")
                    }
                    Self::PanicCoroutineResumedDrop => {
                        __p.word("PanicCoroutineResumedDrop")
                    }
                    Self::PanicAsyncFnResumedDrop => {
                        __p.word("PanicAsyncFnResumedDrop")
                    }
                    Self::PanicAsyncGenFnResumedDrop => {
                        __p.word("PanicAsyncGenFnResumedDrop")
                    }
                    Self::PanicGenFnNoneDrop => {
                        __p.word("PanicGenFnNoneDrop")
                    }
                    Self::BeginPanic => { __p.word("BeginPanic") }
                    Self::FormatArgument => { __p.word("FormatArgument") }
                    Self::FormatArguments => { __p.word("FormatArguments") }
                    Self::DropGlue => { __p.word("DropGlue") }
                    Self::AllocLayout => { __p.word("AllocLayout") }
                    Self::Start => { __p.word("Start") }
                    Self::EhPersonality => { __p.word("EhPersonality") }
                    Self::CompilerMove => { __p.word("CompilerMove") }
                    Self::CompilerCopy => { __p.word("CompilerCopy") }
                    Self::OwnedBox => { __p.word("OwnedBox") }
                    Self::GlobalAlloc => { __p.word("GlobalAlloc") }
                    Self::PhantomData => { __p.word("PhantomData") }
                    Self::ManuallyDrop => { __p.word("ManuallyDrop") }
                    Self::MaybeDangling => { __p.word("MaybeDangling") }
                    Self::BikeshedGuaranteedNoDrop => {
                        __p.word("BikeshedGuaranteedNoDrop")
                    }
                    Self::MaybeUninit => { __p.word("MaybeUninit") }
                    Self::Termination => { __p.word("Termination") }
                    Self::Try => { __p.word("Try") }
                    Self::Tuple => { __p.word("Tuple") }
                    Self::SliceLen => { __p.word("SliceLen") }
                    Self::TryTraitFromResidual => {
                        __p.word("TryTraitFromResidual")
                    }
                    Self::TryTraitFromOutput => {
                        __p.word("TryTraitFromOutput")
                    }
                    Self::TryTraitBranch => { __p.word("TryTraitBranch") }
                    Self::TryTraitFromYeet => { __p.word("TryTraitFromYeet") }
                    Self::ResidualIntoTryType => {
                        __p.word("ResidualIntoTryType")
                    }
                    Self::CoercePointeeValidated => {
                        __p.word("CoercePointeeValidated")
                    }
                    Self::ConstParamTy => { __p.word("ConstParamTy") }
                    Self::Poll => { __p.word("Poll") }
                    Self::PollReady => { __p.word("PollReady") }
                    Self::PollPending => { __p.word("PollPending") }
                    Self::AsyncGenReady => { __p.word("AsyncGenReady") }
                    Self::AsyncGenPending => { __p.word("AsyncGenPending") }
                    Self::AsyncGenFinished => { __p.word("AsyncGenFinished") }
                    Self::ResumeTy => { __p.word("ResumeTy") }
                    Self::GetContext => { __p.word("GetContext") }
                    Self::Context => { __p.word("Context") }
                    Self::FuturePoll => { __p.word("FuturePoll") }
                    Self::AsyncIteratorPollNext => {
                        __p.word("AsyncIteratorPollNext")
                    }
                    Self::IntoAsyncIterIntoIter => {
                        __p.word("IntoAsyncIterIntoIter")
                    }
                    Self::Option => { __p.word("Option") }
                    Self::OptionSome => { __p.word("OptionSome") }
                    Self::OptionNone => { __p.word("OptionNone") }
                    Self::ResultOk => { __p.word("ResultOk") }
                    Self::ResultErr => { __p.word("ResultErr") }
                    Self::ControlFlowContinue => {
                        __p.word("ControlFlowContinue")
                    }
                    Self::ControlFlowBreak => { __p.word("ControlFlowBreak") }
                    Self::IntoFutureIntoFuture => {
                        __p.word("IntoFutureIntoFuture")
                    }
                    Self::IntoIterIntoIter => { __p.word("IntoIterIntoIter") }
                    Self::IteratorNext => { __p.word("IteratorNext") }
                    Self::PinNewUnchecked => { __p.word("PinNewUnchecked") }
                    Self::RangeFrom => { __p.word("RangeFrom") }
                    Self::RangeFull => { __p.word("RangeFull") }
                    Self::RangeInclusiveStruct => {
                        __p.word("RangeInclusiveStruct")
                    }
                    Self::RangeInclusiveNew => { __p.word("RangeInclusiveNew") }
                    Self::Range => { __p.word("Range") }
                    Self::RangeToInclusive => { __p.word("RangeToInclusive") }
                    Self::RangeTo => { __p.word("RangeTo") }
                    Self::RangeMax => { __p.word("RangeMax") }
                    Self::RangeMin => { __p.word("RangeMin") }
                    Self::RangeSub => { __p.word("RangeSub") }
                    Self::RangeFromCopy => { __p.word("RangeFromCopy") }
                    Self::RangeCopy => { __p.word("RangeCopy") }
                    Self::RangeInclusiveCopy => {
                        __p.word("RangeInclusiveCopy")
                    }
                    Self::RangeToInclusiveCopy => {
                        __p.word("RangeToInclusiveCopy")
                    }
                    Self::String => { __p.word("String") }
                    Self::CStr => { __p.word("CStr") }
                    Self::ContractBuildCheckEnsures => {
                        __p.word("ContractBuildCheckEnsures")
                    }
                    Self::ContractCheckRequires => {
                        __p.word("ContractCheckRequires")
                    }
                    Self::DefaultTrait4 => { __p.word("DefaultTrait4") }
                    Self::DefaultTrait3 => { __p.word("DefaultTrait3") }
                    Self::DefaultTrait2 => { __p.word("DefaultTrait2") }
                    Self::DefaultTrait1 => { __p.word("DefaultTrait1") }
                    Self::ContractCheckEnsures => {
                        __p.word("ContractCheckEnsures")
                    }
                    Self::Reborrow => { __p.word("Reborrow") }
                    Self::CoerceShared => { __p.word("CoerceShared") }
                    Self::FieldRepresentingType => {
                        __p.word("FieldRepresentingType")
                    }
                    Self::Field => { __p.word("Field") }
                    Self::FieldBase => { __p.word("FieldBase") }
                    Self::FieldType => { __p.word("FieldType") }
                    Self::FieldOffset => { __p.word("FieldOffset") }
                    Self::From => { __p.word("From") }
                    Self::FromFn => { __p.word("FromFn") }
                    Self::FnPtr => { __p.word("FnPtr") }
                }
            }
        }
    };
impl LangItem {
    fn from_u32(u: u32) -> Option<LangItem> {
        if u == LangItem::Sized as u32 { return Some(LangItem::Sized) }
        if u == LangItem::MetaSized as u32 {
            return Some(LangItem::MetaSized)
        }
        if u == LangItem::PointeeSized as u32 {
            return Some(LangItem::PointeeSized)
        }
        if u == LangItem::Unsize as u32 { return Some(LangItem::Unsize) }
        if u == LangItem::AlignOf as u32 { return Some(LangItem::AlignOf) }
        if u == LangItem::SizeOf as u32 { return Some(LangItem::SizeOf) }
        if u == LangItem::OffsetOf as u32 { return Some(LangItem::OffsetOf) }
        if u == LangItem::StructuralPeq as u32 {
            return Some(LangItem::StructuralPeq)
        }
        if u == LangItem::Copy as u32 { return Some(LangItem::Copy) }
        if u == LangItem::Clone as u32 { return Some(LangItem::Clone) }
        if u == LangItem::CloneFn as u32 { return Some(LangItem::CloneFn) }
        if u == LangItem::UseCloned as u32 {
            return Some(LangItem::UseCloned)
        }
        if u == LangItem::TrivialClone as u32 {
            return Some(LangItem::TrivialClone)
        }
        if u == LangItem::Sync as u32 { return Some(LangItem::Sync) }
        if u == LangItem::DiscriminantKind as u32 {
            return Some(LangItem::DiscriminantKind)
        }
        if u == LangItem::Discriminant as u32 {
            return Some(LangItem::Discriminant)
        }
        if u == LangItem::PointeeTrait as u32 {
            return Some(LangItem::PointeeTrait)
        }
        if u == LangItem::Metadata as u32 { return Some(LangItem::Metadata) }
        if u == LangItem::DynMetadata as u32 {
            return Some(LangItem::DynMetadata)
        }
        if u == LangItem::NonNull as u32 { return Some(LangItem::NonNull) }
        if u == LangItem::Freeze as u32 { return Some(LangItem::Freeze) }
        if u == LangItem::UnsafeUnpin as u32 {
            return Some(LangItem::UnsafeUnpin)
        }
        if u == LangItem::FnPtrTrait as u32 {
            return Some(LangItem::FnPtrTrait)
        }
        if u == LangItem::FnPtrAsPtr as u32 {
            return Some(LangItem::FnPtrAsPtr)
        }
        if u == LangItem::FnPtrFromPtr as u32 {
            return Some(LangItem::FnPtrFromPtr)
        }
        if u == LangItem::Code as u32 { return Some(LangItem::Code) }
        if u == LangItem::Drop as u32 { return Some(LangItem::Drop) }
        if u == LangItem::Destruct as u32 { return Some(LangItem::Destruct) }
        if u == LangItem::AsyncDrop as u32 {
            return Some(LangItem::AsyncDrop)
        }
        if u == LangItem::AsyncDropInPlace as u32 {
            return Some(LangItem::AsyncDropInPlace)
        }
        if u == LangItem::CoerceUnsized as u32 {
            return Some(LangItem::CoerceUnsized)
        }
        if u == LangItem::DispatchFromDyn as u32 {
            return Some(LangItem::DispatchFromDyn)
        }
        if u == LangItem::TryAsDyn as u32 { return Some(LangItem::TryAsDyn) }
        if u == LangItem::TransmuteOpts as u32 {
            return Some(LangItem::TransmuteOpts)
        }
        if u == LangItem::TransmuteTrait as u32 {
            return Some(LangItem::TransmuteTrait)
        }
        if u == LangItem::Add as u32 { return Some(LangItem::Add) }
        if u == LangItem::Sub as u32 { return Some(LangItem::Sub) }
        if u == LangItem::Mul as u32 { return Some(LangItem::Mul) }
        if u == LangItem::Div as u32 { return Some(LangItem::Div) }
        if u == LangItem::Rem as u32 { return Some(LangItem::Rem) }
        if u == LangItem::Neg as u32 { return Some(LangItem::Neg) }
        if u == LangItem::Not as u32 { return Some(LangItem::Not) }
        if u == LangItem::BitXor as u32 { return Some(LangItem::BitXor) }
        if u == LangItem::BitAnd as u32 { return Some(LangItem::BitAnd) }
        if u == LangItem::BitOr as u32 { return Some(LangItem::BitOr) }
        if u == LangItem::Shl as u32 { return Some(LangItem::Shl) }
        if u == LangItem::Shr as u32 { return Some(LangItem::Shr) }
        if u == LangItem::AddAssign as u32 {
            return Some(LangItem::AddAssign)
        }
        if u == LangItem::SubAssign as u32 {
            return Some(LangItem::SubAssign)
        }
        if u == LangItem::MulAssign as u32 {
            return Some(LangItem::MulAssign)
        }
        if u == LangItem::DivAssign as u32 {
            return Some(LangItem::DivAssign)
        }
        if u == LangItem::RemAssign as u32 {
            return Some(LangItem::RemAssign)
        }
        if u == LangItem::BitXorAssign as u32 {
            return Some(LangItem::BitXorAssign)
        }
        if u == LangItem::BitAndAssign as u32 {
            return Some(LangItem::BitAndAssign)
        }
        if u == LangItem::BitOrAssign as u32 {
            return Some(LangItem::BitOrAssign)
        }
        if u == LangItem::ShlAssign as u32 {
            return Some(LangItem::ShlAssign)
        }
        if u == LangItem::ShrAssign as u32 {
            return Some(LangItem::ShrAssign)
        }
        if u == LangItem::Index as u32 { return Some(LangItem::Index) }
        if u == LangItem::IndexMut as u32 { return Some(LangItem::IndexMut) }
        if u == LangItem::UnsafeCell as u32 {
            return Some(LangItem::UnsafeCell)
        }
        if u == LangItem::CovariantUnsafeCell as u32 {
            return Some(LangItem::CovariantUnsafeCell)
        }
        if u == LangItem::UnsafePinned as u32 {
            return Some(LangItem::UnsafePinned)
        }
        if u == LangItem::VaArgSafe as u32 {
            return Some(LangItem::VaArgSafe)
        }
        if u == LangItem::VaList as u32 { return Some(LangItem::VaList) }
        if u == LangItem::Complex as u32 { return Some(LangItem::Complex) }
        if u == LangItem::PpcF128 as u32 { return Some(LangItem::PpcF128) }
        if u == LangItem::Deref as u32 { return Some(LangItem::Deref) }
        if u == LangItem::DerefMut as u32 { return Some(LangItem::DerefMut) }
        if u == LangItem::DerefPure as u32 {
            return Some(LangItem::DerefPure)
        }
        if u == LangItem::DerefTarget as u32 {
            return Some(LangItem::DerefTarget)
        }
        if u == LangItem::Receiver as u32 { return Some(LangItem::Receiver) }
        if u == LangItem::ReceiverTarget as u32 {
            return Some(LangItem::ReceiverTarget)
        }
        if u == LangItem::LegacyReceiver as u32 {
            return Some(LangItem::LegacyReceiver)
        }
        if u == LangItem::Fn as u32 { return Some(LangItem::Fn) }
        if u == LangItem::FnMut as u32 { return Some(LangItem::FnMut) }
        if u == LangItem::FnOnce as u32 { return Some(LangItem::FnOnce) }
        if u == LangItem::FnStatic as u32 { return Some(LangItem::FnStatic) }
        if u == LangItem::AsyncFn as u32 { return Some(LangItem::AsyncFn) }
        if u == LangItem::AsyncFnMut as u32 {
            return Some(LangItem::AsyncFnMut)
        }
        if u == LangItem::AsyncFnOnce as u32 {
            return Some(LangItem::AsyncFnOnce)
        }
        if u == LangItem::AsyncFnOnceOutput as u32 {
            return Some(LangItem::AsyncFnOnceOutput)
        }
        if u == LangItem::CallOnceFuture as u32 {
            return Some(LangItem::CallOnceFuture)
        }
        if u == LangItem::CallRefFuture as u32 {
            return Some(LangItem::CallRefFuture)
        }
        if u == LangItem::AsyncFnKindHelper as u32 {
            return Some(LangItem::AsyncFnKindHelper)
        }
        if u == LangItem::AsyncFnKindUpvars as u32 {
            return Some(LangItem::AsyncFnKindUpvars)
        }
        if u == LangItem::FnOnceOutput as u32 {
            return Some(LangItem::FnOnceOutput)
        }
        if u == LangItem::Iterator as u32 { return Some(LangItem::Iterator) }
        if u == LangItem::FusedIterator as u32 {
            return Some(LangItem::FusedIterator)
        }
        if u == LangItem::Future as u32 { return Some(LangItem::Future) }
        if u == LangItem::FutureOutput as u32 {
            return Some(LangItem::FutureOutput)
        }
        if u == LangItem::AsyncIterator as u32 {
            return Some(LangItem::AsyncIterator)
        }
        if u == LangItem::CoroutineState as u32 {
            return Some(LangItem::CoroutineState)
        }
        if u == LangItem::Coroutine as u32 {
            return Some(LangItem::Coroutine)
        }
        if u == LangItem::CoroutineReturn as u32 {
            return Some(LangItem::CoroutineReturn)
        }
        if u == LangItem::CoroutineYield as u32 {
            return Some(LangItem::CoroutineYield)
        }
        if u == LangItem::CoroutineResume as u32 {
            return Some(LangItem::CoroutineResume)
        }
        if u == LangItem::Unpin as u32 { return Some(LangItem::Unpin) }
        if u == LangItem::Pin as u32 { return Some(LangItem::Pin) }
        if u == LangItem::OrderingEnum as u32 {
            return Some(LangItem::OrderingEnum)
        }
        if u == LangItem::PartialEq as u32 {
            return Some(LangItem::PartialEq)
        }
        if u == LangItem::PartialOrd as u32 {
            return Some(LangItem::PartialOrd)
        }
        if u == LangItem::CVoid as u32 { return Some(LangItem::CVoid) }
        if u == LangItem::F16B as u32 { return Some(LangItem::F16B) }
        if u == LangItem::Type as u32 { return Some(LangItem::Type) }
        if u == LangItem::TypeGeneric as u32 {
            return Some(LangItem::TypeGeneric)
        }
        if u == LangItem::TypeId as u32 { return Some(LangItem::TypeId) }
        if u == LangItem::Panic as u32 { return Some(LangItem::Panic) }
        if u == LangItem::PanicNounwind as u32 {
            return Some(LangItem::PanicNounwind)
        }
        if u == LangItem::PanicFmt as u32 { return Some(LangItem::PanicFmt) }
        if u == LangItem::PanicDisplay as u32 {
            return Some(LangItem::PanicDisplay)
        }
        if u == LangItem::ConstPanicFmt as u32 {
            return Some(LangItem::ConstPanicFmt)
        }
        if u == LangItem::PanicBoundsCheck as u32 {
            return Some(LangItem::PanicBoundsCheck)
        }
        if u == LangItem::PanicMisalignedPointerDereference as u32 {
            return Some(LangItem::PanicMisalignedPointerDereference)
        }
        if u == LangItem::PanicInfo as u32 {
            return Some(LangItem::PanicInfo)
        }
        if u == LangItem::PanicLocation as u32 {
            return Some(LangItem::PanicLocation)
        }
        if u == LangItem::PanicImpl as u32 {
            return Some(LangItem::PanicImpl)
        }
        if u == LangItem::PanicCannotUnwind as u32 {
            return Some(LangItem::PanicCannotUnwind)
        }
        if u == LangItem::PanicInCleanup as u32 {
            return Some(LangItem::PanicInCleanup)
        }
        if u == LangItem::PanicAddOverflow as u32 {
            return Some(LangItem::PanicAddOverflow)
        }
        if u == LangItem::PanicSubOverflow as u32 {
            return Some(LangItem::PanicSubOverflow)
        }
        if u == LangItem::PanicMulOverflow as u32 {
            return Some(LangItem::PanicMulOverflow)
        }
        if u == LangItem::PanicDivOverflow as u32 {
            return Some(LangItem::PanicDivOverflow)
        }
        if u == LangItem::PanicRemOverflow as u32 {
            return Some(LangItem::PanicRemOverflow)
        }
        if u == LangItem::PanicNegOverflow as u32 {
            return Some(LangItem::PanicNegOverflow)
        }
        if u == LangItem::PanicShrOverflow as u32 {
            return Some(LangItem::PanicShrOverflow)
        }
        if u == LangItem::PanicShlOverflow as u32 {
            return Some(LangItem::PanicShlOverflow)
        }
        if u == LangItem::PanicDivZero as u32 {
            return Some(LangItem::PanicDivZero)
        }
        if u == LangItem::PanicRemZero as u32 {
            return Some(LangItem::PanicRemZero)
        }
        if u == LangItem::PanicCoroutineResumed as u32 {
            return Some(LangItem::PanicCoroutineResumed)
        }
        if u == LangItem::PanicAsyncFnResumed as u32 {
            return Some(LangItem::PanicAsyncFnResumed)
        }
        if u == LangItem::PanicAsyncGenFnResumed as u32 {
            return Some(LangItem::PanicAsyncGenFnResumed)
        }
        if u == LangItem::PanicGenFnNone as u32 {
            return Some(LangItem::PanicGenFnNone)
        }
        if u == LangItem::PanicCoroutineResumedPanic as u32 {
            return Some(LangItem::PanicCoroutineResumedPanic)
        }
        if u == LangItem::PanicAsyncFnResumedPanic as u32 {
            return Some(LangItem::PanicAsyncFnResumedPanic)
        }
        if u == LangItem::PanicAsyncGenFnResumedPanic as u32 {
            return Some(LangItem::PanicAsyncGenFnResumedPanic)
        }
        if u == LangItem::PanicGenFnNonePanic as u32 {
            return Some(LangItem::PanicGenFnNonePanic)
        }
        if u == LangItem::PanicNullPointerDereference as u32 {
            return Some(LangItem::PanicNullPointerDereference)
        }
        if u == LangItem::PanicNullReferenceConstructed as u32 {
            return Some(LangItem::PanicNullReferenceConstructed)
        }
        if u == LangItem::PanicInvalidEnumConstruction as u32 {
            return Some(LangItem::PanicInvalidEnumConstruction)
        }
        if u == LangItem::PanicCoroutineResumedDrop as u32 {
            return Some(LangItem::PanicCoroutineResumedDrop)
        }
        if u == LangItem::PanicAsyncFnResumedDrop as u32 {
            return Some(LangItem::PanicAsyncFnResumedDrop)
        }
        if u == LangItem::PanicAsyncGenFnResumedDrop as u32 {
            return Some(LangItem::PanicAsyncGenFnResumedDrop)
        }
        if u == LangItem::PanicGenFnNoneDrop as u32 {
            return Some(LangItem::PanicGenFnNoneDrop)
        }
        if u == LangItem::BeginPanic as u32 {
            return Some(LangItem::BeginPanic)
        }
        if u == LangItem::FormatArgument as u32 {
            return Some(LangItem::FormatArgument)
        }
        if u == LangItem::FormatArguments as u32 {
            return Some(LangItem::FormatArguments)
        }
        if u == LangItem::DropGlue as u32 { return Some(LangItem::DropGlue) }
        if u == LangItem::AllocLayout as u32 {
            return Some(LangItem::AllocLayout)
        }
        if u == LangItem::Start as u32 { return Some(LangItem::Start) }
        if u == LangItem::EhPersonality as u32 {
            return Some(LangItem::EhPersonality)
        }
        if u == LangItem::CompilerMove as u32 {
            return Some(LangItem::CompilerMove)
        }
        if u == LangItem::CompilerCopy as u32 {
            return Some(LangItem::CompilerCopy)
        }
        if u == LangItem::OwnedBox as u32 { return Some(LangItem::OwnedBox) }
        if u == LangItem::GlobalAlloc as u32 {
            return Some(LangItem::GlobalAlloc)
        }
        if u == LangItem::PhantomData as u32 {
            return Some(LangItem::PhantomData)
        }
        if u == LangItem::ManuallyDrop as u32 {
            return Some(LangItem::ManuallyDrop)
        }
        if u == LangItem::MaybeDangling as u32 {
            return Some(LangItem::MaybeDangling)
        }
        if u == LangItem::BikeshedGuaranteedNoDrop as u32 {
            return Some(LangItem::BikeshedGuaranteedNoDrop)
        }
        if u == LangItem::MaybeUninit as u32 {
            return Some(LangItem::MaybeUninit)
        }
        if u == LangItem::Termination as u32 {
            return Some(LangItem::Termination)
        }
        if u == LangItem::Try as u32 { return Some(LangItem::Try) }
        if u == LangItem::Tuple as u32 { return Some(LangItem::Tuple) }
        if u == LangItem::SliceLen as u32 { return Some(LangItem::SliceLen) }
        if u == LangItem::TryTraitFromResidual as u32 {
            return Some(LangItem::TryTraitFromResidual)
        }
        if u == LangItem::TryTraitFromOutput as u32 {
            return Some(LangItem::TryTraitFromOutput)
        }
        if u == LangItem::TryTraitBranch as u32 {
            return Some(LangItem::TryTraitBranch)
        }
        if u == LangItem::TryTraitFromYeet as u32 {
            return Some(LangItem::TryTraitFromYeet)
        }
        if u == LangItem::ResidualIntoTryType as u32 {
            return Some(LangItem::ResidualIntoTryType)
        }
        if u == LangItem::CoercePointeeValidated as u32 {
            return Some(LangItem::CoercePointeeValidated)
        }
        if u == LangItem::ConstParamTy as u32 {
            return Some(LangItem::ConstParamTy)
        }
        if u == LangItem::Poll as u32 { return Some(LangItem::Poll) }
        if u == LangItem::PollReady as u32 {
            return Some(LangItem::PollReady)
        }
        if u == LangItem::PollPending as u32 {
            return Some(LangItem::PollPending)
        }
        if u == LangItem::AsyncGenReady as u32 {
            return Some(LangItem::AsyncGenReady)
        }
        if u == LangItem::AsyncGenPending as u32 {
            return Some(LangItem::AsyncGenPending)
        }
        if u == LangItem::AsyncGenFinished as u32 {
            return Some(LangItem::AsyncGenFinished)
        }
        if u == LangItem::ResumeTy as u32 { return Some(LangItem::ResumeTy) }
        if u == LangItem::GetContext as u32 {
            return Some(LangItem::GetContext)
        }
        if u == LangItem::Context as u32 { return Some(LangItem::Context) }
        if u == LangItem::FuturePoll as u32 {
            return Some(LangItem::FuturePoll)
        }
        if u == LangItem::AsyncIteratorPollNext as u32 {
            return Some(LangItem::AsyncIteratorPollNext)
        }
        if u == LangItem::IntoAsyncIterIntoIter as u32 {
            return Some(LangItem::IntoAsyncIterIntoIter)
        }
        if u == LangItem::Option as u32 { return Some(LangItem::Option) }
        if u == LangItem::OptionSome as u32 {
            return Some(LangItem::OptionSome)
        }
        if u == LangItem::OptionNone as u32 {
            return Some(LangItem::OptionNone)
        }
        if u == LangItem::ResultOk as u32 { return Some(LangItem::ResultOk) }
        if u == LangItem::ResultErr as u32 {
            return Some(LangItem::ResultErr)
        }
        if u == LangItem::ControlFlowContinue as u32 {
            return Some(LangItem::ControlFlowContinue)
        }
        if u == LangItem::ControlFlowBreak as u32 {
            return Some(LangItem::ControlFlowBreak)
        }
        if u == LangItem::IntoFutureIntoFuture as u32 {
            return Some(LangItem::IntoFutureIntoFuture)
        }
        if u == LangItem::IntoIterIntoIter as u32 {
            return Some(LangItem::IntoIterIntoIter)
        }
        if u == LangItem::IteratorNext as u32 {
            return Some(LangItem::IteratorNext)
        }
        if u == LangItem::PinNewUnchecked as u32 {
            return Some(LangItem::PinNewUnchecked)
        }
        if u == LangItem::RangeFrom as u32 {
            return Some(LangItem::RangeFrom)
        }
        if u == LangItem::RangeFull as u32 {
            return Some(LangItem::RangeFull)
        }
        if u == LangItem::RangeInclusiveStruct as u32 {
            return Some(LangItem::RangeInclusiveStruct)
        }
        if u == LangItem::RangeInclusiveNew as u32 {
            return Some(LangItem::RangeInclusiveNew)
        }
        if u == LangItem::Range as u32 { return Some(LangItem::Range) }
        if u == LangItem::RangeToInclusive as u32 {
            return Some(LangItem::RangeToInclusive)
        }
        if u == LangItem::RangeTo as u32 { return Some(LangItem::RangeTo) }
        if u == LangItem::RangeMax as u32 { return Some(LangItem::RangeMax) }
        if u == LangItem::RangeMin as u32 { return Some(LangItem::RangeMin) }
        if u == LangItem::RangeSub as u32 { return Some(LangItem::RangeSub) }
        if u == LangItem::RangeFromCopy as u32 {
            return Some(LangItem::RangeFromCopy)
        }
        if u == LangItem::RangeCopy as u32 {
            return Some(LangItem::RangeCopy)
        }
        if u == LangItem::RangeInclusiveCopy as u32 {
            return Some(LangItem::RangeInclusiveCopy)
        }
        if u == LangItem::RangeToInclusiveCopy as u32 {
            return Some(LangItem::RangeToInclusiveCopy)
        }
        if u == LangItem::String as u32 { return Some(LangItem::String) }
        if u == LangItem::CStr as u32 { return Some(LangItem::CStr) }
        if u == LangItem::ContractBuildCheckEnsures as u32 {
            return Some(LangItem::ContractBuildCheckEnsures)
        }
        if u == LangItem::ContractCheckRequires as u32 {
            return Some(LangItem::ContractCheckRequires)
        }
        if u == LangItem::DefaultTrait4 as u32 {
            return Some(LangItem::DefaultTrait4)
        }
        if u == LangItem::DefaultTrait3 as u32 {
            return Some(LangItem::DefaultTrait3)
        }
        if u == LangItem::DefaultTrait2 as u32 {
            return Some(LangItem::DefaultTrait2)
        }
        if u == LangItem::DefaultTrait1 as u32 {
            return Some(LangItem::DefaultTrait1)
        }
        if u == LangItem::ContractCheckEnsures as u32 {
            return Some(LangItem::ContractCheckEnsures)
        }
        if u == LangItem::Reborrow as u32 { return Some(LangItem::Reborrow) }
        if u == LangItem::CoerceShared as u32 {
            return Some(LangItem::CoerceShared)
        }
        if u == LangItem::FieldRepresentingType as u32 {
            return Some(LangItem::FieldRepresentingType)
        }
        if u == LangItem::Field as u32 { return Some(LangItem::Field) }
        if u == LangItem::FieldBase as u32 {
            return Some(LangItem::FieldBase)
        }
        if u == LangItem::FieldType as u32 {
            return Some(LangItem::FieldType)
        }
        if u == LangItem::FieldOffset as u32 {
            return Some(LangItem::FieldOffset)
        }
        if u == LangItem::From as u32 { return Some(LangItem::From) }
        if u == LangItem::FromFn as u32 { return Some(LangItem::FromFn) }
        if u == LangItem::FnPtr as u32 { return Some(LangItem::FnPtr) }
        None
    }
    /// Returns the `name` symbol in `#[lang = "$name"]`.
    /// For example, [`LangItem::PartialEq`]`.name()`
    /// would result in [`sym::eq`] since it is `#[lang = "eq"]`.
    pub fn name(self) -> Symbol {
        match self {
            LangItem::Sized => sym::sized,
            LangItem::MetaSized => sym::meta_sized,
            LangItem::PointeeSized => sym::pointee_sized,
            LangItem::Unsize => sym::unsize,
            LangItem::AlignOf => sym::mem_align_const,
            LangItem::SizeOf => sym::mem_size_const,
            LangItem::OffsetOf => sym::offset_of,
            LangItem::StructuralPeq => sym::structural_peq,
            LangItem::Copy => sym::copy,
            LangItem::Clone => sym::clone,
            LangItem::CloneFn => sym::clone_fn,
            LangItem::UseCloned => sym::use_cloned,
            LangItem::TrivialClone => sym::trivial_clone,
            LangItem::Sync => sym::sync,
            LangItem::DiscriminantKind => sym::discriminant_kind,
            LangItem::Discriminant => sym::discriminant_type,
            LangItem::PointeeTrait => sym::pointee_trait,
            LangItem::Metadata => sym::metadata_type,
            LangItem::DynMetadata => sym::dyn_metadata,
            LangItem::NonNull => sym::non_null,
            LangItem::Freeze => sym::freeze,
            LangItem::UnsafeUnpin => sym::unsafe_unpin,
            LangItem::FnPtrTrait => sym::fn_ptr_trait,
            LangItem::FnPtrAsPtr => sym::fn_ptr_as_ptr,
            LangItem::FnPtrFromPtr => sym::fn_ptr_from_ptr,
            LangItem::Code => sym::code,
            LangItem::Drop => sym::drop,
            LangItem::Destruct => sym::destruct,
            LangItem::AsyncDrop => sym::async_drop,
            LangItem::AsyncDropInPlace => sym::async_drop_in_place,
            LangItem::CoerceUnsized => sym::coerce_unsized,
            LangItem::DispatchFromDyn => sym::dispatch_from_dyn,
            LangItem::TryAsDyn => sym::try_as_dyn,
            LangItem::TransmuteOpts => sym::transmute_opts,
            LangItem::TransmuteTrait => sym::transmute_trait,
            LangItem::Add => sym::add,
            LangItem::Sub => sym::sub,
            LangItem::Mul => sym::mul,
            LangItem::Div => sym::div,
            LangItem::Rem => sym::rem,
            LangItem::Neg => sym::neg,
            LangItem::Not => sym::not,
            LangItem::BitXor => sym::bitxor,
            LangItem::BitAnd => sym::bitand,
            LangItem::BitOr => sym::bitor,
            LangItem::Shl => sym::shl,
            LangItem::Shr => sym::shr,
            LangItem::AddAssign => sym::add_assign,
            LangItem::SubAssign => sym::sub_assign,
            LangItem::MulAssign => sym::mul_assign,
            LangItem::DivAssign => sym::div_assign,
            LangItem::RemAssign => sym::rem_assign,
            LangItem::BitXorAssign => sym::bitxor_assign,
            LangItem::BitAndAssign => sym::bitand_assign,
            LangItem::BitOrAssign => sym::bitor_assign,
            LangItem::ShlAssign => sym::shl_assign,
            LangItem::ShrAssign => sym::shr_assign,
            LangItem::Index => sym::index,
            LangItem::IndexMut => sym::index_mut,
            LangItem::UnsafeCell => sym::unsafe_cell,
            LangItem::CovariantUnsafeCell => sym::covariant_unsafe_cell,
            LangItem::UnsafePinned => sym::unsafe_pinned,
            LangItem::VaArgSafe => sym::va_arg_safe,
            LangItem::VaList => sym::va_list,
            LangItem::Complex => sym::complex,
            LangItem::PpcF128 => sym::ppcf128,
            LangItem::Deref => sym::deref,
            LangItem::DerefMut => sym::deref_mut,
            LangItem::DerefPure => sym::deref_pure,
            LangItem::DerefTarget => sym::deref_target,
            LangItem::Receiver => sym::receiver,
            LangItem::ReceiverTarget => sym::receiver_target,
            LangItem::LegacyReceiver => sym::legacy_receiver,
            LangItem::Fn => kw::Fn,
            LangItem::FnMut => sym::fn_mut,
            LangItem::FnOnce => sym::fn_once,
            LangItem::FnStatic => sym::fn_static,
            LangItem::AsyncFn => sym::async_fn,
            LangItem::AsyncFnMut => sym::async_fn_mut,
            LangItem::AsyncFnOnce => sym::async_fn_once,
            LangItem::AsyncFnOnceOutput => sym::async_fn_once_output,
            LangItem::CallOnceFuture => sym::call_once_future,
            LangItem::CallRefFuture => sym::call_ref_future,
            LangItem::AsyncFnKindHelper => sym::async_fn_kind_helper,
            LangItem::AsyncFnKindUpvars => sym::async_fn_kind_upvars,
            LangItem::FnOnceOutput => sym::fn_once_output,
            LangItem::Iterator => sym::iterator,
            LangItem::FusedIterator => sym::fused_iterator,
            LangItem::Future => sym::future_trait,
            LangItem::FutureOutput => sym::future_output,
            LangItem::AsyncIterator => sym::async_iterator,
            LangItem::CoroutineState => sym::coroutine_state,
            LangItem::Coroutine => sym::coroutine,
            LangItem::CoroutineReturn => sym::coroutine_return,
            LangItem::CoroutineYield => sym::coroutine_yield,
            LangItem::CoroutineResume => sym::coroutine_resume,
            LangItem::Unpin => sym::unpin,
            LangItem::Pin => kw::Pin,
            LangItem::OrderingEnum => sym::Ordering,
            LangItem::PartialEq => sym::eq,
            LangItem::PartialOrd => sym::partial_ord,
            LangItem::CVoid => sym::c_void,
            LangItem::F16B => sym::f16b,
            LangItem::Type => sym::type_info,
            LangItem::TypeGeneric => sym::type_info_generic,
            LangItem::TypeId => sym::type_id,
            LangItem::Panic => sym::panic,
            LangItem::PanicNounwind => sym::panic_nounwind,
            LangItem::PanicFmt => sym::panic_fmt,
            LangItem::PanicDisplay => sym::panic_display,
            LangItem::ConstPanicFmt => sym::const_panic_fmt,
            LangItem::PanicBoundsCheck => sym::panic_bounds_check,
            LangItem::PanicMisalignedPointerDereference =>
                sym::panic_misaligned_pointer_dereference,
            LangItem::PanicInfo => sym::panic_info,
            LangItem::PanicLocation => sym::panic_location,
            LangItem::PanicImpl => sym::panic_impl,
            LangItem::PanicCannotUnwind => sym::panic_cannot_unwind,
            LangItem::PanicInCleanup => sym::panic_in_cleanup,
            LangItem::PanicAddOverflow => sym::panic_const_add_overflow,
            LangItem::PanicSubOverflow => sym::panic_const_sub_overflow,
            LangItem::PanicMulOverflow => sym::panic_const_mul_overflow,
            LangItem::PanicDivOverflow => sym::panic_const_div_overflow,
            LangItem::PanicRemOverflow => sym::panic_const_rem_overflow,
            LangItem::PanicNegOverflow => sym::panic_const_neg_overflow,
            LangItem::PanicShrOverflow => sym::panic_const_shr_overflow,
            LangItem::PanicShlOverflow => sym::panic_const_shl_overflow,
            LangItem::PanicDivZero => sym::panic_const_div_by_zero,
            LangItem::PanicRemZero => sym::panic_const_rem_by_zero,
            LangItem::PanicCoroutineResumed =>
                sym::panic_const_coroutine_resumed,
            LangItem::PanicAsyncFnResumed =>
                sym::panic_const_async_fn_resumed,
            LangItem::PanicAsyncGenFnResumed =>
                sym::panic_const_async_gen_fn_resumed,
            LangItem::PanicGenFnNone => sym::panic_const_gen_fn_none,
            LangItem::PanicCoroutineResumedPanic =>
                sym::panic_const_coroutine_resumed_panic,
            LangItem::PanicAsyncFnResumedPanic =>
                sym::panic_const_async_fn_resumed_panic,
            LangItem::PanicAsyncGenFnResumedPanic =>
                sym::panic_const_async_gen_fn_resumed_panic,
            LangItem::PanicGenFnNonePanic =>
                sym::panic_const_gen_fn_none_panic,
            LangItem::PanicNullPointerDereference =>
                sym::panic_null_pointer_dereference,
            LangItem::PanicNullReferenceConstructed =>
                sym::panic_null_reference_constructed,
            LangItem::PanicInvalidEnumConstruction =>
                sym::panic_invalid_enum_construction,
            LangItem::PanicCoroutineResumedDrop =>
                sym::panic_const_coroutine_resumed_drop,
            LangItem::PanicAsyncFnResumedDrop =>
                sym::panic_const_async_fn_resumed_drop,
            LangItem::PanicAsyncGenFnResumedDrop =>
                sym::panic_const_async_gen_fn_resumed_drop,
            LangItem::PanicGenFnNoneDrop => sym::panic_const_gen_fn_none_drop,
            LangItem::BeginPanic => sym::begin_panic,
            LangItem::FormatArgument => sym::format_argument,
            LangItem::FormatArguments => sym::format_arguments,
            LangItem::DropGlue => sym::drop_glue,
            LangItem::AllocLayout => sym::alloc_layout,
            LangItem::Start => sym::start,
            LangItem::EhPersonality => sym::eh_personality,
            LangItem::CompilerMove => sym::compiler_move,
            LangItem::CompilerCopy => sym::compiler_copy,
            LangItem::OwnedBox => sym::owned_box,
            LangItem::GlobalAlloc => sym::global_alloc_ty,
            LangItem::PhantomData => sym::phantom_data,
            LangItem::ManuallyDrop => sym::manually_drop,
            LangItem::MaybeDangling => sym::maybe_dangling,
            LangItem::BikeshedGuaranteedNoDrop =>
                sym::bikeshed_guaranteed_no_drop,
            LangItem::MaybeUninit => sym::maybe_uninit,
            LangItem::Termination => sym::termination,
            LangItem::Try => sym::Try,
            LangItem::Tuple => sym::tuple_trait,
            LangItem::SliceLen => sym::slice_len_fn,
            LangItem::TryTraitFromResidual => sym::from_residual,
            LangItem::TryTraitFromOutput => sym::from_output,
            LangItem::TryTraitBranch => sym::branch,
            LangItem::TryTraitFromYeet => sym::from_yeet,
            LangItem::ResidualIntoTryType => sym::into_try_type,
            LangItem::CoercePointeeValidated => sym::coerce_pointee_validated,
            LangItem::ConstParamTy => sym::const_param_ty,
            LangItem::Poll => sym::Poll,
            LangItem::PollReady => sym::Ready,
            LangItem::PollPending => sym::Pending,
            LangItem::AsyncGenReady => sym::AsyncGenReady,
            LangItem::AsyncGenPending => sym::AsyncGenPending,
            LangItem::AsyncGenFinished => sym::AsyncGenFinished,
            LangItem::ResumeTy => sym::ResumeTy,
            LangItem::GetContext => sym::get_context,
            LangItem::Context => sym::Context,
            LangItem::FuturePoll => sym::poll,
            LangItem::AsyncIteratorPollNext => sym::async_iterator_poll_next,
            LangItem::IntoAsyncIterIntoIter => sym::into_async_iter_into_iter,
            LangItem::Option => sym::Option,
            LangItem::OptionSome => sym::Some,
            LangItem::OptionNone => sym::None,
            LangItem::ResultOk => sym::Ok,
            LangItem::ResultErr => sym::Err,
            LangItem::ControlFlowContinue => sym::Continue,
            LangItem::ControlFlowBreak => sym::Break,
            LangItem::IntoFutureIntoFuture => sym::into_future,
            LangItem::IntoIterIntoIter => sym::into_iter,
            LangItem::IteratorNext => sym::next,
            LangItem::PinNewUnchecked => sym::new_unchecked,
            LangItem::RangeFrom => sym::RangeFrom,
            LangItem::RangeFull => sym::RangeFull,
            LangItem::RangeInclusiveStruct => sym::RangeInclusive,
            LangItem::RangeInclusiveNew => sym::range_inclusive_new,
            LangItem::Range => sym::Range,
            LangItem::RangeToInclusive => sym::RangeToInclusive,
            LangItem::RangeTo => sym::RangeTo,
            LangItem::RangeMax => sym::RangeMax,
            LangItem::RangeMin => sym::RangeMin,
            LangItem::RangeSub => sym::RangeSub,
            LangItem::RangeFromCopy => sym::RangeFromCopy,
            LangItem::RangeCopy => sym::RangeCopy,
            LangItem::RangeInclusiveCopy => sym::RangeInclusiveCopy,
            LangItem::RangeToInclusiveCopy => sym::RangeToInclusiveCopy,
            LangItem::String => sym::String,
            LangItem::CStr => sym::CStr,
            LangItem::ContractBuildCheckEnsures =>
                sym::contract_build_check_ensures,
            LangItem::ContractCheckRequires => sym::contract_check_requires,
            LangItem::DefaultTrait4 => sym::default_trait4,
            LangItem::DefaultTrait3 => sym::default_trait3,
            LangItem::DefaultTrait2 => sym::default_trait2,
            LangItem::DefaultTrait1 => sym::default_trait1,
            LangItem::ContractCheckEnsures => sym::contract_check_ensures,
            LangItem::Reborrow => sym::reborrow,
            LangItem::CoerceShared => sym::coerce_shared,
            LangItem::FieldRepresentingType => sym::field_representing_type,
            LangItem::Field => sym::field,
            LangItem::FieldBase => sym::field_base,
            LangItem::FieldType => sym::field_type,
            LangItem::FieldOffset => sym::field_offset,
            LangItem::From => sym::From,
            LangItem::FromFn => sym::from,
            LangItem::FnPtr => sym::FnPtr,
        }
    }
    /// Opposite of [`LangItem::name`]
    pub fn from_name(name: Symbol) -> Option<Self> {
        match name {
            sym::sized => Some(LangItem::Sized),
            sym::meta_sized => Some(LangItem::MetaSized),
            sym::pointee_sized => Some(LangItem::PointeeSized),
            sym::unsize => Some(LangItem::Unsize),
            sym::mem_align_const => Some(LangItem::AlignOf),
            sym::mem_size_const => Some(LangItem::SizeOf),
            sym::offset_of => Some(LangItem::OffsetOf),
            sym::structural_peq => Some(LangItem::StructuralPeq),
            sym::copy => Some(LangItem::Copy),
            sym::clone => Some(LangItem::Clone),
            sym::clone_fn => Some(LangItem::CloneFn),
            sym::use_cloned => Some(LangItem::UseCloned),
            sym::trivial_clone => Some(LangItem::TrivialClone),
            sym::sync => Some(LangItem::Sync),
            sym::discriminant_kind => Some(LangItem::DiscriminantKind),
            sym::discriminant_type => Some(LangItem::Discriminant),
            sym::pointee_trait => Some(LangItem::PointeeTrait),
            sym::metadata_type => Some(LangItem::Metadata),
            sym::dyn_metadata => Some(LangItem::DynMetadata),
            sym::non_null => Some(LangItem::NonNull),
            sym::freeze => Some(LangItem::Freeze),
            sym::unsafe_unpin => Some(LangItem::UnsafeUnpin),
            sym::fn_ptr_trait => Some(LangItem::FnPtrTrait),
            sym::fn_ptr_as_ptr => Some(LangItem::FnPtrAsPtr),
            sym::fn_ptr_from_ptr => Some(LangItem::FnPtrFromPtr),
            sym::code => Some(LangItem::Code),
            sym::drop => Some(LangItem::Drop),
            sym::destruct => Some(LangItem::Destruct),
            sym::async_drop => Some(LangItem::AsyncDrop),
            sym::async_drop_in_place => Some(LangItem::AsyncDropInPlace),
            sym::coerce_unsized => Some(LangItem::CoerceUnsized),
            sym::dispatch_from_dyn => Some(LangItem::DispatchFromDyn),
            sym::try_as_dyn => Some(LangItem::TryAsDyn),
            sym::transmute_opts => Some(LangItem::TransmuteOpts),
            sym::transmute_trait => Some(LangItem::TransmuteTrait),
            sym::add => Some(LangItem::Add),
            sym::sub => Some(LangItem::Sub),
            sym::mul => Some(LangItem::Mul),
            sym::div => Some(LangItem::Div),
            sym::rem => Some(LangItem::Rem),
            sym::neg => Some(LangItem::Neg),
            sym::not => Some(LangItem::Not),
            sym::bitxor => Some(LangItem::BitXor),
            sym::bitand => Some(LangItem::BitAnd),
            sym::bitor => Some(LangItem::BitOr),
            sym::shl => Some(LangItem::Shl),
            sym::shr => Some(LangItem::Shr),
            sym::add_assign => Some(LangItem::AddAssign),
            sym::sub_assign => Some(LangItem::SubAssign),
            sym::mul_assign => Some(LangItem::MulAssign),
            sym::div_assign => Some(LangItem::DivAssign),
            sym::rem_assign => Some(LangItem::RemAssign),
            sym::bitxor_assign => Some(LangItem::BitXorAssign),
            sym::bitand_assign => Some(LangItem::BitAndAssign),
            sym::bitor_assign => Some(LangItem::BitOrAssign),
            sym::shl_assign => Some(LangItem::ShlAssign),
            sym::shr_assign => Some(LangItem::ShrAssign),
            sym::index => Some(LangItem::Index),
            sym::index_mut => Some(LangItem::IndexMut),
            sym::unsafe_cell => Some(LangItem::UnsafeCell),
            sym::covariant_unsafe_cell => Some(LangItem::CovariantUnsafeCell),
            sym::unsafe_pinned => Some(LangItem::UnsafePinned),
            sym::va_arg_safe => Some(LangItem::VaArgSafe),
            sym::va_list => Some(LangItem::VaList),
            sym::complex => Some(LangItem::Complex),
            sym::ppcf128 => Some(LangItem::PpcF128),
            sym::deref => Some(LangItem::Deref),
            sym::deref_mut => Some(LangItem::DerefMut),
            sym::deref_pure => Some(LangItem::DerefPure),
            sym::deref_target => Some(LangItem::DerefTarget),
            sym::receiver => Some(LangItem::Receiver),
            sym::receiver_target => Some(LangItem::ReceiverTarget),
            sym::legacy_receiver => Some(LangItem::LegacyReceiver),
            kw::Fn => Some(LangItem::Fn),
            sym::fn_mut => Some(LangItem::FnMut),
            sym::fn_once => Some(LangItem::FnOnce),
            sym::fn_static => Some(LangItem::FnStatic),
            sym::async_fn => Some(LangItem::AsyncFn),
            sym::async_fn_mut => Some(LangItem::AsyncFnMut),
            sym::async_fn_once => Some(LangItem::AsyncFnOnce),
            sym::async_fn_once_output => Some(LangItem::AsyncFnOnceOutput),
            sym::call_once_future => Some(LangItem::CallOnceFuture),
            sym::call_ref_future => Some(LangItem::CallRefFuture),
            sym::async_fn_kind_helper => Some(LangItem::AsyncFnKindHelper),
            sym::async_fn_kind_upvars => Some(LangItem::AsyncFnKindUpvars),
            sym::fn_once_output => Some(LangItem::FnOnceOutput),
            sym::iterator => Some(LangItem::Iterator),
            sym::fused_iterator => Some(LangItem::FusedIterator),
            sym::future_trait => Some(LangItem::Future),
            sym::future_output => Some(LangItem::FutureOutput),
            sym::async_iterator => Some(LangItem::AsyncIterator),
            sym::coroutine_state => Some(LangItem::CoroutineState),
            sym::coroutine => Some(LangItem::Coroutine),
            sym::coroutine_return => Some(LangItem::CoroutineReturn),
            sym::coroutine_yield => Some(LangItem::CoroutineYield),
            sym::coroutine_resume => Some(LangItem::CoroutineResume),
            sym::unpin => Some(LangItem::Unpin),
            kw::Pin => Some(LangItem::Pin),
            sym::Ordering => Some(LangItem::OrderingEnum),
            sym::eq => Some(LangItem::PartialEq),
            sym::partial_ord => Some(LangItem::PartialOrd),
            sym::c_void => Some(LangItem::CVoid),
            sym::f16b => Some(LangItem::F16B),
            sym::type_info => Some(LangItem::Type),
            sym::type_info_generic => Some(LangItem::TypeGeneric),
            sym::type_id => Some(LangItem::TypeId),
            sym::panic => Some(LangItem::Panic),
            sym::panic_nounwind => Some(LangItem::PanicNounwind),
            sym::panic_fmt => Some(LangItem::PanicFmt),
            sym::panic_display => Some(LangItem::PanicDisplay),
            sym::const_panic_fmt => Some(LangItem::ConstPanicFmt),
            sym::panic_bounds_check => Some(LangItem::PanicBoundsCheck),
            sym::panic_misaligned_pointer_dereference =>
                Some(LangItem::PanicMisalignedPointerDereference),
            sym::panic_info => Some(LangItem::PanicInfo),
            sym::panic_location => Some(LangItem::PanicLocation),
            sym::panic_impl => Some(LangItem::PanicImpl),
            sym::panic_cannot_unwind => Some(LangItem::PanicCannotUnwind),
            sym::panic_in_cleanup => Some(LangItem::PanicInCleanup),
            sym::panic_const_add_overflow => Some(LangItem::PanicAddOverflow),
            sym::panic_const_sub_overflow => Some(LangItem::PanicSubOverflow),
            sym::panic_const_mul_overflow => Some(LangItem::PanicMulOverflow),
            sym::panic_const_div_overflow => Some(LangItem::PanicDivOverflow),
            sym::panic_const_rem_overflow => Some(LangItem::PanicRemOverflow),
            sym::panic_const_neg_overflow => Some(LangItem::PanicNegOverflow),
            sym::panic_const_shr_overflow => Some(LangItem::PanicShrOverflow),
            sym::panic_const_shl_overflow => Some(LangItem::PanicShlOverflow),
            sym::panic_const_div_by_zero => Some(LangItem::PanicDivZero),
            sym::panic_const_rem_by_zero => Some(LangItem::PanicRemZero),
            sym::panic_const_coroutine_resumed =>
                Some(LangItem::PanicCoroutineResumed),
            sym::panic_const_async_fn_resumed =>
                Some(LangItem::PanicAsyncFnResumed),
            sym::panic_const_async_gen_fn_resumed =>
                Some(LangItem::PanicAsyncGenFnResumed),
            sym::panic_const_gen_fn_none => Some(LangItem::PanicGenFnNone),
            sym::panic_const_coroutine_resumed_panic =>
                Some(LangItem::PanicCoroutineResumedPanic),
            sym::panic_const_async_fn_resumed_panic =>
                Some(LangItem::PanicAsyncFnResumedPanic),
            sym::panic_const_async_gen_fn_resumed_panic =>
                Some(LangItem::PanicAsyncGenFnResumedPanic),
            sym::panic_const_gen_fn_none_panic =>
                Some(LangItem::PanicGenFnNonePanic),
            sym::panic_null_pointer_dereference =>
                Some(LangItem::PanicNullPointerDereference),
            sym::panic_null_reference_constructed =>
                Some(LangItem::PanicNullReferenceConstructed),
            sym::panic_invalid_enum_construction =>
                Some(LangItem::PanicInvalidEnumConstruction),
            sym::panic_const_coroutine_resumed_drop =>
                Some(LangItem::PanicCoroutineResumedDrop),
            sym::panic_const_async_fn_resumed_drop =>
                Some(LangItem::PanicAsyncFnResumedDrop),
            sym::panic_const_async_gen_fn_resumed_drop =>
                Some(LangItem::PanicAsyncGenFnResumedDrop),
            sym::panic_const_gen_fn_none_drop =>
                Some(LangItem::PanicGenFnNoneDrop),
            sym::begin_panic => Some(LangItem::BeginPanic),
            sym::format_argument => Some(LangItem::FormatArgument),
            sym::format_arguments => Some(LangItem::FormatArguments),
            sym::drop_glue => Some(LangItem::DropGlue),
            sym::alloc_layout => Some(LangItem::AllocLayout),
            sym::start => Some(LangItem::Start),
            sym::eh_personality => Some(LangItem::EhPersonality),
            sym::compiler_move => Some(LangItem::CompilerMove),
            sym::compiler_copy => Some(LangItem::CompilerCopy),
            sym::owned_box => Some(LangItem::OwnedBox),
            sym::global_alloc_ty => Some(LangItem::GlobalAlloc),
            sym::phantom_data => Some(LangItem::PhantomData),
            sym::manually_drop => Some(LangItem::ManuallyDrop),
            sym::maybe_dangling => Some(LangItem::MaybeDangling),
            sym::bikeshed_guaranteed_no_drop =>
                Some(LangItem::BikeshedGuaranteedNoDrop),
            sym::maybe_uninit => Some(LangItem::MaybeUninit),
            sym::termination => Some(LangItem::Termination),
            sym::Try => Some(LangItem::Try),
            sym::tuple_trait => Some(LangItem::Tuple),
            sym::slice_len_fn => Some(LangItem::SliceLen),
            sym::from_residual => Some(LangItem::TryTraitFromResidual),
            sym::from_output => Some(LangItem::TryTraitFromOutput),
            sym::branch => Some(LangItem::TryTraitBranch),
            sym::from_yeet => Some(LangItem::TryTraitFromYeet),
            sym::into_try_type => Some(LangItem::ResidualIntoTryType),
            sym::coerce_pointee_validated =>
                Some(LangItem::CoercePointeeValidated),
            sym::const_param_ty => Some(LangItem::ConstParamTy),
            sym::Poll => Some(LangItem::Poll),
            sym::Ready => Some(LangItem::PollReady),
            sym::Pending => Some(LangItem::PollPending),
            sym::AsyncGenReady => Some(LangItem::AsyncGenReady),
            sym::AsyncGenPending => Some(LangItem::AsyncGenPending),
            sym::AsyncGenFinished => Some(LangItem::AsyncGenFinished),
            sym::ResumeTy => Some(LangItem::ResumeTy),
            sym::get_context => Some(LangItem::GetContext),
            sym::Context => Some(LangItem::Context),
            sym::poll => Some(LangItem::FuturePoll),
            sym::async_iterator_poll_next =>
                Some(LangItem::AsyncIteratorPollNext),
            sym::into_async_iter_into_iter =>
                Some(LangItem::IntoAsyncIterIntoIter),
            sym::Option => Some(LangItem::Option),
            sym::Some => Some(LangItem::OptionSome),
            sym::None => Some(LangItem::OptionNone),
            sym::Ok => Some(LangItem::ResultOk),
            sym::Err => Some(LangItem::ResultErr),
            sym::Continue => Some(LangItem::ControlFlowContinue),
            sym::Break => Some(LangItem::ControlFlowBreak),
            sym::into_future => Some(LangItem::IntoFutureIntoFuture),
            sym::into_iter => Some(LangItem::IntoIterIntoIter),
            sym::next => Some(LangItem::IteratorNext),
            sym::new_unchecked => Some(LangItem::PinNewUnchecked),
            sym::RangeFrom => Some(LangItem::RangeFrom),
            sym::RangeFull => Some(LangItem::RangeFull),
            sym::RangeInclusive => Some(LangItem::RangeInclusiveStruct),
            sym::range_inclusive_new => Some(LangItem::RangeInclusiveNew),
            sym::Range => Some(LangItem::Range),
            sym::RangeToInclusive => Some(LangItem::RangeToInclusive),
            sym::RangeTo => Some(LangItem::RangeTo),
            sym::RangeMax => Some(LangItem::RangeMax),
            sym::RangeMin => Some(LangItem::RangeMin),
            sym::RangeSub => Some(LangItem::RangeSub),
            sym::RangeFromCopy => Some(LangItem::RangeFromCopy),
            sym::RangeCopy => Some(LangItem::RangeCopy),
            sym::RangeInclusiveCopy => Some(LangItem::RangeInclusiveCopy),
            sym::RangeToInclusiveCopy => Some(LangItem::RangeToInclusiveCopy),
            sym::String => Some(LangItem::String),
            sym::CStr => Some(LangItem::CStr),
            sym::contract_build_check_ensures =>
                Some(LangItem::ContractBuildCheckEnsures),
            sym::contract_check_requires =>
                Some(LangItem::ContractCheckRequires),
            sym::default_trait4 => Some(LangItem::DefaultTrait4),
            sym::default_trait3 => Some(LangItem::DefaultTrait3),
            sym::default_trait2 => Some(LangItem::DefaultTrait2),
            sym::default_trait1 => Some(LangItem::DefaultTrait1),
            sym::contract_check_ensures =>
                Some(LangItem::ContractCheckEnsures),
            sym::reborrow => Some(LangItem::Reborrow),
            sym::coerce_shared => Some(LangItem::CoerceShared),
            sym::field_representing_type =>
                Some(LangItem::FieldRepresentingType),
            sym::field => Some(LangItem::Field),
            sym::field_base => Some(LangItem::FieldBase),
            sym::field_type => Some(LangItem::FieldType),
            sym::field_offset => Some(LangItem::FieldOffset),
            sym::From => Some(LangItem::From),
            sym::from => Some(LangItem::FromFn),
            sym::FnPtr => Some(LangItem::FnPtr),
            _ => None,
        }
    }
    /// Returns the name of the `LangItem` enum variant.
    pub fn variant_name(self) -> &'static str {
        match self {
            LangItem::Sized => "Sized",
            LangItem::MetaSized => "MetaSized",
            LangItem::PointeeSized => "PointeeSized",
            LangItem::Unsize => "Unsize",
            LangItem::AlignOf => "AlignOf",
            LangItem::SizeOf => "SizeOf",
            LangItem::OffsetOf => "OffsetOf",
            LangItem::StructuralPeq => "StructuralPeq",
            LangItem::Copy => "Copy",
            LangItem::Clone => "Clone",
            LangItem::CloneFn => "CloneFn",
            LangItem::UseCloned => "UseCloned",
            LangItem::TrivialClone => "TrivialClone",
            LangItem::Sync => "Sync",
            LangItem::DiscriminantKind => "DiscriminantKind",
            LangItem::Discriminant => "Discriminant",
            LangItem::PointeeTrait => "PointeeTrait",
            LangItem::Metadata => "Metadata",
            LangItem::DynMetadata => "DynMetadata",
            LangItem::NonNull => "NonNull",
            LangItem::Freeze => "Freeze",
            LangItem::UnsafeUnpin => "UnsafeUnpin",
            LangItem::FnPtrTrait => "FnPtrTrait",
            LangItem::FnPtrAsPtr => "FnPtrAsPtr",
            LangItem::FnPtrFromPtr => "FnPtrFromPtr",
            LangItem::Code => "Code",
            LangItem::Drop => "Drop",
            LangItem::Destruct => "Destruct",
            LangItem::AsyncDrop => "AsyncDrop",
            LangItem::AsyncDropInPlace => "AsyncDropInPlace",
            LangItem::CoerceUnsized => "CoerceUnsized",
            LangItem::DispatchFromDyn => "DispatchFromDyn",
            LangItem::TryAsDyn => "TryAsDyn",
            LangItem::TransmuteOpts => "TransmuteOpts",
            LangItem::TransmuteTrait => "TransmuteTrait",
            LangItem::Add => "Add",
            LangItem::Sub => "Sub",
            LangItem::Mul => "Mul",
            LangItem::Div => "Div",
            LangItem::Rem => "Rem",
            LangItem::Neg => "Neg",
            LangItem::Not => "Not",
            LangItem::BitXor => "BitXor",
            LangItem::BitAnd => "BitAnd",
            LangItem::BitOr => "BitOr",
            LangItem::Shl => "Shl",
            LangItem::Shr => "Shr",
            LangItem::AddAssign => "AddAssign",
            LangItem::SubAssign => "SubAssign",
            LangItem::MulAssign => "MulAssign",
            LangItem::DivAssign => "DivAssign",
            LangItem::RemAssign => "RemAssign",
            LangItem::BitXorAssign => "BitXorAssign",
            LangItem::BitAndAssign => "BitAndAssign",
            LangItem::BitOrAssign => "BitOrAssign",
            LangItem::ShlAssign => "ShlAssign",
            LangItem::ShrAssign => "ShrAssign",
            LangItem::Index => "Index",
            LangItem::IndexMut => "IndexMut",
            LangItem::UnsafeCell => "UnsafeCell",
            LangItem::CovariantUnsafeCell => "CovariantUnsafeCell",
            LangItem::UnsafePinned => "UnsafePinned",
            LangItem::VaArgSafe => "VaArgSafe",
            LangItem::VaList => "VaList",
            LangItem::Complex => "Complex",
            LangItem::PpcF128 => "PpcF128",
            LangItem::Deref => "Deref",
            LangItem::DerefMut => "DerefMut",
            LangItem::DerefPure => "DerefPure",
            LangItem::DerefTarget => "DerefTarget",
            LangItem::Receiver => "Receiver",
            LangItem::ReceiverTarget => "ReceiverTarget",
            LangItem::LegacyReceiver => "LegacyReceiver",
            LangItem::Fn => "Fn",
            LangItem::FnMut => "FnMut",
            LangItem::FnOnce => "FnOnce",
            LangItem::FnStatic => "FnStatic",
            LangItem::AsyncFn => "AsyncFn",
            LangItem::AsyncFnMut => "AsyncFnMut",
            LangItem::AsyncFnOnce => "AsyncFnOnce",
            LangItem::AsyncFnOnceOutput => "AsyncFnOnceOutput",
            LangItem::CallOnceFuture => "CallOnceFuture",
            LangItem::CallRefFuture => "CallRefFuture",
            LangItem::AsyncFnKindHelper => "AsyncFnKindHelper",
            LangItem::AsyncFnKindUpvars => "AsyncFnKindUpvars",
            LangItem::FnOnceOutput => "FnOnceOutput",
            LangItem::Iterator => "Iterator",
            LangItem::FusedIterator => "FusedIterator",
            LangItem::Future => "Future",
            LangItem::FutureOutput => "FutureOutput",
            LangItem::AsyncIterator => "AsyncIterator",
            LangItem::CoroutineState => "CoroutineState",
            LangItem::Coroutine => "Coroutine",
            LangItem::CoroutineReturn => "CoroutineReturn",
            LangItem::CoroutineYield => "CoroutineYield",
            LangItem::CoroutineResume => "CoroutineResume",
            LangItem::Unpin => "Unpin",
            LangItem::Pin => "Pin",
            LangItem::OrderingEnum => "OrderingEnum",
            LangItem::PartialEq => "PartialEq",
            LangItem::PartialOrd => "PartialOrd",
            LangItem::CVoid => "CVoid",
            LangItem::F16B => "F16B",
            LangItem::Type => "Type",
            LangItem::TypeGeneric => "TypeGeneric",
            LangItem::TypeId => "TypeId",
            LangItem::Panic => "Panic",
            LangItem::PanicNounwind => "PanicNounwind",
            LangItem::PanicFmt => "PanicFmt",
            LangItem::PanicDisplay => "PanicDisplay",
            LangItem::ConstPanicFmt => "ConstPanicFmt",
            LangItem::PanicBoundsCheck => "PanicBoundsCheck",
            LangItem::PanicMisalignedPointerDereference =>
                "PanicMisalignedPointerDereference",
            LangItem::PanicInfo => "PanicInfo",
            LangItem::PanicLocation => "PanicLocation",
            LangItem::PanicImpl => "PanicImpl",
            LangItem::PanicCannotUnwind => "PanicCannotUnwind",
            LangItem::PanicInCleanup => "PanicInCleanup",
            LangItem::PanicAddOverflow => "PanicAddOverflow",
            LangItem::PanicSubOverflow => "PanicSubOverflow",
            LangItem::PanicMulOverflow => "PanicMulOverflow",
            LangItem::PanicDivOverflow => "PanicDivOverflow",
            LangItem::PanicRemOverflow => "PanicRemOverflow",
            LangItem::PanicNegOverflow => "PanicNegOverflow",
            LangItem::PanicShrOverflow => "PanicShrOverflow",
            LangItem::PanicShlOverflow => "PanicShlOverflow",
            LangItem::PanicDivZero => "PanicDivZero",
            LangItem::PanicRemZero => "PanicRemZero",
            LangItem::PanicCoroutineResumed => "PanicCoroutineResumed",
            LangItem::PanicAsyncFnResumed => "PanicAsyncFnResumed",
            LangItem::PanicAsyncGenFnResumed => "PanicAsyncGenFnResumed",
            LangItem::PanicGenFnNone => "PanicGenFnNone",
            LangItem::PanicCoroutineResumedPanic =>
                "PanicCoroutineResumedPanic",
            LangItem::PanicAsyncFnResumedPanic => "PanicAsyncFnResumedPanic",
            LangItem::PanicAsyncGenFnResumedPanic =>
                "PanicAsyncGenFnResumedPanic",
            LangItem::PanicGenFnNonePanic => "PanicGenFnNonePanic",
            LangItem::PanicNullPointerDereference =>
                "PanicNullPointerDereference",
            LangItem::PanicNullReferenceConstructed =>
                "PanicNullReferenceConstructed",
            LangItem::PanicInvalidEnumConstruction =>
                "PanicInvalidEnumConstruction",
            LangItem::PanicCoroutineResumedDrop =>
                "PanicCoroutineResumedDrop",
            LangItem::PanicAsyncFnResumedDrop => "PanicAsyncFnResumedDrop",
            LangItem::PanicAsyncGenFnResumedDrop =>
                "PanicAsyncGenFnResumedDrop",
            LangItem::PanicGenFnNoneDrop => "PanicGenFnNoneDrop",
            LangItem::BeginPanic => "BeginPanic",
            LangItem::FormatArgument => "FormatArgument",
            LangItem::FormatArguments => "FormatArguments",
            LangItem::DropGlue => "DropGlue",
            LangItem::AllocLayout => "AllocLayout",
            LangItem::Start => "Start",
            LangItem::EhPersonality => "EhPersonality",
            LangItem::CompilerMove => "CompilerMove",
            LangItem::CompilerCopy => "CompilerCopy",
            LangItem::OwnedBox => "OwnedBox",
            LangItem::GlobalAlloc => "GlobalAlloc",
            LangItem::PhantomData => "PhantomData",
            LangItem::ManuallyDrop => "ManuallyDrop",
            LangItem::MaybeDangling => "MaybeDangling",
            LangItem::BikeshedGuaranteedNoDrop => "BikeshedGuaranteedNoDrop",
            LangItem::MaybeUninit => "MaybeUninit",
            LangItem::Termination => "Termination",
            LangItem::Try => "Try",
            LangItem::Tuple => "Tuple",
            LangItem::SliceLen => "SliceLen",
            LangItem::TryTraitFromResidual => "TryTraitFromResidual",
            LangItem::TryTraitFromOutput => "TryTraitFromOutput",
            LangItem::TryTraitBranch => "TryTraitBranch",
            LangItem::TryTraitFromYeet => "TryTraitFromYeet",
            LangItem::ResidualIntoTryType => "ResidualIntoTryType",
            LangItem::CoercePointeeValidated => "CoercePointeeValidated",
            LangItem::ConstParamTy => "ConstParamTy",
            LangItem::Poll => "Poll",
            LangItem::PollReady => "PollReady",
            LangItem::PollPending => "PollPending",
            LangItem::AsyncGenReady => "AsyncGenReady",
            LangItem::AsyncGenPending => "AsyncGenPending",
            LangItem::AsyncGenFinished => "AsyncGenFinished",
            LangItem::ResumeTy => "ResumeTy",
            LangItem::GetContext => "GetContext",
            LangItem::Context => "Context",
            LangItem::FuturePoll => "FuturePoll",
            LangItem::AsyncIteratorPollNext => "AsyncIteratorPollNext",
            LangItem::IntoAsyncIterIntoIter => "IntoAsyncIterIntoIter",
            LangItem::Option => "Option",
            LangItem::OptionSome => "OptionSome",
            LangItem::OptionNone => "OptionNone",
            LangItem::ResultOk => "ResultOk",
            LangItem::ResultErr => "ResultErr",
            LangItem::ControlFlowContinue => "ControlFlowContinue",
            LangItem::ControlFlowBreak => "ControlFlowBreak",
            LangItem::IntoFutureIntoFuture => "IntoFutureIntoFuture",
            LangItem::IntoIterIntoIter => "IntoIterIntoIter",
            LangItem::IteratorNext => "IteratorNext",
            LangItem::PinNewUnchecked => "PinNewUnchecked",
            LangItem::RangeFrom => "RangeFrom",
            LangItem::RangeFull => "RangeFull",
            LangItem::RangeInclusiveStruct => "RangeInclusiveStruct",
            LangItem::RangeInclusiveNew => "RangeInclusiveNew",
            LangItem::Range => "Range",
            LangItem::RangeToInclusive => "RangeToInclusive",
            LangItem::RangeTo => "RangeTo",
            LangItem::RangeMax => "RangeMax",
            LangItem::RangeMin => "RangeMin",
            LangItem::RangeSub => "RangeSub",
            LangItem::RangeFromCopy => "RangeFromCopy",
            LangItem::RangeCopy => "RangeCopy",
            LangItem::RangeInclusiveCopy => "RangeInclusiveCopy",
            LangItem::RangeToInclusiveCopy => "RangeToInclusiveCopy",
            LangItem::String => "String",
            LangItem::CStr => "CStr",
            LangItem::ContractBuildCheckEnsures =>
                "ContractBuildCheckEnsures",
            LangItem::ContractCheckRequires => "ContractCheckRequires",
            LangItem::DefaultTrait4 => "DefaultTrait4",
            LangItem::DefaultTrait3 => "DefaultTrait3",
            LangItem::DefaultTrait2 => "DefaultTrait2",
            LangItem::DefaultTrait1 => "DefaultTrait1",
            LangItem::ContractCheckEnsures => "ContractCheckEnsures",
            LangItem::Reborrow => "Reborrow",
            LangItem::CoerceShared => "CoerceShared",
            LangItem::FieldRepresentingType => "FieldRepresentingType",
            LangItem::Field => "Field",
            LangItem::FieldBase => "FieldBase",
            LangItem::FieldType => "FieldType",
            LangItem::FieldOffset => "FieldOffset",
            LangItem::From => "From",
            LangItem::FromFn => "FromFn",
            LangItem::FnPtr => "FnPtr",
        }
    }
    pub fn target(self) -> Target {
        match self {
            LangItem::Sized => Target::Trait,
            LangItem::MetaSized => Target::Trait,
            LangItem::PointeeSized => Target::Trait,
            LangItem::Unsize => Target::Trait,
            LangItem::AlignOf => Target::AssocConst(AssocCtxt::Trait),
            LangItem::SizeOf => Target::AssocConst(AssocCtxt::Trait),
            LangItem::OffsetOf => Target::Fn,
            LangItem::StructuralPeq => Target::Trait,
            LangItem::Copy => Target::Trait,
            LangItem::Clone => Target::Trait,
            LangItem::CloneFn =>
                Target::Method(MethodKind::Trait { body: false }),
            LangItem::UseCloned => Target::Trait,
            LangItem::TrivialClone => Target::Trait,
            LangItem::Sync => Target::Trait,
            LangItem::DiscriminantKind => Target::Trait,
            LangItem::Discriminant => Target::AssocTy(AssocCtxt::Trait),
            LangItem::PointeeTrait => Target::Trait,
            LangItem::Metadata => Target::AssocTy(AssocCtxt::Trait),
            LangItem::DynMetadata => Target::Struct,
            LangItem::NonNull => Target::Struct,
            LangItem::Freeze => Target::Trait,
            LangItem::UnsafeUnpin => Target::Trait,
            LangItem::FnPtrTrait => Target::Trait,
            LangItem::FnPtrAsPtr =>
                Target::Method(MethodKind::Trait { body: false }),
            LangItem::FnPtrFromPtr =>
                Target::Method(MethodKind::Trait { body: false }),
            LangItem::Code => Target::ForeignTy,
            LangItem::Drop => Target::Trait,
            LangItem::Destruct => Target::Trait,
            LangItem::AsyncDrop => Target::Trait,
            LangItem::AsyncDropInPlace => Target::Fn,
            LangItem::CoerceUnsized => Target::Trait,
            LangItem::DispatchFromDyn => Target::Trait,
            LangItem::TryAsDyn => Target::Trait,
            LangItem::TransmuteOpts => Target::Struct,
            LangItem::TransmuteTrait => Target::Trait,
            LangItem::Add => Target::Trait,
            LangItem::Sub => Target::Trait,
            LangItem::Mul => Target::Trait,
            LangItem::Div => Target::Trait,
            LangItem::Rem => Target::Trait,
            LangItem::Neg => Target::Trait,
            LangItem::Not => Target::Trait,
            LangItem::BitXor => Target::Trait,
            LangItem::BitAnd => Target::Trait,
            LangItem::BitOr => Target::Trait,
            LangItem::Shl => Target::Trait,
            LangItem::Shr => Target::Trait,
            LangItem::AddAssign => Target::Trait,
            LangItem::SubAssign => Target::Trait,
            LangItem::MulAssign => Target::Trait,
            LangItem::DivAssign => Target::Trait,
            LangItem::RemAssign => Target::Trait,
            LangItem::BitXorAssign => Target::Trait,
            LangItem::BitAndAssign => Target::Trait,
            LangItem::BitOrAssign => Target::Trait,
            LangItem::ShlAssign => Target::Trait,
            LangItem::ShrAssign => Target::Trait,
            LangItem::Index => Target::Trait,
            LangItem::IndexMut => Target::Trait,
            LangItem::UnsafeCell => Target::Struct,
            LangItem::CovariantUnsafeCell => Target::Struct,
            LangItem::UnsafePinned => Target::Struct,
            LangItem::VaArgSafe => Target::Trait,
            LangItem::VaList => Target::Struct,
            LangItem::Complex => Target::Struct,
            LangItem::PpcF128 => Target::Struct,
            LangItem::Deref => Target::Trait,
            LangItem::DerefMut => Target::Trait,
            LangItem::DerefPure => Target::Trait,
            LangItem::DerefTarget => Target::AssocTy(AssocCtxt::Trait),
            LangItem::Receiver => Target::Trait,
            LangItem::ReceiverTarget => Target::AssocTy(AssocCtxt::Trait),
            LangItem::LegacyReceiver => Target::Trait,
            LangItem::Fn => Target::Trait,
            LangItem::FnMut => Target::Trait,
            LangItem::FnOnce => Target::Trait,
            LangItem::FnStatic => Target::Trait,
            LangItem::AsyncFn => Target::Trait,
            LangItem::AsyncFnMut => Target::Trait,
            LangItem::AsyncFnOnce => Target::Trait,
            LangItem::AsyncFnOnceOutput => Target::AssocTy(AssocCtxt::Trait),
            LangItem::CallOnceFuture => Target::AssocTy(AssocCtxt::Trait),
            LangItem::CallRefFuture => Target::AssocTy(AssocCtxt::Trait),
            LangItem::AsyncFnKindHelper => Target::Trait,
            LangItem::AsyncFnKindUpvars => Target::AssocTy(AssocCtxt::Trait),
            LangItem::FnOnceOutput => Target::AssocTy(AssocCtxt::Trait),
            LangItem::Iterator => Target::Trait,
            LangItem::FusedIterator => Target::Trait,
            LangItem::Future => Target::Trait,
            LangItem::FutureOutput => Target::AssocTy(AssocCtxt::Trait),
            LangItem::AsyncIterator => Target::Trait,
            LangItem::CoroutineState => Target::Enum,
            LangItem::Coroutine => Target::Trait,
            LangItem::CoroutineReturn => Target::AssocTy(AssocCtxt::Trait),
            LangItem::CoroutineYield => Target::AssocTy(AssocCtxt::Trait),
            LangItem::CoroutineResume =>
                Target::Method(MethodKind::Trait { body: false }),
            LangItem::Unpin => Target::Trait,
            LangItem::Pin => Target::Struct,
            LangItem::OrderingEnum => Target::Enum,
            LangItem::PartialEq => Target::Trait,
            LangItem::PartialOrd => Target::Trait,
            LangItem::CVoid => Target::Enum,
            LangItem::F16B => Target::Struct,
            LangItem::Type => Target::Struct,
            LangItem::TypeGeneric => Target::Enum,
            LangItem::TypeId => Target::Struct,
            LangItem::Panic => Target::Fn,
            LangItem::PanicNounwind => Target::Fn,
            LangItem::PanicFmt => Target::Fn,
            LangItem::PanicDisplay => Target::Fn,
            LangItem::ConstPanicFmt => Target::Fn,
            LangItem::PanicBoundsCheck => Target::Fn,
            LangItem::PanicMisalignedPointerDereference => Target::Fn,
            LangItem::PanicInfo => Target::Struct,
            LangItem::PanicLocation => Target::Struct,
            LangItem::PanicImpl => Target::ForeignFn,
            LangItem::PanicCannotUnwind => Target::Fn,
            LangItem::PanicInCleanup => Target::Fn,
            LangItem::PanicAddOverflow => Target::Fn,
            LangItem::PanicSubOverflow => Target::Fn,
            LangItem::PanicMulOverflow => Target::Fn,
            LangItem::PanicDivOverflow => Target::Fn,
            LangItem::PanicRemOverflow => Target::Fn,
            LangItem::PanicNegOverflow => Target::Fn,
            LangItem::PanicShrOverflow => Target::Fn,
            LangItem::PanicShlOverflow => Target::Fn,
            LangItem::PanicDivZero => Target::Fn,
            LangItem::PanicRemZero => Target::Fn,
            LangItem::PanicCoroutineResumed => Target::Fn,
            LangItem::PanicAsyncFnResumed => Target::Fn,
            LangItem::PanicAsyncGenFnResumed => Target::Fn,
            LangItem::PanicGenFnNone => Target::Fn,
            LangItem::PanicCoroutineResumedPanic => Target::Fn,
            LangItem::PanicAsyncFnResumedPanic => Target::Fn,
            LangItem::PanicAsyncGenFnResumedPanic => Target::Fn,
            LangItem::PanicGenFnNonePanic => Target::Fn,
            LangItem::PanicNullPointerDereference => Target::Fn,
            LangItem::PanicNullReferenceConstructed => Target::Fn,
            LangItem::PanicInvalidEnumConstruction => Target::Fn,
            LangItem::PanicCoroutineResumedDrop => Target::Fn,
            LangItem::PanicAsyncFnResumedDrop => Target::Fn,
            LangItem::PanicAsyncGenFnResumedDrop => Target::Fn,
            LangItem::PanicGenFnNoneDrop => Target::Fn,
            LangItem::BeginPanic => Target::Fn,
            LangItem::FormatArgument => Target::Struct,
            LangItem::FormatArguments => Target::Struct,
            LangItem::DropGlue => Target::Fn,
            LangItem::AllocLayout => Target::Struct,
            LangItem::Start => Target::Fn,
            LangItem::EhPersonality => Target::Fn,
            LangItem::CompilerMove => Target::Fn,
            LangItem::CompilerCopy => Target::Fn,
            LangItem::OwnedBox => Target::Struct,
            LangItem::GlobalAlloc => Target::Struct,
            LangItem::PhantomData => Target::Struct,
            LangItem::ManuallyDrop => Target::Struct,
            LangItem::MaybeDangling => Target::Struct,
            LangItem::BikeshedGuaranteedNoDrop => Target::Trait,
            LangItem::MaybeUninit => Target::Union,
            LangItem::Termination => Target::Trait,
            LangItem::Try => Target::Trait,
            LangItem::Tuple => Target::Trait,
            LangItem::SliceLen => Target::Method(MethodKind::Inherent),
            LangItem::TryTraitFromResidual =>
                Target::Method(MethodKind::Trait { body: false }),
            LangItem::TryTraitFromOutput =>
                Target::Method(MethodKind::Trait { body: false }),
            LangItem::TryTraitBranch =>
                Target::Method(MethodKind::Trait { body: false }),
            LangItem::TryTraitFromYeet => Target::Fn,
            LangItem::ResidualIntoTryType => Target::Fn,
            LangItem::CoercePointeeValidated => Target::Trait,
            LangItem::ConstParamTy => Target::Trait,
            LangItem::Poll => Target::Enum,
            LangItem::PollReady => Target::Variant,
            LangItem::PollPending => Target::Variant,
            LangItem::AsyncGenReady => Target::Method(MethodKind::Inherent),
            LangItem::AsyncGenPending =>
                Target::AssocConst(AssocCtxt::Impl { of_trait: false }),
            LangItem::AsyncGenFinished =>
                Target::AssocConst(AssocCtxt::Impl { of_trait: false }),
            LangItem::ResumeTy => Target::Struct,
            LangItem::GetContext => Target::Fn,
            LangItem::Context => Target::Struct,
            LangItem::FuturePoll =>
                Target::Method(MethodKind::Trait { body: false }),
            LangItem::AsyncIteratorPollNext =>
                Target::Method(MethodKind::Trait { body: false }),
            LangItem::IntoAsyncIterIntoIter =>
                Target::Method(MethodKind::Trait { body: false }),
            LangItem::Option => Target::Enum,
            LangItem::OptionSome => Target::Variant,
            LangItem::OptionNone => Target::Variant,
            LangItem::ResultOk => Target::Variant,
            LangItem::ResultErr => Target::Variant,
            LangItem::ControlFlowContinue => Target::Variant,
            LangItem::ControlFlowBreak => Target::Variant,
            LangItem::IntoFutureIntoFuture =>
                Target::Method(MethodKind::Trait { body: false }),
            LangItem::IntoIterIntoIter =>
                Target::Method(MethodKind::Trait { body: false }),
            LangItem::IteratorNext =>
                Target::Method(MethodKind::Trait { body: false }),
            LangItem::PinNewUnchecked => Target::Method(MethodKind::Inherent),
            LangItem::RangeFrom => Target::Struct,
            LangItem::RangeFull => Target::Struct,
            LangItem::RangeInclusiveStruct => Target::Struct,
            LangItem::RangeInclusiveNew =>
                Target::Method(MethodKind::Inherent),
            LangItem::Range => Target::Struct,
            LangItem::RangeToInclusive => Target::Struct,
            LangItem::RangeTo => Target::Struct,
            LangItem::RangeMax => Target::AssocConst(AssocCtxt::Trait),
            LangItem::RangeMin => Target::AssocConst(AssocCtxt::Trait),
            LangItem::RangeSub =>
                Target::Method(MethodKind::Trait { body: false }),
            LangItem::RangeFromCopy => Target::Struct,
            LangItem::RangeCopy => Target::Struct,
            LangItem::RangeInclusiveCopy => Target::Struct,
            LangItem::RangeToInclusiveCopy => Target::Struct,
            LangItem::String => Target::Struct,
            LangItem::CStr => Target::Struct,
            LangItem::ContractBuildCheckEnsures => Target::Fn,
            LangItem::ContractCheckRequires => Target::Fn,
            LangItem::DefaultTrait4 => Target::Trait,
            LangItem::DefaultTrait3 => Target::Trait,
            LangItem::DefaultTrait2 => Target::Trait,
            LangItem::DefaultTrait1 => Target::Trait,
            LangItem::ContractCheckEnsures => Target::Fn,
            LangItem::Reborrow => Target::Trait,
            LangItem::CoerceShared => Target::Trait,
            LangItem::FieldRepresentingType => Target::Struct,
            LangItem::Field => Target::Trait,
            LangItem::FieldBase => Target::AssocTy(AssocCtxt::Trait),
            LangItem::FieldType => Target::AssocTy(AssocCtxt::Trait),
            LangItem::FieldOffset => Target::AssocConst(AssocCtxt::Trait),
            LangItem::From => Target::Trait,
            LangItem::FromFn =>
                Target::Method(MethodKind::Trait { body: false }),
            LangItem::FnPtr => Target::Struct,
        }
    }
    pub fn required_generics(&self) -> GenericRequirement {
        match self {
            LangItem::Sized => GenericRequirement::Exact(0),
            LangItem::MetaSized => GenericRequirement::Exact(0),
            LangItem::PointeeSized => GenericRequirement::Exact(0),
            LangItem::Unsize => GenericRequirement::Minimum(1),
            LangItem::AlignOf => GenericRequirement::Exact(0),
            LangItem::SizeOf => GenericRequirement::Exact(0),
            LangItem::OffsetOf => GenericRequirement::Exact(1),
            LangItem::StructuralPeq => GenericRequirement::None,
            LangItem::Copy => GenericRequirement::Exact(0),
            LangItem::Clone => GenericRequirement::None,
            LangItem::CloneFn => GenericRequirement::None,
            LangItem::UseCloned => GenericRequirement::None,
            LangItem::TrivialClone => GenericRequirement::None,
            LangItem::Sync => GenericRequirement::Exact(0),
            LangItem::DiscriminantKind => GenericRequirement::None,
            LangItem::Discriminant => GenericRequirement::None,
            LangItem::PointeeTrait => GenericRequirement::None,
            LangItem::Metadata => GenericRequirement::None,
            LangItem::DynMetadata => GenericRequirement::None,
            LangItem::NonNull => GenericRequirement::Exact(1),
            LangItem::Freeze => GenericRequirement::Exact(0),
            LangItem::UnsafeUnpin => GenericRequirement::Exact(0),
            LangItem::FnPtrTrait => GenericRequirement::Exact(0),
            LangItem::FnPtrAsPtr => GenericRequirement::None,
            LangItem::FnPtrFromPtr => GenericRequirement::None,
            LangItem::Code => GenericRequirement::None,
            LangItem::Drop => GenericRequirement::None,
            LangItem::Destruct => GenericRequirement::None,
            LangItem::AsyncDrop => GenericRequirement::None,
            LangItem::AsyncDropInPlace => GenericRequirement::Exact(1),
            LangItem::CoerceUnsized => GenericRequirement::Minimum(1),
            LangItem::DispatchFromDyn => GenericRequirement::Minimum(1),
            LangItem::TryAsDyn => GenericRequirement::Exact(1),
            LangItem::TransmuteOpts => GenericRequirement::Exact(0),
            LangItem::TransmuteTrait => GenericRequirement::Exact(2),
            LangItem::Add => GenericRequirement::Exact(1),
            LangItem::Sub => GenericRequirement::Exact(1),
            LangItem::Mul => GenericRequirement::Exact(1),
            LangItem::Div => GenericRequirement::Exact(1),
            LangItem::Rem => GenericRequirement::Exact(1),
            LangItem::Neg => GenericRequirement::Exact(0),
            LangItem::Not => GenericRequirement::Exact(0),
            LangItem::BitXor => GenericRequirement::Exact(1),
            LangItem::BitAnd => GenericRequirement::Exact(1),
            LangItem::BitOr => GenericRequirement::Exact(1),
            LangItem::Shl => GenericRequirement::Exact(1),
            LangItem::Shr => GenericRequirement::Exact(1),
            LangItem::AddAssign => GenericRequirement::Exact(1),
            LangItem::SubAssign => GenericRequirement::Exact(1),
            LangItem::MulAssign => GenericRequirement::Exact(1),
            LangItem::DivAssign => GenericRequirement::Exact(1),
            LangItem::RemAssign => GenericRequirement::Exact(1),
            LangItem::BitXorAssign => GenericRequirement::Exact(1),
            LangItem::BitAndAssign => GenericRequirement::Exact(1),
            LangItem::BitOrAssign => GenericRequirement::Exact(1),
            LangItem::ShlAssign => GenericRequirement::Exact(1),
            LangItem::ShrAssign => GenericRequirement::Exact(1),
            LangItem::Index => GenericRequirement::Exact(1),
            LangItem::IndexMut => GenericRequirement::Exact(1),
            LangItem::UnsafeCell => GenericRequirement::None,
            LangItem::CovariantUnsafeCell => GenericRequirement::Exact(1),
            LangItem::UnsafePinned => GenericRequirement::None,
            LangItem::VaArgSafe => GenericRequirement::None,
            LangItem::VaList => GenericRequirement::None,
            LangItem::Complex => GenericRequirement::Exact(1),
            LangItem::PpcF128 => GenericRequirement::None,
            LangItem::Deref => GenericRequirement::Exact(0),
            LangItem::DerefMut => GenericRequirement::Exact(0),
            LangItem::DerefPure => GenericRequirement::Exact(0),
            LangItem::DerefTarget => GenericRequirement::None,
            LangItem::Receiver => GenericRequirement::None,
            LangItem::ReceiverTarget => GenericRequirement::None,
            LangItem::LegacyReceiver => GenericRequirement::None,
            LangItem::Fn => GenericRequirement::Exact(1),
            LangItem::FnMut => GenericRequirement::Exact(1),
            LangItem::FnOnce => GenericRequirement::Exact(1),
            LangItem::FnStatic => GenericRequirement::Exact(1),
            LangItem::AsyncFn => GenericRequirement::Exact(1),
            LangItem::AsyncFnMut => GenericRequirement::Exact(1),
            LangItem::AsyncFnOnce => GenericRequirement::Exact(1),
            LangItem::AsyncFnOnceOutput => GenericRequirement::Exact(1),
            LangItem::CallOnceFuture => GenericRequirement::Exact(1),
            LangItem::CallRefFuture => GenericRequirement::Exact(2),
            LangItem::AsyncFnKindHelper => GenericRequirement::Exact(1),
            LangItem::AsyncFnKindUpvars => GenericRequirement::Exact(5),
            LangItem::FnOnceOutput => GenericRequirement::None,
            LangItem::Iterator => GenericRequirement::Exact(0),
            LangItem::FusedIterator => GenericRequirement::Exact(0),
            LangItem::Future => GenericRequirement::Exact(0),
            LangItem::FutureOutput => GenericRequirement::Exact(0),
            LangItem::AsyncIterator => GenericRequirement::Exact(0),
            LangItem::CoroutineState => GenericRequirement::None,
            LangItem::Coroutine => GenericRequirement::Exact(1),
            LangItem::CoroutineReturn => GenericRequirement::Exact(1),
            LangItem::CoroutineYield => GenericRequirement::Exact(1),
            LangItem::CoroutineResume => GenericRequirement::None,
            LangItem::Unpin => GenericRequirement::None,
            LangItem::Pin => GenericRequirement::None,
            LangItem::OrderingEnum => GenericRequirement::Exact(0),
            LangItem::PartialEq => GenericRequirement::Exact(1),
            LangItem::PartialOrd => GenericRequirement::Exact(1),
            LangItem::CVoid => GenericRequirement::None,
            LangItem::F16B => GenericRequirement::Exact(0),
            LangItem::Type => GenericRequirement::None,
            LangItem::TypeGeneric => GenericRequirement::None,
            LangItem::TypeId => GenericRequirement::None,
            LangItem::Panic => GenericRequirement::Exact(0),
            LangItem::PanicNounwind => GenericRequirement::Exact(0),
            LangItem::PanicFmt => GenericRequirement::None,
            LangItem::PanicDisplay => GenericRequirement::None,
            LangItem::ConstPanicFmt => GenericRequirement::None,
            LangItem::PanicBoundsCheck => GenericRequirement::Exact(0),
            LangItem::PanicMisalignedPointerDereference =>
                GenericRequirement::Exact(0),
            LangItem::PanicInfo => GenericRequirement::None,
            LangItem::PanicLocation => GenericRequirement::None,
            LangItem::PanicImpl => GenericRequirement::None,
            LangItem::PanicCannotUnwind => GenericRequirement::Exact(0),
            LangItem::PanicInCleanup => GenericRequirement::Exact(0),
            LangItem::PanicAddOverflow => GenericRequirement::None,
            LangItem::PanicSubOverflow => GenericRequirement::None,
            LangItem::PanicMulOverflow => GenericRequirement::None,
            LangItem::PanicDivOverflow => GenericRequirement::None,
            LangItem::PanicRemOverflow => GenericRequirement::None,
            LangItem::PanicNegOverflow => GenericRequirement::None,
            LangItem::PanicShrOverflow => GenericRequirement::None,
            LangItem::PanicShlOverflow => GenericRequirement::None,
            LangItem::PanicDivZero => GenericRequirement::None,
            LangItem::PanicRemZero => GenericRequirement::None,
            LangItem::PanicCoroutineResumed => GenericRequirement::None,
            LangItem::PanicAsyncFnResumed => GenericRequirement::None,
            LangItem::PanicAsyncGenFnResumed => GenericRequirement::None,
            LangItem::PanicGenFnNone => GenericRequirement::None,
            LangItem::PanicCoroutineResumedPanic => GenericRequirement::None,
            LangItem::PanicAsyncFnResumedPanic => GenericRequirement::None,
            LangItem::PanicAsyncGenFnResumedPanic => GenericRequirement::None,
            LangItem::PanicGenFnNonePanic => GenericRequirement::None,
            LangItem::PanicNullPointerDereference => GenericRequirement::None,
            LangItem::PanicNullReferenceConstructed =>
                GenericRequirement::None,
            LangItem::PanicInvalidEnumConstruction =>
                GenericRequirement::None,
            LangItem::PanicCoroutineResumedDrop => GenericRequirement::None,
            LangItem::PanicAsyncFnResumedDrop => GenericRequirement::None,
            LangItem::PanicAsyncGenFnResumedDrop => GenericRequirement::None,
            LangItem::PanicGenFnNoneDrop => GenericRequirement::None,
            LangItem::BeginPanic => GenericRequirement::None,
            LangItem::FormatArgument => GenericRequirement::None,
            LangItem::FormatArguments => GenericRequirement::None,
            LangItem::DropGlue => GenericRequirement::Exact(1),
            LangItem::AllocLayout => GenericRequirement::None,
            LangItem::Start => GenericRequirement::Exact(1),
            LangItem::EhPersonality => GenericRequirement::None,
            LangItem::CompilerMove => GenericRequirement::Exact(2),
            LangItem::CompilerCopy => GenericRequirement::Exact(2),
            LangItem::OwnedBox => GenericRequirement::Minimum(1),
            LangItem::GlobalAlloc => GenericRequirement::None,
            LangItem::PhantomData => GenericRequirement::Exact(1),
            LangItem::ManuallyDrop => GenericRequirement::Exact(1),
            LangItem::MaybeDangling => GenericRequirement::Exact(1),
            LangItem::BikeshedGuaranteedNoDrop =>
                GenericRequirement::Exact(0),
            LangItem::MaybeUninit => GenericRequirement::None,
            LangItem::Termination => GenericRequirement::None,
            LangItem::Try => GenericRequirement::None,
            LangItem::Tuple => GenericRequirement::Exact(0),
            LangItem::SliceLen => GenericRequirement::None,
            LangItem::TryTraitFromResidual => GenericRequirement::None,
            LangItem::TryTraitFromOutput => GenericRequirement::None,
            LangItem::TryTraitBranch => GenericRequirement::None,
            LangItem::TryTraitFromYeet => GenericRequirement::None,
            LangItem::ResidualIntoTryType => GenericRequirement::None,
            LangItem::CoercePointeeValidated => GenericRequirement::Exact(0),
            LangItem::ConstParamTy => GenericRequirement::Exact(0),
            LangItem::Poll => GenericRequirement::None,
            LangItem::PollReady => GenericRequirement::None,
            LangItem::PollPending => GenericRequirement::None,
            LangItem::AsyncGenReady => GenericRequirement::Exact(1),
            LangItem::AsyncGenPending => GenericRequirement::Exact(1),
            LangItem::AsyncGenFinished => GenericRequirement::Exact(1),
            LangItem::ResumeTy => GenericRequirement::None,
            LangItem::GetContext => GenericRequirement::None,
            LangItem::Context => GenericRequirement::None,
            LangItem::FuturePoll => GenericRequirement::None,
            LangItem::AsyncIteratorPollNext => GenericRequirement::Exact(0),
            LangItem::IntoAsyncIterIntoIter => GenericRequirement::Exact(0),
            LangItem::Option => GenericRequirement::None,
            LangItem::OptionSome => GenericRequirement::None,
            LangItem::OptionNone => GenericRequirement::None,
            LangItem::ResultOk => GenericRequirement::None,
            LangItem::ResultErr => GenericRequirement::None,
            LangItem::ControlFlowContinue => GenericRequirement::None,
            LangItem::ControlFlowBreak => GenericRequirement::None,
            LangItem::IntoFutureIntoFuture => GenericRequirement::None,
            LangItem::IntoIterIntoIter => GenericRequirement::None,
            LangItem::IteratorNext => GenericRequirement::None,
            LangItem::PinNewUnchecked => GenericRequirement::None,
            LangItem::RangeFrom => GenericRequirement::None,
            LangItem::RangeFull => GenericRequirement::None,
            LangItem::RangeInclusiveStruct => GenericRequirement::None,
            LangItem::RangeInclusiveNew => GenericRequirement::None,
            LangItem::Range => GenericRequirement::None,
            LangItem::RangeToInclusive => GenericRequirement::None,
            LangItem::RangeTo => GenericRequirement::None,
            LangItem::RangeMax => GenericRequirement::Exact(0),
            LangItem::RangeMin => GenericRequirement::Exact(0),
            LangItem::RangeSub => GenericRequirement::Exact(0),
            LangItem::RangeFromCopy => GenericRequirement::None,
            LangItem::RangeCopy => GenericRequirement::None,
            LangItem::RangeInclusiveCopy => GenericRequirement::None,
            LangItem::RangeToInclusiveCopy => GenericRequirement::None,
            LangItem::String => GenericRequirement::None,
            LangItem::CStr => GenericRequirement::None,
            LangItem::ContractBuildCheckEnsures => GenericRequirement::None,
            LangItem::ContractCheckRequires => GenericRequirement::None,
            LangItem::DefaultTrait4 => GenericRequirement::None,
            LangItem::DefaultTrait3 => GenericRequirement::None,
            LangItem::DefaultTrait2 => GenericRequirement::None,
            LangItem::DefaultTrait1 => GenericRequirement::None,
            LangItem::ContractCheckEnsures => GenericRequirement::None,
            LangItem::Reborrow => GenericRequirement::Exact(0),
            LangItem::CoerceShared => GenericRequirement::Exact(1),
            LangItem::FieldRepresentingType => GenericRequirement::Exact(3),
            LangItem::Field => GenericRequirement::Exact(0),
            LangItem::FieldBase => GenericRequirement::Exact(0),
            LangItem::FieldType => GenericRequirement::Exact(0),
            LangItem::FieldOffset => GenericRequirement::Exact(0),
            LangItem::From => GenericRequirement::Exact(1),
            LangItem::FromFn => GenericRequirement::None,
            LangItem::FnPtr => GenericRequirement::None,
        }
    }
}
impl LanguageItems {
    #[doc =
    "Returns the [`DefId`] of the `sized` lang item if it is defined."]
    pub fn sized_trait(&self) -> Option<DefId> {
        self.items[LangItem::Sized as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `meta_sized` lang item if it is defined."]
    pub fn meta_sized_trait(&self) -> Option<DefId> {
        self.items[LangItem::MetaSized as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `pointee_sized` lang item if it is defined."]
    pub fn pointee_sized_trait(&self) -> Option<DefId> {
        self.items[LangItem::PointeeSized as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `unsize` lang item if it is defined."]
    pub fn unsize_trait(&self) -> Option<DefId> {
        self.items[LangItem::Unsize as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `mem_align_const` lang item if it is defined."]
    pub fn align_const(&self) -> Option<DefId> {
        self.items[LangItem::AlignOf as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `mem_size_const` lang item if it is defined."]
    pub fn size_const(&self) -> Option<DefId> {
        self.items[LangItem::SizeOf as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `offset_of` lang item if it is defined."]
    pub fn offset_of(&self) -> Option<DefId> {
        self.items[LangItem::OffsetOf as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `structural_peq` lang item if it is defined."]
    pub fn structural_peq_trait(&self) -> Option<DefId> {
        self.items[LangItem::StructuralPeq as usize]
    }
    #[doc = "Returns the [`DefId`] of the `copy` lang item if it is defined."]
    pub fn copy_trait(&self) -> Option<DefId> {
        self.items[LangItem::Copy as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `clone` lang item if it is defined."]
    pub fn clone_trait(&self) -> Option<DefId> {
        self.items[LangItem::Clone as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `clone_fn` lang item if it is defined."]
    pub fn clone_fn(&self) -> Option<DefId> {
        self.items[LangItem::CloneFn as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `use_cloned` lang item if it is defined."]
    pub fn use_cloned_trait(&self) -> Option<DefId> {
        self.items[LangItem::UseCloned as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `trivial_clone` lang item if it is defined."]
    pub fn trivial_clone_trait(&self) -> Option<DefId> {
        self.items[LangItem::TrivialClone as usize]
    }
    #[doc = "Returns the [`DefId`] of the `sync` lang item if it is defined."]
    pub fn sync_trait(&self) -> Option<DefId> {
        self.items[LangItem::Sync as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `discriminant_kind` lang item if it is defined."]
    pub fn discriminant_kind_trait(&self) -> Option<DefId> {
        self.items[LangItem::DiscriminantKind as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `discriminant_type` lang item if it is defined."]
    pub fn discriminant_type(&self) -> Option<DefId> {
        self.items[LangItem::Discriminant as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `pointee_trait` lang item if it is defined."]
    pub fn pointee_trait(&self) -> Option<DefId> {
        self.items[LangItem::PointeeTrait as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `metadata_type` lang item if it is defined."]
    pub fn metadata_type(&self) -> Option<DefId> {
        self.items[LangItem::Metadata as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `dyn_metadata` lang item if it is defined."]
    pub fn dyn_metadata(&self) -> Option<DefId> {
        self.items[LangItem::DynMetadata as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `non_null` lang item if it is defined."]
    pub fn non_null_trait(&self) -> Option<DefId> {
        self.items[LangItem::NonNull as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `freeze` lang item if it is defined."]
    pub fn freeze_trait(&self) -> Option<DefId> {
        self.items[LangItem::Freeze as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `unsafe_unpin` lang item if it is defined."]
    pub fn unsafe_unpin_trait(&self) -> Option<DefId> {
        self.items[LangItem::UnsafeUnpin as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `fn_ptr_trait` lang item if it is defined."]
    pub fn fn_ptr_trait(&self) -> Option<DefId> {
        self.items[LangItem::FnPtrTrait as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `fn_ptr_as_ptr` lang item if it is defined."]
    pub fn fn_ptr_as_ptr(&self) -> Option<DefId> {
        self.items[LangItem::FnPtrAsPtr as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `fn_ptr_from_ptr` lang item if it is defined."]
    pub fn fn_ptr_from_ptr(&self) -> Option<DefId> {
        self.items[LangItem::FnPtrFromPtr as usize]
    }
    #[doc = "Returns the [`DefId`] of the `code` lang item if it is defined."]
    pub fn code(&self) -> Option<DefId> {
        self.items[LangItem::Code as usize]
    }
    #[doc = "Returns the [`DefId`] of the `drop` lang item if it is defined."]
    pub fn drop_trait(&self) -> Option<DefId> {
        self.items[LangItem::Drop as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `destruct` lang item if it is defined."]
    pub fn destruct_trait(&self) -> Option<DefId> {
        self.items[LangItem::Destruct as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `async_drop` lang item if it is defined."]
    pub fn async_drop_trait(&self) -> Option<DefId> {
        self.items[LangItem::AsyncDrop as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `async_drop_in_place` lang item if it is defined."]
    pub fn async_drop_in_place_fn(&self) -> Option<DefId> {
        self.items[LangItem::AsyncDropInPlace as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `coerce_unsized` lang item if it is defined."]
    pub fn coerce_unsized_trait(&self) -> Option<DefId> {
        self.items[LangItem::CoerceUnsized as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `dispatch_from_dyn` lang item if it is defined."]
    pub fn dispatch_from_dyn_trait(&self) -> Option<DefId> {
        self.items[LangItem::DispatchFromDyn as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `try_as_dyn` lang item if it is defined."]
    pub fn try_as_dyn(&self) -> Option<DefId> {
        self.items[LangItem::TryAsDyn as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `transmute_opts` lang item if it is defined."]
    pub fn transmute_opts(&self) -> Option<DefId> {
        self.items[LangItem::TransmuteOpts as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `transmute_trait` lang item if it is defined."]
    pub fn transmute_trait(&self) -> Option<DefId> {
        self.items[LangItem::TransmuteTrait as usize]
    }
    #[doc = "Returns the [`DefId`] of the `add` lang item if it is defined."]
    pub fn add_trait(&self) -> Option<DefId> {
        self.items[LangItem::Add as usize]
    }
    #[doc = "Returns the [`DefId`] of the `sub` lang item if it is defined."]
    pub fn sub_trait(&self) -> Option<DefId> {
        self.items[LangItem::Sub as usize]
    }
    #[doc = "Returns the [`DefId`] of the `mul` lang item if it is defined."]
    pub fn mul_trait(&self) -> Option<DefId> {
        self.items[LangItem::Mul as usize]
    }
    #[doc = "Returns the [`DefId`] of the `div` lang item if it is defined."]
    pub fn div_trait(&self) -> Option<DefId> {
        self.items[LangItem::Div as usize]
    }
    #[doc = "Returns the [`DefId`] of the `rem` lang item if it is defined."]
    pub fn rem_trait(&self) -> Option<DefId> {
        self.items[LangItem::Rem as usize]
    }
    #[doc = "Returns the [`DefId`] of the `neg` lang item if it is defined."]
    pub fn neg_trait(&self) -> Option<DefId> {
        self.items[LangItem::Neg as usize]
    }
    #[doc = "Returns the [`DefId`] of the `not` lang item if it is defined."]
    pub fn not_trait(&self) -> Option<DefId> {
        self.items[LangItem::Not as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `bitxor` lang item if it is defined."]
    pub fn bitxor_trait(&self) -> Option<DefId> {
        self.items[LangItem::BitXor as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `bitand` lang item if it is defined."]
    pub fn bitand_trait(&self) -> Option<DefId> {
        self.items[LangItem::BitAnd as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `bitor` lang item if it is defined."]
    pub fn bitor_trait(&self) -> Option<DefId> {
        self.items[LangItem::BitOr as usize]
    }
    #[doc = "Returns the [`DefId`] of the `shl` lang item if it is defined."]
    pub fn shl_trait(&self) -> Option<DefId> {
        self.items[LangItem::Shl as usize]
    }
    #[doc = "Returns the [`DefId`] of the `shr` lang item if it is defined."]
    pub fn shr_trait(&self) -> Option<DefId> {
        self.items[LangItem::Shr as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `add_assign` lang item if it is defined."]
    pub fn add_assign_trait(&self) -> Option<DefId> {
        self.items[LangItem::AddAssign as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `sub_assign` lang item if it is defined."]
    pub fn sub_assign_trait(&self) -> Option<DefId> {
        self.items[LangItem::SubAssign as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `mul_assign` lang item if it is defined."]
    pub fn mul_assign_trait(&self) -> Option<DefId> {
        self.items[LangItem::MulAssign as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `div_assign` lang item if it is defined."]
    pub fn div_assign_trait(&self) -> Option<DefId> {
        self.items[LangItem::DivAssign as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `rem_assign` lang item if it is defined."]
    pub fn rem_assign_trait(&self) -> Option<DefId> {
        self.items[LangItem::RemAssign as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `bitxor_assign` lang item if it is defined."]
    pub fn bitxor_assign_trait(&self) -> Option<DefId> {
        self.items[LangItem::BitXorAssign as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `bitand_assign` lang item if it is defined."]
    pub fn bitand_assign_trait(&self) -> Option<DefId> {
        self.items[LangItem::BitAndAssign as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `bitor_assign` lang item if it is defined."]
    pub fn bitor_assign_trait(&self) -> Option<DefId> {
        self.items[LangItem::BitOrAssign as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `shl_assign` lang item if it is defined."]
    pub fn shl_assign_trait(&self) -> Option<DefId> {
        self.items[LangItem::ShlAssign as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `shr_assign` lang item if it is defined."]
    pub fn shr_assign_trait(&self) -> Option<DefId> {
        self.items[LangItem::ShrAssign as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `index` lang item if it is defined."]
    pub fn index_trait(&self) -> Option<DefId> {
        self.items[LangItem::Index as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `index_mut` lang item if it is defined."]
    pub fn index_mut_trait(&self) -> Option<DefId> {
        self.items[LangItem::IndexMut as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `unsafe_cell` lang item if it is defined."]
    pub fn unsafe_cell_type(&self) -> Option<DefId> {
        self.items[LangItem::UnsafeCell as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `covariant_unsafe_cell` lang item if it is defined."]
    pub fn covariant_unsafe_cell_type(&self) -> Option<DefId> {
        self.items[LangItem::CovariantUnsafeCell as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `unsafe_pinned` lang item if it is defined."]
    pub fn unsafe_pinned_type(&self) -> Option<DefId> {
        self.items[LangItem::UnsafePinned as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `va_arg_safe` lang item if it is defined."]
    pub fn va_arg_safe(&self) -> Option<DefId> {
        self.items[LangItem::VaArgSafe as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `va_list` lang item if it is defined."]
    pub fn va_list(&self) -> Option<DefId> {
        self.items[LangItem::VaList as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `complex` lang item if it is defined."]
    pub fn complex(&self) -> Option<DefId> {
        self.items[LangItem::Complex as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `ppcf128` lang item if it is defined."]
    pub fn ppcf128(&self) -> Option<DefId> {
        self.items[LangItem::PpcF128 as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `deref` lang item if it is defined."]
    pub fn deref_trait(&self) -> Option<DefId> {
        self.items[LangItem::Deref as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `deref_mut` lang item if it is defined."]
    pub fn deref_mut_trait(&self) -> Option<DefId> {
        self.items[LangItem::DerefMut as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `deref_pure` lang item if it is defined."]
    pub fn deref_pure_trait(&self) -> Option<DefId> {
        self.items[LangItem::DerefPure as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `deref_target` lang item if it is defined."]
    pub fn deref_target(&self) -> Option<DefId> {
        self.items[LangItem::DerefTarget as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `receiver` lang item if it is defined."]
    pub fn receiver_trait(&self) -> Option<DefId> {
        self.items[LangItem::Receiver as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `receiver_target` lang item if it is defined."]
    pub fn receiver_target(&self) -> Option<DefId> {
        self.items[LangItem::ReceiverTarget as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `legacy_receiver` lang item if it is defined."]
    pub fn legacy_receiver_trait(&self) -> Option<DefId> {
        self.items[LangItem::LegacyReceiver as usize]
    }
    #[doc = "Returns the [`DefId`] of the `Fn` lang item if it is defined."]
    pub fn fn_trait(&self) -> Option<DefId> {
        self.items[LangItem::Fn as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `fn_mut` lang item if it is defined."]
    pub fn fn_mut_trait(&self) -> Option<DefId> {
        self.items[LangItem::FnMut as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `fn_once` lang item if it is defined."]
    pub fn fn_once_trait(&self) -> Option<DefId> {
        self.items[LangItem::FnOnce as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `fn_static` lang item if it is defined."]
    pub fn fn_static_trait(&self) -> Option<DefId> {
        self.items[LangItem::FnStatic as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `async_fn` lang item if it is defined."]
    pub fn async_fn_trait(&self) -> Option<DefId> {
        self.items[LangItem::AsyncFn as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `async_fn_mut` lang item if it is defined."]
    pub fn async_fn_mut_trait(&self) -> Option<DefId> {
        self.items[LangItem::AsyncFnMut as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `async_fn_once` lang item if it is defined."]
    pub fn async_fn_once_trait(&self) -> Option<DefId> {
        self.items[LangItem::AsyncFnOnce as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `async_fn_once_output` lang item if it is defined."]
    pub fn async_fn_once_output(&self) -> Option<DefId> {
        self.items[LangItem::AsyncFnOnceOutput as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `call_once_future` lang item if it is defined."]
    pub fn call_once_future(&self) -> Option<DefId> {
        self.items[LangItem::CallOnceFuture as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `call_ref_future` lang item if it is defined."]
    pub fn call_ref_future(&self) -> Option<DefId> {
        self.items[LangItem::CallRefFuture as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `async_fn_kind_helper` lang item if it is defined."]
    pub fn async_fn_kind_helper(&self) -> Option<DefId> {
        self.items[LangItem::AsyncFnKindHelper as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `async_fn_kind_upvars` lang item if it is defined."]
    pub fn async_fn_kind_upvars(&self) -> Option<DefId> {
        self.items[LangItem::AsyncFnKindUpvars as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `fn_once_output` lang item if it is defined."]
    pub fn fn_once_output(&self) -> Option<DefId> {
        self.items[LangItem::FnOnceOutput as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `iterator` lang item if it is defined."]
    pub fn iterator_trait(&self) -> Option<DefId> {
        self.items[LangItem::Iterator as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `fused_iterator` lang item if it is defined."]
    pub fn fused_iterator_trait(&self) -> Option<DefId> {
        self.items[LangItem::FusedIterator as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `future_trait` lang item if it is defined."]
    pub fn future_trait(&self) -> Option<DefId> {
        self.items[LangItem::Future as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `future_output` lang item if it is defined."]
    pub fn future_output(&self) -> Option<DefId> {
        self.items[LangItem::FutureOutput as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `async_iterator` lang item if it is defined."]
    pub fn async_iterator_trait(&self) -> Option<DefId> {
        self.items[LangItem::AsyncIterator as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `coroutine_state` lang item if it is defined."]
    pub fn coroutine_state(&self) -> Option<DefId> {
        self.items[LangItem::CoroutineState as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `coroutine` lang item if it is defined."]
    pub fn coroutine_trait(&self) -> Option<DefId> {
        self.items[LangItem::Coroutine as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `coroutine_return` lang item if it is defined."]
    pub fn coroutine_return(&self) -> Option<DefId> {
        self.items[LangItem::CoroutineReturn as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `coroutine_yield` lang item if it is defined."]
    pub fn coroutine_yield(&self) -> Option<DefId> {
        self.items[LangItem::CoroutineYield as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `coroutine_resume` lang item if it is defined."]
    pub fn coroutine_resume(&self) -> Option<DefId> {
        self.items[LangItem::CoroutineResume as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `unpin` lang item if it is defined."]
    pub fn unpin_trait(&self) -> Option<DefId> {
        self.items[LangItem::Unpin as usize]
    }
    #[doc = "Returns the [`DefId`] of the `Pin` lang item if it is defined."]
    pub fn pin_type(&self) -> Option<DefId> {
        self.items[LangItem::Pin as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `Ordering` lang item if it is defined."]
    pub fn ordering_enum(&self) -> Option<DefId> {
        self.items[LangItem::OrderingEnum as usize]
    }
    #[doc = "Returns the [`DefId`] of the `eq` lang item if it is defined."]
    pub fn eq_trait(&self) -> Option<DefId> {
        self.items[LangItem::PartialEq as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `partial_ord` lang item if it is defined."]
    pub fn partial_ord_trait(&self) -> Option<DefId> {
        self.items[LangItem::PartialOrd as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `c_void` lang item if it is defined."]
    pub fn c_void(&self) -> Option<DefId> {
        self.items[LangItem::CVoid as usize]
    }
    #[doc = "Returns the [`DefId`] of the `f16b` lang item if it is defined."]
    pub fn f16b(&self) -> Option<DefId> {
        self.items[LangItem::F16B as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `type_info` lang item if it is defined."]
    pub fn type_struct(&self) -> Option<DefId> {
        self.items[LangItem::Type as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `type_info_generic` lang item if it is defined."]
    pub fn type_generic(&self) -> Option<DefId> {
        self.items[LangItem::TypeGeneric as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `type_id` lang item if it is defined."]
    pub fn type_id(&self) -> Option<DefId> {
        self.items[LangItem::TypeId as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `panic` lang item if it is defined."]
    pub fn panic_fn(&self) -> Option<DefId> {
        self.items[LangItem::Panic as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `panic_nounwind` lang item if it is defined."]
    pub fn panic_nounwind(&self) -> Option<DefId> {
        self.items[LangItem::PanicNounwind as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `panic_fmt` lang item if it is defined."]
    pub fn panic_fmt(&self) -> Option<DefId> {
        self.items[LangItem::PanicFmt as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `panic_display` lang item if it is defined."]
    pub fn panic_display(&self) -> Option<DefId> {
        self.items[LangItem::PanicDisplay as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `const_panic_fmt` lang item if it is defined."]
    pub fn const_panic_fmt(&self) -> Option<DefId> {
        self.items[LangItem::ConstPanicFmt as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `panic_bounds_check` lang item if it is defined."]
    pub fn panic_bounds_check_fn(&self) -> Option<DefId> {
        self.items[LangItem::PanicBoundsCheck as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `panic_misaligned_pointer_dereference` lang item if it is defined."]
    pub fn panic_misaligned_pointer_dereference_fn(&self) -> Option<DefId> {
        self.items[LangItem::PanicMisalignedPointerDereference as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `panic_info` lang item if it is defined."]
    pub fn panic_info(&self) -> Option<DefId> {
        self.items[LangItem::PanicInfo as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `panic_location` lang item if it is defined."]
    pub fn panic_location(&self) -> Option<DefId> {
        self.items[LangItem::PanicLocation as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `panic_impl` lang item if it is defined."]
    pub fn panic_impl(&self) -> Option<DefId> {
        self.items[LangItem::PanicImpl as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `panic_cannot_unwind` lang item if it is defined."]
    pub fn panic_cannot_unwind(&self) -> Option<DefId> {
        self.items[LangItem::PanicCannotUnwind as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `panic_in_cleanup` lang item if it is defined."]
    pub fn panic_in_cleanup(&self) -> Option<DefId> {
        self.items[LangItem::PanicInCleanup as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `panic_const_add_overflow` lang item if it is defined."]
    pub fn panic_const_add_overflow(&self) -> Option<DefId> {
        self.items[LangItem::PanicAddOverflow as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `panic_const_sub_overflow` lang item if it is defined."]
    pub fn panic_const_sub_overflow(&self) -> Option<DefId> {
        self.items[LangItem::PanicSubOverflow as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `panic_const_mul_overflow` lang item if it is defined."]
    pub fn panic_const_mul_overflow(&self) -> Option<DefId> {
        self.items[LangItem::PanicMulOverflow as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `panic_const_div_overflow` lang item if it is defined."]
    pub fn panic_const_div_overflow(&self) -> Option<DefId> {
        self.items[LangItem::PanicDivOverflow as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `panic_const_rem_overflow` lang item if it is defined."]
    pub fn panic_const_rem_overflow(&self) -> Option<DefId> {
        self.items[LangItem::PanicRemOverflow as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `panic_const_neg_overflow` lang item if it is defined."]
    pub fn panic_const_neg_overflow(&self) -> Option<DefId> {
        self.items[LangItem::PanicNegOverflow as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `panic_const_shr_overflow` lang item if it is defined."]
    pub fn panic_const_shr_overflow(&self) -> Option<DefId> {
        self.items[LangItem::PanicShrOverflow as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `panic_const_shl_overflow` lang item if it is defined."]
    pub fn panic_const_shl_overflow(&self) -> Option<DefId> {
        self.items[LangItem::PanicShlOverflow as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `panic_const_div_by_zero` lang item if it is defined."]
    pub fn panic_const_div_by_zero(&self) -> Option<DefId> {
        self.items[LangItem::PanicDivZero as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `panic_const_rem_by_zero` lang item if it is defined."]
    pub fn panic_const_rem_by_zero(&self) -> Option<DefId> {
        self.items[LangItem::PanicRemZero as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `panic_const_coroutine_resumed` lang item if it is defined."]
    pub fn panic_const_coroutine_resumed(&self) -> Option<DefId> {
        self.items[LangItem::PanicCoroutineResumed as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `panic_const_async_fn_resumed` lang item if it is defined."]
    pub fn panic_const_async_fn_resumed(&self) -> Option<DefId> {
        self.items[LangItem::PanicAsyncFnResumed as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `panic_const_async_gen_fn_resumed` lang item if it is defined."]
    pub fn panic_const_async_gen_fn_resumed(&self) -> Option<DefId> {
        self.items[LangItem::PanicAsyncGenFnResumed as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `panic_const_gen_fn_none` lang item if it is defined."]
    pub fn panic_const_gen_fn_none(&self) -> Option<DefId> {
        self.items[LangItem::PanicGenFnNone as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `panic_const_coroutine_resumed_panic` lang item if it is defined."]
    pub fn panic_const_coroutine_resumed_panic(&self) -> Option<DefId> {
        self.items[LangItem::PanicCoroutineResumedPanic as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `panic_const_async_fn_resumed_panic` lang item if it is defined."]
    pub fn panic_const_async_fn_resumed_panic(&self) -> Option<DefId> {
        self.items[LangItem::PanicAsyncFnResumedPanic as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `panic_const_async_gen_fn_resumed_panic` lang item if it is defined."]
    pub fn panic_const_async_gen_fn_resumed_panic(&self) -> Option<DefId> {
        self.items[LangItem::PanicAsyncGenFnResumedPanic as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `panic_const_gen_fn_none_panic` lang item if it is defined."]
    pub fn panic_const_gen_fn_none_panic(&self) -> Option<DefId> {
        self.items[LangItem::PanicGenFnNonePanic as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `panic_null_pointer_dereference` lang item if it is defined."]
    pub fn panic_null_pointer_dereference(&self) -> Option<DefId> {
        self.items[LangItem::PanicNullPointerDereference as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `panic_null_reference_constructed` lang item if it is defined."]
    pub fn panic_null_reference_constructed(&self) -> Option<DefId> {
        self.items[LangItem::PanicNullReferenceConstructed as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `panic_invalid_enum_construction` lang item if it is defined."]
    pub fn panic_invalid_enum_construction(&self) -> Option<DefId> {
        self.items[LangItem::PanicInvalidEnumConstruction as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `panic_const_coroutine_resumed_drop` lang item if it is defined."]
    pub fn panic_const_coroutine_resumed_drop(&self) -> Option<DefId> {
        self.items[LangItem::PanicCoroutineResumedDrop as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `panic_const_async_fn_resumed_drop` lang item if it is defined."]
    pub fn panic_const_async_fn_resumed_drop(&self) -> Option<DefId> {
        self.items[LangItem::PanicAsyncFnResumedDrop as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `panic_const_async_gen_fn_resumed_drop` lang item if it is defined."]
    pub fn panic_const_async_gen_fn_resumed_drop(&self) -> Option<DefId> {
        self.items[LangItem::PanicAsyncGenFnResumedDrop as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `panic_const_gen_fn_none_drop` lang item if it is defined."]
    pub fn panic_const_gen_fn_none_drop(&self) -> Option<DefId> {
        self.items[LangItem::PanicGenFnNoneDrop as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `begin_panic` lang item if it is defined."]
    pub fn begin_panic_fn(&self) -> Option<DefId> {
        self.items[LangItem::BeginPanic as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `format_argument` lang item if it is defined."]
    pub fn format_argument(&self) -> Option<DefId> {
        self.items[LangItem::FormatArgument as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `format_arguments` lang item if it is defined."]
    pub fn format_arguments(&self) -> Option<DefId> {
        self.items[LangItem::FormatArguments as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `drop_glue` lang item if it is defined."]
    pub fn drop_glue_fn(&self) -> Option<DefId> {
        self.items[LangItem::DropGlue as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `alloc_layout` lang item if it is defined."]
    pub fn alloc_layout(&self) -> Option<DefId> {
        self.items[LangItem::AllocLayout as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `start` lang item if it is defined."]
    pub fn start_fn(&self) -> Option<DefId> {
        self.items[LangItem::Start as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `eh_personality` lang item if it is defined."]
    pub fn eh_personality(&self) -> Option<DefId> {
        self.items[LangItem::EhPersonality as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `compiler_move` lang item if it is defined."]
    pub fn compiler_move_fn(&self) -> Option<DefId> {
        self.items[LangItem::CompilerMove as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `compiler_copy` lang item if it is defined."]
    pub fn compiler_copy_fn(&self) -> Option<DefId> {
        self.items[LangItem::CompilerCopy as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `owned_box` lang item if it is defined."]
    pub fn owned_box(&self) -> Option<DefId> {
        self.items[LangItem::OwnedBox as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `global_alloc_ty` lang item if it is defined."]
    pub fn global_alloc_ty(&self) -> Option<DefId> {
        self.items[LangItem::GlobalAlloc as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `phantom_data` lang item if it is defined."]
    pub fn phantom_data(&self) -> Option<DefId> {
        self.items[LangItem::PhantomData as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `manually_drop` lang item if it is defined."]
    pub fn manually_drop(&self) -> Option<DefId> {
        self.items[LangItem::ManuallyDrop as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `maybe_dangling` lang item if it is defined."]
    pub fn maybe_dangling(&self) -> Option<DefId> {
        self.items[LangItem::MaybeDangling as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `bikeshed_guaranteed_no_drop` lang item if it is defined."]
    pub fn bikeshed_guaranteed_no_drop(&self) -> Option<DefId> {
        self.items[LangItem::BikeshedGuaranteedNoDrop as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `maybe_uninit` lang item if it is defined."]
    pub fn maybe_uninit(&self) -> Option<DefId> {
        self.items[LangItem::MaybeUninit as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `termination` lang item if it is defined."]
    pub fn termination(&self) -> Option<DefId> {
        self.items[LangItem::Termination as usize]
    }
    #[doc = "Returns the [`DefId`] of the `Try` lang item if it is defined."]
    pub fn try_trait(&self) -> Option<DefId> {
        self.items[LangItem::Try as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `tuple_trait` lang item if it is defined."]
    pub fn tuple_trait(&self) -> Option<DefId> {
        self.items[LangItem::Tuple as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `slice_len_fn` lang item if it is defined."]
    pub fn slice_len_fn(&self) -> Option<DefId> {
        self.items[LangItem::SliceLen as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `from_residual` lang item if it is defined."]
    pub fn from_residual_fn(&self) -> Option<DefId> {
        self.items[LangItem::TryTraitFromResidual as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `from_output` lang item if it is defined."]
    pub fn from_output_fn(&self) -> Option<DefId> {
        self.items[LangItem::TryTraitFromOutput as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `branch` lang item if it is defined."]
    pub fn branch_fn(&self) -> Option<DefId> {
        self.items[LangItem::TryTraitBranch as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `from_yeet` lang item if it is defined."]
    pub fn from_yeet_fn(&self) -> Option<DefId> {
        self.items[LangItem::TryTraitFromYeet as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `into_try_type` lang item if it is defined."]
    pub fn into_try_type_fn(&self) -> Option<DefId> {
        self.items[LangItem::ResidualIntoTryType as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `coerce_pointee_validated` lang item if it is defined."]
    pub fn coerce_pointee_validated_trait(&self) -> Option<DefId> {
        self.items[LangItem::CoercePointeeValidated as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `const_param_ty` lang item if it is defined."]
    pub fn const_param_ty_trait(&self) -> Option<DefId> {
        self.items[LangItem::ConstParamTy as usize]
    }
    #[doc = "Returns the [`DefId`] of the `Poll` lang item if it is defined."]
    pub fn poll(&self) -> Option<DefId> {
        self.items[LangItem::Poll as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `Ready` lang item if it is defined."]
    pub fn poll_ready_variant(&self) -> Option<DefId> {
        self.items[LangItem::PollReady as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `Pending` lang item if it is defined."]
    pub fn poll_pending_variant(&self) -> Option<DefId> {
        self.items[LangItem::PollPending as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `AsyncGenReady` lang item if it is defined."]
    pub fn async_gen_ready(&self) -> Option<DefId> {
        self.items[LangItem::AsyncGenReady as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `AsyncGenPending` lang item if it is defined."]
    pub fn async_gen_pending(&self) -> Option<DefId> {
        self.items[LangItem::AsyncGenPending as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `AsyncGenFinished` lang item if it is defined."]
    pub fn async_gen_finished(&self) -> Option<DefId> {
        self.items[LangItem::AsyncGenFinished as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `ResumeTy` lang item if it is defined."]
    pub fn resume_ty(&self) -> Option<DefId> {
        self.items[LangItem::ResumeTy as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `get_context` lang item if it is defined."]
    pub fn get_context_fn(&self) -> Option<DefId> {
        self.items[LangItem::GetContext as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `Context` lang item if it is defined."]
    pub fn context(&self) -> Option<DefId> {
        self.items[LangItem::Context as usize]
    }
    #[doc = "Returns the [`DefId`] of the `poll` lang item if it is defined."]
    pub fn future_poll_fn(&self) -> Option<DefId> {
        self.items[LangItem::FuturePoll as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `async_iterator_poll_next` lang item if it is defined."]
    pub fn async_iterator_poll_next(&self) -> Option<DefId> {
        self.items[LangItem::AsyncIteratorPollNext as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `into_async_iter_into_iter` lang item if it is defined."]
    pub fn into_async_iter_into_iter(&self) -> Option<DefId> {
        self.items[LangItem::IntoAsyncIterIntoIter as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `Option` lang item if it is defined."]
    pub fn option_type(&self) -> Option<DefId> {
        self.items[LangItem::Option as usize]
    }
    #[doc = "Returns the [`DefId`] of the `Some` lang item if it is defined."]
    pub fn option_some_variant(&self) -> Option<DefId> {
        self.items[LangItem::OptionSome as usize]
    }
    #[doc = "Returns the [`DefId`] of the `None` lang item if it is defined."]
    pub fn option_none_variant(&self) -> Option<DefId> {
        self.items[LangItem::OptionNone as usize]
    }
    #[doc = "Returns the [`DefId`] of the `Ok` lang item if it is defined."]
    pub fn result_ok_variant(&self) -> Option<DefId> {
        self.items[LangItem::ResultOk as usize]
    }
    #[doc = "Returns the [`DefId`] of the `Err` lang item if it is defined."]
    pub fn result_err_variant(&self) -> Option<DefId> {
        self.items[LangItem::ResultErr as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `Continue` lang item if it is defined."]
    pub fn cf_continue_variant(&self) -> Option<DefId> {
        self.items[LangItem::ControlFlowContinue as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `Break` lang item if it is defined."]
    pub fn cf_break_variant(&self) -> Option<DefId> {
        self.items[LangItem::ControlFlowBreak as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `into_future` lang item if it is defined."]
    pub fn into_future_fn(&self) -> Option<DefId> {
        self.items[LangItem::IntoFutureIntoFuture as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `into_iter` lang item if it is defined."]
    pub fn into_iter_fn(&self) -> Option<DefId> {
        self.items[LangItem::IntoIterIntoIter as usize]
    }
    #[doc = "Returns the [`DefId`] of the `next` lang item if it is defined."]
    pub fn next_fn(&self) -> Option<DefId> {
        self.items[LangItem::IteratorNext as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `new_unchecked` lang item if it is defined."]
    pub fn new_unchecked_fn(&self) -> Option<DefId> {
        self.items[LangItem::PinNewUnchecked as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `RangeFrom` lang item if it is defined."]
    pub fn range_from_struct(&self) -> Option<DefId> {
        self.items[LangItem::RangeFrom as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `RangeFull` lang item if it is defined."]
    pub fn range_full_struct(&self) -> Option<DefId> {
        self.items[LangItem::RangeFull as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `RangeInclusive` lang item if it is defined."]
    pub fn range_inclusive_struct(&self) -> Option<DefId> {
        self.items[LangItem::RangeInclusiveStruct as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `range_inclusive_new` lang item if it is defined."]
    pub fn range_inclusive_new_method(&self) -> Option<DefId> {
        self.items[LangItem::RangeInclusiveNew as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `Range` lang item if it is defined."]
    pub fn range_struct(&self) -> Option<DefId> {
        self.items[LangItem::Range as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `RangeToInclusive` lang item if it is defined."]
    pub fn range_to_inclusive_struct(&self) -> Option<DefId> {
        self.items[LangItem::RangeToInclusive as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `RangeTo` lang item if it is defined."]
    pub fn range_to_struct(&self) -> Option<DefId> {
        self.items[LangItem::RangeTo as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `RangeMax` lang item if it is defined."]
    pub fn range_max(&self) -> Option<DefId> {
        self.items[LangItem::RangeMax as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `RangeMin` lang item if it is defined."]
    pub fn range_min(&self) -> Option<DefId> {
        self.items[LangItem::RangeMin as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `RangeSub` lang item if it is defined."]
    pub fn range_sub(&self) -> Option<DefId> {
        self.items[LangItem::RangeSub as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `RangeFromCopy` lang item if it is defined."]
    pub fn range_from_copy_struct(&self) -> Option<DefId> {
        self.items[LangItem::RangeFromCopy as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `RangeCopy` lang item if it is defined."]
    pub fn range_copy_struct(&self) -> Option<DefId> {
        self.items[LangItem::RangeCopy as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `RangeInclusiveCopy` lang item if it is defined."]
    pub fn range_inclusive_copy_struct(&self) -> Option<DefId> {
        self.items[LangItem::RangeInclusiveCopy as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `RangeToInclusiveCopy` lang item if it is defined."]
    pub fn range_to_inclusive_copy_struct(&self) -> Option<DefId> {
        self.items[LangItem::RangeToInclusiveCopy as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `String` lang item if it is defined."]
    pub fn string(&self) -> Option<DefId> {
        self.items[LangItem::String as usize]
    }
    #[doc = "Returns the [`DefId`] of the `CStr` lang item if it is defined."]
    pub fn c_str(&self) -> Option<DefId> {
        self.items[LangItem::CStr as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `contract_build_check_ensures` lang item if it is defined."]
    pub fn contract_build_check_ensures_fn(&self) -> Option<DefId> {
        self.items[LangItem::ContractBuildCheckEnsures as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `contract_check_requires` lang item if it is defined."]
    pub fn contract_check_requires_fn(&self) -> Option<DefId> {
        self.items[LangItem::ContractCheckRequires as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `default_trait4` lang item if it is defined."]
    pub fn default_trait4_trait(&self) -> Option<DefId> {
        self.items[LangItem::DefaultTrait4 as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `default_trait3` lang item if it is defined."]
    pub fn default_trait3_trait(&self) -> Option<DefId> {
        self.items[LangItem::DefaultTrait3 as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `default_trait2` lang item if it is defined."]
    pub fn default_trait2_trait(&self) -> Option<DefId> {
        self.items[LangItem::DefaultTrait2 as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `default_trait1` lang item if it is defined."]
    pub fn default_trait1_trait(&self) -> Option<DefId> {
        self.items[LangItem::DefaultTrait1 as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `contract_check_ensures` lang item if it is defined."]
    pub fn contract_check_ensures_fn(&self) -> Option<DefId> {
        self.items[LangItem::ContractCheckEnsures as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `reborrow` lang item if it is defined."]
    pub fn reborrow(&self) -> Option<DefId> {
        self.items[LangItem::Reborrow as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `coerce_shared` lang item if it is defined."]
    pub fn coerce_shared(&self) -> Option<DefId> {
        self.items[LangItem::CoerceShared as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `field_representing_type` lang item if it is defined."]
    pub fn field_representing_type(&self) -> Option<DefId> {
        self.items[LangItem::FieldRepresentingType as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `field` lang item if it is defined."]
    pub fn field(&self) -> Option<DefId> {
        self.items[LangItem::Field as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `field_base` lang item if it is defined."]
    pub fn field_base(&self) -> Option<DefId> {
        self.items[LangItem::FieldBase as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `field_type` lang item if it is defined."]
    pub fn field_type(&self) -> Option<DefId> {
        self.items[LangItem::FieldType as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `field_offset` lang item if it is defined."]
    pub fn field_offset(&self) -> Option<DefId> {
        self.items[LangItem::FieldOffset as usize]
    }
    #[doc = "Returns the [`DefId`] of the `From` lang item if it is defined."]
    pub fn from_trait(&self) -> Option<DefId> {
        self.items[LangItem::From as usize]
    }
    #[doc = "Returns the [`DefId`] of the `from` lang item if it is defined."]
    pub fn from_fn(&self) -> Option<DefId> {
        self.items[LangItem::FromFn as usize]
    }
    #[doc =
    "Returns the [`DefId`] of the `FnPtr` lang item if it is defined."]
    pub fn fn_ptr(&self) -> Option<DefId> {
        self.items[LangItem::FnPtr as usize]
    }
}language_item_table! {
159//  Variant name,            Name,                     Getter method name,         Target                  Generic requirements;
160    Sized,                   sym::sized,               sized_trait,                Target::Trait,          GenericRequirement::Exact(0);
161    MetaSized,               sym::meta_sized,          meta_sized_trait,           Target::Trait,          GenericRequirement::Exact(0);
162    PointeeSized,            sym::pointee_sized,       pointee_sized_trait,        Target::Trait,          GenericRequirement::Exact(0);
163    Unsize,                  sym::unsize,              unsize_trait,               Target::Trait,          GenericRequirement::Minimum(1);
164    AlignOf,                 sym::mem_align_const,     align_const,                Target::AssocConst(AssocCtxt::Trait),     GenericRequirement::Exact(0);
165    SizeOf,                  sym::mem_size_const,      size_const,                 Target::AssocConst(AssocCtxt::Trait),     GenericRequirement::Exact(0);
166    OffsetOf,                sym::offset_of,           offset_of,                  Target::Fn,             GenericRequirement::Exact(1);
167    /// Trait injected by `#[derive(PartialEq)]`, (i.e. "Partial EQ").
168    StructuralPeq,           sym::structural_peq,      structural_peq_trait,       Target::Trait,          GenericRequirement::None;
169    Copy,                    sym::copy,                copy_trait,                 Target::Trait,          GenericRequirement::Exact(0);
170    Clone,                   sym::clone,               clone_trait,                Target::Trait,          GenericRequirement::None;
171    CloneFn,                 sym::clone_fn,            clone_fn,                   Target::Method(MethodKind::Trait { body: false }), GenericRequirement::None;
172    UseCloned,               sym::use_cloned,          use_cloned_trait,           Target::Trait,          GenericRequirement::None;
173    TrivialClone,            sym::trivial_clone,       trivial_clone_trait,        Target::Trait,          GenericRequirement::None;
174    Sync,                    sym::sync,                sync_trait,                 Target::Trait,          GenericRequirement::Exact(0);
175    DiscriminantKind,        sym::discriminant_kind,   discriminant_kind_trait,    Target::Trait,          GenericRequirement::None;
176    /// The associated item of the `DiscriminantKind` trait.
177    Discriminant,            sym::discriminant_type,   discriminant_type,          Target::AssocTy(AssocCtxt::Trait),        GenericRequirement::None;
178
179    PointeeTrait,            sym::pointee_trait,       pointee_trait,              Target::Trait,          GenericRequirement::None;
180    Metadata,                sym::metadata_type,       metadata_type,              Target::AssocTy(AssocCtxt::Trait),        GenericRequirement::None;
181    DynMetadata,             sym::dyn_metadata,        dyn_metadata,               Target::Struct,         GenericRequirement::None;
182
183    NonNull,                 sym::non_null,            non_null_trait,             Target::Struct,         GenericRequirement::Exact(1);
184
185    Freeze,                  sym::freeze,              freeze_trait,               Target::Trait,          GenericRequirement::Exact(0);
186    UnsafeUnpin,             sym::unsafe_unpin,        unsafe_unpin_trait,         Target::Trait,          GenericRequirement::Exact(0);
187
188    FnPtrTrait,              sym::fn_ptr_trait,        fn_ptr_trait,               Target::Trait,          GenericRequirement::Exact(0);
189    FnPtrAsPtr,              sym::fn_ptr_as_ptr,       fn_ptr_as_ptr,              Target::Method(MethodKind::Trait { body: false }), GenericRequirement::None;
190    FnPtrFromPtr,            sym::fn_ptr_from_ptr,     fn_ptr_from_ptr,            Target::Method(MethodKind::Trait { body: false }), GenericRequirement::None;
191    Code,                    sym::code,                code,                       Target::ForeignTy,      GenericRequirement::None;
192
193    Drop,                    sym::drop,                drop_trait,                 Target::Trait,          GenericRequirement::None;
194    Destruct,                sym::destruct,            destruct_trait,             Target::Trait,          GenericRequirement::None;
195    AsyncDrop,               sym::async_drop,          async_drop_trait,           Target::Trait,          GenericRequirement::None;
196    AsyncDropInPlace,        sym::async_drop_in_place, async_drop_in_place_fn,     Target::Fn,             GenericRequirement::Exact(1);
197
198    CoerceUnsized,           sym::coerce_unsized,      coerce_unsized_trait,       Target::Trait,          GenericRequirement::Minimum(1);
199    DispatchFromDyn,         sym::dispatch_from_dyn,   dispatch_from_dyn_trait,    Target::Trait,          GenericRequirement::Minimum(1);
200
201    TryAsDyn,                sym::try_as_dyn,          try_as_dyn,                 Target::Trait,          GenericRequirement::Exact(1);
202
203    // lang items relating to transmutability
204    TransmuteOpts,           sym::transmute_opts,      transmute_opts,             Target::Struct,         GenericRequirement::Exact(0);
205    TransmuteTrait,          sym::transmute_trait,     transmute_trait,            Target::Trait,          GenericRequirement::Exact(2);
206
207    Add,                     sym::add,                 add_trait,                  Target::Trait,          GenericRequirement::Exact(1);
208    Sub,                     sym::sub,                 sub_trait,                  Target::Trait,          GenericRequirement::Exact(1);
209    Mul,                     sym::mul,                 mul_trait,                  Target::Trait,          GenericRequirement::Exact(1);
210    Div,                     sym::div,                 div_trait,                  Target::Trait,          GenericRequirement::Exact(1);
211    Rem,                     sym::rem,                 rem_trait,                  Target::Trait,          GenericRequirement::Exact(1);
212    Neg,                     sym::neg,                 neg_trait,                  Target::Trait,          GenericRequirement::Exact(0);
213    Not,                     sym::not,                 not_trait,                  Target::Trait,          GenericRequirement::Exact(0);
214    BitXor,                  sym::bitxor,              bitxor_trait,               Target::Trait,          GenericRequirement::Exact(1);
215    BitAnd,                  sym::bitand,              bitand_trait,               Target::Trait,          GenericRequirement::Exact(1);
216    BitOr,                   sym::bitor,               bitor_trait,                Target::Trait,          GenericRequirement::Exact(1);
217    Shl,                     sym::shl,                 shl_trait,                  Target::Trait,          GenericRequirement::Exact(1);
218    Shr,                     sym::shr,                 shr_trait,                  Target::Trait,          GenericRequirement::Exact(1);
219    AddAssign,               sym::add_assign,          add_assign_trait,           Target::Trait,          GenericRequirement::Exact(1);
220    SubAssign,               sym::sub_assign,          sub_assign_trait,           Target::Trait,          GenericRequirement::Exact(1);
221    MulAssign,               sym::mul_assign,          mul_assign_trait,           Target::Trait,          GenericRequirement::Exact(1);
222    DivAssign,               sym::div_assign,          div_assign_trait,           Target::Trait,          GenericRequirement::Exact(1);
223    RemAssign,               sym::rem_assign,          rem_assign_trait,           Target::Trait,          GenericRequirement::Exact(1);
224    BitXorAssign,            sym::bitxor_assign,       bitxor_assign_trait,        Target::Trait,          GenericRequirement::Exact(1);
225    BitAndAssign,            sym::bitand_assign,       bitand_assign_trait,        Target::Trait,          GenericRequirement::Exact(1);
226    BitOrAssign,             sym::bitor_assign,        bitor_assign_trait,         Target::Trait,          GenericRequirement::Exact(1);
227    ShlAssign,               sym::shl_assign,          shl_assign_trait,           Target::Trait,          GenericRequirement::Exact(1);
228    ShrAssign,               sym::shr_assign,          shr_assign_trait,           Target::Trait,          GenericRequirement::Exact(1);
229    Index,                   sym::index,               index_trait,                Target::Trait,          GenericRequirement::Exact(1);
230    IndexMut,                sym::index_mut,           index_mut_trait,            Target::Trait,          GenericRequirement::Exact(1);
231
232    UnsafeCell,              sym::unsafe_cell,         unsafe_cell_type,           Target::Struct,         GenericRequirement::None;
233    CovariantUnsafeCell,   sym::covariant_unsafe_cell, covariant_unsafe_cell_type, Target::Struct,         GenericRequirement::Exact(1);
234    UnsafePinned,            sym::unsafe_pinned,       unsafe_pinned_type,         Target::Struct,         GenericRequirement::None;
235
236    VaArgSafe,               sym::va_arg_safe,         va_arg_safe,                Target::Trait,          GenericRequirement::None;
237    VaList,                  sym::va_list,             va_list,                    Target::Struct,         GenericRequirement::None;
238
239    Complex,                 sym::complex,             complex,                    Target::Struct,         GenericRequirement::Exact(1);
240    PpcF128,                 sym::ppcf128,             ppcf128,                    Target::Struct,         GenericRequirement::None;
241
242    Deref,                   sym::deref,               deref_trait,                Target::Trait,          GenericRequirement::Exact(0);
243    DerefMut,                sym::deref_mut,           deref_mut_trait,            Target::Trait,          GenericRequirement::Exact(0);
244    DerefPure,               sym::deref_pure,          deref_pure_trait,           Target::Trait,          GenericRequirement::Exact(0);
245    DerefTarget,             sym::deref_target,        deref_target,               Target::AssocTy(AssocCtxt::Trait),        GenericRequirement::None;
246    Receiver,                sym::receiver,            receiver_trait,             Target::Trait,          GenericRequirement::None;
247    ReceiverTarget,          sym::receiver_target,     receiver_target,            Target::AssocTy(AssocCtxt::Trait),        GenericRequirement::None;
248    LegacyReceiver,          sym::legacy_receiver,     legacy_receiver_trait,      Target::Trait,          GenericRequirement::None;
249
250    Fn,                      kw::Fn,                   fn_trait,                   Target::Trait,          GenericRequirement::Exact(1);
251    FnMut,                   sym::fn_mut,              fn_mut_trait,               Target::Trait,          GenericRequirement::Exact(1);
252    FnOnce,                  sym::fn_once,             fn_once_trait,              Target::Trait,          GenericRequirement::Exact(1);
253    FnStatic,                sym::fn_static,           fn_static_trait,            Target::Trait,          GenericRequirement::Exact(1);
254
255    AsyncFn,                 sym::async_fn,            async_fn_trait,             Target::Trait,          GenericRequirement::Exact(1);
256    AsyncFnMut,              sym::async_fn_mut,        async_fn_mut_trait,         Target::Trait,          GenericRequirement::Exact(1);
257    AsyncFnOnce,             sym::async_fn_once,       async_fn_once_trait,        Target::Trait,          GenericRequirement::Exact(1);
258    AsyncFnOnceOutput,       sym::async_fn_once_output, async_fn_once_output,       Target::AssocTy(AssocCtxt::Trait),        GenericRequirement::Exact(1);
259    CallOnceFuture,          sym::call_once_future,    call_once_future,           Target::AssocTy(AssocCtxt::Trait),        GenericRequirement::Exact(1);
260    CallRefFuture,           sym::call_ref_future,     call_ref_future,            Target::AssocTy(AssocCtxt::Trait),        GenericRequirement::Exact(2);
261    AsyncFnKindHelper,       sym::async_fn_kind_helper, async_fn_kind_helper,      Target::Trait,          GenericRequirement::Exact(1);
262    AsyncFnKindUpvars,       sym::async_fn_kind_upvars, async_fn_kind_upvars,      Target::AssocTy(AssocCtxt::Trait),          GenericRequirement::Exact(5);
263
264    FnOnceOutput,            sym::fn_once_output,      fn_once_output,             Target::AssocTy(AssocCtxt::Trait),        GenericRequirement::None;
265
266    Iterator,                sym::iterator,            iterator_trait,             Target::Trait,          GenericRequirement::Exact(0);
267    FusedIterator,           sym::fused_iterator,      fused_iterator_trait,       Target::Trait,          GenericRequirement::Exact(0);
268    Future,                  sym::future_trait,        future_trait,               Target::Trait,          GenericRequirement::Exact(0);
269    FutureOutput,            sym::future_output,       future_output,              Target::AssocTy(AssocCtxt::Trait),        GenericRequirement::Exact(0);
270    AsyncIterator,           sym::async_iterator,      async_iterator_trait,       Target::Trait,          GenericRequirement::Exact(0);
271
272    CoroutineState,          sym::coroutine_state,     coroutine_state,            Target::Enum,           GenericRequirement::None;
273    Coroutine,               sym::coroutine,           coroutine_trait,            Target::Trait,          GenericRequirement::Exact(1);
274    CoroutineReturn,         sym::coroutine_return,    coroutine_return,           Target::AssocTy(AssocCtxt::Trait),        GenericRequirement::Exact(1);
275    CoroutineYield,          sym::coroutine_yield,     coroutine_yield,            Target::AssocTy(AssocCtxt::Trait),        GenericRequirement::Exact(1);
276    CoroutineResume,         sym::coroutine_resume,    coroutine_resume,           Target::Method(MethodKind::Trait { body: false }), GenericRequirement::None;
277
278    Unpin,                   sym::unpin,               unpin_trait,                Target::Trait,          GenericRequirement::None;
279    Pin,                     kw::Pin,                  pin_type,                   Target::Struct,         GenericRequirement::None;
280
281    OrderingEnum,            sym::Ordering,            ordering_enum,              Target::Enum,           GenericRequirement::Exact(0);
282    PartialEq,               sym::eq,                  eq_trait,                   Target::Trait,          GenericRequirement::Exact(1);
283    PartialOrd,              sym::partial_ord,         partial_ord_trait,          Target::Trait,          GenericRequirement::Exact(1);
284    CVoid,                   sym::c_void,              c_void,                     Target::Enum,           GenericRequirement::None;
285    F16B,                    sym::f16b,                f16b,                       Target::Struct,         GenericRequirement::Exact(0);
286
287    Type,                    sym::type_info,           type_struct,                Target::Struct,         GenericRequirement::None;
288    TypeGeneric,             sym::type_info_generic,   type_generic,               Target::Enum,         GenericRequirement::None;
289    TypeId,                  sym::type_id,             type_id,                    Target::Struct,         GenericRequirement::None;
290
291    // A number of panic-related lang items. The `panic` item corresponds to divide-by-zero and
292    // various panic cases with `match`. The `panic_bounds_check` item is for indexing arrays.
293    //
294    // The `begin_unwind` lang item has a predefined symbol name and is sort of a "weak lang item"
295    // in the sense that a crate is not required to have it defined to use it, but a final product
296    // is required to define it somewhere. Additionally, there are restrictions on crates that use
297    // a weak lang item, but do not have it defined.
298    Panic,                   sym::panic,               panic_fn,                   Target::Fn,             GenericRequirement::Exact(0);
299    PanicNounwind,           sym::panic_nounwind,      panic_nounwind,             Target::Fn,             GenericRequirement::Exact(0);
300    PanicFmt,                sym::panic_fmt,           panic_fmt,                  Target::Fn,             GenericRequirement::None;
301    PanicDisplay,            sym::panic_display,       panic_display,              Target::Fn,             GenericRequirement::None;
302    ConstPanicFmt,           sym::const_panic_fmt,     const_panic_fmt,            Target::Fn,             GenericRequirement::None;
303    PanicBoundsCheck,        sym::panic_bounds_check,  panic_bounds_check_fn,      Target::Fn,             GenericRequirement::Exact(0);
304    PanicMisalignedPointerDereference, sym::panic_misaligned_pointer_dereference, panic_misaligned_pointer_dereference_fn, Target::Fn, GenericRequirement::Exact(0);
305    PanicInfo,               sym::panic_info,          panic_info,                 Target::Struct,         GenericRequirement::None;
306    PanicLocation,           sym::panic_location,      panic_location,             Target::Struct,         GenericRequirement::None;
307    PanicImpl,               sym::panic_impl,          panic_impl,                 Target::ForeignFn,      GenericRequirement::None;
308    PanicCannotUnwind,       sym::panic_cannot_unwind, panic_cannot_unwind,        Target::Fn,             GenericRequirement::Exact(0);
309    PanicInCleanup,          sym::panic_in_cleanup,    panic_in_cleanup,           Target::Fn,             GenericRequirement::Exact(0);
310    /// Constant panic messages, used for codegen of MIR asserts.
311    PanicAddOverflow,        sym::panic_const_add_overflow, panic_const_add_overflow, Target::Fn, GenericRequirement::None;
312    PanicSubOverflow,        sym::panic_const_sub_overflow, panic_const_sub_overflow, Target::Fn, GenericRequirement::None;
313    PanicMulOverflow,        sym::panic_const_mul_overflow, panic_const_mul_overflow, Target::Fn, GenericRequirement::None;
314    PanicDivOverflow,        sym::panic_const_div_overflow, panic_const_div_overflow, Target::Fn, GenericRequirement::None;
315    PanicRemOverflow,        sym::panic_const_rem_overflow, panic_const_rem_overflow, Target::Fn, GenericRequirement::None;
316    PanicNegOverflow,        sym::panic_const_neg_overflow, panic_const_neg_overflow, Target::Fn, GenericRequirement::None;
317    PanicShrOverflow,        sym::panic_const_shr_overflow, panic_const_shr_overflow, Target::Fn, GenericRequirement::None;
318    PanicShlOverflow,        sym::panic_const_shl_overflow, panic_const_shl_overflow, Target::Fn, GenericRequirement::None;
319    PanicDivZero,            sym::panic_const_div_by_zero, panic_const_div_by_zero, Target::Fn, GenericRequirement::None;
320    PanicRemZero,            sym::panic_const_rem_by_zero, panic_const_rem_by_zero, Target::Fn, GenericRequirement::None;
321    PanicCoroutineResumed, sym::panic_const_coroutine_resumed, panic_const_coroutine_resumed, Target::Fn, GenericRequirement::None;
322    PanicAsyncFnResumed, sym::panic_const_async_fn_resumed, panic_const_async_fn_resumed, Target::Fn, GenericRequirement::None;
323    PanicAsyncGenFnResumed, sym::panic_const_async_gen_fn_resumed, panic_const_async_gen_fn_resumed, Target::Fn, GenericRequirement::None;
324    PanicGenFnNone, sym::panic_const_gen_fn_none, panic_const_gen_fn_none, Target::Fn, GenericRequirement::None;
325    PanicCoroutineResumedPanic, sym::panic_const_coroutine_resumed_panic, panic_const_coroutine_resumed_panic, Target::Fn, GenericRequirement::None;
326    PanicAsyncFnResumedPanic, sym::panic_const_async_fn_resumed_panic, panic_const_async_fn_resumed_panic, Target::Fn, GenericRequirement::None;
327    PanicAsyncGenFnResumedPanic, sym::panic_const_async_gen_fn_resumed_panic, panic_const_async_gen_fn_resumed_panic, Target::Fn, GenericRequirement::None;
328    PanicGenFnNonePanic, sym::panic_const_gen_fn_none_panic, panic_const_gen_fn_none_panic, Target::Fn, GenericRequirement::None;
329    PanicNullPointerDereference, sym::panic_null_pointer_dereference, panic_null_pointer_dereference, Target::Fn, GenericRequirement::None;
330    PanicNullReferenceConstructed, sym::panic_null_reference_constructed, panic_null_reference_constructed, Target::Fn, GenericRequirement::None;
331    PanicInvalidEnumConstruction, sym::panic_invalid_enum_construction, panic_invalid_enum_construction, Target::Fn, GenericRequirement::None;
332    PanicCoroutineResumedDrop, sym::panic_const_coroutine_resumed_drop, panic_const_coroutine_resumed_drop, Target::Fn, GenericRequirement::None;
333    PanicAsyncFnResumedDrop, sym::panic_const_async_fn_resumed_drop, panic_const_async_fn_resumed_drop, Target::Fn, GenericRequirement::None;
334    PanicAsyncGenFnResumedDrop, sym::panic_const_async_gen_fn_resumed_drop, panic_const_async_gen_fn_resumed_drop, Target::Fn, GenericRequirement::None;
335    PanicGenFnNoneDrop, sym::panic_const_gen_fn_none_drop, panic_const_gen_fn_none_drop, Target::Fn, GenericRequirement::None;
336    /// libstd panic entry point. Necessary for const eval to be able to catch it
337    BeginPanic,              sym::begin_panic,         begin_panic_fn,             Target::Fn,             GenericRequirement::None;
338
339    // Lang items needed for `format_args!()`.
340    FormatArgument,          sym::format_argument,     format_argument,            Target::Struct,         GenericRequirement::None;
341    FormatArguments,         sym::format_arguments,    format_arguments,           Target::Struct,         GenericRequirement::None;
342
343    // Compiler-generated drop glue function, aka `core::ptr::drop_glue`
344    DropGlue,                sym::drop_glue,           drop_glue_fn,               Target::Fn,             GenericRequirement::Exact(1);
345    AllocLayout,             sym::alloc_layout,        alloc_layout,               Target::Struct,         GenericRequirement::None;
346
347    /// For all binary crates without `#![no_main]`, Rust will generate a "main" function.
348    /// The exact name and signature are target-dependent. The "main" function will invoke
349    /// this lang item, passing it the `argc` and `argv` (or null, if those don't exist
350    /// on the current target) as well as the user-defined `fn main` from the binary crate.
351    Start,                   sym::start,               start_fn,                   Target::Fn,             GenericRequirement::Exact(1);
352
353    EhPersonality,           sym::eh_personality,      eh_personality,             Target::Fn,             GenericRequirement::None;
354
355    // Profiling markers for move/copy operations (used by -Z annotate-moves)
356    CompilerMove,            sym::compiler_move,       compiler_move_fn,           Target::Fn,             GenericRequirement::Exact(2);
357    CompilerCopy,            sym::compiler_copy,       compiler_copy_fn,           Target::Fn,             GenericRequirement::Exact(2);
358
359    OwnedBox,                sym::owned_box,           owned_box,                  Target::Struct,         GenericRequirement::Minimum(1);
360    GlobalAlloc,             sym::global_alloc_ty,     global_alloc_ty,            Target::Struct,         GenericRequirement::None;
361
362    PhantomData,             sym::phantom_data,        phantom_data,               Target::Struct,         GenericRequirement::Exact(1);
363
364    ManuallyDrop,            sym::manually_drop,       manually_drop,              Target::Struct,         GenericRequirement::Exact(1);
365    MaybeDangling,           sym::maybe_dangling,      maybe_dangling,             Target::Struct,         GenericRequirement::Exact(1);
366    BikeshedGuaranteedNoDrop, sym::bikeshed_guaranteed_no_drop, bikeshed_guaranteed_no_drop, Target::Trait, GenericRequirement::Exact(0);
367
368    MaybeUninit,             sym::maybe_uninit,        maybe_uninit,               Target::Union,          GenericRequirement::None;
369
370    Termination,             sym::termination,         termination,                Target::Trait,          GenericRequirement::None;
371
372    Try,                     sym::Try,                 try_trait,                  Target::Trait,          GenericRequirement::None;
373
374    Tuple,                   sym::tuple_trait,         tuple_trait,                Target::Trait,          GenericRequirement::Exact(0);
375
376    SliceLen,                sym::slice_len_fn,        slice_len_fn,               Target::Method(MethodKind::Inherent), GenericRequirement::None;
377
378    // Language items from AST lowering
379    TryTraitFromResidual,    sym::from_residual,       from_residual_fn,           Target::Method(MethodKind::Trait { body: false }), GenericRequirement::None;
380    TryTraitFromOutput,      sym::from_output,         from_output_fn,             Target::Method(MethodKind::Trait { body: false }), GenericRequirement::None;
381    TryTraitBranch,          sym::branch,              branch_fn,                  Target::Method(MethodKind::Trait { body: false }), GenericRequirement::None;
382    TryTraitFromYeet,        sym::from_yeet,           from_yeet_fn,               Target::Fn,             GenericRequirement::None;
383    ResidualIntoTryType,     sym::into_try_type,       into_try_type_fn,           Target::Fn,             GenericRequirement::None;
384
385    CoercePointeeValidated, sym::coerce_pointee_validated, coerce_pointee_validated_trait, Target::Trait,     GenericRequirement::Exact(0);
386
387    ConstParamTy,            sym::const_param_ty,      const_param_ty_trait,       Target::Trait,          GenericRequirement::Exact(0);
388
389    Poll,                    sym::Poll,                poll,                       Target::Enum,           GenericRequirement::None;
390    PollReady,               sym::Ready,               poll_ready_variant,         Target::Variant,        GenericRequirement::None;
391    PollPending,             sym::Pending,             poll_pending_variant,       Target::Variant,        GenericRequirement::None;
392
393    AsyncGenReady,           sym::AsyncGenReady,       async_gen_ready,            Target::Method(MethodKind::Inherent), GenericRequirement::Exact(1);
394    AsyncGenPending,         sym::AsyncGenPending,     async_gen_pending,          Target::AssocConst(AssocCtxt::Impl { of_trait: false }), GenericRequirement::Exact(1);
395    AsyncGenFinished,        sym::AsyncGenFinished,    async_gen_finished,         Target::AssocConst(AssocCtxt::Impl { of_trait: false }), GenericRequirement::Exact(1);
396
397    // FIXME(swatinem): the following lang items are used for async lowering and
398    // should become obsolete eventually.
399    ResumeTy,                sym::ResumeTy,            resume_ty,                  Target::Struct,         GenericRequirement::None;
400    GetContext,              sym::get_context,         get_context_fn,             Target::Fn,             GenericRequirement::None;
401
402    Context,                 sym::Context,             context,                    Target::Struct,         GenericRequirement::None;
403    FuturePoll,              sym::poll,                future_poll_fn,             Target::Method(MethodKind::Trait { body: false }), GenericRequirement::None;
404
405    AsyncIteratorPollNext,   sym::async_iterator_poll_next, async_iterator_poll_next, Target::Method(MethodKind::Trait { body: false }), GenericRequirement::Exact(0);
406    IntoAsyncIterIntoIter,   sym::into_async_iter_into_iter, into_async_iter_into_iter, Target::Method(MethodKind::Trait { body: false }), GenericRequirement::Exact(0);
407
408    Option,                  sym::Option,              option_type,                Target::Enum,           GenericRequirement::None;
409    OptionSome,              sym::Some,                option_some_variant,        Target::Variant,        GenericRequirement::None;
410    OptionNone,              sym::None,                option_none_variant,        Target::Variant,        GenericRequirement::None;
411
412    ResultOk,                sym::Ok,                  result_ok_variant,          Target::Variant,        GenericRequirement::None;
413    ResultErr,               sym::Err,                 result_err_variant,         Target::Variant,        GenericRequirement::None;
414
415    ControlFlowContinue,     sym::Continue,            cf_continue_variant,        Target::Variant,        GenericRequirement::None;
416    ControlFlowBreak,        sym::Break,               cf_break_variant,           Target::Variant,        GenericRequirement::None;
417
418    IntoFutureIntoFuture,    sym::into_future,         into_future_fn,             Target::Method(MethodKind::Trait { body: false }), GenericRequirement::None;
419    IntoIterIntoIter,        sym::into_iter,           into_iter_fn,               Target::Method(MethodKind::Trait { body: false }), GenericRequirement::None;
420    IteratorNext,            sym::next,                next_fn,                    Target::Method(MethodKind::Trait { body: false}), GenericRequirement::None;
421
422    PinNewUnchecked,         sym::new_unchecked,       new_unchecked_fn,           Target::Method(MethodKind::Inherent), GenericRequirement::None;
423
424    RangeFrom,               sym::RangeFrom,           range_from_struct,          Target::Struct,         GenericRequirement::None;
425    RangeFull,               sym::RangeFull,           range_full_struct,          Target::Struct,         GenericRequirement::None;
426    RangeInclusiveStruct,    sym::RangeInclusive,      range_inclusive_struct,     Target::Struct,         GenericRequirement::None;
427    RangeInclusiveNew,       sym::range_inclusive_new, range_inclusive_new_method, Target::Method(MethodKind::Inherent), GenericRequirement::None;
428    Range,                   sym::Range,               range_struct,               Target::Struct,         GenericRequirement::None;
429    RangeToInclusive,        sym::RangeToInclusive,    range_to_inclusive_struct,  Target::Struct,         GenericRequirement::None;
430    RangeTo,                 sym::RangeTo,             range_to_struct,            Target::Struct,         GenericRequirement::None;
431    RangeMax,                sym::RangeMax,            range_max,                  Target::AssocConst(AssocCtxt::Trait),     GenericRequirement::Exact(0);
432    RangeMin,                sym::RangeMin,            range_min,                  Target::AssocConst(AssocCtxt::Trait),     GenericRequirement::Exact(0);
433    RangeSub,                sym::RangeSub,            range_sub,                  Target::Method(MethodKind::Trait { body: false }),     GenericRequirement::Exact(0);
434
435    // `new_range` types that are `Copy + IntoIterator`
436    RangeFromCopy,           sym::RangeFromCopy,       range_from_copy_struct,     Target::Struct,         GenericRequirement::None;
437    RangeCopy,               sym::RangeCopy,           range_copy_struct,          Target::Struct,         GenericRequirement::None;
438    RangeInclusiveCopy,      sym::RangeInclusiveCopy,  range_inclusive_copy_struct, Target::Struct,         GenericRequirement::None;
439    RangeToInclusiveCopy,    sym::RangeToInclusiveCopy,     range_to_inclusive_copy_struct, Target::Struct, GenericRequirement::None;
440
441    String,                  sym::String,              string,                     Target::Struct,         GenericRequirement::None;
442    CStr,                    sym::CStr,                c_str,                      Target::Struct,         GenericRequirement::None;
443
444    // Experimental lang items for implementing contract pre- and post-condition checking.
445    ContractBuildCheckEnsures, sym::contract_build_check_ensures, contract_build_check_ensures_fn, Target::Fn, GenericRequirement::None;
446    ContractCheckRequires,     sym::contract_check_requires,      contract_check_requires_fn,      Target::Fn, GenericRequirement::None;
447
448    // Experimental lang items for `MCP: Low level components for async drop`(https://github.com/rust-lang/compiler-team/issues/727)
449    DefaultTrait4,           sym::default_trait4,      default_trait4_trait,       Target::Trait,          GenericRequirement::None;
450    DefaultTrait3,           sym::default_trait3,      default_trait3_trait,       Target::Trait,          GenericRequirement::None;
451    DefaultTrait2,           sym::default_trait2,      default_trait2_trait,       Target::Trait,          GenericRequirement::None;
452    DefaultTrait1,           sym::default_trait1,      default_trait1_trait,       Target::Trait,          GenericRequirement::None;
453
454    ContractCheckEnsures,     sym::contract_check_ensures,      contract_check_ensures_fn,      Target::Fn, GenericRequirement::None;
455
456    // Reborrowing related lang-items
457    Reborrow,                sym::reborrow,            reborrow,                   Target::Trait,          GenericRequirement::Exact(0);
458    CoerceShared,            sym::coerce_shared,       coerce_shared,              Target::Trait,          GenericRequirement::Exact(1);
459
460    // Field representing types.
461    FieldRepresentingType,   sym::field_representing_type, field_representing_type,    Target::Struct,         GenericRequirement::Exact(3);
462    Field,                   sym::field,                   field,                      Target::Trait,          GenericRequirement::Exact(0);
463    FieldBase,               sym::field_base,              field_base,                 Target::AssocTy(AssocCtxt::Trait),        GenericRequirement::Exact(0);
464    FieldType,               sym::field_type,              field_type,                 Target::AssocTy(AssocCtxt::Trait),        GenericRequirement::Exact(0);
465    FieldOffset,             sym::field_offset,            field_offset,               Target::AssocConst(AssocCtxt::Trait),     GenericRequirement::Exact(0);
466
467    // Used to fallback `{float}` to `f32` when `f32: From<{float}>`
468    From,                    sym::From,                from_trait,                 Target::Trait,          GenericRequirement::Exact(1);
469    FromFn,                  sym::from,                from_fn,                    Target::Method(MethodKind::Trait { body: false }), GenericRequirement::None;
470
471    // Experimental lang item for `Reflection and comptime`(https://goals.rust-lang.org/2025h2/reflection-and-comptime.html)
472    FnPtr,                   sym::FnPtr,               fn_ptr,                     Target::Struct,         GenericRequirement::None;
473}
474
475/// The requirement imposed on the generics of a lang item
476pub enum GenericRequirement {
477    /// No restriction on the generics
478    None,
479    /// A minimum number of generics that is demanded on a lang item
480    Minimum(usize),
481    /// The number of generics must match precisely as stipulated
482    Exact(usize),
483}
484
485pub static FN_TRAITS: &'static [LangItem] = &[LangItem::Fn, LangItem::FnMut, LangItem::FnOnce];
486
487pub static OPERATORS: &'static [LangItem] = &[
488    LangItem::Add,
489    LangItem::Sub,
490    LangItem::Mul,
491    LangItem::Div,
492    LangItem::Rem,
493    LangItem::Neg,
494    LangItem::Not,
495    LangItem::BitXor,
496    LangItem::BitAnd,
497    LangItem::BitOr,
498    LangItem::Shl,
499    LangItem::Shr,
500    LangItem::AddAssign,
501    LangItem::SubAssign,
502    LangItem::MulAssign,
503    LangItem::DivAssign,
504    LangItem::RemAssign,
505    LangItem::BitXorAssign,
506    LangItem::BitAndAssign,
507    LangItem::BitOrAssign,
508    LangItem::ShlAssign,
509    LangItem::ShrAssign,
510    LangItem::Index,
511    LangItem::IndexMut,
512    LangItem::PartialEq,
513    LangItem::PartialOrd,
514];
515
516pub static BINARY_OPERATORS: &'static [LangItem] = &[
517    LangItem::Add,
518    LangItem::Sub,
519    LangItem::Mul,
520    LangItem::Div,
521    LangItem::Rem,
522    LangItem::BitXor,
523    LangItem::BitAnd,
524    LangItem::BitOr,
525    LangItem::Shl,
526    LangItem::Shr,
527    LangItem::AddAssign,
528    LangItem::SubAssign,
529    LangItem::MulAssign,
530    LangItem::DivAssign,
531    LangItem::RemAssign,
532    LangItem::BitXorAssign,
533    LangItem::BitAndAssign,
534    LangItem::BitOrAssign,
535    LangItem::ShlAssign,
536    LangItem::ShrAssign,
537    LangItem::Index,
538    LangItem::IndexMut,
539    LangItem::PartialEq,
540    LangItem::PartialOrd,
541];