Skip to main content

rustc_public/ty/
tys.rs

1use std::fmt::{self, Debug, Display, Formatter};
2use std::ops::Range;
3
4use serde::Serialize;
5
6use crate::abi::{FnAbi, Layout};
7use crate::mir::alloc::{AllocId, read_target_int, read_target_uint};
8use crate::mir::mono::{Instance, StaticDef};
9use crate::mir::{Mutability, Safety};
10use crate::target::MachineInfo;
11use crate::ty::def::*;
12use crate::{Error, Filename, Opaque, Symbol, ThreadLocalIndex, with};
13
14#[derive(#[automatically_derived]
impl ::core::marker::Copy for Ty { }Copy, #[automatically_derived]
impl ::core::clone::Clone for Ty {
    #[inline]
    fn clone(&self) -> Ty {
        let _: ::core::clone::AssertParamIsClone<usize>;
        let _: ::core::clone::AssertParamIsClone<ThreadLocalIndex>;
        *self
    }
}Clone, #[automatically_derived]
impl ::core::cmp::Eq for Ty {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<usize>;
        let _: ::core::cmp::AssertParamIsEq<ThreadLocalIndex>;
    }
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for Ty {
    #[inline]
    fn eq(&self, other: &Ty) -> bool {
        self.0 == other.0 && self.1 == other.1
    }
}PartialEq, #[automatically_derived]
impl ::core::hash::Hash for Ty {
    #[inline]
    fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
        ::core::hash::Hash::hash(&self.0, state);
        ::core::hash::Hash::hash(&self.1, state)
    }
}Hash)]
15pub struct Ty(usize, ThreadLocalIndex);
16
17impl Debug for Ty {
18    fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
19        f.debug_struct("Ty").field("id", &self.0).field("kind", &self.kind()).finish()
20    }
21}
22
23/// Constructors for `Ty`.
24impl Ty {
25    /// Create a new type from a given kind.
26    pub fn from_rigid_kind(kind: RigidTy) -> Ty {
27        with(|cx| cx.new_rigid_ty(kind))
28    }
29
30    /// Create a new array type.
31    pub fn try_new_array(elem_ty: Ty, size: u64) -> Result<Ty, Error> {
32        Ok(Ty::from_rigid_kind(RigidTy::Array(elem_ty, TyConst::try_from_target_usize(size)?)))
33    }
34
35    /// Create a new array type from Const length.
36    pub fn new_array_with_const_len(elem_ty: Ty, len: TyConst) -> Ty {
37        Ty::from_rigid_kind(RigidTy::Array(elem_ty, len))
38    }
39
40    /// Create a new pointer type.
41    pub fn new_ptr(pointee_ty: Ty, mutability: Mutability) -> Ty {
42        Ty::from_rigid_kind(RigidTy::RawPtr(pointee_ty, mutability))
43    }
44
45    /// Create a new reference type.
46    pub fn new_ref(reg: Region, pointee_ty: Ty, mutability: Mutability) -> Ty {
47        Ty::from_rigid_kind(RigidTy::Ref(reg, pointee_ty, mutability))
48    }
49
50    /// Create a new pointer type.
51    pub fn new_tuple(tys: &[Ty]) -> Ty {
52        Ty::from_rigid_kind(RigidTy::Tuple(Vec::from(tys)))
53    }
54
55    /// Create a new closure type.
56    pub fn new_closure(def: ClosureDef, args: GenericArgs) -> Ty {
57        Ty::from_rigid_kind(RigidTy::Closure(def, args))
58    }
59
60    /// Create a new coroutine type.
61    pub fn new_coroutine(def: CoroutineDef, args: GenericArgs) -> Ty {
62        Ty::from_rigid_kind(RigidTy::Coroutine(def, args))
63    }
64
65    /// Create a new closure type.
66    pub fn new_coroutine_closure(def: CoroutineClosureDef, args: GenericArgs) -> Ty {
67        Ty::from_rigid_kind(RigidTy::CoroutineClosure(def, args))
68    }
69
70    /// Create a new box type that represents `Box<T>`, for the given inner type `T`.
71    pub fn new_box(inner_ty: Ty) -> Ty {
72        with(|cx| cx.new_box_ty(inner_ty))
73    }
74
75    /// Create a type representing `usize`.
76    pub fn usize_ty() -> Ty {
77        Ty::from_rigid_kind(RigidTy::Uint(UintTy::Usize))
78    }
79
80    /// Create a type representing `bool`.
81    pub fn bool_ty() -> Ty {
82        Ty::from_rigid_kind(RigidTy::Bool)
83    }
84
85    /// Create a type representing a signed integer.
86    pub fn signed_ty(inner: IntTy) -> Ty {
87        Ty::from_rigid_kind(RigidTy::Int(inner))
88    }
89
90    /// Create a type representing an unsigned integer.
91    pub fn unsigned_ty(inner: UintTy) -> Ty {
92        Ty::from_rigid_kind(RigidTy::Uint(inner))
93    }
94
95    /// Get a type layout.
96    pub fn layout(self) -> Result<Layout, Error> {
97        with(|cx| cx.ty_layout(self))
98    }
99}
100
101impl Ty {
102    pub fn kind(&self) -> TyKind {
103        with(|context| context.ty_kind(*self))
104    }
105}
106
107/// Represents a pattern in the type system
108#[derive(#[automatically_derived]
impl ::core::clone::Clone for Pattern {
    #[inline]
    fn clone(&self) -> Pattern {
        match self {
            Pattern::Range {
                start: __self_0, end: __self_1, include_end: __self_2 } =>
                Pattern::Range {
                    start: ::core::clone::Clone::clone(__self_0),
                    end: ::core::clone::Clone::clone(__self_1),
                    include_end: ::core::clone::Clone::clone(__self_2),
                },
            Pattern::NotNull => Pattern::NotNull,
            Pattern::Or(__self_0) =>
                Pattern::Or(::core::clone::Clone::clone(__self_0)),
        }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for Pattern {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        match self {
            Pattern::Range {
                start: __self_0, end: __self_1, include_end: __self_2 } =>
                ::core::fmt::Formatter::debug_struct_field3_finish(f, "Range",
                    "start", __self_0, "end", __self_1, "include_end",
                    &__self_2),
            Pattern::NotNull =>
                ::core::fmt::Formatter::write_str(f, "NotNull"),
            Pattern::Or(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "Or",
                    &__self_0),
        }
    }
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for Pattern {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<TyConst>;
        let _: ::core::cmp::AssertParamIsEq<bool>;
        let _: ::core::cmp::AssertParamIsEq<Vec<Pattern>>;
    }
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for Pattern {
    #[inline]
    fn eq(&self, other: &Pattern) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr &&
            match (self, other) {
                (Pattern::Range {
                    start: __self_0, end: __self_1, include_end: __self_2 },
                    Pattern::Range {
                    start: __arg1_0, end: __arg1_1, include_end: __arg1_2 }) =>
                    __self_2 == __arg1_2 && __self_0 == __arg1_0 &&
                        __self_1 == __arg1_1,
                (Pattern::Or(__self_0), Pattern::Or(__arg1_0)) =>
                    __self_0 == __arg1_0,
                _ => true,
            }
    }
}PartialEq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for Pattern {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    Pattern::Range { ref start, ref end, ref include_end } => {
                        let mut __serde_state =
                            _serde::Serializer::serialize_struct_variant(__serializer,
                                    "Pattern", 0u32, "Range", 0 + 1 + 1 + 1)?;
                        _serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
                                "start", start)?;
                        _serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
                                "end", end)?;
                        _serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
                                "include_end", include_end)?;
                        _serde::ser::SerializeStructVariant::end(__serde_state)
                    }
                    Pattern::NotNull =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Pattern", 1u32, "NotNull"),
                    Pattern::Or(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "Pattern", 2u32, "Or", __field0),
                }
            }
        }
    };Serialize)]
109pub enum Pattern {
110    Range { start: TyConst, end: TyConst, include_end: bool },
111    NotNull,
112    Or(Vec<Pattern>),
113}
114
115/// Represents a constant in the type system
116#[derive(#[automatically_derived]
impl ::core::clone::Clone for TyConst {
    #[inline]
    fn clone(&self) -> TyConst {
        TyConst {
            kind: ::core::clone::Clone::clone(&self.kind),
            id: ::core::clone::Clone::clone(&self.id),
        }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for TyConst {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f, "TyConst",
            "kind", &self.kind, "id", &&self.id)
    }
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for TyConst {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<TyConstKind>;
        let _: ::core::cmp::AssertParamIsEq<TyConstId>;
    }
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for TyConst {
    #[inline]
    fn eq(&self, other: &TyConst) -> bool {
        self.kind == other.kind && self.id == other.id
    }
}PartialEq, #[automatically_derived]
impl ::core::hash::Hash for TyConst {
    #[inline]
    fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
        ::core::hash::Hash::hash(&self.kind, state);
        ::core::hash::Hash::hash(&self.id, state)
    }
}Hash, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for TyConst {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                let mut __serde_state =
                    _serde::Serializer::serialize_struct(__serializer,
                            "TyConst", false as usize + 1 + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "kind", &self.kind)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "id", &self.id)?;
                _serde::ser::SerializeStruct::end(__serde_state)
            }
        }
    };Serialize)]
117pub struct TyConst {
118    pub(crate) kind: TyConstKind,
119    pub id: TyConstId,
120}
121
122impl TyConst {
123    pub fn new(kind: TyConstKind, id: TyConstId) -> TyConst {
124        Self { kind, id }
125    }
126
127    /// Retrieve the constant kind.
128    pub fn kind(&self) -> &TyConstKind {
129        &self.kind
130    }
131
132    /// Creates an interned usize constant.
133    pub fn try_from_target_usize(val: u64) -> Result<Self, Error> {
134        with(|cx| cx.try_new_ty_const_uint(val.into(), UintTy::Usize))
135    }
136
137    /// Try to evaluate to a target `usize`.
138    pub fn eval_target_usize(&self) -> Result<u64, Error> {
139        with(|cx| cx.eval_target_usize_ty(self))
140    }
141}
142
143#[derive(#[automatically_derived]
impl ::core::clone::Clone for TyConstKind {
    #[inline]
    fn clone(&self) -> TyConstKind {
        match self {
            TyConstKind::Param(__self_0) =>
                TyConstKind::Param(::core::clone::Clone::clone(__self_0)),
            TyConstKind::Bound(__self_0, __self_1) =>
                TyConstKind::Bound(::core::clone::Clone::clone(__self_0),
                    ::core::clone::Clone::clone(__self_1)),
            TyConstKind::Unevaluated(__self_0, __self_1) =>
                TyConstKind::Unevaluated(::core::clone::Clone::clone(__self_0),
                    ::core::clone::Clone::clone(__self_1)),
            TyConstKind::Value(__self_0, __self_1) =>
                TyConstKind::Value(::core::clone::Clone::clone(__self_0),
                    ::core::clone::Clone::clone(__self_1)),
            TyConstKind::ZSTValue(__self_0) =>
                TyConstKind::ZSTValue(::core::clone::Clone::clone(__self_0)),
        }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for TyConstKind {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        match self {
            TyConstKind::Param(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "Param",
                    &__self_0),
            TyConstKind::Bound(__self_0, __self_1) =>
                ::core::fmt::Formatter::debug_tuple_field2_finish(f, "Bound",
                    __self_0, &__self_1),
            TyConstKind::Unevaluated(__self_0, __self_1) =>
                ::core::fmt::Formatter::debug_tuple_field2_finish(f,
                    "Unevaluated", __self_0, &__self_1),
            TyConstKind::Value(__self_0, __self_1) =>
                ::core::fmt::Formatter::debug_tuple_field2_finish(f, "Value",
                    __self_0, &__self_1),
            TyConstKind::ZSTValue(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "ZSTValue", &__self_0),
        }
    }
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for TyConstKind {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<ParamConst>;
        let _: ::core::cmp::AssertParamIsEq<DebruijnIndex>;
        let _: ::core::cmp::AssertParamIsEq<BoundVar>;
        let _: ::core::cmp::AssertParamIsEq<ConstDef>;
        let _: ::core::cmp::AssertParamIsEq<GenericArgs>;
        let _: ::core::cmp::AssertParamIsEq<Ty>;
        let _: ::core::cmp::AssertParamIsEq<Allocation>;
    }
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for TyConstKind {
    #[inline]
    fn eq(&self, other: &TyConstKind) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr &&
            match (self, other) {
                (TyConstKind::Param(__self_0), TyConstKind::Param(__arg1_0))
                    => __self_0 == __arg1_0,
                (TyConstKind::Bound(__self_0, __self_1),
                    TyConstKind::Bound(__arg1_0, __arg1_1)) =>
                    __self_0 == __arg1_0 && __self_1 == __arg1_1,
                (TyConstKind::Unevaluated(__self_0, __self_1),
                    TyConstKind::Unevaluated(__arg1_0, __arg1_1)) =>
                    __self_0 == __arg1_0 && __self_1 == __arg1_1,
                (TyConstKind::Value(__self_0, __self_1),
                    TyConstKind::Value(__arg1_0, __arg1_1)) =>
                    __self_0 == __arg1_0 && __self_1 == __arg1_1,
                (TyConstKind::ZSTValue(__self_0),
                    TyConstKind::ZSTValue(__arg1_0)) => __self_0 == __arg1_0,
                _ => unsafe { ::core::intrinsics::unreachable() }
            }
    }
}PartialEq, #[automatically_derived]
impl ::core::hash::Hash for TyConstKind {
    #[inline]
    fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        ::core::hash::Hash::hash(&__self_discr, state);
        match self {
            TyConstKind::Param(__self_0) =>
                ::core::hash::Hash::hash(__self_0, state),
            TyConstKind::Bound(__self_0, __self_1) => {
                ::core::hash::Hash::hash(__self_0, state);
                ::core::hash::Hash::hash(__self_1, state)
            }
            TyConstKind::Unevaluated(__self_0, __self_1) => {
                ::core::hash::Hash::hash(__self_0, state);
                ::core::hash::Hash::hash(__self_1, state)
            }
            TyConstKind::Value(__self_0, __self_1) => {
                ::core::hash::Hash::hash(__self_0, state);
                ::core::hash::Hash::hash(__self_1, state)
            }
            TyConstKind::ZSTValue(__self_0) =>
                ::core::hash::Hash::hash(__self_0, state),
        }
    }
}Hash, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for TyConstKind {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    TyConstKind::Param(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "TyConstKind", 0u32, "Param", __field0),
                    TyConstKind::Bound(ref __field0, ref __field1) => {
                        let mut __serde_state =
                            _serde::Serializer::serialize_tuple_variant(__serializer,
                                    "TyConstKind", 1u32, "Bound", 0 + 1 + 1)?;
                        _serde::ser::SerializeTupleVariant::serialize_field(&mut __serde_state,
                                __field0)?;
                        _serde::ser::SerializeTupleVariant::serialize_field(&mut __serde_state,
                                __field1)?;
                        _serde::ser::SerializeTupleVariant::end(__serde_state)
                    }
                    TyConstKind::Unevaluated(ref __field0, ref __field1) => {
                        let mut __serde_state =
                            _serde::Serializer::serialize_tuple_variant(__serializer,
                                    "TyConstKind", 2u32, "Unevaluated", 0 + 1 + 1)?;
                        _serde::ser::SerializeTupleVariant::serialize_field(&mut __serde_state,
                                __field0)?;
                        _serde::ser::SerializeTupleVariant::serialize_field(&mut __serde_state,
                                __field1)?;
                        _serde::ser::SerializeTupleVariant::end(__serde_state)
                    }
                    TyConstKind::Value(ref __field0, ref __field1) => {
                        let mut __serde_state =
                            _serde::Serializer::serialize_tuple_variant(__serializer,
                                    "TyConstKind", 3u32, "Value", 0 + 1 + 1)?;
                        _serde::ser::SerializeTupleVariant::serialize_field(&mut __serde_state,
                                __field0)?;
                        _serde::ser::SerializeTupleVariant::serialize_field(&mut __serde_state,
                                __field1)?;
                        _serde::ser::SerializeTupleVariant::end(__serde_state)
                    }
                    TyConstKind::ZSTValue(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "TyConstKind", 4u32, "ZSTValue", __field0),
                }
            }
        }
    };Serialize)]
144pub enum TyConstKind {
145    Param(ParamConst),
146    Bound(DebruijnIndex, BoundVar),
147    Unevaluated(ConstDef, GenericArgs),
148
149    // FIXME: These should be a valtree
150    Value(Ty, Allocation),
151    ZSTValue(Ty),
152}
153
154#[derive(#[automatically_derived]
impl ::core::marker::Copy for TyConstId { }Copy, #[automatically_derived]
impl ::core::clone::Clone for TyConstId {
    #[inline]
    fn clone(&self) -> TyConstId {
        let _: ::core::clone::AssertParamIsClone<usize>;
        let _: ::core::clone::AssertParamIsClone<ThreadLocalIndex>;
        *self
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for TyConstId {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_tuple_field2_finish(f, "TyConstId",
            &self.0, &&self.1)
    }
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for TyConstId {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<usize>;
        let _: ::core::cmp::AssertParamIsEq<ThreadLocalIndex>;
    }
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for TyConstId {
    #[inline]
    fn eq(&self, other: &TyConstId) -> bool {
        self.0 == other.0 && self.1 == other.1
    }
}PartialEq, #[automatically_derived]
impl ::core::hash::Hash for TyConstId {
    #[inline]
    fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
        ::core::hash::Hash::hash(&self.0, state);
        ::core::hash::Hash::hash(&self.1, state)
    }
}Hash)]
155pub struct TyConstId(usize, ThreadLocalIndex);
156
157/// Represents a constant in MIR
158#[derive(#[automatically_derived]
impl ::core::clone::Clone for MirConst {
    #[inline]
    fn clone(&self) -> MirConst {
        MirConst {
            kind: ::core::clone::Clone::clone(&self.kind),
            ty: ::core::clone::Clone::clone(&self.ty),
            id: ::core::clone::Clone::clone(&self.id),
        }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for MirConst {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field3_finish(f, "MirConst",
            "kind", &self.kind, "ty", &self.ty, "id", &&self.id)
    }
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for MirConst {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<ConstantKind>;
        let _: ::core::cmp::AssertParamIsEq<Ty>;
        let _: ::core::cmp::AssertParamIsEq<MirConstId>;
    }
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for MirConst {
    #[inline]
    fn eq(&self, other: &MirConst) -> bool {
        self.kind == other.kind && self.ty == other.ty && self.id == other.id
    }
}PartialEq, #[automatically_derived]
impl ::core::hash::Hash for MirConst {
    #[inline]
    fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
        ::core::hash::Hash::hash(&self.kind, state);
        ::core::hash::Hash::hash(&self.ty, state);
        ::core::hash::Hash::hash(&self.id, state)
    }
}Hash, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for MirConst {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                let mut __serde_state =
                    _serde::Serializer::serialize_struct(__serializer,
                            "MirConst", false as usize + 1 + 1 + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "kind", &self.kind)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "ty", &self.ty)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "id", &self.id)?;
                _serde::ser::SerializeStruct::end(__serde_state)
            }
        }
    };Serialize)]
159pub struct MirConst {
160    /// The constant kind.
161    pub(crate) kind: ConstantKind,
162    /// The constant type.
163    pub(crate) ty: Ty,
164    /// Used for internal tracking of the internal constant.
165    pub id: MirConstId,
166}
167
168impl MirConst {
169    /// Build a constant. Note that this should only be used by the compiler.
170    pub fn new(kind: ConstantKind, ty: Ty, id: MirConstId) -> MirConst {
171        MirConst { kind, ty, id }
172    }
173
174    /// Retrieve the constant kind.
175    pub fn kind(&self) -> &ConstantKind {
176        &self.kind
177    }
178
179    /// Get the constant type.
180    pub fn ty(&self) -> Ty {
181        self.ty
182    }
183
184    /// Try to evaluate to a target `usize`.
185    pub fn eval_target_usize(&self) -> Result<u64, Error> {
186        with(|cx| cx.eval_target_usize(self))
187    }
188
189    /// Create a constant that represents a new zero-sized constant of type T.
190    /// Fails if the type is not a ZST or if it doesn't have a known size.
191    pub fn try_new_zero_sized(ty: Ty) -> Result<MirConst, Error> {
192        with(|cx| cx.try_new_const_zst(ty))
193    }
194
195    /// Build a new constant that represents the given string.
196    ///
197    /// Note that there is no guarantee today about duplication of the same constant.
198    /// I.e.: Calling this function multiple times with the same argument may or may not return
199    /// the same allocation.
200    pub fn from_str(value: &str) -> MirConst {
201        with(|cx| cx.new_const_str(value))
202    }
203
204    /// Build a new constant that represents the given boolean value.
205    pub fn from_bool(value: bool) -> MirConst {
206        with(|cx| cx.new_const_bool(value))
207    }
208
209    /// Build a new constant that represents the given unsigned integer.
210    pub fn try_from_uint(value: u128, uint_ty: UintTy) -> Result<MirConst, Error> {
211        with(|cx| cx.try_new_const_uint(value, uint_ty))
212    }
213
214    /// Build a new constant that represents the given floating point number.
215    /// The value is the binary representation of the float constant.
216    /// Example: `try_from_float(2.5_f32.to_bits() as u128, FloatTy::F32)`.
217    pub fn try_from_float(value: u128, float_ty: FloatTy) -> Result<MirConst, Error> {
218        with(|cx| cx.try_new_const_float(value, float_ty))
219    }
220}
221
222#[derive(#[automatically_derived]
impl ::core::clone::Clone for MirConstId {
    #[inline]
    fn clone(&self) -> MirConstId {
        let _: ::core::clone::AssertParamIsClone<usize>;
        let _: ::core::clone::AssertParamIsClone<ThreadLocalIndex>;
        *self
    }
}Clone, #[automatically_derived]
impl ::core::marker::Copy for MirConstId { }Copy, #[automatically_derived]
impl ::core::fmt::Debug for MirConstId {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_tuple_field2_finish(f, "MirConstId",
            &self.0, &&self.1)
    }
}Debug, #[automatically_derived]
impl ::core::cmp::PartialEq for MirConstId {
    #[inline]
    fn eq(&self, other: &MirConstId) -> bool {
        self.0 == other.0 && self.1 == other.1
    }
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for MirConstId {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<usize>;
        let _: ::core::cmp::AssertParamIsEq<ThreadLocalIndex>;
    }
}Eq, #[automatically_derived]
impl ::core::hash::Hash for MirConstId {
    #[inline]
    fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
        ::core::hash::Hash::hash(&self.0, state);
        ::core::hash::Hash::hash(&self.1, state)
    }
}Hash)]
223pub struct MirConstId(usize, ThreadLocalIndex);
224
225type Ident = Opaque;
226
227#[derive(#[automatically_derived]
impl ::core::clone::Clone for Region {
    #[inline]
    fn clone(&self) -> Region {
        Region { kind: ::core::clone::Clone::clone(&self.kind) }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for Region {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field1_finish(f, "Region",
            "kind", &&self.kind)
    }
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for Region {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<RegionKind>;
    }
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for Region {
    #[inline]
    fn eq(&self, other: &Region) -> bool { self.kind == other.kind }
}PartialEq, #[automatically_derived]
impl ::core::hash::Hash for Region {
    #[inline]
    fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
        ::core::hash::Hash::hash(&self.kind, state)
    }
}Hash, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for Region {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                let mut __serde_state =
                    _serde::Serializer::serialize_struct(__serializer, "Region",
                            false as usize + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "kind", &self.kind)?;
                _serde::ser::SerializeStruct::end(__serde_state)
            }
        }
    };Serialize)]
228pub struct Region {
229    pub kind: RegionKind,
230}
231
232#[derive(#[automatically_derived]
impl ::core::clone::Clone for RegionKind {
    #[inline]
    fn clone(&self) -> RegionKind {
        match self {
            RegionKind::ReEarlyParam(__self_0) =>
                RegionKind::ReEarlyParam(::core::clone::Clone::clone(__self_0)),
            RegionKind::ReBound(__self_0, __self_1) =>
                RegionKind::ReBound(::core::clone::Clone::clone(__self_0),
                    ::core::clone::Clone::clone(__self_1)),
            RegionKind::ReStatic => RegionKind::ReStatic,
            RegionKind::RePlaceholder(__self_0) =>
                RegionKind::RePlaceholder(::core::clone::Clone::clone(__self_0)),
            RegionKind::ReErased => RegionKind::ReErased,
        }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for RegionKind {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        match self {
            RegionKind::ReEarlyParam(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "ReEarlyParam", &__self_0),
            RegionKind::ReBound(__self_0, __self_1) =>
                ::core::fmt::Formatter::debug_tuple_field2_finish(f,
                    "ReBound", __self_0, &__self_1),
            RegionKind::ReStatic =>
                ::core::fmt::Formatter::write_str(f, "ReStatic"),
            RegionKind::RePlaceholder(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "RePlaceholder", &__self_0),
            RegionKind::ReErased =>
                ::core::fmt::Formatter::write_str(f, "ReErased"),
        }
    }
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for RegionKind {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<EarlyParamRegion>;
        let _: ::core::cmp::AssertParamIsEq<DebruijnIndex>;
        let _: ::core::cmp::AssertParamIsEq<BoundRegion>;
        let _: ::core::cmp::AssertParamIsEq<Placeholder<BoundRegion>>;
    }
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for RegionKind {
    #[inline]
    fn eq(&self, other: &RegionKind) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr &&
            match (self, other) {
                (RegionKind::ReEarlyParam(__self_0),
                    RegionKind::ReEarlyParam(__arg1_0)) => __self_0 == __arg1_0,
                (RegionKind::ReBound(__self_0, __self_1),
                    RegionKind::ReBound(__arg1_0, __arg1_1)) =>
                    __self_0 == __arg1_0 && __self_1 == __arg1_1,
                (RegionKind::RePlaceholder(__self_0),
                    RegionKind::RePlaceholder(__arg1_0)) =>
                    __self_0 == __arg1_0,
                _ => true,
            }
    }
}PartialEq, #[automatically_derived]
impl ::core::hash::Hash for RegionKind {
    #[inline]
    fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        ::core::hash::Hash::hash(&__self_discr, state);
        match self {
            RegionKind::ReEarlyParam(__self_0) =>
                ::core::hash::Hash::hash(__self_0, state),
            RegionKind::ReBound(__self_0, __self_1) => {
                ::core::hash::Hash::hash(__self_0, state);
                ::core::hash::Hash::hash(__self_1, state)
            }
            RegionKind::RePlaceholder(__self_0) =>
                ::core::hash::Hash::hash(__self_0, state),
            _ => {}
        }
    }
}Hash, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for RegionKind {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    RegionKind::ReEarlyParam(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "RegionKind", 0u32, "ReEarlyParam", __field0),
                    RegionKind::ReBound(ref __field0, ref __field1) => {
                        let mut __serde_state =
                            _serde::Serializer::serialize_tuple_variant(__serializer,
                                    "RegionKind", 1u32, "ReBound", 0 + 1 + 1)?;
                        _serde::ser::SerializeTupleVariant::serialize_field(&mut __serde_state,
                                __field0)?;
                        _serde::ser::SerializeTupleVariant::serialize_field(&mut __serde_state,
                                __field1)?;
                        _serde::ser::SerializeTupleVariant::end(__serde_state)
                    }
                    RegionKind::ReStatic =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "RegionKind", 2u32, "ReStatic"),
                    RegionKind::RePlaceholder(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "RegionKind", 3u32, "RePlaceholder", __field0),
                    RegionKind::ReErased =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "RegionKind", 4u32, "ReErased"),
                }
            }
        }
    };Serialize)]
233pub enum RegionKind {
234    ReEarlyParam(EarlyParamRegion),
235    ReBound(DebruijnIndex, BoundRegion),
236    ReStatic,
237    RePlaceholder(Placeholder<BoundRegion>),
238    ReErased,
239}
240
241pub(crate) type DebruijnIndex = u32;
242
243#[derive(#[automatically_derived]
impl ::core::clone::Clone for EarlyParamRegion {
    #[inline]
    fn clone(&self) -> EarlyParamRegion {
        EarlyParamRegion {
            index: ::core::clone::Clone::clone(&self.index),
            name: ::core::clone::Clone::clone(&self.name),
        }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for EarlyParamRegion {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f,
            "EarlyParamRegion", "index", &self.index, "name", &&self.name)
    }
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for EarlyParamRegion {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<u32>;
        let _: ::core::cmp::AssertParamIsEq<Symbol>;
    }
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for EarlyParamRegion {
    #[inline]
    fn eq(&self, other: &EarlyParamRegion) -> bool {
        self.index == other.index && self.name == other.name
    }
}PartialEq, #[automatically_derived]
impl ::core::hash::Hash for EarlyParamRegion {
    #[inline]
    fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
        ::core::hash::Hash::hash(&self.index, state);
        ::core::hash::Hash::hash(&self.name, state)
    }
}Hash, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for EarlyParamRegion {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                let mut __serde_state =
                    _serde::Serializer::serialize_struct(__serializer,
                            "EarlyParamRegion", false as usize + 1 + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "index", &self.index)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "name", &self.name)?;
                _serde::ser::SerializeStruct::end(__serde_state)
            }
        }
    };Serialize)]
244pub struct EarlyParamRegion {
245    pub index: u32,
246    pub name: Symbol,
247}
248
249pub(crate) type BoundVar = u32;
250
251#[derive(#[automatically_derived]
impl ::core::clone::Clone for BoundRegion {
    #[inline]
    fn clone(&self) -> BoundRegion {
        BoundRegion {
            var: ::core::clone::Clone::clone(&self.var),
            kind: ::core::clone::Clone::clone(&self.kind),
        }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for BoundRegion {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f, "BoundRegion",
            "var", &self.var, "kind", &&self.kind)
    }
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for BoundRegion {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<BoundVar>;
        let _: ::core::cmp::AssertParamIsEq<BoundRegionKind>;
    }
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for BoundRegion {
    #[inline]
    fn eq(&self, other: &BoundRegion) -> bool {
        self.var == other.var && self.kind == other.kind
    }
}PartialEq, #[automatically_derived]
impl ::core::hash::Hash for BoundRegion {
    #[inline]
    fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
        ::core::hash::Hash::hash(&self.var, state);
        ::core::hash::Hash::hash(&self.kind, state)
    }
}Hash, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for BoundRegion {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                let mut __serde_state =
                    _serde::Serializer::serialize_struct(__serializer,
                            "BoundRegion", false as usize + 1 + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "var", &self.var)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "kind", &self.kind)?;
                _serde::ser::SerializeStruct::end(__serde_state)
            }
        }
    };Serialize)]
252pub struct BoundRegion {
253    pub var: BoundVar,
254    pub kind: BoundRegionKind,
255}
256
257pub(crate) type UniverseIndex = u32;
258
259#[derive(#[automatically_derived]
impl<T: ::core::clone::Clone> ::core::clone::Clone for Placeholder<T> {
    #[inline]
    fn clone(&self) -> Placeholder<T> {
        Placeholder {
            universe: ::core::clone::Clone::clone(&self.universe),
            bound: ::core::clone::Clone::clone(&self.bound),
        }
    }
}Clone, #[automatically_derived]
impl<T: ::core::fmt::Debug> ::core::fmt::Debug for Placeholder<T> {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f, "Placeholder",
            "universe", &self.universe, "bound", &&self.bound)
    }
}Debug, #[automatically_derived]
impl<T: ::core::cmp::Eq> ::core::cmp::Eq for Placeholder<T> {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<UniverseIndex>;
        let _: ::core::cmp::AssertParamIsEq<T>;
    }
}Eq, #[automatically_derived]
impl<T: ::core::cmp::PartialEq> ::core::cmp::PartialEq for Placeholder<T> {
    #[inline]
    fn eq(&self, other: &Placeholder<T>) -> bool {
        self.universe == other.universe && self.bound == other.bound
    }
}PartialEq, #[automatically_derived]
impl<T: ::core::hash::Hash> ::core::hash::Hash for Placeholder<T> {
    #[inline]
    fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
        ::core::hash::Hash::hash(&self.universe, state);
        ::core::hash::Hash::hash(&self.bound, state)
    }
}Hash, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl<T> _serde::Serialize for Placeholder<T> where
            T: _serde::Serialize {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                let mut __serde_state =
                    _serde::Serializer::serialize_struct(__serializer,
                            "Placeholder", false as usize + 1 + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "universe", &self.universe)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "bound", &self.bound)?;
                _serde::ser::SerializeStruct::end(__serde_state)
            }
        }
    };Serialize)]
260pub struct Placeholder<T> {
261    pub universe: UniverseIndex,
262    pub bound: T,
263}
264
265#[derive(#[automatically_derived]
impl ::core::clone::Clone for Span {
    #[inline]
    fn clone(&self) -> Span {
        let _: ::core::clone::AssertParamIsClone<usize>;
        let _: ::core::clone::AssertParamIsClone<ThreadLocalIndex>;
        *self
    }
}Clone, #[automatically_derived]
impl ::core::marker::Copy for Span { }Copy, #[automatically_derived]
impl ::core::cmp::PartialEq for Span {
    #[inline]
    fn eq(&self, other: &Span) -> bool {
        self.0 == other.0 && self.1 == other.1
    }
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for Span {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<usize>;
        let _: ::core::cmp::AssertParamIsEq<ThreadLocalIndex>;
    }
}Eq, #[automatically_derived]
impl ::core::hash::Hash for Span {
    #[inline]
    fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
        ::core::hash::Hash::hash(&self.0, state);
        ::core::hash::Hash::hash(&self.1, state)
    }
}Hash)]
266pub struct Span(usize, ThreadLocalIndex);
267
268impl Debug for Span {
269    fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
270        f.debug_struct("Span")
271            .field("id", &self.0)
272            .field("repr", &with(|cx| cx.span_to_string(*self)))
273            .finish()
274    }
275}
276
277impl Span {
278    /// Return filename for diagnostic purposes
279    pub fn get_filename(&self) -> Filename {
280        with(|c| c.get_filename(self))
281    }
282
283    /// Return lines that correspond to this `Span`
284    pub fn get_lines(&self) -> LineInfo {
285        with(|c| c.get_lines(self))
286    }
287
288    /// Return the span location to be printed in diagnostic messages.
289    ///
290    /// This may leak local file paths and should not be used to build artifacts that may be
291    /// distributed.
292    pub fn diagnostic(&self) -> String {
293        with(|c| c.span_to_string(*self))
294    }
295
296    /// Create a `&'static core::panic::Location<'static>` constant from this span.
297    pub(crate) fn as_caller_location(&self) -> MirConst {
298        with(|c| c.span_as_caller_location(*self))
299    }
300}
301
302#[derive(#[automatically_derived]
impl ::core::clone::Clone for LineInfo {
    #[inline]
    fn clone(&self) -> LineInfo {
        let _: ::core::clone::AssertParamIsClone<usize>;
        *self
    }
}Clone, #[automatically_derived]
impl ::core::marker::Copy for LineInfo { }Copy, #[automatically_derived]
impl ::core::fmt::Debug for LineInfo {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field4_finish(f, "LineInfo",
            "start_line", &self.start_line, "start_col", &self.start_col,
            "end_line", &self.end_line, "end_col", &&self.end_col)
    }
}Debug, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for LineInfo {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                let mut __serde_state =
                    _serde::Serializer::serialize_struct(__serializer,
                            "LineInfo", false as usize + 1 + 1 + 1 + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "start_line", &self.start_line)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "start_col", &self.start_col)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "end_line", &self.end_line)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "end_col", &self.end_col)?;
                _serde::ser::SerializeStruct::end(__serde_state)
            }
        }
    };Serialize)]
303/// Information you get from `Span` in a struct form.
304/// Line and col start from 1.
305pub struct LineInfo {
306    pub start_line: usize,
307    pub start_col: usize,
308    pub end_line: usize,
309    pub end_col: usize,
310}
311
312impl LineInfo {
313    pub fn from(lines: (usize, usize, usize, usize)) -> Self {
314        LineInfo { start_line: lines.0, start_col: lines.1, end_line: lines.2, end_col: lines.3 }
315    }
316}
317
318#[derive(#[automatically_derived]
impl ::core::clone::Clone for TyKind {
    #[inline]
    fn clone(&self) -> TyKind {
        match self {
            TyKind::RigidTy(__self_0) =>
                TyKind::RigidTy(::core::clone::Clone::clone(__self_0)),
            TyKind::Alias(__self_0, __self_1) =>
                TyKind::Alias(::core::clone::Clone::clone(__self_0),
                    ::core::clone::Clone::clone(__self_1)),
            TyKind::Param(__self_0) =>
                TyKind::Param(::core::clone::Clone::clone(__self_0)),
            TyKind::Bound(__self_0, __self_1) =>
                TyKind::Bound(::core::clone::Clone::clone(__self_0),
                    ::core::clone::Clone::clone(__self_1)),
        }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for TyKind {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        match self {
            TyKind::RigidTy(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "RigidTy", &__self_0),
            TyKind::Alias(__self_0, __self_1) =>
                ::core::fmt::Formatter::debug_tuple_field2_finish(f, "Alias",
                    __self_0, &__self_1),
            TyKind::Param(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "Param",
                    &__self_0),
            TyKind::Bound(__self_0, __self_1) =>
                ::core::fmt::Formatter::debug_tuple_field2_finish(f, "Bound",
                    __self_0, &__self_1),
        }
    }
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for TyKind {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<RigidTy>;
        let _: ::core::cmp::AssertParamIsEq<AliasKind>;
        let _: ::core::cmp::AssertParamIsEq<AliasTy>;
        let _: ::core::cmp::AssertParamIsEq<ParamTy>;
        let _: ::core::cmp::AssertParamIsEq<usize>;
        let _: ::core::cmp::AssertParamIsEq<BoundTy>;
    }
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for TyKind {
    #[inline]
    fn eq(&self, other: &TyKind) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr &&
            match (self, other) {
                (TyKind::RigidTy(__self_0), TyKind::RigidTy(__arg1_0)) =>
                    __self_0 == __arg1_0,
                (TyKind::Alias(__self_0, __self_1),
                    TyKind::Alias(__arg1_0, __arg1_1)) =>
                    __self_0 == __arg1_0 && __self_1 == __arg1_1,
                (TyKind::Param(__self_0), TyKind::Param(__arg1_0)) =>
                    __self_0 == __arg1_0,
                (TyKind::Bound(__self_0, __self_1),
                    TyKind::Bound(__arg1_0, __arg1_1)) =>
                    __self_0 == __arg1_0 && __self_1 == __arg1_1,
                _ => unsafe { ::core::intrinsics::unreachable() }
            }
    }
}PartialEq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for TyKind {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    TyKind::RigidTy(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "TyKind", 0u32, "RigidTy", __field0),
                    TyKind::Alias(ref __field0, ref __field1) => {
                        let mut __serde_state =
                            _serde::Serializer::serialize_tuple_variant(__serializer,
                                    "TyKind", 1u32, "Alias", 0 + 1 + 1)?;
                        _serde::ser::SerializeTupleVariant::serialize_field(&mut __serde_state,
                                __field0)?;
                        _serde::ser::SerializeTupleVariant::serialize_field(&mut __serde_state,
                                __field1)?;
                        _serde::ser::SerializeTupleVariant::end(__serde_state)
                    }
                    TyKind::Param(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "TyKind", 2u32, "Param", __field0),
                    TyKind::Bound(ref __field0, ref __field1) => {
                        let mut __serde_state =
                            _serde::Serializer::serialize_tuple_variant(__serializer,
                                    "TyKind", 3u32, "Bound", 0 + 1 + 1)?;
                        _serde::ser::SerializeTupleVariant::serialize_field(&mut __serde_state,
                                __field0)?;
                        _serde::ser::SerializeTupleVariant::serialize_field(&mut __serde_state,
                                __field1)?;
                        _serde::ser::SerializeTupleVariant::end(__serde_state)
                    }
                }
            }
        }
    };Serialize)]
319pub enum TyKind {
320    RigidTy(RigidTy),
321    Alias(AliasKind, AliasTy),
322    Param(ParamTy),
323    Bound(usize, BoundTy),
324}
325
326impl TyKind {
327    pub fn rigid(&self) -> Option<&RigidTy> {
328        if let TyKind::RigidTy(inner) = self { Some(inner) } else { None }
329    }
330
331    #[inline]
332    pub fn is_unit(&self) -> bool {
333        #[allow(non_exhaustive_omitted_patterns)] match self {
    TyKind::RigidTy(RigidTy::Tuple(data)) if data.is_empty() => true,
    _ => false,
}matches!(self, TyKind::RigidTy(RigidTy::Tuple(data)) if data.is_empty())
334    }
335
336    #[inline]
337    pub fn is_bool(&self) -> bool {
338        #[allow(non_exhaustive_omitted_patterns)] match self {
    TyKind::RigidTy(RigidTy::Bool) => true,
    _ => false,
}matches!(self, TyKind::RigidTy(RigidTy::Bool))
339    }
340
341    #[inline]
342    pub fn is_char(&self) -> bool {
343        #[allow(non_exhaustive_omitted_patterns)] match self {
    TyKind::RigidTy(RigidTy::Char) => true,
    _ => false,
}matches!(self, TyKind::RigidTy(RigidTy::Char))
344    }
345
346    #[inline]
347    pub fn is_trait(&self) -> bool {
348        #[allow(non_exhaustive_omitted_patterns)] match self {
    TyKind::RigidTy(RigidTy::Dynamic(_, _)) => true,
    _ => false,
}matches!(self, TyKind::RigidTy(RigidTy::Dynamic(_, _)))
349    }
350
351    #[inline]
352    pub fn is_enum(&self) -> bool {
353        #[allow(non_exhaustive_omitted_patterns)] match self {
    TyKind::RigidTy(RigidTy::Adt(def, _)) if def.kind() == AdtKind::Enum =>
        true,
    _ => false,
}matches!(self, TyKind::RigidTy(RigidTy::Adt(def, _)) if def.kind() == AdtKind::Enum)
354    }
355
356    #[inline]
357    pub fn is_struct(&self) -> bool {
358        #[allow(non_exhaustive_omitted_patterns)] match self {
    TyKind::RigidTy(RigidTy::Adt(def, _)) if def.kind() == AdtKind::Struct =>
        true,
    _ => false,
}matches!(self, TyKind::RigidTy(RigidTy::Adt(def, _)) if def.kind() == AdtKind::Struct)
359    }
360
361    #[inline]
362    pub fn is_union(&self) -> bool {
363        #[allow(non_exhaustive_omitted_patterns)] match self {
    TyKind::RigidTy(RigidTy::Adt(def, _)) if def.kind() == AdtKind::Union =>
        true,
    _ => false,
}matches!(self, TyKind::RigidTy(RigidTy::Adt(def, _)) if def.kind() == AdtKind::Union)
364    }
365
366    #[inline]
367    pub fn is_adt(&self) -> bool {
368        #[allow(non_exhaustive_omitted_patterns)] match self {
    TyKind::RigidTy(RigidTy::Adt(..)) => true,
    _ => false,
}matches!(self, TyKind::RigidTy(RigidTy::Adt(..)))
369    }
370
371    #[inline]
372    pub fn is_ref(&self) -> bool {
373        #[allow(non_exhaustive_omitted_patterns)] match self {
    TyKind::RigidTy(RigidTy::Ref(..)) => true,
    _ => false,
}matches!(self, TyKind::RigidTy(RigidTy::Ref(..)))
374    }
375
376    #[inline]
377    pub fn is_fn(&self) -> bool {
378        #[allow(non_exhaustive_omitted_patterns)] match self {
    TyKind::RigidTy(RigidTy::FnDef(..)) => true,
    _ => false,
}matches!(self, TyKind::RigidTy(RigidTy::FnDef(..)))
379    }
380
381    #[inline]
382    pub fn is_fn_ptr(&self) -> bool {
383        #[allow(non_exhaustive_omitted_patterns)] match self {
    TyKind::RigidTy(RigidTy::FnPtr(..)) => true,
    _ => false,
}matches!(self, TyKind::RigidTy(RigidTy::FnPtr(..)))
384    }
385
386    #[inline]
387    pub fn is_primitive(&self) -> bool {
388        #[allow(non_exhaustive_omitted_patterns)] match self {
    TyKind::RigidTy(RigidTy::Bool | RigidTy::Char | RigidTy::Int(_) |
        RigidTy::Uint(_) | RigidTy::Float(_)) => true,
    _ => false,
}matches!(
389            self,
390            TyKind::RigidTy(
391                RigidTy::Bool
392                    | RigidTy::Char
393                    | RigidTy::Int(_)
394                    | RigidTy::Uint(_)
395                    | RigidTy::Float(_)
396            )
397        )
398    }
399
400    #[inline]
401    pub fn is_float(&self) -> bool {
402        #[allow(non_exhaustive_omitted_patterns)] match self {
    TyKind::RigidTy(RigidTy::Float(_)) => true,
    _ => false,
}matches!(self, TyKind::RigidTy(RigidTy::Float(_)))
403    }
404
405    #[inline]
406    pub fn is_integral(&self) -> bool {
407        #[allow(non_exhaustive_omitted_patterns)] match self {
    TyKind::RigidTy(RigidTy::Int(_) | RigidTy::Uint(_)) => true,
    _ => false,
}matches!(self, TyKind::RigidTy(RigidTy::Int(_) | RigidTy::Uint(_)))
408    }
409
410    #[inline]
411    pub fn is_numeric(&self) -> bool {
412        self.is_integral() || self.is_float()
413    }
414
415    #[inline]
416    pub fn is_signed(&self) -> bool {
417        #[allow(non_exhaustive_omitted_patterns)] match self {
    TyKind::RigidTy(RigidTy::Int(_)) => true,
    _ => false,
}matches!(self, TyKind::RigidTy(RigidTy::Int(_)))
418    }
419
420    #[inline]
421    pub fn is_str(&self) -> bool {
422        *self == TyKind::RigidTy(RigidTy::Str)
423    }
424
425    #[inline]
426    pub fn is_cstr(&self) -> bool {
427        let TyKind::RigidTy(RigidTy::Adt(def, _)) = self else {
428            return false;
429        };
430        with(|cx| cx.adt_is_cstr(*def))
431    }
432
433    #[inline]
434    pub fn is_slice(&self) -> bool {
435        #[allow(non_exhaustive_omitted_patterns)] match self {
    TyKind::RigidTy(RigidTy::Slice(_)) => true,
    _ => false,
}matches!(self, TyKind::RigidTy(RigidTy::Slice(_)))
436    }
437
438    #[inline]
439    pub fn is_array(&self) -> bool {
440        #[allow(non_exhaustive_omitted_patterns)] match self {
    TyKind::RigidTy(RigidTy::Array(..)) => true,
    _ => false,
}matches!(self, TyKind::RigidTy(RigidTy::Array(..)))
441    }
442
443    #[inline]
444    pub fn is_mutable_ptr(&self) -> bool {
445        #[allow(non_exhaustive_omitted_patterns)] match self {
    TyKind::RigidTy(RigidTy::RawPtr(_, Mutability::Mut)) |
        TyKind::RigidTy(RigidTy::Ref(_, _, Mutability::Mut)) => true,
    _ => false,
}matches!(
446            self,
447            TyKind::RigidTy(RigidTy::RawPtr(_, Mutability::Mut))
448                | TyKind::RigidTy(RigidTy::Ref(_, _, Mutability::Mut))
449        )
450    }
451
452    #[inline]
453    pub fn is_raw_ptr(&self) -> bool {
454        #[allow(non_exhaustive_omitted_patterns)] match self {
    TyKind::RigidTy(RigidTy::RawPtr(..)) => true,
    _ => false,
}matches!(self, TyKind::RigidTy(RigidTy::RawPtr(..)))
455    }
456
457    /// Tests if this is any kind of primitive pointer type (reference, raw pointer, fn pointer).
458    #[inline]
459    pub fn is_any_ptr(&self) -> bool {
460        self.is_ref() || self.is_raw_ptr() || self.is_fn_ptr()
461    }
462
463    #[inline]
464    pub fn is_coroutine(&self) -> bool {
465        #[allow(non_exhaustive_omitted_patterns)] match self {
    TyKind::RigidTy(RigidTy::Coroutine(..)) => true,
    _ => false,
}matches!(self, TyKind::RigidTy(RigidTy::Coroutine(..)))
466    }
467
468    #[inline]
469    pub fn is_closure(&self) -> bool {
470        #[allow(non_exhaustive_omitted_patterns)] match self {
    TyKind::RigidTy(RigidTy::Closure(..)) => true,
    _ => false,
}matches!(self, TyKind::RigidTy(RigidTy::Closure(..)))
471    }
472
473    #[inline]
474    pub fn is_box(&self) -> bool {
475        match self {
476            TyKind::RigidTy(RigidTy::Adt(def, _)) => def.is_box(),
477            _ => false,
478        }
479    }
480
481    #[inline]
482    pub fn is_simd(&self) -> bool {
483        #[allow(non_exhaustive_omitted_patterns)] match self {
    TyKind::RigidTy(RigidTy::Adt(def, _)) if def.is_simd() => true,
    _ => false,
}matches!(self, TyKind::RigidTy(RigidTy::Adt(def, _)) if def.is_simd())
484    }
485
486    pub fn trait_principal(&self) -> Option<Binder<ExistentialTraitRef>> {
487        if let TyKind::RigidTy(RigidTy::Dynamic(predicates, _)) = self {
488            if let Some(Binder { value: ExistentialPredicate::Trait(trait_ref), bound_vars }) =
489                predicates.first()
490            {
491                Some(Binder { value: trait_ref.clone(), bound_vars: bound_vars.clone() })
492            } else {
493                None
494            }
495        } else {
496            None
497        }
498    }
499
500    /// Returns the type of `ty[i]` for builtin types.
501    pub fn builtin_index(&self) -> Option<Ty> {
502        match self.rigid()? {
503            RigidTy::Array(ty, _) | RigidTy::Slice(ty) => Some(*ty),
504            _ => None,
505        }
506    }
507
508    /// Returns the type and mutability of `*ty` for builtin types.
509    ///
510    /// The parameter `explicit` indicates if this is an *explicit* dereference.
511    /// Some types -- notably raw ptrs -- can only be dereferenced explicitly.
512    pub fn builtin_deref(&self, explicit: bool) -> Option<TypeAndMut> {
513        match self.rigid()? {
514            RigidTy::Adt(def, args) if def.is_box() => {
515                Some(TypeAndMut { ty: *args.0.first()?.ty()?, mutability: Mutability::Not })
516            }
517            RigidTy::Ref(_, ty, mutability) => {
518                Some(TypeAndMut { ty: *ty, mutability: *mutability })
519            }
520            RigidTy::RawPtr(ty, mutability) if explicit => {
521                Some(TypeAndMut { ty: *ty, mutability: *mutability })
522            }
523            _ => None,
524        }
525    }
526
527    /// Get the function signature for function like types (Fn, FnPtr, and Closure)
528    pub fn fn_sig(&self) -> Option<PolyFnSig> {
529        match self {
530            TyKind::RigidTy(RigidTy::FnDef(def, args)) => Some(with(|cx| cx.fn_sig(*def, args))),
531            TyKind::RigidTy(RigidTy::FnPtr(sig)) => Some(sig.clone()),
532            TyKind::RigidTy(RigidTy::Closure(_def, args)) => Some(with(|cx| cx.closure_sig(args))),
533            _ => None,
534        }
535    }
536
537    /// Get the discriminant type for this type.
538    pub fn discriminant_ty(&self) -> Option<Ty> {
539        self.rigid().map(|ty| with(|cx| cx.rigid_ty_discriminant_ty(ty)))
540    }
541
542    /// Deconstruct a function type if this is one.
543    pub fn fn_def(&self) -> Option<(FnDef, &GenericArgs)> {
544        if let TyKind::RigidTy(RigidTy::FnDef(def, args)) = self {
545            Some((*def, args))
546        } else {
547            None
548        }
549    }
550}
551
552pub struct TypeAndMut {
553    pub ty: Ty,
554    pub mutability: Mutability,
555}
556
557#[derive(#[automatically_derived]
impl ::core::clone::Clone for RigidTy {
    #[inline]
    fn clone(&self) -> RigidTy {
        match self {
            RigidTy::Bool => RigidTy::Bool,
            RigidTy::Char => RigidTy::Char,
            RigidTy::Int(__self_0) =>
                RigidTy::Int(::core::clone::Clone::clone(__self_0)),
            RigidTy::Uint(__self_0) =>
                RigidTy::Uint(::core::clone::Clone::clone(__self_0)),
            RigidTy::Float(__self_0) =>
                RigidTy::Float(::core::clone::Clone::clone(__self_0)),
            RigidTy::Adt(__self_0, __self_1) =>
                RigidTy::Adt(::core::clone::Clone::clone(__self_0),
                    ::core::clone::Clone::clone(__self_1)),
            RigidTy::Foreign(__self_0) =>
                RigidTy::Foreign(::core::clone::Clone::clone(__self_0)),
            RigidTy::Str => RigidTy::Str,
            RigidTy::Array(__self_0, __self_1) =>
                RigidTy::Array(::core::clone::Clone::clone(__self_0),
                    ::core::clone::Clone::clone(__self_1)),
            RigidTy::Pat(__self_0, __self_1) =>
                RigidTy::Pat(::core::clone::Clone::clone(__self_0),
                    ::core::clone::Clone::clone(__self_1)),
            RigidTy::Slice(__self_0) =>
                RigidTy::Slice(::core::clone::Clone::clone(__self_0)),
            RigidTy::RawPtr(__self_0, __self_1) =>
                RigidTy::RawPtr(::core::clone::Clone::clone(__self_0),
                    ::core::clone::Clone::clone(__self_1)),
            RigidTy::Ref(__self_0, __self_1, __self_2) =>
                RigidTy::Ref(::core::clone::Clone::clone(__self_0),
                    ::core::clone::Clone::clone(__self_1),
                    ::core::clone::Clone::clone(__self_2)),
            RigidTy::FnDef(__self_0, __self_1) =>
                RigidTy::FnDef(::core::clone::Clone::clone(__self_0),
                    ::core::clone::Clone::clone(__self_1)),
            RigidTy::FnPtr(__self_0) =>
                RigidTy::FnPtr(::core::clone::Clone::clone(__self_0)),
            RigidTy::Closure(__self_0, __self_1) =>
                RigidTy::Closure(::core::clone::Clone::clone(__self_0),
                    ::core::clone::Clone::clone(__self_1)),
            RigidTy::Coroutine(__self_0, __self_1) =>
                RigidTy::Coroutine(::core::clone::Clone::clone(__self_0),
                    ::core::clone::Clone::clone(__self_1)),
            RigidTy::CoroutineClosure(__self_0, __self_1) =>
                RigidTy::CoroutineClosure(::core::clone::Clone::clone(__self_0),
                    ::core::clone::Clone::clone(__self_1)),
            RigidTy::Dynamic(__self_0, __self_1) =>
                RigidTy::Dynamic(::core::clone::Clone::clone(__self_0),
                    ::core::clone::Clone::clone(__self_1)),
            RigidTy::Never => RigidTy::Never,
            RigidTy::Tuple(__self_0) =>
                RigidTy::Tuple(::core::clone::Clone::clone(__self_0)),
            RigidTy::CoroutineWitness(__self_0, __self_1) =>
                RigidTy::CoroutineWitness(::core::clone::Clone::clone(__self_0),
                    ::core::clone::Clone::clone(__self_1)),
        }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for RigidTy {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        match self {
            RigidTy::Bool => ::core::fmt::Formatter::write_str(f, "Bool"),
            RigidTy::Char => ::core::fmt::Formatter::write_str(f, "Char"),
            RigidTy::Int(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "Int",
                    &__self_0),
            RigidTy::Uint(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "Uint",
                    &__self_0),
            RigidTy::Float(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "Float",
                    &__self_0),
            RigidTy::Adt(__self_0, __self_1) =>
                ::core::fmt::Formatter::debug_tuple_field2_finish(f, "Adt",
                    __self_0, &__self_1),
            RigidTy::Foreign(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "Foreign", &__self_0),
            RigidTy::Str => ::core::fmt::Formatter::write_str(f, "Str"),
            RigidTy::Array(__self_0, __self_1) =>
                ::core::fmt::Formatter::debug_tuple_field2_finish(f, "Array",
                    __self_0, &__self_1),
            RigidTy::Pat(__self_0, __self_1) =>
                ::core::fmt::Formatter::debug_tuple_field2_finish(f, "Pat",
                    __self_0, &__self_1),
            RigidTy::Slice(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "Slice",
                    &__self_0),
            RigidTy::RawPtr(__self_0, __self_1) =>
                ::core::fmt::Formatter::debug_tuple_field2_finish(f, "RawPtr",
                    __self_0, &__self_1),
            RigidTy::Ref(__self_0, __self_1, __self_2) =>
                ::core::fmt::Formatter::debug_tuple_field3_finish(f, "Ref",
                    __self_0, __self_1, &__self_2),
            RigidTy::FnDef(__self_0, __self_1) =>
                ::core::fmt::Formatter::debug_tuple_field2_finish(f, "FnDef",
                    __self_0, &__self_1),
            RigidTy::FnPtr(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "FnPtr",
                    &__self_0),
            RigidTy::Closure(__self_0, __self_1) =>
                ::core::fmt::Formatter::debug_tuple_field2_finish(f,
                    "Closure", __self_0, &__self_1),
            RigidTy::Coroutine(__self_0, __self_1) =>
                ::core::fmt::Formatter::debug_tuple_field2_finish(f,
                    "Coroutine", __self_0, &__self_1),
            RigidTy::CoroutineClosure(__self_0, __self_1) =>
                ::core::fmt::Formatter::debug_tuple_field2_finish(f,
                    "CoroutineClosure", __self_0, &__self_1),
            RigidTy::Dynamic(__self_0, __self_1) =>
                ::core::fmt::Formatter::debug_tuple_field2_finish(f,
                    "Dynamic", __self_0, &__self_1),
            RigidTy::Never => ::core::fmt::Formatter::write_str(f, "Never"),
            RigidTy::Tuple(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "Tuple",
                    &__self_0),
            RigidTy::CoroutineWitness(__self_0, __self_1) =>
                ::core::fmt::Formatter::debug_tuple_field2_finish(f,
                    "CoroutineWitness", __self_0, &__self_1),
        }
    }
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for RigidTy {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<IntTy>;
        let _: ::core::cmp::AssertParamIsEq<UintTy>;
        let _: ::core::cmp::AssertParamIsEq<FloatTy>;
        let _: ::core::cmp::AssertParamIsEq<AdtDef>;
        let _: ::core::cmp::AssertParamIsEq<GenericArgs>;
        let _: ::core::cmp::AssertParamIsEq<ForeignDef>;
        let _: ::core::cmp::AssertParamIsEq<Ty>;
        let _: ::core::cmp::AssertParamIsEq<TyConst>;
        let _: ::core::cmp::AssertParamIsEq<Pattern>;
        let _: ::core::cmp::AssertParamIsEq<Mutability>;
        let _: ::core::cmp::AssertParamIsEq<Region>;
        let _: ::core::cmp::AssertParamIsEq<FnDef>;
        let _: ::core::cmp::AssertParamIsEq<PolyFnSig>;
        let _: ::core::cmp::AssertParamIsEq<ClosureDef>;
        let _: ::core::cmp::AssertParamIsEq<CoroutineDef>;
        let _: ::core::cmp::AssertParamIsEq<CoroutineClosureDef>;
        let _:
                ::core::cmp::AssertParamIsEq<Vec<Binder<ExistentialPredicate>>>;
        let _: ::core::cmp::AssertParamIsEq<Vec<Ty>>;
        let _: ::core::cmp::AssertParamIsEq<CoroutineWitnessDef>;
    }
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for RigidTy {
    #[inline]
    fn eq(&self, other: &RigidTy) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr &&
            match (self, other) {
                (RigidTy::Int(__self_0), RigidTy::Int(__arg1_0)) =>
                    __self_0 == __arg1_0,
                (RigidTy::Uint(__self_0), RigidTy::Uint(__arg1_0)) =>
                    __self_0 == __arg1_0,
                (RigidTy::Float(__self_0), RigidTy::Float(__arg1_0)) =>
                    __self_0 == __arg1_0,
                (RigidTy::Adt(__self_0, __self_1),
                    RigidTy::Adt(__arg1_0, __arg1_1)) =>
                    __self_0 == __arg1_0 && __self_1 == __arg1_1,
                (RigidTy::Foreign(__self_0), RigidTy::Foreign(__arg1_0)) =>
                    __self_0 == __arg1_0,
                (RigidTy::Array(__self_0, __self_1),
                    RigidTy::Array(__arg1_0, __arg1_1)) =>
                    __self_0 == __arg1_0 && __self_1 == __arg1_1,
                (RigidTy::Pat(__self_0, __self_1),
                    RigidTy::Pat(__arg1_0, __arg1_1)) =>
                    __self_0 == __arg1_0 && __self_1 == __arg1_1,
                (RigidTy::Slice(__self_0), RigidTy::Slice(__arg1_0)) =>
                    __self_0 == __arg1_0,
                (RigidTy::RawPtr(__self_0, __self_1),
                    RigidTy::RawPtr(__arg1_0, __arg1_1)) =>
                    __self_0 == __arg1_0 && __self_1 == __arg1_1,
                (RigidTy::Ref(__self_0, __self_1, __self_2),
                    RigidTy::Ref(__arg1_0, __arg1_1, __arg1_2)) =>
                    __self_0 == __arg1_0 && __self_1 == __arg1_1 &&
                        __self_2 == __arg1_2,
                (RigidTy::FnDef(__self_0, __self_1),
                    RigidTy::FnDef(__arg1_0, __arg1_1)) =>
                    __self_0 == __arg1_0 && __self_1 == __arg1_1,
                (RigidTy::FnPtr(__self_0), RigidTy::FnPtr(__arg1_0)) =>
                    __self_0 == __arg1_0,
                (RigidTy::Closure(__self_0, __self_1),
                    RigidTy::Closure(__arg1_0, __arg1_1)) =>
                    __self_0 == __arg1_0 && __self_1 == __arg1_1,
                (RigidTy::Coroutine(__self_0, __self_1),
                    RigidTy::Coroutine(__arg1_0, __arg1_1)) =>
                    __self_0 == __arg1_0 && __self_1 == __arg1_1,
                (RigidTy::CoroutineClosure(__self_0, __self_1),
                    RigidTy::CoroutineClosure(__arg1_0, __arg1_1)) =>
                    __self_0 == __arg1_0 && __self_1 == __arg1_1,
                (RigidTy::Dynamic(__self_0, __self_1),
                    RigidTy::Dynamic(__arg1_0, __arg1_1)) =>
                    __self_0 == __arg1_0 && __self_1 == __arg1_1,
                (RigidTy::Tuple(__self_0), RigidTy::Tuple(__arg1_0)) =>
                    __self_0 == __arg1_0,
                (RigidTy::CoroutineWitness(__self_0, __self_1),
                    RigidTy::CoroutineWitness(__arg1_0, __arg1_1)) =>
                    __self_0 == __arg1_0 && __self_1 == __arg1_1,
                _ => true,
            }
    }
}PartialEq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for RigidTy {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    RigidTy::Bool =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "RigidTy", 0u32, "Bool"),
                    RigidTy::Char =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "RigidTy", 1u32, "Char"),
                    RigidTy::Int(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "RigidTy", 2u32, "Int", __field0),
                    RigidTy::Uint(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "RigidTy", 3u32, "Uint", __field0),
                    RigidTy::Float(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "RigidTy", 4u32, "Float", __field0),
                    RigidTy::Adt(ref __field0, ref __field1) => {
                        let mut __serde_state =
                            _serde::Serializer::serialize_tuple_variant(__serializer,
                                    "RigidTy", 5u32, "Adt", 0 + 1 + 1)?;
                        _serde::ser::SerializeTupleVariant::serialize_field(&mut __serde_state,
                                __field0)?;
                        _serde::ser::SerializeTupleVariant::serialize_field(&mut __serde_state,
                                __field1)?;
                        _serde::ser::SerializeTupleVariant::end(__serde_state)
                    }
                    RigidTy::Foreign(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "RigidTy", 6u32, "Foreign", __field0),
                    RigidTy::Str =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "RigidTy", 7u32, "Str"),
                    RigidTy::Array(ref __field0, ref __field1) => {
                        let mut __serde_state =
                            _serde::Serializer::serialize_tuple_variant(__serializer,
                                    "RigidTy", 8u32, "Array", 0 + 1 + 1)?;
                        _serde::ser::SerializeTupleVariant::serialize_field(&mut __serde_state,
                                __field0)?;
                        _serde::ser::SerializeTupleVariant::serialize_field(&mut __serde_state,
                                __field1)?;
                        _serde::ser::SerializeTupleVariant::end(__serde_state)
                    }
                    RigidTy::Pat(ref __field0, ref __field1) => {
                        let mut __serde_state =
                            _serde::Serializer::serialize_tuple_variant(__serializer,
                                    "RigidTy", 9u32, "Pat", 0 + 1 + 1)?;
                        _serde::ser::SerializeTupleVariant::serialize_field(&mut __serde_state,
                                __field0)?;
                        _serde::ser::SerializeTupleVariant::serialize_field(&mut __serde_state,
                                __field1)?;
                        _serde::ser::SerializeTupleVariant::end(__serde_state)
                    }
                    RigidTy::Slice(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "RigidTy", 10u32, "Slice", __field0),
                    RigidTy::RawPtr(ref __field0, ref __field1) => {
                        let mut __serde_state =
                            _serde::Serializer::serialize_tuple_variant(__serializer,
                                    "RigidTy", 11u32, "RawPtr", 0 + 1 + 1)?;
                        _serde::ser::SerializeTupleVariant::serialize_field(&mut __serde_state,
                                __field0)?;
                        _serde::ser::SerializeTupleVariant::serialize_field(&mut __serde_state,
                                __field1)?;
                        _serde::ser::SerializeTupleVariant::end(__serde_state)
                    }
                    RigidTy::Ref(ref __field0, ref __field1, ref __field2) => {
                        let mut __serde_state =
                            _serde::Serializer::serialize_tuple_variant(__serializer,
                                    "RigidTy", 12u32, "Ref", 0 + 1 + 1 + 1)?;
                        _serde::ser::SerializeTupleVariant::serialize_field(&mut __serde_state,
                                __field0)?;
                        _serde::ser::SerializeTupleVariant::serialize_field(&mut __serde_state,
                                __field1)?;
                        _serde::ser::SerializeTupleVariant::serialize_field(&mut __serde_state,
                                __field2)?;
                        _serde::ser::SerializeTupleVariant::end(__serde_state)
                    }
                    RigidTy::FnDef(ref __field0, ref __field1) => {
                        let mut __serde_state =
                            _serde::Serializer::serialize_tuple_variant(__serializer,
                                    "RigidTy", 13u32, "FnDef", 0 + 1 + 1)?;
                        _serde::ser::SerializeTupleVariant::serialize_field(&mut __serde_state,
                                __field0)?;
                        _serde::ser::SerializeTupleVariant::serialize_field(&mut __serde_state,
                                __field1)?;
                        _serde::ser::SerializeTupleVariant::end(__serde_state)
                    }
                    RigidTy::FnPtr(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "RigidTy", 14u32, "FnPtr", __field0),
                    RigidTy::Closure(ref __field0, ref __field1) => {
                        let mut __serde_state =
                            _serde::Serializer::serialize_tuple_variant(__serializer,
                                    "RigidTy", 15u32, "Closure", 0 + 1 + 1)?;
                        _serde::ser::SerializeTupleVariant::serialize_field(&mut __serde_state,
                                __field0)?;
                        _serde::ser::SerializeTupleVariant::serialize_field(&mut __serde_state,
                                __field1)?;
                        _serde::ser::SerializeTupleVariant::end(__serde_state)
                    }
                    RigidTy::Coroutine(ref __field0, ref __field1) => {
                        let mut __serde_state =
                            _serde::Serializer::serialize_tuple_variant(__serializer,
                                    "RigidTy", 16u32, "Coroutine", 0 + 1 + 1)?;
                        _serde::ser::SerializeTupleVariant::serialize_field(&mut __serde_state,
                                __field0)?;
                        _serde::ser::SerializeTupleVariant::serialize_field(&mut __serde_state,
                                __field1)?;
                        _serde::ser::SerializeTupleVariant::end(__serde_state)
                    }
                    RigidTy::CoroutineClosure(ref __field0, ref __field1) => {
                        let mut __serde_state =
                            _serde::Serializer::serialize_tuple_variant(__serializer,
                                    "RigidTy", 17u32, "CoroutineClosure", 0 + 1 + 1)?;
                        _serde::ser::SerializeTupleVariant::serialize_field(&mut __serde_state,
                                __field0)?;
                        _serde::ser::SerializeTupleVariant::serialize_field(&mut __serde_state,
                                __field1)?;
                        _serde::ser::SerializeTupleVariant::end(__serde_state)
                    }
                    RigidTy::Dynamic(ref __field0, ref __field1) => {
                        let mut __serde_state =
                            _serde::Serializer::serialize_tuple_variant(__serializer,
                                    "RigidTy", 18u32, "Dynamic", 0 + 1 + 1)?;
                        _serde::ser::SerializeTupleVariant::serialize_field(&mut __serde_state,
                                __field0)?;
                        _serde::ser::SerializeTupleVariant::serialize_field(&mut __serde_state,
                                __field1)?;
                        _serde::ser::SerializeTupleVariant::end(__serde_state)
                    }
                    RigidTy::Never =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "RigidTy", 19u32, "Never"),
                    RigidTy::Tuple(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "RigidTy", 20u32, "Tuple", __field0),
                    RigidTy::CoroutineWitness(ref __field0, ref __field1) => {
                        let mut __serde_state =
                            _serde::Serializer::serialize_tuple_variant(__serializer,
                                    "RigidTy", 21u32, "CoroutineWitness", 0 + 1 + 1)?;
                        _serde::ser::SerializeTupleVariant::serialize_field(&mut __serde_state,
                                __field0)?;
                        _serde::ser::SerializeTupleVariant::serialize_field(&mut __serde_state,
                                __field1)?;
                        _serde::ser::SerializeTupleVariant::end(__serde_state)
                    }
                }
            }
        }
    };Serialize)]
558pub enum RigidTy {
559    Bool,
560    Char,
561    Int(IntTy),
562    Uint(UintTy),
563    Float(FloatTy),
564    Adt(AdtDef, GenericArgs),
565    Foreign(ForeignDef),
566    Str,
567    Array(Ty, TyConst),
568    Pat(Ty, Pattern),
569    Slice(Ty),
570    RawPtr(Ty, Mutability),
571    Ref(Region, Ty, Mutability),
572    FnDef(FnDef, GenericArgs),
573    FnPtr(PolyFnSig),
574    Closure(ClosureDef, GenericArgs),
575    Coroutine(CoroutineDef, GenericArgs),
576    CoroutineClosure(CoroutineClosureDef, GenericArgs),
577    Dynamic(Vec<Binder<ExistentialPredicate>>, Region),
578    Never,
579    Tuple(Vec<Ty>),
580    CoroutineWitness(CoroutineWitnessDef, GenericArgs),
581}
582
583impl RigidTy {
584    /// Get the discriminant type for this type.
585    pub fn discriminant_ty(&self) -> Ty {
586        with(|cx| cx.rigid_ty_discriminant_ty(self))
587    }
588}
589
590impl From<RigidTy> for TyKind {
591    fn from(value: RigidTy) -> Self {
592        TyKind::RigidTy(value)
593    }
594}
595
596#[derive(#[automatically_derived]
impl ::core::clone::Clone for IntTy {
    #[inline]
    fn clone(&self) -> IntTy { *self }
}Clone, #[automatically_derived]
impl ::core::marker::Copy for IntTy { }Copy, #[automatically_derived]
impl ::core::fmt::Debug for IntTy {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::write_str(f,
            match self {
                IntTy::Isize => "Isize",
                IntTy::I8 => "I8",
                IntTy::I16 => "I16",
                IntTy::I32 => "I32",
                IntTy::I64 => "I64",
                IntTy::I128 => "I128",
            })
    }
}Debug, #[automatically_derived]
impl ::core::cmp::PartialEq for IntTy {
    #[inline]
    fn eq(&self, other: &IntTy) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr
    }
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for IntTy {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {}
}Eq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for IntTy {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    IntTy::Isize =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "IntTy", 0u32, "Isize"),
                    IntTy::I8 =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "IntTy", 1u32, "I8"),
                    IntTy::I16 =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "IntTy", 2u32, "I16"),
                    IntTy::I32 =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "IntTy", 3u32, "I32"),
                    IntTy::I64 =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "IntTy", 4u32, "I64"),
                    IntTy::I128 =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "IntTy", 5u32, "I128"),
                }
            }
        }
    };Serialize)]
597pub enum IntTy {
598    Isize,
599    I8,
600    I16,
601    I32,
602    I64,
603    I128,
604}
605
606impl IntTy {
607    pub fn num_bytes(self) -> usize {
608        match self {
609            IntTy::Isize => MachineInfo::target_pointer_width().bytes(),
610            IntTy::I8 => 1,
611            IntTy::I16 => 2,
612            IntTy::I32 => 4,
613            IntTy::I64 => 8,
614            IntTy::I128 => 16,
615        }
616    }
617}
618
619#[derive(#[automatically_derived]
impl ::core::clone::Clone for UintTy {
    #[inline]
    fn clone(&self) -> UintTy { *self }
}Clone, #[automatically_derived]
impl ::core::marker::Copy for UintTy { }Copy, #[automatically_derived]
impl ::core::fmt::Debug for UintTy {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::write_str(f,
            match self {
                UintTy::Usize => "Usize",
                UintTy::U8 => "U8",
                UintTy::U16 => "U16",
                UintTy::U32 => "U32",
                UintTy::U64 => "U64",
                UintTy::U128 => "U128",
            })
    }
}Debug, #[automatically_derived]
impl ::core::cmp::PartialEq for UintTy {
    #[inline]
    fn eq(&self, other: &UintTy) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr
    }
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for UintTy {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {}
}Eq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for UintTy {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    UintTy::Usize =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "UintTy", 0u32, "Usize"),
                    UintTy::U8 =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "UintTy", 1u32, "U8"),
                    UintTy::U16 =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "UintTy", 2u32, "U16"),
                    UintTy::U32 =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "UintTy", 3u32, "U32"),
                    UintTy::U64 =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "UintTy", 4u32, "U64"),
                    UintTy::U128 =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "UintTy", 5u32, "U128"),
                }
            }
        }
    };Serialize)]
620pub enum UintTy {
621    Usize,
622    U8,
623    U16,
624    U32,
625    U64,
626    U128,
627}
628
629impl UintTy {
630    pub fn num_bytes(self) -> usize {
631        match self {
632            UintTy::Usize => MachineInfo::target_pointer_width().bytes(),
633            UintTy::U8 => 1,
634            UintTy::U16 => 2,
635            UintTy::U32 => 4,
636            UintTy::U64 => 8,
637            UintTy::U128 => 16,
638        }
639    }
640}
641
642#[derive(#[automatically_derived]
impl ::core::clone::Clone for FloatTy {
    #[inline]
    fn clone(&self) -> FloatTy { *self }
}Clone, #[automatically_derived]
impl ::core::marker::Copy for FloatTy { }Copy, #[automatically_derived]
impl ::core::fmt::Debug for FloatTy {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::write_str(f,
            match self {
                FloatTy::F16 => "F16",
                FloatTy::F32 => "F32",
                FloatTy::F64 => "F64",
                FloatTy::F128 => "F128",
            })
    }
}Debug, #[automatically_derived]
impl ::core::cmp::PartialEq for FloatTy {
    #[inline]
    fn eq(&self, other: &FloatTy) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr
    }
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for FloatTy {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {}
}Eq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for FloatTy {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    FloatTy::F16 =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "FloatTy", 0u32, "F16"),
                    FloatTy::F32 =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "FloatTy", 1u32, "F32"),
                    FloatTy::F64 =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "FloatTy", 2u32, "F64"),
                    FloatTy::F128 =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "FloatTy", 3u32, "F128"),
                }
            }
        }
    };Serialize)]
643pub enum FloatTy {
644    F16,
645    F32,
646    F64,
647    F128,
648}
649
650#[derive(#[automatically_derived]
impl ::core::clone::Clone for Movability {
    #[inline]
    fn clone(&self) -> Movability { *self }
}Clone, #[automatically_derived]
impl ::core::marker::Copy for Movability { }Copy, #[automatically_derived]
impl ::core::fmt::Debug for Movability {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::write_str(f,
            match self {
                Movability::Static => "Static",
                Movability::Movable => "Movable",
            })
    }
}Debug, #[automatically_derived]
impl ::core::cmp::PartialEq for Movability {
    #[inline]
    fn eq(&self, other: &Movability) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr
    }
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for Movability {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {}
}Eq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for Movability {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    Movability::Static =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Movability", 0u32, "Static"),
                    Movability::Movable =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Movability", 1u32, "Movable"),
                }
            }
        }
    };Serialize)]
651pub enum Movability {
652    Static,
653    Movable,
654}
655
656pub struct ForeignModule {
657    pub def_id: ForeignModuleDef,
658    pub abi: Abi,
659}
660
661impl ForeignModule {
662    pub fn items(&self) -> Vec<ForeignDef> {
663        with(|cx| cx.foreign_items(self.def_id))
664    }
665}
666
667#[derive(#[automatically_derived]
impl ::core::clone::Clone for ForeignItemKind {
    #[inline]
    fn clone(&self) -> ForeignItemKind {
        let _: ::core::clone::AssertParamIsClone<FnDef>;
        let _: ::core::clone::AssertParamIsClone<StaticDef>;
        let _: ::core::clone::AssertParamIsClone<Ty>;
        *self
    }
}Clone, #[automatically_derived]
impl ::core::marker::Copy for ForeignItemKind { }Copy, #[automatically_derived]
impl ::core::cmp::PartialEq for ForeignItemKind {
    #[inline]
    fn eq(&self, other: &ForeignItemKind) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr &&
            match (self, other) {
                (ForeignItemKind::Fn(__self_0), ForeignItemKind::Fn(__arg1_0))
                    => __self_0 == __arg1_0,
                (ForeignItemKind::Static(__self_0),
                    ForeignItemKind::Static(__arg1_0)) => __self_0 == __arg1_0,
                (ForeignItemKind::Type(__self_0),
                    ForeignItemKind::Type(__arg1_0)) => __self_0 == __arg1_0,
                _ => unsafe { ::core::intrinsics::unreachable() }
            }
    }
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for ForeignItemKind {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<FnDef>;
        let _: ::core::cmp::AssertParamIsEq<StaticDef>;
        let _: ::core::cmp::AssertParamIsEq<Ty>;
    }
}Eq, #[automatically_derived]
impl ::core::fmt::Debug for ForeignItemKind {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        match self {
            ForeignItemKind::Fn(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "Fn",
                    &__self_0),
            ForeignItemKind::Static(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "Static",
                    &__self_0),
            ForeignItemKind::Type(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "Type",
                    &__self_0),
        }
    }
}Debug, #[automatically_derived]
impl ::core::hash::Hash for ForeignItemKind {
    #[inline]
    fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        ::core::hash::Hash::hash(&__self_discr, state);
        match self {
            ForeignItemKind::Fn(__self_0) =>
                ::core::hash::Hash::hash(__self_0, state),
            ForeignItemKind::Static(__self_0) =>
                ::core::hash::Hash::hash(__self_0, state),
            ForeignItemKind::Type(__self_0) =>
                ::core::hash::Hash::hash(__self_0, state),
        }
    }
}Hash, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for ForeignItemKind {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    ForeignItemKind::Fn(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "ForeignItemKind", 0u32, "Fn", __field0),
                    ForeignItemKind::Static(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "ForeignItemKind", 1u32, "Static", __field0),
                    ForeignItemKind::Type(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "ForeignItemKind", 2u32, "Type", __field0),
                }
            }
        }
    };Serialize)]
668pub enum ForeignItemKind {
669    Fn(FnDef),
670    Static(StaticDef),
671    Type(Ty),
672}
673
674#[derive(#[automatically_derived]
impl ::core::clone::Clone for AdtKind {
    #[inline]
    fn clone(&self) -> AdtKind { *self }
}Clone, #[automatically_derived]
impl ::core::marker::Copy for AdtKind { }Copy, #[automatically_derived]
impl ::core::cmp::PartialEq for AdtKind {
    #[inline]
    fn eq(&self, other: &AdtKind) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr
    }
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for AdtKind {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {}
}Eq, #[automatically_derived]
impl ::core::fmt::Debug for AdtKind {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::write_str(f,
            match self {
                AdtKind::Enum => "Enum",
                AdtKind::Union => "Union",
                AdtKind::Struct => "Struct",
            })
    }
}Debug, #[automatically_derived]
impl ::core::hash::Hash for AdtKind {
    #[inline]
    fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        ::core::hash::Hash::hash(&__self_discr, state)
    }
}Hash, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for AdtKind {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    AdtKind::Enum =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "AdtKind", 0u32, "Enum"),
                    AdtKind::Union =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "AdtKind", 1u32, "Union"),
                    AdtKind::Struct =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "AdtKind", 2u32, "Struct"),
                }
            }
        }
    };Serialize)]
675pub enum AdtKind {
676    Enum,
677    Union,
678    Struct,
679}
680
681pub struct Discr {
682    pub val: u128,
683    pub ty: Ty,
684}
685
686impl Display for AdtKind {
687    fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
688        f.write_str(match self {
689            AdtKind::Enum => "enum",
690            AdtKind::Union => "union",
691            AdtKind::Struct => "struct",
692        })
693    }
694}
695
696impl AdtKind {
697    pub fn is_enum(&self) -> bool {
698        #[allow(non_exhaustive_omitted_patterns)] match self {
    AdtKind::Enum => true,
    _ => false,
}matches!(self, AdtKind::Enum)
699    }
700
701    pub fn is_struct(&self) -> bool {
702        #[allow(non_exhaustive_omitted_patterns)] match self {
    AdtKind::Struct => true,
    _ => false,
}matches!(self, AdtKind::Struct)
703    }
704
705    pub fn is_union(&self) -> bool {
706        #[allow(non_exhaustive_omitted_patterns)] match self {
    AdtKind::Union => true,
    _ => false,
}matches!(self, AdtKind::Union)
707    }
708}
709
710/// A list of generic arguments.
711#[derive(#[automatically_derived]
impl ::core::clone::Clone for GenericArgs {
    #[inline]
    fn clone(&self) -> GenericArgs {
        GenericArgs(::core::clone::Clone::clone(&self.0))
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for GenericArgs {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_tuple_field1_finish(f, "GenericArgs",
            &&self.0)
    }
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for GenericArgs {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<Vec<GenericArgKind>>;
    }
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for GenericArgs {
    #[inline]
    fn eq(&self, other: &GenericArgs) -> bool { self.0 == other.0 }
}PartialEq, #[automatically_derived]
impl ::core::hash::Hash for GenericArgs {
    #[inline]
    fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
        ::core::hash::Hash::hash(&self.0, state)
    }
}Hash, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for GenericArgs {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                _serde::Serializer::serialize_newtype_struct(__serializer,
                    "GenericArgs", &self.0)
            }
        }
    };Serialize)]
712pub struct GenericArgs(pub Vec<GenericArgKind>);
713
714impl std::ops::Index<ParamTy> for GenericArgs {
715    type Output = Ty;
716
717    fn index(&self, index: ParamTy) -> &Self::Output {
718        self.0[index.index as usize].expect_ty()
719    }
720}
721
722impl std::ops::Index<ParamConst> for GenericArgs {
723    type Output = TyConst;
724
725    fn index(&self, index: ParamConst) -> &Self::Output {
726        self.0[index.index as usize].expect_const()
727    }
728}
729
730#[derive(#[automatically_derived]
impl ::core::clone::Clone for GenericArgKind {
    #[inline]
    fn clone(&self) -> GenericArgKind {
        match self {
            GenericArgKind::Lifetime(__self_0) =>
                GenericArgKind::Lifetime(::core::clone::Clone::clone(__self_0)),
            GenericArgKind::Type(__self_0) =>
                GenericArgKind::Type(::core::clone::Clone::clone(__self_0)),
            GenericArgKind::Const(__self_0) =>
                GenericArgKind::Const(::core::clone::Clone::clone(__self_0)),
        }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for GenericArgKind {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        match self {
            GenericArgKind::Lifetime(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "Lifetime", &__self_0),
            GenericArgKind::Type(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "Type",
                    &__self_0),
            GenericArgKind::Const(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "Const",
                    &__self_0),
        }
    }
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for GenericArgKind {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<Region>;
        let _: ::core::cmp::AssertParamIsEq<Ty>;
        let _: ::core::cmp::AssertParamIsEq<TyConst>;
    }
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for GenericArgKind {
    #[inline]
    fn eq(&self, other: &GenericArgKind) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr &&
            match (self, other) {
                (GenericArgKind::Lifetime(__self_0),
                    GenericArgKind::Lifetime(__arg1_0)) => __self_0 == __arg1_0,
                (GenericArgKind::Type(__self_0),
                    GenericArgKind::Type(__arg1_0)) => __self_0 == __arg1_0,
                (GenericArgKind::Const(__self_0),
                    GenericArgKind::Const(__arg1_0)) => __self_0 == __arg1_0,
                _ => unsafe { ::core::intrinsics::unreachable() }
            }
    }
}PartialEq, #[automatically_derived]
impl ::core::hash::Hash for GenericArgKind {
    #[inline]
    fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        ::core::hash::Hash::hash(&__self_discr, state);
        match self {
            GenericArgKind::Lifetime(__self_0) =>
                ::core::hash::Hash::hash(__self_0, state),
            GenericArgKind::Type(__self_0) =>
                ::core::hash::Hash::hash(__self_0, state),
            GenericArgKind::Const(__self_0) =>
                ::core::hash::Hash::hash(__self_0, state),
        }
    }
}Hash, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for GenericArgKind {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    GenericArgKind::Lifetime(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "GenericArgKind", 0u32, "Lifetime", __field0),
                    GenericArgKind::Type(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "GenericArgKind", 1u32, "Type", __field0),
                    GenericArgKind::Const(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "GenericArgKind", 2u32, "Const", __field0),
                }
            }
        }
    };Serialize)]
731pub enum GenericArgKind {
732    Lifetime(Region),
733    Type(Ty),
734    Const(TyConst),
735}
736
737impl GenericArgKind {
738    /// Panic if this generic argument is not a type, otherwise
739    /// return the type.
740    #[track_caller]
741    pub fn expect_ty(&self) -> &Ty {
742        match self {
743            GenericArgKind::Type(ty) => ty,
744            _ => { ::core::panicking::panic_fmt(format_args!("{0:?}", self)); }panic!("{self:?}"),
745        }
746    }
747
748    /// Panic if this generic argument is not a const, otherwise
749    /// return the const.
750    #[track_caller]
751    pub fn expect_const(&self) -> &TyConst {
752        match self {
753            GenericArgKind::Const(c) => c,
754            _ => { ::core::panicking::panic_fmt(format_args!("{0:?}", self)); }panic!("{self:?}"),
755        }
756    }
757
758    /// Return the generic argument type if applicable, otherwise return `None`.
759    pub fn ty(&self) -> Option<&Ty> {
760        match self {
761            GenericArgKind::Type(ty) => Some(ty),
762            _ => None,
763        }
764    }
765}
766
767#[derive(#[automatically_derived]
impl ::core::clone::Clone for TermKind {
    #[inline]
    fn clone(&self) -> TermKind {
        match self {
            TermKind::Type(__self_0) =>
                TermKind::Type(::core::clone::Clone::clone(__self_0)),
            TermKind::Const(__self_0) =>
                TermKind::Const(::core::clone::Clone::clone(__self_0)),
        }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for TermKind {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        match self {
            TermKind::Type(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "Type",
                    &__self_0),
            TermKind::Const(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "Const",
                    &__self_0),
        }
    }
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for TermKind {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<Ty>;
        let _: ::core::cmp::AssertParamIsEq<TyConst>;
    }
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for TermKind {
    #[inline]
    fn eq(&self, other: &TermKind) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr &&
            match (self, other) {
                (TermKind::Type(__self_0), TermKind::Type(__arg1_0)) =>
                    __self_0 == __arg1_0,
                (TermKind::Const(__self_0), TermKind::Const(__arg1_0)) =>
                    __self_0 == __arg1_0,
                _ => unsafe { ::core::intrinsics::unreachable() }
            }
    }
}PartialEq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for TermKind {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    TermKind::Type(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "TermKind", 0u32, "Type", __field0),
                    TermKind::Const(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "TermKind", 1u32, "Const", __field0),
                }
            }
        }
    };Serialize)]
768pub enum TermKind {
769    Type(Ty),
770    Const(TyConst),
771}
772
773#[derive(#[automatically_derived]
impl ::core::clone::Clone for AliasKind {
    #[inline]
    fn clone(&self) -> AliasKind {
        match self {
            AliasKind::Projection => AliasKind::Projection,
            AliasKind::Inherent => AliasKind::Inherent,
            AliasKind::Opaque => AliasKind::Opaque,
            AliasKind::Free => AliasKind::Free,
        }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for AliasKind {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::write_str(f,
            match self {
                AliasKind::Projection => "Projection",
                AliasKind::Inherent => "Inherent",
                AliasKind::Opaque => "Opaque",
                AliasKind::Free => "Free",
            })
    }
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for AliasKind {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {}
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for AliasKind {
    #[inline]
    fn eq(&self, other: &AliasKind) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr
    }
}PartialEq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for AliasKind {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    AliasKind::Projection =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "AliasKind", 0u32, "Projection"),
                    AliasKind::Inherent =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "AliasKind", 1u32, "Inherent"),
                    AliasKind::Opaque =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "AliasKind", 2u32, "Opaque"),
                    AliasKind::Free =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "AliasKind", 3u32, "Free"),
                }
            }
        }
    };Serialize)]
774pub enum AliasKind {
775    Projection,
776    Inherent,
777    Opaque,
778    Free,
779}
780
781#[derive(#[automatically_derived]
impl ::core::clone::Clone for AliasTy {
    #[inline]
    fn clone(&self) -> AliasTy {
        AliasTy {
            def_id: ::core::clone::Clone::clone(&self.def_id),
            args: ::core::clone::Clone::clone(&self.args),
        }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for AliasTy {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f, "AliasTy",
            "def_id", &self.def_id, "args", &&self.args)
    }
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for AliasTy {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<AliasDef>;
        let _: ::core::cmp::AssertParamIsEq<GenericArgs>;
    }
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for AliasTy {
    #[inline]
    fn eq(&self, other: &AliasTy) -> bool {
        self.def_id == other.def_id && self.args == other.args
    }
}PartialEq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for AliasTy {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                let mut __serde_state =
                    _serde::Serializer::serialize_struct(__serializer,
                            "AliasTy", false as usize + 1 + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "def_id", &self.def_id)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "args", &self.args)?;
                _serde::ser::SerializeStruct::end(__serde_state)
            }
        }
    };Serialize)]
782pub struct AliasTy {
783    pub def_id: AliasDef,
784    pub args: GenericArgs,
785}
786
787#[derive(#[automatically_derived]
impl ::core::clone::Clone for AliasTerm {
    #[inline]
    fn clone(&self) -> AliasTerm {
        AliasTerm {
            def_id: ::core::clone::Clone::clone(&self.def_id),
            args: ::core::clone::Clone::clone(&self.args),
        }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for AliasTerm {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f, "AliasTerm",
            "def_id", &self.def_id, "args", &&self.args)
    }
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for AliasTerm {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<AliasDef>;
        let _: ::core::cmp::AssertParamIsEq<GenericArgs>;
    }
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for AliasTerm {
    #[inline]
    fn eq(&self, other: &AliasTerm) -> bool {
        self.def_id == other.def_id && self.args == other.args
    }
}PartialEq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for AliasTerm {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                let mut __serde_state =
                    _serde::Serializer::serialize_struct(__serializer,
                            "AliasTerm", false as usize + 1 + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "def_id", &self.def_id)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "args", &self.args)?;
                _serde::ser::SerializeStruct::end(__serde_state)
            }
        }
    };Serialize)]
788pub struct AliasTerm {
789    pub def_id: AliasDef,
790    pub args: GenericArgs,
791}
792
793pub type PolyFnSig = Binder<FnSig>;
794
795impl PolyFnSig {
796    /// Compute a `FnAbi` suitable for indirect calls, i.e. to `fn` pointers.
797    ///
798    /// NB: this doesn't handle virtual calls - those should use `Instance::fn_abi`
799    /// instead, where the instance is an `InstanceKind::Virtual`.
800    pub fn fn_ptr_abi(self) -> Result<FnAbi, Error> {
801        with(|cx| cx.fn_ptr_abi(self))
802    }
803}
804
805#[derive(#[automatically_derived]
impl ::core::clone::Clone for FnSig {
    #[inline]
    fn clone(&self) -> FnSig {
        FnSig {
            inputs_and_output: ::core::clone::Clone::clone(&self.inputs_and_output),
            c_variadic: ::core::clone::Clone::clone(&self.c_variadic),
            safety: ::core::clone::Clone::clone(&self.safety),
            abi: ::core::clone::Clone::clone(&self.abi),
        }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for FnSig {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field4_finish(f, "FnSig",
            "inputs_and_output", &self.inputs_and_output, "c_variadic",
            &self.c_variadic, "safety", &self.safety, "abi", &&self.abi)
    }
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for FnSig {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<Vec<Ty>>;
        let _: ::core::cmp::AssertParamIsEq<bool>;
        let _: ::core::cmp::AssertParamIsEq<Safety>;
        let _: ::core::cmp::AssertParamIsEq<Abi>;
    }
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for FnSig {
    #[inline]
    fn eq(&self, other: &FnSig) -> bool {
        self.c_variadic == other.c_variadic &&
                    self.inputs_and_output == other.inputs_and_output &&
                self.safety == other.safety && self.abi == other.abi
    }
}PartialEq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for FnSig {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                let mut __serde_state =
                    _serde::Serializer::serialize_struct(__serializer, "FnSig",
                            false as usize + 1 + 1 + 1 + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "inputs_and_output", &self.inputs_and_output)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "c_variadic", &self.c_variadic)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "safety", &self.safety)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "abi", &self.abi)?;
                _serde::ser::SerializeStruct::end(__serde_state)
            }
        }
    };Serialize)]
806pub struct FnSig {
807    pub inputs_and_output: Vec<Ty>,
808    pub c_variadic: bool,
809    pub safety: Safety,
810    pub abi: Abi,
811}
812
813impl FnSig {
814    pub fn output(&self) -> Ty {
815        self.inputs_and_output[self.inputs_and_output.len() - 1]
816    }
817
818    pub fn inputs(&self) -> &[Ty] {
819        &self.inputs_and_output[..self.inputs_and_output.len() - 1]
820    }
821}
822
823#[derive(#[automatically_derived]
impl ::core::marker::Copy for Constness { }Copy, #[automatically_derived]
impl ::core::clone::Clone for Constness {
    #[inline]
    fn clone(&self) -> Constness {
        let _: ::core::clone::AssertParamIsClone<bool>;
        *self
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for Constness {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        match self {
            Constness::Const { always: __self_0 } =>
                ::core::fmt::Formatter::debug_struct_field1_finish(f, "Const",
                    "always", &__self_0),
            Constness::NotConst =>
                ::core::fmt::Formatter::write_str(f, "NotConst"),
        }
    }
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for Constness {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<bool>;
    }
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for Constness {
    #[inline]
    fn eq(&self, other: &Constness) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr &&
            match (self, other) {
                (Constness::Const { always: __self_0 }, Constness::Const {
                    always: __arg1_0 }) => __self_0 == __arg1_0,
                _ => true,
            }
    }
}PartialEq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for Constness {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    Constness::Const { ref always } => {
                        let mut __serde_state =
                            _serde::Serializer::serialize_struct_variant(__serializer,
                                    "Constness", 0u32, "Const", 0 + 1)?;
                        _serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
                                "always", always)?;
                        _serde::ser::SerializeStructVariant::end(__serde_state)
                    }
                    Constness::NotConst =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Constness", 1u32, "NotConst"),
                }
            }
        }
    };Serialize)]
824pub enum Constness {
825    Const { always: bool },
826    NotConst,
827}
828
829impl Constness {
830    pub fn is_const(self) -> bool {
831        #[allow(non_exhaustive_omitted_patterns)] match self {
    Constness::Const { always: false } => true,
    _ => false,
}matches!(self, Constness::Const { always: false })
832    }
833}
834
835#[derive(#[automatically_derived]
impl ::core::marker::Copy for Asyncness { }Copy, #[automatically_derived]
impl ::core::clone::Clone for Asyncness {
    #[inline]
    fn clone(&self) -> Asyncness { *self }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for Asyncness {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::write_str(f,
            match self {
                Asyncness::Async => "Async",
                Asyncness::NotAsync => "NotAsync",
            })
    }
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for Asyncness {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {}
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for Asyncness {
    #[inline]
    fn eq(&self, other: &Asyncness) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr
    }
}PartialEq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for Asyncness {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    Asyncness::Async =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Asyncness", 0u32, "Async"),
                    Asyncness::NotAsync =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Asyncness", 1u32, "NotAsync"),
                }
            }
        }
    };Serialize)]
836pub enum Asyncness {
837    Async,
838    NotAsync,
839}
840
841impl Asyncness {
842    pub fn is_async(self) -> bool {
843        #[allow(non_exhaustive_omitted_patterns)] match self {
    Asyncness::Async => true,
    _ => false,
}matches!(self, Asyncness::Async)
844    }
845}
846
847#[derive(#[automatically_derived]
impl ::core::clone::Clone for Abi {
    #[inline]
    fn clone(&self) -> Abi {
        match self {
            Abi::Rust => Abi::Rust,
            Abi::C { unwind: __self_0 } =>
                Abi::C { unwind: ::core::clone::Clone::clone(__self_0) },
            Abi::Cdecl { unwind: __self_0 } =>
                Abi::Cdecl { unwind: ::core::clone::Clone::clone(__self_0) },
            Abi::Stdcall { unwind: __self_0 } =>
                Abi::Stdcall {
                    unwind: ::core::clone::Clone::clone(__self_0),
                },
            Abi::Fastcall { unwind: __self_0 } =>
                Abi::Fastcall {
                    unwind: ::core::clone::Clone::clone(__self_0),
                },
            Abi::Vectorcall { unwind: __self_0 } =>
                Abi::Vectorcall {
                    unwind: ::core::clone::Clone::clone(__self_0),
                },
            Abi::Thiscall { unwind: __self_0 } =>
                Abi::Thiscall {
                    unwind: ::core::clone::Clone::clone(__self_0),
                },
            Abi::Aapcs { unwind: __self_0 } =>
                Abi::Aapcs { unwind: ::core::clone::Clone::clone(__self_0) },
            Abi::Win64 { unwind: __self_0 } =>
                Abi::Win64 { unwind: ::core::clone::Clone::clone(__self_0) },
            Abi::SysV64 { unwind: __self_0 } =>
                Abi::SysV64 { unwind: ::core::clone::Clone::clone(__self_0) },
            Abi::PtxKernel => Abi::PtxKernel,
            Abi::Msp430Interrupt => Abi::Msp430Interrupt,
            Abi::X86Interrupt => Abi::X86Interrupt,
            Abi::GpuKernel => Abi::GpuKernel,
            Abi::EfiApi => Abi::EfiApi,
            Abi::AvrInterrupt => Abi::AvrInterrupt,
            Abi::AvrNonBlockingInterrupt => Abi::AvrNonBlockingInterrupt,
            Abi::CCmseNonSecureCall => Abi::CCmseNonSecureCall,
            Abi::CCmseNonSecureEntry => Abi::CCmseNonSecureEntry,
            Abi::System { unwind: __self_0 } =>
                Abi::System { unwind: ::core::clone::Clone::clone(__self_0) },
            Abi::RustCall => Abi::RustCall,
            Abi::Unadjusted => Abi::Unadjusted,
            Abi::RustCold => Abi::RustCold,
            Abi::RiscvInterruptM => Abi::RiscvInterruptM,
            Abi::RiscvInterruptS => Abi::RiscvInterruptS,
            Abi::RustPreserveNone => Abi::RustPreserveNone,
            Abi::RustTail => Abi::RustTail,
            Abi::RustInvalid => Abi::RustInvalid,
            Abi::Custom => Abi::Custom,
            Abi::Swift => Abi::Swift,
        }
    }
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for Abi {
    #[inline]
    fn eq(&self, other: &Abi) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr &&
            match (self, other) {
                (Abi::C { unwind: __self_0 }, Abi::C { unwind: __arg1_0 }) =>
                    __self_0 == __arg1_0,
                (Abi::Cdecl { unwind: __self_0 }, Abi::Cdecl {
                    unwind: __arg1_0 }) => __self_0 == __arg1_0,
                (Abi::Stdcall { unwind: __self_0 }, Abi::Stdcall {
                    unwind: __arg1_0 }) => __self_0 == __arg1_0,
                (Abi::Fastcall { unwind: __self_0 }, Abi::Fastcall {
                    unwind: __arg1_0 }) => __self_0 == __arg1_0,
                (Abi::Vectorcall { unwind: __self_0 }, Abi::Vectorcall {
                    unwind: __arg1_0 }) => __self_0 == __arg1_0,
                (Abi::Thiscall { unwind: __self_0 }, Abi::Thiscall {
                    unwind: __arg1_0 }) => __self_0 == __arg1_0,
                (Abi::Aapcs { unwind: __self_0 }, Abi::Aapcs {
                    unwind: __arg1_0 }) => __self_0 == __arg1_0,
                (Abi::Win64 { unwind: __self_0 }, Abi::Win64 {
                    unwind: __arg1_0 }) => __self_0 == __arg1_0,
                (Abi::SysV64 { unwind: __self_0 }, Abi::SysV64 {
                    unwind: __arg1_0 }) => __self_0 == __arg1_0,
                (Abi::System { unwind: __self_0 }, Abi::System {
                    unwind: __arg1_0 }) => __self_0 == __arg1_0,
                _ => true,
            }
    }
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for Abi {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<bool>;
    }
}Eq, #[automatically_derived]
impl ::core::fmt::Debug for Abi {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        match self {
            Abi::Rust => ::core::fmt::Formatter::write_str(f, "Rust"),
            Abi::C { unwind: __self_0 } =>
                ::core::fmt::Formatter::debug_struct_field1_finish(f, "C",
                    "unwind", &__self_0),
            Abi::Cdecl { unwind: __self_0 } =>
                ::core::fmt::Formatter::debug_struct_field1_finish(f, "Cdecl",
                    "unwind", &__self_0),
            Abi::Stdcall { unwind: __self_0 } =>
                ::core::fmt::Formatter::debug_struct_field1_finish(f,
                    "Stdcall", "unwind", &__self_0),
            Abi::Fastcall { unwind: __self_0 } =>
                ::core::fmt::Formatter::debug_struct_field1_finish(f,
                    "Fastcall", "unwind", &__self_0),
            Abi::Vectorcall { unwind: __self_0 } =>
                ::core::fmt::Formatter::debug_struct_field1_finish(f,
                    "Vectorcall", "unwind", &__self_0),
            Abi::Thiscall { unwind: __self_0 } =>
                ::core::fmt::Formatter::debug_struct_field1_finish(f,
                    "Thiscall", "unwind", &__self_0),
            Abi::Aapcs { unwind: __self_0 } =>
                ::core::fmt::Formatter::debug_struct_field1_finish(f, "Aapcs",
                    "unwind", &__self_0),
            Abi::Win64 { unwind: __self_0 } =>
                ::core::fmt::Formatter::debug_struct_field1_finish(f, "Win64",
                    "unwind", &__self_0),
            Abi::SysV64 { unwind: __self_0 } =>
                ::core::fmt::Formatter::debug_struct_field1_finish(f,
                    "SysV64", "unwind", &__self_0),
            Abi::PtxKernel =>
                ::core::fmt::Formatter::write_str(f, "PtxKernel"),
            Abi::Msp430Interrupt =>
                ::core::fmt::Formatter::write_str(f, "Msp430Interrupt"),
            Abi::X86Interrupt =>
                ::core::fmt::Formatter::write_str(f, "X86Interrupt"),
            Abi::GpuKernel =>
                ::core::fmt::Formatter::write_str(f, "GpuKernel"),
            Abi::EfiApi => ::core::fmt::Formatter::write_str(f, "EfiApi"),
            Abi::AvrInterrupt =>
                ::core::fmt::Formatter::write_str(f, "AvrInterrupt"),
            Abi::AvrNonBlockingInterrupt =>
                ::core::fmt::Formatter::write_str(f,
                    "AvrNonBlockingInterrupt"),
            Abi::CCmseNonSecureCall =>
                ::core::fmt::Formatter::write_str(f, "CCmseNonSecureCall"),
            Abi::CCmseNonSecureEntry =>
                ::core::fmt::Formatter::write_str(f, "CCmseNonSecureEntry"),
            Abi::System { unwind: __self_0 } =>
                ::core::fmt::Formatter::debug_struct_field1_finish(f,
                    "System", "unwind", &__self_0),
            Abi::RustCall => ::core::fmt::Formatter::write_str(f, "RustCall"),
            Abi::Unadjusted =>
                ::core::fmt::Formatter::write_str(f, "Unadjusted"),
            Abi::RustCold => ::core::fmt::Formatter::write_str(f, "RustCold"),
            Abi::RiscvInterruptM =>
                ::core::fmt::Formatter::write_str(f, "RiscvInterruptM"),
            Abi::RiscvInterruptS =>
                ::core::fmt::Formatter::write_str(f, "RiscvInterruptS"),
            Abi::RustPreserveNone =>
                ::core::fmt::Formatter::write_str(f, "RustPreserveNone"),
            Abi::RustTail => ::core::fmt::Formatter::write_str(f, "RustTail"),
            Abi::RustInvalid =>
                ::core::fmt::Formatter::write_str(f, "RustInvalid"),
            Abi::Custom => ::core::fmt::Formatter::write_str(f, "Custom"),
            Abi::Swift => ::core::fmt::Formatter::write_str(f, "Swift"),
        }
    }
}Debug, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for Abi {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    Abi::Rust =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Abi", 0u32, "Rust"),
                    Abi::C { ref unwind } => {
                        let mut __serde_state =
                            _serde::Serializer::serialize_struct_variant(__serializer,
                                    "Abi", 1u32, "C", 0 + 1)?;
                        _serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
                                "unwind", unwind)?;
                        _serde::ser::SerializeStructVariant::end(__serde_state)
                    }
                    Abi::Cdecl { ref unwind } => {
                        let mut __serde_state =
                            _serde::Serializer::serialize_struct_variant(__serializer,
                                    "Abi", 2u32, "Cdecl", 0 + 1)?;
                        _serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
                                "unwind", unwind)?;
                        _serde::ser::SerializeStructVariant::end(__serde_state)
                    }
                    Abi::Stdcall { ref unwind } => {
                        let mut __serde_state =
                            _serde::Serializer::serialize_struct_variant(__serializer,
                                    "Abi", 3u32, "Stdcall", 0 + 1)?;
                        _serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
                                "unwind", unwind)?;
                        _serde::ser::SerializeStructVariant::end(__serde_state)
                    }
                    Abi::Fastcall { ref unwind } => {
                        let mut __serde_state =
                            _serde::Serializer::serialize_struct_variant(__serializer,
                                    "Abi", 4u32, "Fastcall", 0 + 1)?;
                        _serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
                                "unwind", unwind)?;
                        _serde::ser::SerializeStructVariant::end(__serde_state)
                    }
                    Abi::Vectorcall { ref unwind } => {
                        let mut __serde_state =
                            _serde::Serializer::serialize_struct_variant(__serializer,
                                    "Abi", 5u32, "Vectorcall", 0 + 1)?;
                        _serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
                                "unwind", unwind)?;
                        _serde::ser::SerializeStructVariant::end(__serde_state)
                    }
                    Abi::Thiscall { ref unwind } => {
                        let mut __serde_state =
                            _serde::Serializer::serialize_struct_variant(__serializer,
                                    "Abi", 6u32, "Thiscall", 0 + 1)?;
                        _serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
                                "unwind", unwind)?;
                        _serde::ser::SerializeStructVariant::end(__serde_state)
                    }
                    Abi::Aapcs { ref unwind } => {
                        let mut __serde_state =
                            _serde::Serializer::serialize_struct_variant(__serializer,
                                    "Abi", 7u32, "Aapcs", 0 + 1)?;
                        _serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
                                "unwind", unwind)?;
                        _serde::ser::SerializeStructVariant::end(__serde_state)
                    }
                    Abi::Win64 { ref unwind } => {
                        let mut __serde_state =
                            _serde::Serializer::serialize_struct_variant(__serializer,
                                    "Abi", 8u32, "Win64", 0 + 1)?;
                        _serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
                                "unwind", unwind)?;
                        _serde::ser::SerializeStructVariant::end(__serde_state)
                    }
                    Abi::SysV64 { ref unwind } => {
                        let mut __serde_state =
                            _serde::Serializer::serialize_struct_variant(__serializer,
                                    "Abi", 9u32, "SysV64", 0 + 1)?;
                        _serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
                                "unwind", unwind)?;
                        _serde::ser::SerializeStructVariant::end(__serde_state)
                    }
                    Abi::PtxKernel =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Abi", 10u32, "PtxKernel"),
                    Abi::Msp430Interrupt =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Abi", 11u32, "Msp430Interrupt"),
                    Abi::X86Interrupt =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Abi", 12u32, "X86Interrupt"),
                    Abi::GpuKernel =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Abi", 13u32, "GpuKernel"),
                    Abi::EfiApi =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Abi", 14u32, "EfiApi"),
                    Abi::AvrInterrupt =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Abi", 15u32, "AvrInterrupt"),
                    Abi::AvrNonBlockingInterrupt =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Abi", 16u32, "AvrNonBlockingInterrupt"),
                    Abi::CCmseNonSecureCall =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Abi", 17u32, "CCmseNonSecureCall"),
                    Abi::CCmseNonSecureEntry =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Abi", 18u32, "CCmseNonSecureEntry"),
                    Abi::System { ref unwind } => {
                        let mut __serde_state =
                            _serde::Serializer::serialize_struct_variant(__serializer,
                                    "Abi", 19u32, "System", 0 + 1)?;
                        _serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
                                "unwind", unwind)?;
                        _serde::ser::SerializeStructVariant::end(__serde_state)
                    }
                    Abi::RustCall =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Abi", 20u32, "RustCall"),
                    Abi::Unadjusted =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Abi", 21u32, "Unadjusted"),
                    Abi::RustCold =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Abi", 22u32, "RustCold"),
                    Abi::RiscvInterruptM =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Abi", 23u32, "RiscvInterruptM"),
                    Abi::RiscvInterruptS =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Abi", 24u32, "RiscvInterruptS"),
                    Abi::RustPreserveNone =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Abi", 25u32, "RustPreserveNone"),
                    Abi::RustTail =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Abi", 26u32, "RustTail"),
                    Abi::RustInvalid =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Abi", 27u32, "RustInvalid"),
                    Abi::Custom =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Abi", 28u32, "Custom"),
                    Abi::Swift =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "Abi", 29u32, "Swift"),
                }
            }
        }
    };Serialize)]
848pub enum Abi {
849    Rust,
850    C { unwind: bool },
851    Cdecl { unwind: bool },
852    Stdcall { unwind: bool },
853    Fastcall { unwind: bool },
854    Vectorcall { unwind: bool },
855    Thiscall { unwind: bool },
856    Aapcs { unwind: bool },
857    Win64 { unwind: bool },
858    SysV64 { unwind: bool },
859    PtxKernel,
860    Msp430Interrupt,
861    X86Interrupt,
862    GpuKernel,
863    EfiApi,
864    AvrInterrupt,
865    AvrNonBlockingInterrupt,
866    CCmseNonSecureCall,
867    CCmseNonSecureEntry,
868    System { unwind: bool },
869    RustCall,
870    Unadjusted,
871    RustCold,
872    RiscvInterruptM,
873    RiscvInterruptS,
874    RustPreserveNone,
875    RustTail,
876    RustInvalid,
877    Custom,
878    Swift,
879}
880
881/// A binder represents a possibly generic type and its bound vars.
882#[derive(#[automatically_derived]
impl<T: ::core::clone::Clone> ::core::clone::Clone for Binder<T> {
    #[inline]
    fn clone(&self) -> Binder<T> {
        Binder {
            value: ::core::clone::Clone::clone(&self.value),
            bound_vars: ::core::clone::Clone::clone(&self.bound_vars),
        }
    }
}Clone, #[automatically_derived]
impl<T: ::core::fmt::Debug> ::core::fmt::Debug for Binder<T> {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f, "Binder",
            "value", &self.value, "bound_vars", &&self.bound_vars)
    }
}Debug, #[automatically_derived]
impl<T: ::core::cmp::Eq> ::core::cmp::Eq for Binder<T> {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<T>;
        let _: ::core::cmp::AssertParamIsEq<Vec<BoundVariableKind>>;
    }
}Eq, #[automatically_derived]
impl<T: ::core::cmp::PartialEq> ::core::cmp::PartialEq for Binder<T> {
    #[inline]
    fn eq(&self, other: &Binder<T>) -> bool {
        self.value == other.value && self.bound_vars == other.bound_vars
    }
}PartialEq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl<T> _serde::Serialize for Binder<T> where T: _serde::Serialize {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                let mut __serde_state =
                    _serde::Serializer::serialize_struct(__serializer, "Binder",
                            false as usize + 1 + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "value", &self.value)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "bound_vars", &self.bound_vars)?;
                _serde::ser::SerializeStruct::end(__serde_state)
            }
        }
    };Serialize)]
883pub struct Binder<T> {
884    pub value: T,
885    pub bound_vars: Vec<BoundVariableKind>,
886}
887
888impl<T> Binder<T> {
889    /// Create a new binder with the given bound vars.
890    pub fn bind_with_vars(value: T, bound_vars: Vec<BoundVariableKind>) -> Self {
891        Binder { value, bound_vars }
892    }
893
894    /// Create a new binder with no bounded variable.
895    pub fn dummy(value: T) -> Self {
896        Binder { value, bound_vars: ::alloc::vec::Vec::new()vec![] }
897    }
898
899    pub fn skip_binder(self) -> T {
900        self.value
901    }
902
903    pub fn map_bound_ref<F, U>(&self, f: F) -> Binder<U>
904    where
905        F: FnOnce(&T) -> U,
906    {
907        let Binder { value, bound_vars } = self;
908        let new_value = f(value);
909        Binder { value: new_value, bound_vars: bound_vars.clone() }
910    }
911
912    pub fn map_bound<F, U>(self, f: F) -> Binder<U>
913    where
914        F: FnOnce(T) -> U,
915    {
916        let Binder { value, bound_vars } = self;
917        let new_value = f(value);
918        Binder { value: new_value, bound_vars }
919    }
920}
921
922#[derive(#[automatically_derived]
impl<T: ::core::clone::Clone> ::core::clone::Clone for EarlyBinder<T> {
    #[inline]
    fn clone(&self) -> EarlyBinder<T> {
        EarlyBinder { value: ::core::clone::Clone::clone(&self.value) }
    }
}Clone, #[automatically_derived]
impl<T: ::core::fmt::Debug> ::core::fmt::Debug for EarlyBinder<T> {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field1_finish(f, "EarlyBinder",
            "value", &&self.value)
    }
}Debug, #[automatically_derived]
impl<T: ::core::cmp::Eq> ::core::cmp::Eq for EarlyBinder<T> {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) { let _: ::core::cmp::AssertParamIsEq<T>; }
}Eq, #[automatically_derived]
impl<T: ::core::cmp::PartialEq> ::core::cmp::PartialEq for EarlyBinder<T> {
    #[inline]
    fn eq(&self, other: &EarlyBinder<T>) -> bool { self.value == other.value }
}PartialEq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl<T> _serde::Serialize for EarlyBinder<T> where
            T: _serde::Serialize {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                let mut __serde_state =
                    _serde::Serializer::serialize_struct(__serializer,
                            "EarlyBinder", false as usize + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "value", &self.value)?;
                _serde::ser::SerializeStruct::end(__serde_state)
            }
        }
    };Serialize)]
923pub struct EarlyBinder<T> {
924    pub value: T,
925}
926
927#[derive(#[automatically_derived]
impl ::core::clone::Clone for BoundVariableKind {
    #[inline]
    fn clone(&self) -> BoundVariableKind {
        match self {
            BoundVariableKind::Ty(__self_0) =>
                BoundVariableKind::Ty(::core::clone::Clone::clone(__self_0)),
            BoundVariableKind::Region(__self_0) =>
                BoundVariableKind::Region(::core::clone::Clone::clone(__self_0)),
            BoundVariableKind::Const => BoundVariableKind::Const,
        }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for BoundVariableKind {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        match self {
            BoundVariableKind::Ty(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "Ty",
                    &__self_0),
            BoundVariableKind::Region(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "Region",
                    &__self_0),
            BoundVariableKind::Const =>
                ::core::fmt::Formatter::write_str(f, "Const"),
        }
    }
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for BoundVariableKind {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<BoundTyKind>;
        let _: ::core::cmp::AssertParamIsEq<BoundRegionKind>;
    }
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for BoundVariableKind {
    #[inline]
    fn eq(&self, other: &BoundVariableKind) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr &&
            match (self, other) {
                (BoundVariableKind::Ty(__self_0),
                    BoundVariableKind::Ty(__arg1_0)) => __self_0 == __arg1_0,
                (BoundVariableKind::Region(__self_0),
                    BoundVariableKind::Region(__arg1_0)) =>
                    __self_0 == __arg1_0,
                _ => true,
            }
    }
}PartialEq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for BoundVariableKind {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    BoundVariableKind::Ty(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "BoundVariableKind", 0u32, "Ty", __field0),
                    BoundVariableKind::Region(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "BoundVariableKind", 1u32, "Region", __field0),
                    BoundVariableKind::Const =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "BoundVariableKind", 2u32, "Const"),
                }
            }
        }
    };Serialize)]
928pub enum BoundVariableKind {
929    Ty(BoundTyKind),
930    Region(BoundRegionKind),
931    Const,
932}
933
934#[derive(#[automatically_derived]
impl ::core::clone::Clone for BoundTyKind {
    #[inline]
    fn clone(&self) -> BoundTyKind {
        match self {
            BoundTyKind::Anon => BoundTyKind::Anon,
            BoundTyKind::Param(__self_0, __self_1) =>
                BoundTyKind::Param(::core::clone::Clone::clone(__self_0),
                    ::core::clone::Clone::clone(__self_1)),
        }
    }
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for BoundTyKind {
    #[inline]
    fn eq(&self, other: &BoundTyKind) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr &&
            match (self, other) {
                (BoundTyKind::Param(__self_0, __self_1),
                    BoundTyKind::Param(__arg1_0, __arg1_1)) =>
                    __self_0 == __arg1_0 && __self_1 == __arg1_1,
                _ => true,
            }
    }
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for BoundTyKind {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<ParamDef>;
        let _: ::core::cmp::AssertParamIsEq<String>;
    }
}Eq, #[automatically_derived]
impl ::core::fmt::Debug for BoundTyKind {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        match self {
            BoundTyKind::Anon => ::core::fmt::Formatter::write_str(f, "Anon"),
            BoundTyKind::Param(__self_0, __self_1) =>
                ::core::fmt::Formatter::debug_tuple_field2_finish(f, "Param",
                    __self_0, &__self_1),
        }
    }
}Debug, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for BoundTyKind {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    BoundTyKind::Anon =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "BoundTyKind", 0u32, "Anon"),
                    BoundTyKind::Param(ref __field0, ref __field1) => {
                        let mut __serde_state =
                            _serde::Serializer::serialize_tuple_variant(__serializer,
                                    "BoundTyKind", 1u32, "Param", 0 + 1 + 1)?;
                        _serde::ser::SerializeTupleVariant::serialize_field(&mut __serde_state,
                                __field0)?;
                        _serde::ser::SerializeTupleVariant::serialize_field(&mut __serde_state,
                                __field1)?;
                        _serde::ser::SerializeTupleVariant::end(__serde_state)
                    }
                }
            }
        }
    };Serialize)]
935pub enum BoundTyKind {
936    Anon,
937    Param(ParamDef, String),
938}
939
940#[derive(#[automatically_derived]
impl ::core::clone::Clone for BoundRegionKind {
    #[inline]
    fn clone(&self) -> BoundRegionKind {
        match self {
            BoundRegionKind::BrAnon => BoundRegionKind::BrAnon,
            BoundRegionKind::BrNamed(__self_0, __self_1) =>
                BoundRegionKind::BrNamed(::core::clone::Clone::clone(__self_0),
                    ::core::clone::Clone::clone(__self_1)),
            BoundRegionKind::BrEnv => BoundRegionKind::BrEnv,
        }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for BoundRegionKind {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        match self {
            BoundRegionKind::BrAnon =>
                ::core::fmt::Formatter::write_str(f, "BrAnon"),
            BoundRegionKind::BrNamed(__self_0, __self_1) =>
                ::core::fmt::Formatter::debug_tuple_field2_finish(f,
                    "BrNamed", __self_0, &__self_1),
            BoundRegionKind::BrEnv =>
                ::core::fmt::Formatter::write_str(f, "BrEnv"),
        }
    }
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for BoundRegionKind {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<BrNamedDef>;
        let _: ::core::cmp::AssertParamIsEq<String>;
    }
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for BoundRegionKind {
    #[inline]
    fn eq(&self, other: &BoundRegionKind) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr &&
            match (self, other) {
                (BoundRegionKind::BrNamed(__self_0, __self_1),
                    BoundRegionKind::BrNamed(__arg1_0, __arg1_1)) =>
                    __self_0 == __arg1_0 && __self_1 == __arg1_1,
                _ => true,
            }
    }
}PartialEq, #[automatically_derived]
impl ::core::hash::Hash for BoundRegionKind {
    #[inline]
    fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        ::core::hash::Hash::hash(&__self_discr, state);
        match self {
            BoundRegionKind::BrNamed(__self_0, __self_1) => {
                ::core::hash::Hash::hash(__self_0, state);
                ::core::hash::Hash::hash(__self_1, state)
            }
            _ => {}
        }
    }
}Hash, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for BoundRegionKind {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    BoundRegionKind::BrAnon =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "BoundRegionKind", 0u32, "BrAnon"),
                    BoundRegionKind::BrNamed(ref __field0, ref __field1) => {
                        let mut __serde_state =
                            _serde::Serializer::serialize_tuple_variant(__serializer,
                                    "BoundRegionKind", 1u32, "BrNamed", 0 + 1 + 1)?;
                        _serde::ser::SerializeTupleVariant::serialize_field(&mut __serde_state,
                                __field0)?;
                        _serde::ser::SerializeTupleVariant::serialize_field(&mut __serde_state,
                                __field1)?;
                        _serde::ser::SerializeTupleVariant::end(__serde_state)
                    }
                    BoundRegionKind::BrEnv =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "BoundRegionKind", 2u32, "BrEnv"),
                }
            }
        }
    };Serialize)]
941pub enum BoundRegionKind {
942    BrAnon,
943    BrNamed(BrNamedDef, String),
944    BrEnv,
945}
946
947#[derive(#[automatically_derived]
impl ::core::clone::Clone for ExistentialPredicate {
    #[inline]
    fn clone(&self) -> ExistentialPredicate {
        match self {
            ExistentialPredicate::Trait(__self_0) =>
                ExistentialPredicate::Trait(::core::clone::Clone::clone(__self_0)),
            ExistentialPredicate::Projection(__self_0) =>
                ExistentialPredicate::Projection(::core::clone::Clone::clone(__self_0)),
            ExistentialPredicate::AutoTrait(__self_0) =>
                ExistentialPredicate::AutoTrait(::core::clone::Clone::clone(__self_0)),
        }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for ExistentialPredicate {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        match self {
            ExistentialPredicate::Trait(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "Trait",
                    &__self_0),
            ExistentialPredicate::Projection(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "Projection", &__self_0),
            ExistentialPredicate::AutoTrait(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "AutoTrait", &__self_0),
        }
    }
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for ExistentialPredicate {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<ExistentialTraitRef>;
        let _: ::core::cmp::AssertParamIsEq<ExistentialProjection>;
        let _: ::core::cmp::AssertParamIsEq<TraitDef>;
    }
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for ExistentialPredicate {
    #[inline]
    fn eq(&self, other: &ExistentialPredicate) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr &&
            match (self, other) {
                (ExistentialPredicate::Trait(__self_0),
                    ExistentialPredicate::Trait(__arg1_0)) =>
                    __self_0 == __arg1_0,
                (ExistentialPredicate::Projection(__self_0),
                    ExistentialPredicate::Projection(__arg1_0)) =>
                    __self_0 == __arg1_0,
                (ExistentialPredicate::AutoTrait(__self_0),
                    ExistentialPredicate::AutoTrait(__arg1_0)) =>
                    __self_0 == __arg1_0,
                _ => unsafe { ::core::intrinsics::unreachable() }
            }
    }
}PartialEq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for ExistentialPredicate {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    ExistentialPredicate::Trait(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "ExistentialPredicate", 0u32, "Trait", __field0),
                    ExistentialPredicate::Projection(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "ExistentialPredicate", 1u32, "Projection", __field0),
                    ExistentialPredicate::AutoTrait(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "ExistentialPredicate", 2u32, "AutoTrait", __field0),
                }
            }
        }
    };Serialize)]
948pub enum ExistentialPredicate {
949    Trait(ExistentialTraitRef),
950    Projection(ExistentialProjection),
951    AutoTrait(TraitDef),
952}
953
954/// An existential reference to a trait where `Self` is not included.
955///
956/// The `generic_args` will include any other known argument.
957#[derive(#[automatically_derived]
impl ::core::clone::Clone for ExistentialTraitRef {
    #[inline]
    fn clone(&self) -> ExistentialTraitRef {
        ExistentialTraitRef {
            def_id: ::core::clone::Clone::clone(&self.def_id),
            generic_args: ::core::clone::Clone::clone(&self.generic_args),
        }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for ExistentialTraitRef {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f,
            "ExistentialTraitRef", "def_id", &self.def_id, "generic_args",
            &&self.generic_args)
    }
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for ExistentialTraitRef {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<TraitDef>;
        let _: ::core::cmp::AssertParamIsEq<GenericArgs>;
    }
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for ExistentialTraitRef {
    #[inline]
    fn eq(&self, other: &ExistentialTraitRef) -> bool {
        self.def_id == other.def_id && self.generic_args == other.generic_args
    }
}PartialEq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for ExistentialTraitRef {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                let mut __serde_state =
                    _serde::Serializer::serialize_struct(__serializer,
                            "ExistentialTraitRef", false as usize + 1 + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "def_id", &self.def_id)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "generic_args", &self.generic_args)?;
                _serde::ser::SerializeStruct::end(__serde_state)
            }
        }
    };Serialize)]
958pub struct ExistentialTraitRef {
959    pub def_id: TraitDef,
960    pub generic_args: GenericArgs,
961}
962
963impl Binder<ExistentialTraitRef> {
964    pub fn with_self_ty(&self, self_ty: Ty) -> Binder<TraitRef> {
965        self.map_bound_ref(|trait_ref| trait_ref.with_self_ty(self_ty))
966    }
967}
968
969impl ExistentialTraitRef {
970    pub fn with_self_ty(&self, self_ty: Ty) -> TraitRef {
971        TraitRef::new(self.def_id, self_ty, &self.generic_args)
972    }
973}
974
975#[derive(#[automatically_derived]
impl ::core::clone::Clone for ExistentialProjection {
    #[inline]
    fn clone(&self) -> ExistentialProjection {
        ExistentialProjection {
            def_id: ::core::clone::Clone::clone(&self.def_id),
            generic_args: ::core::clone::Clone::clone(&self.generic_args),
            term: ::core::clone::Clone::clone(&self.term),
        }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for ExistentialProjection {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field3_finish(f,
            "ExistentialProjection", "def_id", &self.def_id, "generic_args",
            &self.generic_args, "term", &&self.term)
    }
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for ExistentialProjection {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<TraitDef>;
        let _: ::core::cmp::AssertParamIsEq<GenericArgs>;
        let _: ::core::cmp::AssertParamIsEq<TermKind>;
    }
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for ExistentialProjection {
    #[inline]
    fn eq(&self, other: &ExistentialProjection) -> bool {
        self.def_id == other.def_id && self.generic_args == other.generic_args
            && self.term == other.term
    }
}PartialEq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for ExistentialProjection {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                let mut __serde_state =
                    _serde::Serializer::serialize_struct(__serializer,
                            "ExistentialProjection", false as usize + 1 + 1 + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "def_id", &self.def_id)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "generic_args", &self.generic_args)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "term", &self.term)?;
                _serde::ser::SerializeStruct::end(__serde_state)
            }
        }
    };Serialize)]
976pub struct ExistentialProjection {
977    pub def_id: TraitDef,
978    pub generic_args: GenericArgs,
979    pub term: TermKind,
980}
981
982#[derive(#[automatically_derived]
impl ::core::clone::Clone for ParamTy {
    #[inline]
    fn clone(&self) -> ParamTy {
        ParamTy {
            index: ::core::clone::Clone::clone(&self.index),
            name: ::core::clone::Clone::clone(&self.name),
        }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for ParamTy {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f, "ParamTy",
            "index", &self.index, "name", &&self.name)
    }
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for ParamTy {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<u32>;
        let _: ::core::cmp::AssertParamIsEq<String>;
    }
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for ParamTy {
    #[inline]
    fn eq(&self, other: &ParamTy) -> bool {
        self.index == other.index && self.name == other.name
    }
}PartialEq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for ParamTy {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                let mut __serde_state =
                    _serde::Serializer::serialize_struct(__serializer,
                            "ParamTy", false as usize + 1 + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "index", &self.index)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "name", &self.name)?;
                _serde::ser::SerializeStruct::end(__serde_state)
            }
        }
    };Serialize)]
983pub struct ParamTy {
984    pub index: u32,
985    pub name: String,
986}
987
988#[derive(#[automatically_derived]
impl ::core::clone::Clone for BoundTy {
    #[inline]
    fn clone(&self) -> BoundTy {
        BoundTy {
            var: ::core::clone::Clone::clone(&self.var),
            kind: ::core::clone::Clone::clone(&self.kind),
        }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for BoundTy {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f, "BoundTy",
            "var", &self.var, "kind", &&self.kind)
    }
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for BoundTy {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<usize>;
        let _: ::core::cmp::AssertParamIsEq<BoundTyKind>;
    }
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for BoundTy {
    #[inline]
    fn eq(&self, other: &BoundTy) -> bool {
        self.var == other.var && self.kind == other.kind
    }
}PartialEq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for BoundTy {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                let mut __serde_state =
                    _serde::Serializer::serialize_struct(__serializer,
                            "BoundTy", false as usize + 1 + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "var", &self.var)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "kind", &self.kind)?;
                _serde::ser::SerializeStruct::end(__serde_state)
            }
        }
    };Serialize)]
989pub struct BoundTy {
990    pub var: usize,
991    pub kind: BoundTyKind,
992}
993
994pub type Bytes = Vec<Option<u8>>;
995
996/// Size in bytes.
997pub type Size = usize;
998
999#[derive(#[automatically_derived]
impl ::core::clone::Clone for Prov {
    #[inline]
    fn clone(&self) -> Prov {
        let _: ::core::clone::AssertParamIsClone<AllocId>;
        *self
    }
}Clone, #[automatically_derived]
impl ::core::marker::Copy for Prov { }Copy, #[automatically_derived]
impl ::core::cmp::PartialEq for Prov {
    #[inline]
    fn eq(&self, other: &Prov) -> bool { self.0 == other.0 }
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for Prov {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<AllocId>;
    }
}Eq, #[automatically_derived]
impl ::core::fmt::Debug for Prov {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_tuple_field1_finish(f, "Prov", &&self.0)
    }
}Debug, #[automatically_derived]
impl ::core::hash::Hash for Prov {
    #[inline]
    fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
        ::core::hash::Hash::hash(&self.0, state)
    }
}Hash, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for Prov {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                _serde::Serializer::serialize_newtype_struct(__serializer,
                    "Prov", &self.0)
            }
        }
    };Serialize)]
1000pub struct Prov(pub AllocId);
1001
1002pub type Align = u64;
1003pub type Promoted = u32;
1004pub type InitMaskMaterialized = Vec<u64>;
1005
1006/// Stores the provenance information of pointers stored in memory.
1007#[derive(#[automatically_derived]
impl ::core::clone::Clone for ProvenanceMap {
    #[inline]
    fn clone(&self) -> ProvenanceMap {
        ProvenanceMap { ptrs: ::core::clone::Clone::clone(&self.ptrs) }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for ProvenanceMap {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field1_finish(f, "ProvenanceMap",
            "ptrs", &&self.ptrs)
    }
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for ProvenanceMap {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<Vec<(Size, Prov)>>;
    }
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for ProvenanceMap {
    #[inline]
    fn eq(&self, other: &ProvenanceMap) -> bool { self.ptrs == other.ptrs }
}PartialEq, #[automatically_derived]
impl ::core::hash::Hash for ProvenanceMap {
    #[inline]
    fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
        ::core::hash::Hash::hash(&self.ptrs, state)
    }
}Hash, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for ProvenanceMap {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                let mut __serde_state =
                    _serde::Serializer::serialize_struct(__serializer,
                            "ProvenanceMap", false as usize + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "ptrs", &self.ptrs)?;
                _serde::ser::SerializeStruct::end(__serde_state)
            }
        }
    };Serialize)]
1008pub struct ProvenanceMap {
1009    /// Provenance in this map applies from the given offset for an entire pointer-size worth of
1010    /// bytes. Two entries in this map are always at least a pointer size apart.
1011    pub ptrs: Vec<(Size, Prov)>,
1012}
1013
1014#[derive(#[automatically_derived]
impl ::core::clone::Clone for Allocation {
    #[inline]
    fn clone(&self) -> Allocation {
        Allocation {
            bytes: ::core::clone::Clone::clone(&self.bytes),
            provenance: ::core::clone::Clone::clone(&self.provenance),
            align: ::core::clone::Clone::clone(&self.align),
            mutability: ::core::clone::Clone::clone(&self.mutability),
        }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for Allocation {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field4_finish(f, "Allocation",
            "bytes", &self.bytes, "provenance", &self.provenance, "align",
            &self.align, "mutability", &&self.mutability)
    }
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for Allocation {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<Bytes>;
        let _: ::core::cmp::AssertParamIsEq<ProvenanceMap>;
        let _: ::core::cmp::AssertParamIsEq<Align>;
        let _: ::core::cmp::AssertParamIsEq<Mutability>;
    }
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for Allocation {
    #[inline]
    fn eq(&self, other: &Allocation) -> bool {
        self.bytes == other.bytes && self.provenance == other.provenance &&
                self.align == other.align &&
            self.mutability == other.mutability
    }
}PartialEq, #[automatically_derived]
impl ::core::hash::Hash for Allocation {
    #[inline]
    fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
        ::core::hash::Hash::hash(&self.bytes, state);
        ::core::hash::Hash::hash(&self.provenance, state);
        ::core::hash::Hash::hash(&self.align, state);
        ::core::hash::Hash::hash(&self.mutability, state)
    }
}Hash, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for Allocation {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                let mut __serde_state =
                    _serde::Serializer::serialize_struct(__serializer,
                            "Allocation", false as usize + 1 + 1 + 1 + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "bytes", &self.bytes)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "provenance", &self.provenance)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "align", &self.align)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "mutability", &self.mutability)?;
                _serde::ser::SerializeStruct::end(__serde_state)
            }
        }
    };Serialize)]
1015pub struct Allocation {
1016    pub bytes: Bytes,
1017    pub provenance: ProvenanceMap,
1018    pub align: Align,
1019    pub mutability: Mutability,
1020}
1021
1022impl Allocation {
1023    /// Get a vector of bytes for an Allocation that has been fully initialized
1024    pub fn raw_bytes(&self) -> Result<Vec<u8>, Error> {
1025        self.bytes
1026            .iter()
1027            .copied()
1028            .collect::<Option<Vec<_>>>()
1029            .ok_or_else(|| Error(::alloc::__export::must_use({
            ::alloc::fmt::format(format_args!("Found uninitialized bytes: `{0:?}`",
                    self.bytes))
        }))error!("Found uninitialized bytes: `{:?}`", self.bytes))
1030    }
1031
1032    /// Read a uint value from the specified range.
1033    pub fn read_partial_uint(&self, range: Range<usize>) -> Result<u128, Error> {
1034        if range.end - range.start > 16 {
1035            return Err(Error(::alloc::__export::must_use({
            ::alloc::fmt::format(format_args!("Allocation is bigger than largest integer"))
        }))error!("Allocation is bigger than largest integer"));
1036        }
1037        if range.end > self.bytes.len() {
1038            return Err(Error(::alloc::__export::must_use({
            ::alloc::fmt::format(format_args!("Range is out of bounds. Allocation length is `{0}`, but requested range `{1:?}`",
                    self.bytes.len(), range))
        }))error!(
1039                "Range is out of bounds. Allocation length is `{}`, but requested range `{:?}`",
1040                self.bytes.len(),
1041                range
1042            ));
1043        }
1044        let raw = self.bytes[range]
1045            .iter()
1046            .copied()
1047            .collect::<Option<Vec<_>>>()
1048            .ok_or_else(|| Error(::alloc::__export::must_use({
            ::alloc::fmt::format(format_args!("Found uninitialized bytes: `{0:?}`",
                    self.bytes))
        }))error!("Found uninitialized bytes: `{:?}`", self.bytes))?;
1049        read_target_uint(&raw)
1050    }
1051
1052    /// Read this allocation and try to convert it to an unassigned integer.
1053    pub fn read_uint(&self) -> Result<u128, Error> {
1054        if self.bytes.len() > 16 {
1055            return Err(Error(::alloc::__export::must_use({
            ::alloc::fmt::format(format_args!("Allocation is bigger than largest integer"))
        }))error!("Allocation is bigger than largest integer"));
1056        }
1057        let raw = self.raw_bytes()?;
1058        read_target_uint(&raw)
1059    }
1060
1061    /// Read this allocation and try to convert it to a signed integer.
1062    pub fn read_int(&self) -> Result<i128, Error> {
1063        if self.bytes.len() > 16 {
1064            return Err(Error(::alloc::__export::must_use({
            ::alloc::fmt::format(format_args!("Allocation is bigger than largest integer"))
        }))error!("Allocation is bigger than largest integer"));
1065        }
1066        let raw = self.raw_bytes()?;
1067        read_target_int(&raw)
1068    }
1069
1070    /// Read this allocation and try to convert it to a boolean.
1071    pub fn read_bool(&self) -> Result<bool, Error> {
1072        match self.read_int()? {
1073            0 => Ok(false),
1074            1 => Ok(true),
1075            val => Err(Error(::alloc::__export::must_use({
            ::alloc::fmt::format(format_args!("Unexpected value for bool: `{0}`",
                    val))
        }))error!("Unexpected value for bool: `{val}`")),
1076        }
1077    }
1078
1079    /// Read this allocation as a pointer and return whether it represents a `null` pointer.
1080    pub fn is_null(&self) -> Result<bool, Error> {
1081        let len = self.bytes.len();
1082        let ptr_len = MachineInfo::target_pointer_width().bytes();
1083        if len != ptr_len {
1084            return Err(Error(::alloc::__export::must_use({
            ::alloc::fmt::format(format_args!("Expected width of pointer (`{0}`), but found: `{1}`",
                    ptr_len, len))
        }))error!("Expected width of pointer (`{ptr_len}`), but found: `{len}`"));
1085        }
1086        Ok(self.read_uint()? == 0 && self.provenance.ptrs.is_empty())
1087    }
1088}
1089
1090#[derive(#[automatically_derived]
impl ::core::clone::Clone for ConstantKind {
    #[inline]
    fn clone(&self) -> ConstantKind {
        match self {
            ConstantKind::Ty(__self_0) =>
                ConstantKind::Ty(::core::clone::Clone::clone(__self_0)),
            ConstantKind::Allocated(__self_0) =>
                ConstantKind::Allocated(::core::clone::Clone::clone(__self_0)),
            ConstantKind::Unevaluated(__self_0) =>
                ConstantKind::Unevaluated(::core::clone::Clone::clone(__self_0)),
            ConstantKind::Param(__self_0) =>
                ConstantKind::Param(::core::clone::Clone::clone(__self_0)),
            ConstantKind::ZeroSized => ConstantKind::ZeroSized,
        }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for ConstantKind {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        match self {
            ConstantKind::Ty(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "Ty",
                    &__self_0),
            ConstantKind::Allocated(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "Allocated", &__self_0),
            ConstantKind::Unevaluated(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "Unevaluated", &__self_0),
            ConstantKind::Param(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "Param",
                    &__self_0),
            ConstantKind::ZeroSized =>
                ::core::fmt::Formatter::write_str(f, "ZeroSized"),
        }
    }
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for ConstantKind {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<TyConst>;
        let _: ::core::cmp::AssertParamIsEq<Allocation>;
        let _: ::core::cmp::AssertParamIsEq<UnevaluatedConst>;
        let _: ::core::cmp::AssertParamIsEq<ParamConst>;
    }
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for ConstantKind {
    #[inline]
    fn eq(&self, other: &ConstantKind) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr &&
            match (self, other) {
                (ConstantKind::Ty(__self_0), ConstantKind::Ty(__arg1_0)) =>
                    __self_0 == __arg1_0,
                (ConstantKind::Allocated(__self_0),
                    ConstantKind::Allocated(__arg1_0)) => __self_0 == __arg1_0,
                (ConstantKind::Unevaluated(__self_0),
                    ConstantKind::Unevaluated(__arg1_0)) =>
                    __self_0 == __arg1_0,
                (ConstantKind::Param(__self_0), ConstantKind::Param(__arg1_0))
                    => __self_0 == __arg1_0,
                _ => true,
            }
    }
}PartialEq, #[automatically_derived]
impl ::core::hash::Hash for ConstantKind {
    #[inline]
    fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        ::core::hash::Hash::hash(&__self_discr, state);
        match self {
            ConstantKind::Ty(__self_0) =>
                ::core::hash::Hash::hash(__self_0, state),
            ConstantKind::Allocated(__self_0) =>
                ::core::hash::Hash::hash(__self_0, state),
            ConstantKind::Unevaluated(__self_0) =>
                ::core::hash::Hash::hash(__self_0, state),
            ConstantKind::Param(__self_0) =>
                ::core::hash::Hash::hash(__self_0, state),
            _ => {}
        }
    }
}Hash, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for ConstantKind {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    ConstantKind::Ty(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "ConstantKind", 0u32, "Ty", __field0),
                    ConstantKind::Allocated(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "ConstantKind", 1u32, "Allocated", __field0),
                    ConstantKind::Unevaluated(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "ConstantKind", 2u32, "Unevaluated", __field0),
                    ConstantKind::Param(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "ConstantKind", 3u32, "Param", __field0),
                    ConstantKind::ZeroSized =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "ConstantKind", 4u32, "ZeroSized"),
                }
            }
        }
    };Serialize)]
1091pub enum ConstantKind {
1092    Ty(TyConst),
1093    Allocated(Allocation),
1094    Unevaluated(UnevaluatedConst),
1095    Param(ParamConst),
1096    /// Store ZST constants.
1097    /// We have to special handle these constants since its type might be generic.
1098    ZeroSized,
1099}
1100
1101#[derive(#[automatically_derived]
impl ::core::clone::Clone for ParamConst {
    #[inline]
    fn clone(&self) -> ParamConst {
        ParamConst {
            index: ::core::clone::Clone::clone(&self.index),
            name: ::core::clone::Clone::clone(&self.name),
        }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for ParamConst {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f, "ParamConst",
            "index", &self.index, "name", &&self.name)
    }
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for ParamConst {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<u32>;
        let _: ::core::cmp::AssertParamIsEq<String>;
    }
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for ParamConst {
    #[inline]
    fn eq(&self, other: &ParamConst) -> bool {
        self.index == other.index && self.name == other.name
    }
}PartialEq, #[automatically_derived]
impl ::core::hash::Hash for ParamConst {
    #[inline]
    fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
        ::core::hash::Hash::hash(&self.index, state);
        ::core::hash::Hash::hash(&self.name, state)
    }
}Hash, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for ParamConst {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                let mut __serde_state =
                    _serde::Serializer::serialize_struct(__serializer,
                            "ParamConst", false as usize + 1 + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "index", &self.index)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "name", &self.name)?;
                _serde::ser::SerializeStruct::end(__serde_state)
            }
        }
    };Serialize)]
1102pub struct ParamConst {
1103    pub index: u32,
1104    pub name: String,
1105}
1106
1107#[derive(#[automatically_derived]
impl ::core::clone::Clone for UnevaluatedConst {
    #[inline]
    fn clone(&self) -> UnevaluatedConst {
        UnevaluatedConst {
            def: ::core::clone::Clone::clone(&self.def),
            args: ::core::clone::Clone::clone(&self.args),
            promoted: ::core::clone::Clone::clone(&self.promoted),
        }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for UnevaluatedConst {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field3_finish(f,
            "UnevaluatedConst", "def", &self.def, "args", &self.args,
            "promoted", &&self.promoted)
    }
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for UnevaluatedConst {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<ConstDef>;
        let _: ::core::cmp::AssertParamIsEq<GenericArgs>;
        let _: ::core::cmp::AssertParamIsEq<Option<Promoted>>;
    }
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for UnevaluatedConst {
    #[inline]
    fn eq(&self, other: &UnevaluatedConst) -> bool {
        self.def == other.def && self.args == other.args &&
            self.promoted == other.promoted
    }
}PartialEq, #[automatically_derived]
impl ::core::hash::Hash for UnevaluatedConst {
    #[inline]
    fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
        ::core::hash::Hash::hash(&self.def, state);
        ::core::hash::Hash::hash(&self.args, state);
        ::core::hash::Hash::hash(&self.promoted, state)
    }
}Hash, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for UnevaluatedConst {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                let mut __serde_state =
                    _serde::Serializer::serialize_struct(__serializer,
                            "UnevaluatedConst", false as usize + 1 + 1 + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "def", &self.def)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "args", &self.args)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "promoted", &self.promoted)?;
                _serde::ser::SerializeStruct::end(__serde_state)
            }
        }
    };Serialize)]
1108pub struct UnevaluatedConst {
1109    pub def: ConstDef,
1110    pub args: GenericArgs,
1111    pub promoted: Option<Promoted>,
1112}
1113
1114#[derive(#[automatically_derived]
impl ::core::clone::Clone for TraitSpecializationKind {
    #[inline]
    fn clone(&self) -> TraitSpecializationKind { *self }
}Clone, #[automatically_derived]
impl ::core::marker::Copy for TraitSpecializationKind { }Copy, #[automatically_derived]
impl ::core::fmt::Debug for TraitSpecializationKind {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::write_str(f,
            match self {
                TraitSpecializationKind::None => "None",
                TraitSpecializationKind::Marker => "Marker",
                TraitSpecializationKind::AlwaysApplicable =>
                    "AlwaysApplicable",
            })
    }
}Debug, #[automatically_derived]
impl ::core::cmp::PartialEq for TraitSpecializationKind {
    #[inline]
    fn eq(&self, other: &TraitSpecializationKind) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr
    }
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for TraitSpecializationKind {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {}
}Eq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for TraitSpecializationKind {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    TraitSpecializationKind::None =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TraitSpecializationKind", 0u32, "None"),
                    TraitSpecializationKind::Marker =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TraitSpecializationKind", 1u32, "Marker"),
                    TraitSpecializationKind::AlwaysApplicable =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "TraitSpecializationKind", 2u32, "AlwaysApplicable"),
                }
            }
        }
    };Serialize)]
1115pub enum TraitSpecializationKind {
1116    None,
1117    Marker,
1118    AlwaysApplicable,
1119}
1120
1121#[derive(#[automatically_derived]
impl ::core::clone::Clone for TraitDecl {
    #[inline]
    fn clone(&self) -> TraitDecl {
        TraitDecl {
            def_id: ::core::clone::Clone::clone(&self.def_id),
            safety: ::core::clone::Clone::clone(&self.safety),
            paren_sugar: ::core::clone::Clone::clone(&self.paren_sugar),
            has_auto_impl: ::core::clone::Clone::clone(&self.has_auto_impl),
            is_marker: ::core::clone::Clone::clone(&self.is_marker),
            is_coinductive: ::core::clone::Clone::clone(&self.is_coinductive),
            skip_array_during_method_dispatch: ::core::clone::Clone::clone(&self.skip_array_during_method_dispatch),
            skip_boxed_slice_during_method_dispatch: ::core::clone::Clone::clone(&self.skip_boxed_slice_during_method_dispatch),
            specialization_kind: ::core::clone::Clone::clone(&self.specialization_kind),
            must_implement_one_of: ::core::clone::Clone::clone(&self.must_implement_one_of),
            force_dyn_incompatible: ::core::clone::Clone::clone(&self.force_dyn_incompatible),
            deny_explicit_impl: ::core::clone::Clone::clone(&self.deny_explicit_impl),
        }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for TraitDecl {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        let names: &'static _ =
            &["def_id", "safety", "paren_sugar", "has_auto_impl", "is_marker",
                        "is_coinductive", "skip_array_during_method_dispatch",
                        "skip_boxed_slice_during_method_dispatch",
                        "specialization_kind", "must_implement_one_of",
                        "force_dyn_incompatible", "deny_explicit_impl"];
        let values: &[&dyn ::core::fmt::Debug] =
            &[&self.def_id, &self.safety, &self.paren_sugar,
                        &self.has_auto_impl, &self.is_marker, &self.is_coinductive,
                        &self.skip_array_during_method_dispatch,
                        &self.skip_boxed_slice_during_method_dispatch,
                        &self.specialization_kind, &self.must_implement_one_of,
                        &self.force_dyn_incompatible, &&self.deny_explicit_impl];
        ::core::fmt::Formatter::debug_struct_fields_finish(f, "TraitDecl",
            names, values)
    }
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for TraitDecl {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<TraitDef>;
        let _: ::core::cmp::AssertParamIsEq<Safety>;
        let _: ::core::cmp::AssertParamIsEq<bool>;
        let _: ::core::cmp::AssertParamIsEq<TraitSpecializationKind>;
        let _: ::core::cmp::AssertParamIsEq<Option<Vec<Ident>>>;
        let _: ::core::cmp::AssertParamIsEq<Option<Span>>;
    }
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for TraitDecl {
    #[inline]
    fn eq(&self, other: &TraitDecl) -> bool {
        self.paren_sugar == other.paren_sugar &&
                                                    self.has_auto_impl == other.has_auto_impl &&
                                                self.is_marker == other.is_marker &&
                                            self.is_coinductive == other.is_coinductive &&
                                        self.skip_array_during_method_dispatch ==
                                            other.skip_array_during_method_dispatch &&
                                    self.skip_boxed_slice_during_method_dispatch ==
                                        other.skip_boxed_slice_during_method_dispatch &&
                                self.deny_explicit_impl == other.deny_explicit_impl &&
                            self.def_id == other.def_id && self.safety == other.safety
                    && self.specialization_kind == other.specialization_kind &&
                self.must_implement_one_of == other.must_implement_one_of &&
            self.force_dyn_incompatible == other.force_dyn_incompatible
    }
}PartialEq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for TraitDecl {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                let mut __serde_state =
                    _serde::Serializer::serialize_struct(__serializer,
                            "TraitDecl",
                            false as usize + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 +
                                1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "def_id", &self.def_id)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "safety", &self.safety)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "paren_sugar", &self.paren_sugar)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "has_auto_impl", &self.has_auto_impl)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "is_marker", &self.is_marker)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "is_coinductive", &self.is_coinductive)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "skip_array_during_method_dispatch",
                        &self.skip_array_during_method_dispatch)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "skip_boxed_slice_during_method_dispatch",
                        &self.skip_boxed_slice_during_method_dispatch)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "specialization_kind", &self.specialization_kind)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "must_implement_one_of", &self.must_implement_one_of)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "force_dyn_incompatible", &self.force_dyn_incompatible)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "deny_explicit_impl", &self.deny_explicit_impl)?;
                _serde::ser::SerializeStruct::end(__serde_state)
            }
        }
    };Serialize)]
1122pub struct TraitDecl {
1123    pub def_id: TraitDef,
1124    pub safety: Safety,
1125    pub paren_sugar: bool,
1126    pub has_auto_impl: bool,
1127    pub is_marker: bool,
1128    pub is_coinductive: bool,
1129    pub skip_array_during_method_dispatch: bool,
1130    pub skip_boxed_slice_during_method_dispatch: bool,
1131    pub specialization_kind: TraitSpecializationKind,
1132    pub must_implement_one_of: Option<Vec<Ident>>,
1133    pub force_dyn_incompatible: Option<Span>,
1134    pub deny_explicit_impl: bool,
1135}
1136
1137impl TraitDecl {
1138    pub fn generics_of(&self) -> Generics {
1139        with(|cx| cx.generics_of(self.def_id.0))
1140    }
1141
1142    pub fn clauses_of(&self) -> GenericClauses {
1143        with(|cx| cx.clauses_of(self.def_id.0))
1144    }
1145
1146    pub fn explicit_clauses_of(&self) -> GenericClauses {
1147        with(|cx| cx.explicit_clauses_of(self.def_id.0))
1148    }
1149}
1150
1151pub type ImplTrait = EarlyBinder<TraitRef>;
1152
1153/// A complete reference to a trait, i.e., one where `Self` is known.
1154#[derive(#[automatically_derived]
impl ::core::clone::Clone for TraitRef {
    #[inline]
    fn clone(&self) -> TraitRef {
        TraitRef {
            def_id: ::core::clone::Clone::clone(&self.def_id),
            args: ::core::clone::Clone::clone(&self.args),
        }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for TraitRef {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f, "TraitRef",
            "def_id", &self.def_id, "args", &&self.args)
    }
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for TraitRef {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<TraitDef>;
        let _: ::core::cmp::AssertParamIsEq<GenericArgs>;
    }
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for TraitRef {
    #[inline]
    fn eq(&self, other: &TraitRef) -> bool {
        self.def_id == other.def_id && self.args == other.args
    }
}PartialEq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for TraitRef {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                let mut __serde_state =
                    _serde::Serializer::serialize_struct(__serializer,
                            "TraitRef", false as usize + 1 + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "def_id", &self.def_id)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "args", &self.args)?;
                _serde::ser::SerializeStruct::end(__serde_state)
            }
        }
    };Serialize)]
1155pub struct TraitRef {
1156    pub def_id: TraitDef,
1157    /// The generic arguments for this definition.
1158    /// The first element must always be type, and it represents `Self`.
1159    args: GenericArgs,
1160}
1161
1162impl TraitRef {
1163    pub fn new(def_id: TraitDef, self_ty: Ty, gen_args: &GenericArgs) -> TraitRef {
1164        let mut args = ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
        [GenericArgKind::Type(self_ty)]))vec![GenericArgKind::Type(self_ty)];
1165        args.extend_from_slice(&gen_args.0);
1166        TraitRef { def_id, args: GenericArgs(args) }
1167    }
1168
1169    pub fn try_new(def_id: TraitDef, args: GenericArgs) -> Result<TraitRef, ()> {
1170        match &args.0[..] {
1171            [GenericArgKind::Type(_), ..] => Ok(TraitRef { def_id, args }),
1172            _ => Err(()),
1173        }
1174    }
1175
1176    pub fn args(&self) -> &GenericArgs {
1177        &self.args
1178    }
1179
1180    pub fn self_ty(&self) -> Ty {
1181        let GenericArgKind::Type(self_ty) = self.args.0[0] else {
1182            {
    ::core::panicking::panic_fmt(format_args!("Self must be a type, but found: {0:?}",
            self.args.0[0]));
}panic!("Self must be a type, but found: {:?}", self.args.0[0])
1183        };
1184        self_ty
1185    }
1186
1187    /// Retrieve all vtable entries.
1188    pub fn vtable_entries(&self) -> Vec<VtblEntry> {
1189        with(|cx| cx.vtable_entries(self))
1190    }
1191
1192    /// Returns the vtable entry at the given index.
1193    ///
1194    /// Returns `None` if the index is out of bounds.
1195    pub fn vtable_entry(&self, idx: usize) -> Option<VtblEntry> {
1196        with(|cx| cx.vtable_entry(self, idx))
1197    }
1198}
1199
1200#[derive(#[automatically_derived]
impl ::core::clone::Clone for Generics {
    #[inline]
    fn clone(&self) -> Generics {
        Generics {
            parent: ::core::clone::Clone::clone(&self.parent),
            parent_count: ::core::clone::Clone::clone(&self.parent_count),
            params: ::core::clone::Clone::clone(&self.params),
            param_def_id_to_index: ::core::clone::Clone::clone(&self.param_def_id_to_index),
            has_self: ::core::clone::Clone::clone(&self.has_self),
            has_late_bound_regions: ::core::clone::Clone::clone(&self.has_late_bound_regions),
        }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for Generics {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        let names: &'static _ =
            &["parent", "parent_count", "params", "param_def_id_to_index",
                        "has_self", "has_late_bound_regions"];
        let values: &[&dyn ::core::fmt::Debug] =
            &[&self.parent, &self.parent_count, &self.params,
                        &self.param_def_id_to_index, &self.has_self,
                        &&self.has_late_bound_regions];
        ::core::fmt::Formatter::debug_struct_fields_finish(f, "Generics",
            names, values)
    }
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for Generics {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<Option<GenericDef>>;
        let _: ::core::cmp::AssertParamIsEq<usize>;
        let _: ::core::cmp::AssertParamIsEq<Vec<GenericParamDef>>;
        let _: ::core::cmp::AssertParamIsEq<Vec<(GenericDef, u32)>>;
        let _: ::core::cmp::AssertParamIsEq<bool>;
        let _: ::core::cmp::AssertParamIsEq<Option<Span>>;
    }
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for Generics {
    #[inline]
    fn eq(&self, other: &Generics) -> bool {
        self.has_self == other.has_self && self.parent == other.parent &&
                        self.parent_count == other.parent_count &&
                    self.params == other.params &&
                self.param_def_id_to_index == other.param_def_id_to_index &&
            self.has_late_bound_regions == other.has_late_bound_regions
    }
}PartialEq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for Generics {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                let mut __serde_state =
                    _serde::Serializer::serialize_struct(__serializer,
                            "Generics", false as usize + 1 + 1 + 1 + 1 + 1 + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "parent", &self.parent)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "parent_count", &self.parent_count)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "params", &self.params)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "param_def_id_to_index", &self.param_def_id_to_index)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "has_self", &self.has_self)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "has_late_bound_regions", &self.has_late_bound_regions)?;
                _serde::ser::SerializeStruct::end(__serde_state)
            }
        }
    };Serialize)]
1201pub struct Generics {
1202    pub parent: Option<GenericDef>,
1203    pub parent_count: usize,
1204    pub params: Vec<GenericParamDef>,
1205    pub param_def_id_to_index: Vec<(GenericDef, u32)>,
1206    pub has_self: bool,
1207    pub has_late_bound_regions: Option<Span>,
1208}
1209
1210#[derive(#[automatically_derived]
impl ::core::clone::Clone for GenericParamDefKind {
    #[inline]
    fn clone(&self) -> GenericParamDefKind {
        match self {
            GenericParamDefKind::Lifetime => GenericParamDefKind::Lifetime,
            GenericParamDefKind::Type {
                has_default: __self_0, synthetic: __self_1 } =>
                GenericParamDefKind::Type {
                    has_default: ::core::clone::Clone::clone(__self_0),
                    synthetic: ::core::clone::Clone::clone(__self_1),
                },
            GenericParamDefKind::Const { has_default: __self_0 } =>
                GenericParamDefKind::Const {
                    has_default: ::core::clone::Clone::clone(__self_0),
                },
        }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for GenericParamDefKind {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        match self {
            GenericParamDefKind::Lifetime =>
                ::core::fmt::Formatter::write_str(f, "Lifetime"),
            GenericParamDefKind::Type {
                has_default: __self_0, synthetic: __self_1 } =>
                ::core::fmt::Formatter::debug_struct_field2_finish(f, "Type",
                    "has_default", __self_0, "synthetic", &__self_1),
            GenericParamDefKind::Const { has_default: __self_0 } =>
                ::core::fmt::Formatter::debug_struct_field1_finish(f, "Const",
                    "has_default", &__self_0),
        }
    }
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for GenericParamDefKind {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<bool>;
    }
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for GenericParamDefKind {
    #[inline]
    fn eq(&self, other: &GenericParamDefKind) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr &&
            match (self, other) {
                (GenericParamDefKind::Type {
                    has_default: __self_0, synthetic: __self_1 },
                    GenericParamDefKind::Type {
                    has_default: __arg1_0, synthetic: __arg1_1 }) =>
                    __self_0 == __arg1_0 && __self_1 == __arg1_1,
                (GenericParamDefKind::Const { has_default: __self_0 },
                    GenericParamDefKind::Const { has_default: __arg1_0 }) =>
                    __self_0 == __arg1_0,
                _ => true,
            }
    }
}PartialEq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for GenericParamDefKind {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    GenericParamDefKind::Lifetime =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "GenericParamDefKind", 0u32, "Lifetime"),
                    GenericParamDefKind::Type { ref has_default, ref synthetic }
                        => {
                        let mut __serde_state =
                            _serde::Serializer::serialize_struct_variant(__serializer,
                                    "GenericParamDefKind", 1u32, "Type", 0 + 1 + 1)?;
                        _serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
                                "has_default", has_default)?;
                        _serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
                                "synthetic", synthetic)?;
                        _serde::ser::SerializeStructVariant::end(__serde_state)
                    }
                    GenericParamDefKind::Const { ref has_default } => {
                        let mut __serde_state =
                            _serde::Serializer::serialize_struct_variant(__serializer,
                                    "GenericParamDefKind", 2u32, "Const", 0 + 1)?;
                        _serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
                                "has_default", has_default)?;
                        _serde::ser::SerializeStructVariant::end(__serde_state)
                    }
                }
            }
        }
    };Serialize)]
1211pub enum GenericParamDefKind {
1212    Lifetime,
1213    Type { has_default: bool, synthetic: bool },
1214    Const { has_default: bool },
1215}
1216
1217pub struct GenericClauses {
1218    pub parent: Option<TraitDef>,
1219    pub clauses: Vec<(ClauseKind, Span)>,
1220}
1221
1222#[derive(#[automatically_derived]
impl ::core::clone::Clone for PredicateKind {
    #[inline]
    fn clone(&self) -> PredicateKind {
        match self {
            PredicateKind::Clause(__self_0) =>
                PredicateKind::Clause(::core::clone::Clone::clone(__self_0)),
            PredicateKind::DynCompatible(__self_0) =>
                PredicateKind::DynCompatible(::core::clone::Clone::clone(__self_0)),
            PredicateKind::SubType(__self_0) =>
                PredicateKind::SubType(::core::clone::Clone::clone(__self_0)),
            PredicateKind::Coerce(__self_0) =>
                PredicateKind::Coerce(::core::clone::Clone::clone(__self_0)),
            PredicateKind::ConstEquate(__self_0, __self_1) =>
                PredicateKind::ConstEquate(::core::clone::Clone::clone(__self_0),
                    ::core::clone::Clone::clone(__self_1)),
            PredicateKind::Ambiguous => PredicateKind::Ambiguous,
        }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for PredicateKind {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        match self {
            PredicateKind::Clause(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "Clause",
                    &__self_0),
            PredicateKind::DynCompatible(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "DynCompatible", &__self_0),
            PredicateKind::SubType(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "SubType", &__self_0),
            PredicateKind::Coerce(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "Coerce",
                    &__self_0),
            PredicateKind::ConstEquate(__self_0, __self_1) =>
                ::core::fmt::Formatter::debug_tuple_field2_finish(f,
                    "ConstEquate", __self_0, &__self_1),
            PredicateKind::Ambiguous =>
                ::core::fmt::Formatter::write_str(f, "Ambiguous"),
        }
    }
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for PredicateKind {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<ClauseKind>;
        let _: ::core::cmp::AssertParamIsEq<TraitDef>;
        let _: ::core::cmp::AssertParamIsEq<SubtypePredicate>;
        let _: ::core::cmp::AssertParamIsEq<CoercePredicate>;
        let _: ::core::cmp::AssertParamIsEq<TyConst>;
    }
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for PredicateKind {
    #[inline]
    fn eq(&self, other: &PredicateKind) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr &&
            match (self, other) {
                (PredicateKind::Clause(__self_0),
                    PredicateKind::Clause(__arg1_0)) => __self_0 == __arg1_0,
                (PredicateKind::DynCompatible(__self_0),
                    PredicateKind::DynCompatible(__arg1_0)) =>
                    __self_0 == __arg1_0,
                (PredicateKind::SubType(__self_0),
                    PredicateKind::SubType(__arg1_0)) => __self_0 == __arg1_0,
                (PredicateKind::Coerce(__self_0),
                    PredicateKind::Coerce(__arg1_0)) => __self_0 == __arg1_0,
                (PredicateKind::ConstEquate(__self_0, __self_1),
                    PredicateKind::ConstEquate(__arg1_0, __arg1_1)) =>
                    __self_0 == __arg1_0 && __self_1 == __arg1_1,
                _ => true,
            }
    }
}PartialEq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for PredicateKind {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    PredicateKind::Clause(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "PredicateKind", 0u32, "Clause", __field0),
                    PredicateKind::DynCompatible(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "PredicateKind", 1u32, "DynCompatible", __field0),
                    PredicateKind::SubType(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "PredicateKind", 2u32, "SubType", __field0),
                    PredicateKind::Coerce(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "PredicateKind", 3u32, "Coerce", __field0),
                    PredicateKind::ConstEquate(ref __field0, ref __field1) => {
                        let mut __serde_state =
                            _serde::Serializer::serialize_tuple_variant(__serializer,
                                    "PredicateKind", 4u32, "ConstEquate", 0 + 1 + 1)?;
                        _serde::ser::SerializeTupleVariant::serialize_field(&mut __serde_state,
                                __field0)?;
                        _serde::ser::SerializeTupleVariant::serialize_field(&mut __serde_state,
                                __field1)?;
                        _serde::ser::SerializeTupleVariant::end(__serde_state)
                    }
                    PredicateKind::Ambiguous =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "PredicateKind", 5u32, "Ambiguous"),
                }
            }
        }
    };Serialize)]
1223pub enum PredicateKind {
1224    Clause(ClauseKind),
1225    DynCompatible(TraitDef),
1226    SubType(SubtypePredicate),
1227    Coerce(CoercePredicate),
1228    ConstEquate(TyConst, TyConst),
1229    Ambiguous,
1230}
1231
1232#[derive(#[automatically_derived]
impl ::core::clone::Clone for ClauseKind {
    #[inline]
    fn clone(&self) -> ClauseKind {
        match self {
            ClauseKind::Trait(__self_0) =>
                ClauseKind::Trait(::core::clone::Clone::clone(__self_0)),
            ClauseKind::RegionOutlives(__self_0) =>
                ClauseKind::RegionOutlives(::core::clone::Clone::clone(__self_0)),
            ClauseKind::TypeOutlives(__self_0) =>
                ClauseKind::TypeOutlives(::core::clone::Clone::clone(__self_0)),
            ClauseKind::Projection(__self_0) =>
                ClauseKind::Projection(::core::clone::Clone::clone(__self_0)),
            ClauseKind::ConstArgHasType(__self_0, __self_1) =>
                ClauseKind::ConstArgHasType(::core::clone::Clone::clone(__self_0),
                    ::core::clone::Clone::clone(__self_1)),
            ClauseKind::WellFormed(__self_0) =>
                ClauseKind::WellFormed(::core::clone::Clone::clone(__self_0)),
            ClauseKind::ConstEvaluatable(__self_0) =>
                ClauseKind::ConstEvaluatable(::core::clone::Clone::clone(__self_0)),
        }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for ClauseKind {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        match self {
            ClauseKind::Trait(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "Trait",
                    &__self_0),
            ClauseKind::RegionOutlives(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "RegionOutlives", &__self_0),
            ClauseKind::TypeOutlives(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "TypeOutlives", &__self_0),
            ClauseKind::Projection(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "Projection", &__self_0),
            ClauseKind::ConstArgHasType(__self_0, __self_1) =>
                ::core::fmt::Formatter::debug_tuple_field2_finish(f,
                    "ConstArgHasType", __self_0, &__self_1),
            ClauseKind::WellFormed(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "WellFormed", &__self_0),
            ClauseKind::ConstEvaluatable(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "ConstEvaluatable", &__self_0),
        }
    }
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for ClauseKind {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<TraitPredicate>;
        let _: ::core::cmp::AssertParamIsEq<RegionOutlivesClause>;
        let _: ::core::cmp::AssertParamIsEq<TypeOutlivesClause>;
        let _: ::core::cmp::AssertParamIsEq<ProjectionPredicate>;
        let _: ::core::cmp::AssertParamIsEq<TyConst>;
        let _: ::core::cmp::AssertParamIsEq<Ty>;
        let _: ::core::cmp::AssertParamIsEq<TermKind>;
    }
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for ClauseKind {
    #[inline]
    fn eq(&self, other: &ClauseKind) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr &&
            match (self, other) {
                (ClauseKind::Trait(__self_0), ClauseKind::Trait(__arg1_0)) =>
                    __self_0 == __arg1_0,
                (ClauseKind::RegionOutlives(__self_0),
                    ClauseKind::RegionOutlives(__arg1_0)) =>
                    __self_0 == __arg1_0,
                (ClauseKind::TypeOutlives(__self_0),
                    ClauseKind::TypeOutlives(__arg1_0)) => __self_0 == __arg1_0,
                (ClauseKind::Projection(__self_0),
                    ClauseKind::Projection(__arg1_0)) => __self_0 == __arg1_0,
                (ClauseKind::ConstArgHasType(__self_0, __self_1),
                    ClauseKind::ConstArgHasType(__arg1_0, __arg1_1)) =>
                    __self_0 == __arg1_0 && __self_1 == __arg1_1,
                (ClauseKind::WellFormed(__self_0),
                    ClauseKind::WellFormed(__arg1_0)) => __self_0 == __arg1_0,
                (ClauseKind::ConstEvaluatable(__self_0),
                    ClauseKind::ConstEvaluatable(__arg1_0)) =>
                    __self_0 == __arg1_0,
                _ => unsafe { ::core::intrinsics::unreachable() }
            }
    }
}PartialEq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for ClauseKind {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    ClauseKind::Trait(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "ClauseKind", 0u32, "Trait", __field0),
                    ClauseKind::RegionOutlives(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "ClauseKind", 1u32, "RegionOutlives", __field0),
                    ClauseKind::TypeOutlives(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "ClauseKind", 2u32, "TypeOutlives", __field0),
                    ClauseKind::Projection(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "ClauseKind", 3u32, "Projection", __field0),
                    ClauseKind::ConstArgHasType(ref __field0, ref __field1) => {
                        let mut __serde_state =
                            _serde::Serializer::serialize_tuple_variant(__serializer,
                                    "ClauseKind", 4u32, "ConstArgHasType", 0 + 1 + 1)?;
                        _serde::ser::SerializeTupleVariant::serialize_field(&mut __serde_state,
                                __field0)?;
                        _serde::ser::SerializeTupleVariant::serialize_field(&mut __serde_state,
                                __field1)?;
                        _serde::ser::SerializeTupleVariant::end(__serde_state)
                    }
                    ClauseKind::WellFormed(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "ClauseKind", 5u32, "WellFormed", __field0),
                    ClauseKind::ConstEvaluatable(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "ClauseKind", 6u32, "ConstEvaluatable", __field0),
                }
            }
        }
    };Serialize)]
1233pub enum ClauseKind {
1234    Trait(TraitPredicate),
1235    RegionOutlives(RegionOutlivesClause),
1236    TypeOutlives(TypeOutlivesClause),
1237    Projection(ProjectionPredicate),
1238    ConstArgHasType(TyConst, Ty),
1239    WellFormed(TermKind),
1240    ConstEvaluatable(TyConst),
1241}
1242
1243#[derive(#[automatically_derived]
impl ::core::clone::Clone for ClosureKind {
    #[inline]
    fn clone(&self) -> ClosureKind {
        match self {
            ClosureKind::Fn => ClosureKind::Fn,
            ClosureKind::FnMut => ClosureKind::FnMut,
            ClosureKind::FnOnce => ClosureKind::FnOnce,
        }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for ClosureKind {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::write_str(f,
            match self {
                ClosureKind::Fn => "Fn",
                ClosureKind::FnMut => "FnMut",
                ClosureKind::FnOnce => "FnOnce",
            })
    }
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for ClosureKind {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {}
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for ClosureKind {
    #[inline]
    fn eq(&self, other: &ClosureKind) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr
    }
}PartialEq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for ClosureKind {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    ClosureKind::Fn =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "ClosureKind", 0u32, "Fn"),
                    ClosureKind::FnMut =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "ClosureKind", 1u32, "FnMut"),
                    ClosureKind::FnOnce =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "ClosureKind", 2u32, "FnOnce"),
                }
            }
        }
    };Serialize)]
1244pub enum ClosureKind {
1245    Fn,
1246    FnMut,
1247    FnOnce,
1248}
1249
1250#[derive(#[automatically_derived]
impl ::core::clone::Clone for SubtypePredicate {
    #[inline]
    fn clone(&self) -> SubtypePredicate {
        SubtypePredicate {
            a: ::core::clone::Clone::clone(&self.a),
            b: ::core::clone::Clone::clone(&self.b),
        }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for SubtypePredicate {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f,
            "SubtypePredicate", "a", &self.a, "b", &&self.b)
    }
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for SubtypePredicate {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<Ty>;
    }
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for SubtypePredicate {
    #[inline]
    fn eq(&self, other: &SubtypePredicate) -> bool {
        self.a == other.a && self.b == other.b
    }
}PartialEq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for SubtypePredicate {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                let mut __serde_state =
                    _serde::Serializer::serialize_struct(__serializer,
                            "SubtypePredicate", false as usize + 1 + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "a", &self.a)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "b", &self.b)?;
                _serde::ser::SerializeStruct::end(__serde_state)
            }
        }
    };Serialize)]
1251pub struct SubtypePredicate {
1252    pub a: Ty,
1253    pub b: Ty,
1254}
1255
1256#[derive(#[automatically_derived]
impl ::core::clone::Clone for CoercePredicate {
    #[inline]
    fn clone(&self) -> CoercePredicate {
        CoercePredicate {
            a: ::core::clone::Clone::clone(&self.a),
            b: ::core::clone::Clone::clone(&self.b),
        }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for CoercePredicate {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f,
            "CoercePredicate", "a", &self.a, "b", &&self.b)
    }
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for CoercePredicate {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<Ty>;
    }
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for CoercePredicate {
    #[inline]
    fn eq(&self, other: &CoercePredicate) -> bool {
        self.a == other.a && self.b == other.b
    }
}PartialEq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for CoercePredicate {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                let mut __serde_state =
                    _serde::Serializer::serialize_struct(__serializer,
                            "CoercePredicate", false as usize + 1 + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "a", &self.a)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "b", &self.b)?;
                _serde::ser::SerializeStruct::end(__serde_state)
            }
        }
    };Serialize)]
1257pub struct CoercePredicate {
1258    pub a: Ty,
1259    pub b: Ty,
1260}
1261
1262#[derive(#[automatically_derived]
impl ::core::clone::Clone for TraitPredicate {
    #[inline]
    fn clone(&self) -> TraitPredicate {
        TraitPredicate {
            trait_ref: ::core::clone::Clone::clone(&self.trait_ref),
            polarity: ::core::clone::Clone::clone(&self.polarity),
        }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for TraitPredicate {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f,
            "TraitPredicate", "trait_ref", &self.trait_ref, "polarity",
            &&self.polarity)
    }
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for TraitPredicate {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<TraitRef>;
        let _: ::core::cmp::AssertParamIsEq<PredicatePolarity>;
    }
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for TraitPredicate {
    #[inline]
    fn eq(&self, other: &TraitPredicate) -> bool {
        self.trait_ref == other.trait_ref && self.polarity == other.polarity
    }
}PartialEq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for TraitPredicate {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                let mut __serde_state =
                    _serde::Serializer::serialize_struct(__serializer,
                            "TraitPredicate", false as usize + 1 + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "trait_ref", &self.trait_ref)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "polarity", &self.polarity)?;
                _serde::ser::SerializeStruct::end(__serde_state)
            }
        }
    };Serialize)]
1263pub struct TraitPredicate {
1264    pub trait_ref: TraitRef,
1265    pub polarity: PredicatePolarity,
1266}
1267
1268#[derive(#[automatically_derived]
impl<A: ::core::clone::Clone, B: ::core::clone::Clone> ::core::clone::Clone
    for OutlivesClause<A, B> {
    #[inline]
    fn clone(&self) -> OutlivesClause<A, B> {
        OutlivesClause(::core::clone::Clone::clone(&self.0),
            ::core::clone::Clone::clone(&self.1))
    }
}Clone, #[automatically_derived]
impl<A: ::core::fmt::Debug, B: ::core::fmt::Debug> ::core::fmt::Debug for
    OutlivesClause<A, B> {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_tuple_field2_finish(f, "OutlivesClause",
            &self.0, &&self.1)
    }
}Debug, #[automatically_derived]
impl<A: ::core::cmp::Eq, B: ::core::cmp::Eq> ::core::cmp::Eq for
    OutlivesClause<A, B> {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<A>;
        let _: ::core::cmp::AssertParamIsEq<B>;
    }
}Eq, #[automatically_derived]
impl<A: ::core::cmp::PartialEq, B: ::core::cmp::PartialEq>
    ::core::cmp::PartialEq for OutlivesClause<A, B> {
    #[inline]
    fn eq(&self, other: &OutlivesClause<A, B>) -> bool {
        self.0 == other.0 && self.1 == other.1
    }
}PartialEq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl<A, B> _serde::Serialize for OutlivesClause<A, B> where
            A: _serde::Serialize, B: _serde::Serialize {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                let mut __serde_state =
                    _serde::Serializer::serialize_tuple_struct(__serializer,
                            "OutlivesClause", 0 + 1 + 1)?;
                _serde::ser::SerializeTupleStruct::serialize_field(&mut __serde_state,
                        &self.0)?;
                _serde::ser::SerializeTupleStruct::serialize_field(&mut __serde_state,
                        &self.1)?;
                _serde::ser::SerializeTupleStruct::end(__serde_state)
            }
        }
    };Serialize)]
1269pub struct OutlivesClause<A, B>(pub A, pub B);
1270
1271pub type RegionOutlivesClause = OutlivesClause<Region, Region>;
1272pub type TypeOutlivesClause = OutlivesClause<Ty, Region>;
1273
1274#[deprecated = "renamed to [`OutlivesClause`]"]
1275pub type OutlivesPredicate<A, B> = OutlivesClause<A, B>;
1276#[deprecated = "renamed to [`RegionOutlivesClause`]"]
1277pub type RegionOutlivesPredicate = RegionOutlivesClause;
1278#[deprecated = "renamed to [`TypeOutlivesClause`]"]
1279pub type TypeOutlivesPredicate = TypeOutlivesClause;
1280
1281#[derive(#[automatically_derived]
impl ::core::clone::Clone for ProjectionPredicate {
    #[inline]
    fn clone(&self) -> ProjectionPredicate {
        ProjectionPredicate {
            projection_term: ::core::clone::Clone::clone(&self.projection_term),
            term: ::core::clone::Clone::clone(&self.term),
        }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for ProjectionPredicate {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f,
            "ProjectionPredicate", "projection_term", &self.projection_term,
            "term", &&self.term)
    }
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for ProjectionPredicate {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<AliasTerm>;
        let _: ::core::cmp::AssertParamIsEq<TermKind>;
    }
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for ProjectionPredicate {
    #[inline]
    fn eq(&self, other: &ProjectionPredicate) -> bool {
        self.projection_term == other.projection_term &&
            self.term == other.term
    }
}PartialEq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for ProjectionPredicate {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                let mut __serde_state =
                    _serde::Serializer::serialize_struct(__serializer,
                            "ProjectionPredicate", false as usize + 1 + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "projection_term", &self.projection_term)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "term", &self.term)?;
                _serde::ser::SerializeStruct::end(__serde_state)
            }
        }
    };Serialize)]
1282pub struct ProjectionPredicate {
1283    pub projection_term: AliasTerm,
1284    pub term: TermKind,
1285}
1286
1287#[derive(#[automatically_derived]
impl ::core::clone::Clone for ImplPolarity {
    #[inline]
    fn clone(&self) -> ImplPolarity {
        match self {
            ImplPolarity::Positive => ImplPolarity::Positive,
            ImplPolarity::Negative => ImplPolarity::Negative,
            ImplPolarity::Reservation => ImplPolarity::Reservation,
        }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for ImplPolarity {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::write_str(f,
            match self {
                ImplPolarity::Positive => "Positive",
                ImplPolarity::Negative => "Negative",
                ImplPolarity::Reservation => "Reservation",
            })
    }
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for ImplPolarity {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {}
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for ImplPolarity {
    #[inline]
    fn eq(&self, other: &ImplPolarity) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr
    }
}PartialEq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for ImplPolarity {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    ImplPolarity::Positive =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "ImplPolarity", 0u32, "Positive"),
                    ImplPolarity::Negative =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "ImplPolarity", 1u32, "Negative"),
                    ImplPolarity::Reservation =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "ImplPolarity", 2u32, "Reservation"),
                }
            }
        }
    };Serialize)]
1288pub enum ImplPolarity {
1289    Positive,
1290    Negative,
1291    Reservation,
1292}
1293
1294#[derive(#[automatically_derived]
impl ::core::clone::Clone for PredicatePolarity {
    #[inline]
    fn clone(&self) -> PredicatePolarity {
        match self {
            PredicatePolarity::Positive => PredicatePolarity::Positive,
            PredicatePolarity::Negative => PredicatePolarity::Negative,
        }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for PredicatePolarity {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::write_str(f,
            match self {
                PredicatePolarity::Positive => "Positive",
                PredicatePolarity::Negative => "Negative",
            })
    }
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for PredicatePolarity {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {}
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for PredicatePolarity {
    #[inline]
    fn eq(&self, other: &PredicatePolarity) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr
    }
}PartialEq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for PredicatePolarity {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    PredicatePolarity::Positive =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "PredicatePolarity", 0u32, "Positive"),
                    PredicatePolarity::Negative =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "PredicatePolarity", 1u32, "Negative"),
                }
            }
        }
    };Serialize)]
1295pub enum PredicatePolarity {
1296    Positive,
1297    Negative,
1298}
1299
1300macro_rules! index_impl {
1301    ($name:ident) => {
1302        impl crate::IndexedVal for $name {
1303            fn to_val(index: usize) -> Self {
1304                $name(index, $crate::ThreadLocalIndex)
1305            }
1306            fn to_index(&self) -> usize {
1307                self.0
1308            }
1309        }
1310        $crate::ty::serialize_index_impl!($name);
1311    };
1312}
1313macro_rules! serialize_index_impl {
1314    ($name:ident) => {
1315        impl ::serde::Serialize for $name {
1316            fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
1317            where
1318                S: ::serde::Serializer,
1319            {
1320                let n: usize = self.0; // Make sure we're serializing an int.
1321                ::serde::Serialize::serialize(&n, serializer)
1322            }
1323        }
1324    };
1325}
1326pub(crate) use index_impl;
1327pub(crate) use serialize_index_impl;
1328
1329impl crate::IndexedVal for TyConstId {
    fn to_val(index: usize) -> Self {
        TyConstId(index, crate::ThreadLocalIndex)
    }
    fn to_index(&self) -> usize { self.0 }
}
impl ::serde::Serialize for TyConstId {
    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where
        S: ::serde::Serializer {
        let n: usize = self.0;
        ::serde::Serialize::serialize(&n, serializer)
    }
}index_impl!(TyConstId);
1330impl crate::IndexedVal for MirConstId {
    fn to_val(index: usize) -> Self {
        MirConstId(index, crate::ThreadLocalIndex)
    }
    fn to_index(&self) -> usize { self.0 }
}
impl ::serde::Serialize for MirConstId {
    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where
        S: ::serde::Serializer {
        let n: usize = self.0;
        ::serde::Serialize::serialize(&n, serializer)
    }
}index_impl!(MirConstId);
1331impl crate::IndexedVal for Ty {
    fn to_val(index: usize) -> Self { Ty(index, crate::ThreadLocalIndex) }
    fn to_index(&self) -> usize { self.0 }
}
impl ::serde::Serialize for Ty {
    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where
        S: ::serde::Serializer {
        let n: usize = self.0;
        ::serde::Serialize::serialize(&n, serializer)
    }
}index_impl!(Ty);
1332impl crate::IndexedVal for Span {
    fn to_val(index: usize) -> Self { Span(index, crate::ThreadLocalIndex) }
    fn to_index(&self) -> usize { self.0 }
}
impl ::serde::Serialize for Span {
    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where
        S: ::serde::Serializer {
        let n: usize = self.0;
        ::serde::Serialize::serialize(&n, serializer)
    }
}index_impl!(Span);
1333
1334/// The source-order index of a variant in a type.
1335///
1336/// For example, in the following types,
1337/// ```ignore(illustrative)
1338/// enum Demo1 {
1339///    Variant0 { a: bool, b: i32 },
1340///    Variant1 { c: u8, d: u64 },
1341/// }
1342/// struct Demo2 { e: u8, f: u16, g: u8 }
1343/// ```
1344/// `a` is in the variant with the `VariantIdx` of `0`,
1345/// `c` is in the variant with the `VariantIdx` of `1`, and
1346/// `g` is in the variant with the `VariantIdx` of `0`.
1347#[derive(#[automatically_derived]
impl ::core::clone::Clone for VariantIdx {
    #[inline]
    fn clone(&self) -> VariantIdx {
        let _: ::core::clone::AssertParamIsClone<usize>;
        let _: ::core::clone::AssertParamIsClone<ThreadLocalIndex>;
        *self
    }
}Clone, #[automatically_derived]
impl ::core::marker::Copy for VariantIdx { }Copy, #[automatically_derived]
impl ::core::fmt::Debug for VariantIdx {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_tuple_field2_finish(f, "VariantIdx",
            &self.0, &&self.1)
    }
}Debug, #[automatically_derived]
impl ::core::cmp::PartialEq for VariantIdx {
    #[inline]
    fn eq(&self, other: &VariantIdx) -> bool {
        self.0 == other.0 && self.1 == other.1
    }
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for VariantIdx {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<usize>;
        let _: ::core::cmp::AssertParamIsEq<ThreadLocalIndex>;
    }
}Eq, #[automatically_derived]
impl ::core::hash::Hash for VariantIdx {
    #[inline]
    fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
        ::core::hash::Hash::hash(&self.0, state);
        ::core::hash::Hash::hash(&self.1, state)
    }
}Hash)]
1348pub struct VariantIdx(usize, ThreadLocalIndex);
1349
1350impl crate::IndexedVal for VariantIdx {
    fn to_val(index: usize) -> Self {
        VariantIdx(index, crate::ThreadLocalIndex)
    }
    fn to_index(&self) -> usize { self.0 }
}
impl ::serde::Serialize for VariantIdx {
    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where
        S: ::serde::Serializer {
        let n: usize = self.0;
        ::serde::Serialize::serialize(&n, serializer)
    }
}index_impl!(VariantIdx);
1351
1352#[derive(#[automatically_derived]
impl ::core::clone::Clone for AssocItem {
    #[inline]
    fn clone(&self) -> AssocItem {
        AssocItem {
            def_id: ::core::clone::Clone::clone(&self.def_id),
            kind: ::core::clone::Clone::clone(&self.kind),
            container: ::core::clone::Clone::clone(&self.container),
        }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for AssocItem {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field3_finish(f, "AssocItem",
            "def_id", &self.def_id, "kind", &self.kind, "container",
            &&self.container)
    }
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for AssocItem {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<AssocDef>;
        let _: ::core::cmp::AssertParamIsEq<AssocKind>;
        let _: ::core::cmp::AssertParamIsEq<AssocContainer>;
    }
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for AssocItem {
    #[inline]
    fn eq(&self, other: &AssocItem) -> bool {
        self.def_id == other.def_id && self.kind == other.kind &&
            self.container == other.container
    }
}PartialEq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for AssocItem {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                let mut __serde_state =
                    _serde::Serializer::serialize_struct(__serializer,
                            "AssocItem", false as usize + 1 + 1 + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "def_id", &self.def_id)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "kind", &self.kind)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "container", &self.container)?;
                _serde::ser::SerializeStruct::end(__serde_state)
            }
        }
    };Serialize)]
1353pub struct AssocItem {
1354    pub def_id: AssocDef,
1355    pub kind: AssocKind,
1356    pub container: AssocContainer,
1357}
1358
1359#[derive(#[automatically_derived]
impl ::core::clone::Clone for AssocTypeData {
    #[inline]
    fn clone(&self) -> AssocTypeData {
        match self {
            AssocTypeData::Normal(__self_0) =>
                AssocTypeData::Normal(::core::clone::Clone::clone(__self_0)),
            AssocTypeData::Rpitit(__self_0) =>
                AssocTypeData::Rpitit(::core::clone::Clone::clone(__self_0)),
        }
    }
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for AssocTypeData {
    #[inline]
    fn eq(&self, other: &AssocTypeData) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr &&
            match (self, other) {
                (AssocTypeData::Normal(__self_0),
                    AssocTypeData::Normal(__arg1_0)) => __self_0 == __arg1_0,
                (AssocTypeData::Rpitit(__self_0),
                    AssocTypeData::Rpitit(__arg1_0)) => __self_0 == __arg1_0,
                _ => unsafe { ::core::intrinsics::unreachable() }
            }
    }
}PartialEq, #[automatically_derived]
impl ::core::fmt::Debug for AssocTypeData {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        match self {
            AssocTypeData::Normal(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "Normal",
                    &__self_0),
            AssocTypeData::Rpitit(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "Rpitit",
                    &__self_0),
        }
    }
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for AssocTypeData {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<Symbol>;
        let _: ::core::cmp::AssertParamIsEq<ImplTraitInTraitData>;
    }
}Eq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for AssocTypeData {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    AssocTypeData::Normal(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "AssocTypeData", 0u32, "Normal", __field0),
                    AssocTypeData::Rpitit(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "AssocTypeData", 1u32, "Rpitit", __field0),
                }
            }
        }
    };Serialize)]
1360pub enum AssocTypeData {
1361    Normal(Symbol),
1362    /// The associated type comes from an RPITIT. It has no name, and the
1363    /// `ImplTraitInTraitData` provides additional information about its
1364    /// source.
1365    Rpitit(ImplTraitInTraitData),
1366}
1367
1368#[derive(#[automatically_derived]
impl ::core::clone::Clone for AssocKind {
    #[inline]
    fn clone(&self) -> AssocKind {
        match self {
            AssocKind::Const { name: __self_0 } =>
                AssocKind::Const {
                    name: ::core::clone::Clone::clone(__self_0),
                },
            AssocKind::Fn { name: __self_0, has_self: __self_1 } =>
                AssocKind::Fn {
                    name: ::core::clone::Clone::clone(__self_0),
                    has_self: ::core::clone::Clone::clone(__self_1),
                },
            AssocKind::Type { data: __self_0 } =>
                AssocKind::Type {
                    data: ::core::clone::Clone::clone(__self_0),
                },
        }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for AssocKind {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        match self {
            AssocKind::Const { name: __self_0 } =>
                ::core::fmt::Formatter::debug_struct_field1_finish(f, "Const",
                    "name", &__self_0),
            AssocKind::Fn { name: __self_0, has_self: __self_1 } =>
                ::core::fmt::Formatter::debug_struct_field2_finish(f, "Fn",
                    "name", __self_0, "has_self", &__self_1),
            AssocKind::Type { data: __self_0 } =>
                ::core::fmt::Formatter::debug_struct_field1_finish(f, "Type",
                    "data", &__self_0),
        }
    }
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for AssocKind {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<Symbol>;
        let _: ::core::cmp::AssertParamIsEq<bool>;
        let _: ::core::cmp::AssertParamIsEq<AssocTypeData>;
    }
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for AssocKind {
    #[inline]
    fn eq(&self, other: &AssocKind) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr &&
            match (self, other) {
                (AssocKind::Const { name: __self_0 }, AssocKind::Const {
                    name: __arg1_0 }) => __self_0 == __arg1_0,
                (AssocKind::Fn { name: __self_0, has_self: __self_1 },
                    AssocKind::Fn { name: __arg1_0, has_self: __arg1_1 }) =>
                    __self_1 == __arg1_1 && __self_0 == __arg1_0,
                (AssocKind::Type { data: __self_0 }, AssocKind::Type {
                    data: __arg1_0 }) => __self_0 == __arg1_0,
                _ => unsafe { ::core::intrinsics::unreachable() }
            }
    }
}PartialEq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for AssocKind {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    AssocKind::Const { ref name } => {
                        let mut __serde_state =
                            _serde::Serializer::serialize_struct_variant(__serializer,
                                    "AssocKind", 0u32, "Const", 0 + 1)?;
                        _serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
                                "name", name)?;
                        _serde::ser::SerializeStructVariant::end(__serde_state)
                    }
                    AssocKind::Fn { ref name, ref has_self } => {
                        let mut __serde_state =
                            _serde::Serializer::serialize_struct_variant(__serializer,
                                    "AssocKind", 1u32, "Fn", 0 + 1 + 1)?;
                        _serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
                                "name", name)?;
                        _serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
                                "has_self", has_self)?;
                        _serde::ser::SerializeStructVariant::end(__serde_state)
                    }
                    AssocKind::Type { ref data } => {
                        let mut __serde_state =
                            _serde::Serializer::serialize_struct_variant(__serializer,
                                    "AssocKind", 2u32, "Type", 0 + 1)?;
                        _serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
                                "data", data)?;
                        _serde::ser::SerializeStructVariant::end(__serde_state)
                    }
                }
            }
        }
    };Serialize)]
1369pub enum AssocKind {
1370    Const { name: Symbol },
1371    Fn { name: Symbol, has_self: bool },
1372    Type { data: AssocTypeData },
1373}
1374
1375#[derive(#[automatically_derived]
impl ::core::clone::Clone for AssocContainer {
    #[inline]
    fn clone(&self) -> AssocContainer {
        match self {
            AssocContainer::InherentImpl => AssocContainer::InherentImpl,
            AssocContainer::TraitImpl(__self_0) =>
                AssocContainer::TraitImpl(::core::clone::Clone::clone(__self_0)),
            AssocContainer::Trait => AssocContainer::Trait,
        }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for AssocContainer {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        match self {
            AssocContainer::InherentImpl =>
                ::core::fmt::Formatter::write_str(f, "InherentImpl"),
            AssocContainer::TraitImpl(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "TraitImpl", &__self_0),
            AssocContainer::Trait =>
                ::core::fmt::Formatter::write_str(f, "Trait"),
        }
    }
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for AssocContainer {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<AssocDef>;
    }
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for AssocContainer {
    #[inline]
    fn eq(&self, other: &AssocContainer) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr &&
            match (self, other) {
                (AssocContainer::TraitImpl(__self_0),
                    AssocContainer::TraitImpl(__arg1_0)) =>
                    __self_0 == __arg1_0,
                _ => true,
            }
    }
}PartialEq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for AssocContainer {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    AssocContainer::InherentImpl =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "AssocContainer", 0u32, "InherentImpl"),
                    AssocContainer::TraitImpl(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "AssocContainer", 1u32, "TraitImpl", __field0),
                    AssocContainer::Trait =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "AssocContainer", 2u32, "Trait"),
                }
            }
        }
    };Serialize)]
1376pub enum AssocContainer {
1377    InherentImpl,
1378    /// The `AssocDef` points to the trait item being implemented.
1379    TraitImpl(AssocDef),
1380    Trait,
1381}
1382
1383#[derive(#[automatically_derived]
impl ::core::clone::Clone for ImplTraitInTraitData {
    #[inline]
    fn clone(&self) -> ImplTraitInTraitData {
        let _: ::core::clone::AssertParamIsClone<FnDef>;
        let _: ::core::clone::AssertParamIsClone<OpaqueDef>;
        *self
    }
}Clone, #[automatically_derived]
impl ::core::marker::Copy for ImplTraitInTraitData { }Copy, #[automatically_derived]
impl ::core::cmp::PartialEq for ImplTraitInTraitData {
    #[inline]
    fn eq(&self, other: &ImplTraitInTraitData) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr &&
            match (self, other) {
                (ImplTraitInTraitData::Trait {
                    fn_def_id: __self_0, opaque_def_id: __self_1 },
                    ImplTraitInTraitData::Trait {
                    fn_def_id: __arg1_0, opaque_def_id: __arg1_1 }) =>
                    __self_0 == __arg1_0 && __self_1 == __arg1_1,
                (ImplTraitInTraitData::Impl { fn_def_id: __self_0 },
                    ImplTraitInTraitData::Impl { fn_def_id: __arg1_0 }) =>
                    __self_0 == __arg1_0,
                _ => unsafe { ::core::intrinsics::unreachable() }
            }
    }
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for ImplTraitInTraitData {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<FnDef>;
        let _: ::core::cmp::AssertParamIsEq<OpaqueDef>;
    }
}Eq, #[automatically_derived]
impl ::core::fmt::Debug for ImplTraitInTraitData {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        match self {
            ImplTraitInTraitData::Trait {
                fn_def_id: __self_0, opaque_def_id: __self_1 } =>
                ::core::fmt::Formatter::debug_struct_field2_finish(f, "Trait",
                    "fn_def_id", __self_0, "opaque_def_id", &__self_1),
            ImplTraitInTraitData::Impl { fn_def_id: __self_0 } =>
                ::core::fmt::Formatter::debug_struct_field1_finish(f, "Impl",
                    "fn_def_id", &__self_0),
        }
    }
}Debug, #[automatically_derived]
impl ::core::hash::Hash for ImplTraitInTraitData {
    #[inline]
    fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        ::core::hash::Hash::hash(&__self_discr, state);
        match self {
            ImplTraitInTraitData::Trait {
                fn_def_id: __self_0, opaque_def_id: __self_1 } => {
                ::core::hash::Hash::hash(__self_0, state);
                ::core::hash::Hash::hash(__self_1, state)
            }
            ImplTraitInTraitData::Impl { fn_def_id: __self_0 } =>
                ::core::hash::Hash::hash(__self_0, state),
        }
    }
}Hash, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for ImplTraitInTraitData {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    ImplTraitInTraitData::Trait {
                        ref fn_def_id, ref opaque_def_id } => {
                        let mut __serde_state =
                            _serde::Serializer::serialize_struct_variant(__serializer,
                                    "ImplTraitInTraitData", 0u32, "Trait", 0 + 1 + 1)?;
                        _serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
                                "fn_def_id", fn_def_id)?;
                        _serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
                                "opaque_def_id", opaque_def_id)?;
                        _serde::ser::SerializeStructVariant::end(__serde_state)
                    }
                    ImplTraitInTraitData::Impl { ref fn_def_id } => {
                        let mut __serde_state =
                            _serde::Serializer::serialize_struct_variant(__serializer,
                                    "ImplTraitInTraitData", 1u32, "Impl", 0 + 1)?;
                        _serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
                                "fn_def_id", fn_def_id)?;
                        _serde::ser::SerializeStructVariant::end(__serde_state)
                    }
                }
            }
        }
    };Serialize)]
1384pub enum ImplTraitInTraitData {
1385    Trait { fn_def_id: FnDef, opaque_def_id: OpaqueDef },
1386    Impl { fn_def_id: FnDef },
1387}
1388
1389impl AssocItem {
1390    pub fn is_impl_trait_in_trait(&self) -> bool {
1391        #[allow(non_exhaustive_omitted_patterns)] match self.kind {
    AssocKind::Type { data: AssocTypeData::Rpitit(_) } => true,
    _ => false,
}matches!(self.kind, AssocKind::Type { data: AssocTypeData::Rpitit(_) })
1392    }
1393}
1394
1395#[derive(#[automatically_derived]
impl ::core::clone::Clone for VtblEntry {
    #[inline]
    fn clone(&self) -> VtblEntry {
        match self {
            VtblEntry::MetadataDropInPlace => VtblEntry::MetadataDropInPlace,
            VtblEntry::MetadataSize => VtblEntry::MetadataSize,
            VtblEntry::MetadataAlign => VtblEntry::MetadataAlign,
            VtblEntry::Vacant => VtblEntry::Vacant,
            VtblEntry::Method(__self_0) =>
                VtblEntry::Method(::core::clone::Clone::clone(__self_0)),
            VtblEntry::TraitVPtr(__self_0) =>
                VtblEntry::TraitVPtr(::core::clone::Clone::clone(__self_0)),
        }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for VtblEntry {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        match self {
            VtblEntry::MetadataDropInPlace =>
                ::core::fmt::Formatter::write_str(f, "MetadataDropInPlace"),
            VtblEntry::MetadataSize =>
                ::core::fmt::Formatter::write_str(f, "MetadataSize"),
            VtblEntry::MetadataAlign =>
                ::core::fmt::Formatter::write_str(f, "MetadataAlign"),
            VtblEntry::Vacant =>
                ::core::fmt::Formatter::write_str(f, "Vacant"),
            VtblEntry::Method(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "Method",
                    &__self_0),
            VtblEntry::TraitVPtr(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "TraitVPtr", &__self_0),
        }
    }
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for VtblEntry {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<Instance>;
        let _: ::core::cmp::AssertParamIsEq<TraitRef>;
    }
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for VtblEntry {
    #[inline]
    fn eq(&self, other: &VtblEntry) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr &&
            match (self, other) {
                (VtblEntry::Method(__self_0), VtblEntry::Method(__arg1_0)) =>
                    __self_0 == __arg1_0,
                (VtblEntry::TraitVPtr(__self_0),
                    VtblEntry::TraitVPtr(__arg1_0)) => __self_0 == __arg1_0,
                _ => true,
            }
    }
}PartialEq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for VtblEntry {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                match *self {
                    VtblEntry::MetadataDropInPlace =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "VtblEntry", 0u32, "MetadataDropInPlace"),
                    VtblEntry::MetadataSize =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "VtblEntry", 1u32, "MetadataSize"),
                    VtblEntry::MetadataAlign =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "VtblEntry", 2u32, "MetadataAlign"),
                    VtblEntry::Vacant =>
                        _serde::Serializer::serialize_unit_variant(__serializer,
                            "VtblEntry", 3u32, "Vacant"),
                    VtblEntry::Method(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "VtblEntry", 4u32, "Method", __field0),
                    VtblEntry::TraitVPtr(ref __field0) =>
                        _serde::Serializer::serialize_newtype_variant(__serializer,
                            "VtblEntry", 5u32, "TraitVPtr", __field0),
                }
            }
        }
    };Serialize)]
1396pub enum VtblEntry {
1397    /// destructor of this type (used in vtable header)
1398    MetadataDropInPlace,
1399    /// layout size of this type (used in vtable header)
1400    MetadataSize,
1401    /// layout align of this type (used in vtable header)
1402    MetadataAlign,
1403    /// non-dispatchable associated function that is excluded from trait object
1404    Vacant,
1405    /// dispatchable associated function
1406    Method(Instance),
1407    /// pointer to a separate supertrait vtable, can be used by trait upcasting coercion
1408    TraitVPtr(TraitRef),
1409}