Skip to main content

rustc_hir/attrs/
data_structures.rs

1use std::borrow::Cow;
2use std::fmt;
3use std::path::PathBuf;
4
5pub use ReprAttr::*;
6use rustc_abi::Align;
7pub use rustc_ast::attr::data_structures::*;
8use rustc_ast::expand::autodiff_attrs::{DiffActivity, DiffMode};
9use rustc_ast::expand::typetree::TypeTree;
10use rustc_ast::token::DocFragmentKind;
11use rustc_ast::{AttrStyle, Path, ast};
12use rustc_data_structures::fx::FxIndexMap;
13use rustc_error_messages::{DiagArgValue, IntoDiagArg};
14use rustc_hir::LangItem;
15use rustc_macros::{Decodable, Encodable, HashStable_Generic, PrintAttribute};
16use rustc_span::def_id::DefId;
17use rustc_span::hygiene::Transparency;
18use rustc_span::{ErrorGuaranteed, Ident, Span, Symbol, sym};
19pub use rustc_target::spec::SanitizerSet;
20use thin_vec::ThinVec;
21
22use crate::attrs::diagnostic::*;
23use crate::attrs::pretty_printing::PrintAttribute;
24use crate::limit::Limit;
25use crate::{
26    DefaultBodyStability, HashIgnoredAttrId, PartialConstStability, RustcVersion, Stability,
27};
28
29#[derive(#[automatically_derived]
impl ::core::marker::Copy for EiiImplResolution { }Copy, #[automatically_derived]
impl ::core::clone::Clone for EiiImplResolution {
    #[inline]
    fn clone(&self) -> EiiImplResolution {
        let _: ::core::clone::AssertParamIsClone<DefId>;
        let _: ::core::clone::AssertParamIsClone<EiiDecl>;
        let _: ::core::clone::AssertParamIsClone<ErrorGuaranteed>;
        *self
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for EiiImplResolution {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        match self {
            EiiImplResolution::Macro(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "Macro",
                    &__self_0),
            EiiImplResolution::Known(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "Known",
                    &__self_0),
            EiiImplResolution::Error(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "Error",
                    &__self_0),
        }
    }
}Debug, const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for EiiImplResolution where __CTX: ::rustc_span::HashStableContext
            {
            #[inline]
            fn hash_stable(&self, __hcx: &mut __CTX,
                __hasher:
                    &mut ::rustc_data_structures::stable_hasher::StableHasher) {
                ::std::mem::discriminant(self).hash_stable(__hcx, __hasher);
                match *self {
                    EiiImplResolution::Macro(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    EiiImplResolution::Known(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    EiiImplResolution::Error(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                }
            }
        }
    };HashStable_Generic, const _: () =
    {
        impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
            for EiiImplResolution {
            fn encode(&self, __encoder: &mut __E) {
                let disc =
                    match *self {
                        EiiImplResolution::Macro(ref __binding_0) => { 0usize }
                        EiiImplResolution::Known(ref __binding_0) => { 1usize }
                        EiiImplResolution::Error(ref __binding_0) => { 2usize }
                    };
                ::rustc_serialize::Encoder::emit_u8(__encoder, disc as u8);
                match *self {
                    EiiImplResolution::Macro(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    EiiImplResolution::Known(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    EiiImplResolution::Error(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                }
            }
        }
    };Encodable, const _: () =
    {
        impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
            for EiiImplResolution {
            fn decode(__decoder: &mut __D) -> Self {
                match ::rustc_serialize::Decoder::read_u8(__decoder) as usize
                    {
                    0usize => {
                        EiiImplResolution::Macro(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    1usize => {
                        EiiImplResolution::Known(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    2usize => {
                        EiiImplResolution::Error(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    n => {
                        ::core::panicking::panic_fmt(format_args!("invalid enum variant tag while decoding `EiiImplResolution`, expected 0..3, actual {0}",
                                n));
                    }
                }
            }
        }
    };Decodable, const _: () =
    {
        #[allow(unused)]
        impl PrintAttribute for EiiImplResolution {
            fn should_render(&self) -> bool { true }
            fn print_attribute(&self,
                __p: &mut rustc_ast_pretty::pp::Printer) {
                match self {
                    Self::Macro(f0) => {
                        __p.word("Macro");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::Known(f0) => {
                        __p.word("Known");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::Error(f0) => {
                        __p.word("Error");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                }
            }
        }
    };PrintAttribute)]
30pub enum EiiImplResolution {
31    /// Usually, finding the extern item that an EII implementation implements means finding
32    /// the defid of the associated attribute macro, and looking at *its* attributes to find
33    /// what foreign item its associated with.
34    Macro(DefId),
35    /// Sometimes though, we already know statically and can skip some name resolution.
36    /// Stored together with the eii's name for diagnostics.
37    Known(EiiDecl),
38    /// For when resolution failed, but we want to continue compilation
39    Error(ErrorGuaranteed),
40}
41
42#[derive(#[automatically_derived]
impl ::core::marker::Copy for EiiImpl { }Copy, #[automatically_derived]
impl ::core::clone::Clone for EiiImpl {
    #[inline]
    fn clone(&self) -> EiiImpl {
        let _: ::core::clone::AssertParamIsClone<EiiImplResolution>;
        let _: ::core::clone::AssertParamIsClone<bool>;
        let _: ::core::clone::AssertParamIsClone<Span>;
        *self
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for EiiImpl {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field5_finish(f, "EiiImpl",
            "resolution", &self.resolution, "impl_marked_unsafe",
            &self.impl_marked_unsafe, "span", &self.span, "inner_span",
            &self.inner_span, "is_default", &&self.is_default)
    }
}Debug, const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for EiiImpl where __CTX: ::rustc_span::HashStableContext {
            #[inline]
            fn hash_stable(&self, __hcx: &mut __CTX,
                __hasher:
                    &mut ::rustc_data_structures::stable_hasher::StableHasher) {
                match *self {
                    EiiImpl {
                        resolution: ref __binding_0,
                        impl_marked_unsafe: ref __binding_1,
                        span: ref __binding_2,
                        inner_span: ref __binding_3,
                        is_default: ref __binding_4 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                        { __binding_2.hash_stable(__hcx, __hasher); }
                        { __binding_3.hash_stable(__hcx, __hasher); }
                        { __binding_4.hash_stable(__hcx, __hasher); }
                    }
                }
            }
        }
    };HashStable_Generic, const _: () =
    {
        impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
            for EiiImpl {
            fn encode(&self, __encoder: &mut __E) {
                match *self {
                    EiiImpl {
                        resolution: ref __binding_0,
                        impl_marked_unsafe: ref __binding_1,
                        span: ref __binding_2,
                        inner_span: ref __binding_3,
                        is_default: ref __binding_4 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_2,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_3,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_4,
                            __encoder);
                    }
                }
            }
        }
    };Encodable, const _: () =
    {
        impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
            for EiiImpl {
            fn decode(__decoder: &mut __D) -> Self {
                EiiImpl {
                    resolution: ::rustc_serialize::Decodable::decode(__decoder),
                    impl_marked_unsafe: ::rustc_serialize::Decodable::decode(__decoder),
                    span: ::rustc_serialize::Decodable::decode(__decoder),
                    inner_span: ::rustc_serialize::Decodable::decode(__decoder),
                    is_default: ::rustc_serialize::Decodable::decode(__decoder),
                }
            }
        }
    };Decodable, const _: () =
    {
        #[allow(unused)]
        impl PrintAttribute for EiiImpl {
            fn should_render(&self) -> bool { true }
            fn print_attribute(&self,
                __p: &mut rustc_ast_pretty::pp::Printer) {
                let Self {
                        resolution, impl_marked_unsafe, span, inner_span, is_default
                        } = self;
                __p.word("EiiImpl");
                if true && !resolution.should_render() &&
                                    !impl_marked_unsafe.should_render() && !span.should_render()
                            && !inner_span.should_render() &&
                        !is_default.should_render() {
                    return;
                }
                __p.nbsp();
                __p.word("{");
                let mut __printed_anything = false;
                if resolution.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("resolution");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                resolution.print_attribute(__p);
                if impl_marked_unsafe.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("impl_marked_unsafe");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                impl_marked_unsafe.print_attribute(__p);
                if span.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("span");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                span.print_attribute(__p);
                if inner_span.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("inner_span");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                inner_span.print_attribute(__p);
                if is_default.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("is_default");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                is_default.print_attribute(__p);
                __p.word("}");
            }
        }
    };PrintAttribute)]
43pub struct EiiImpl {
44    pub resolution: EiiImplResolution,
45    pub impl_marked_unsafe: bool,
46    pub span: Span,
47    pub inner_span: Span,
48    pub is_default: bool,
49}
50
51#[derive(#[automatically_derived]
impl ::core::marker::Copy for EiiDecl { }Copy, #[automatically_derived]
impl ::core::clone::Clone for EiiDecl {
    #[inline]
    fn clone(&self) -> EiiDecl {
        let _: ::core::clone::AssertParamIsClone<DefId>;
        let _: ::core::clone::AssertParamIsClone<bool>;
        let _: ::core::clone::AssertParamIsClone<Ident>;
        *self
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for EiiDecl {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field3_finish(f, "EiiDecl",
            "foreign_item", &self.foreign_item, "impl_unsafe",
            &self.impl_unsafe, "name", &&self.name)
    }
}Debug, const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for EiiDecl where __CTX: ::rustc_span::HashStableContext {
            #[inline]
            fn hash_stable(&self, __hcx: &mut __CTX,
                __hasher:
                    &mut ::rustc_data_structures::stable_hasher::StableHasher) {
                match *self {
                    EiiDecl {
                        foreign_item: ref __binding_0,
                        impl_unsafe: ref __binding_1,
                        name: ref __binding_2 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                        { __binding_2.hash_stable(__hcx, __hasher); }
                    }
                }
            }
        }
    };HashStable_Generic, const _: () =
    {
        impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
            for EiiDecl {
            fn encode(&self, __encoder: &mut __E) {
                match *self {
                    EiiDecl {
                        foreign_item: ref __binding_0,
                        impl_unsafe: ref __binding_1,
                        name: ref __binding_2 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_2,
                            __encoder);
                    }
                }
            }
        }
    };Encodable, const _: () =
    {
        impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
            for EiiDecl {
            fn decode(__decoder: &mut __D) -> Self {
                EiiDecl {
                    foreign_item: ::rustc_serialize::Decodable::decode(__decoder),
                    impl_unsafe: ::rustc_serialize::Decodable::decode(__decoder),
                    name: ::rustc_serialize::Decodable::decode(__decoder),
                }
            }
        }
    };Decodable, const _: () =
    {
        #[allow(unused)]
        impl PrintAttribute for EiiDecl {
            fn should_render(&self) -> bool { true }
            fn print_attribute(&self,
                __p: &mut rustc_ast_pretty::pp::Printer) {
                let Self { foreign_item, impl_unsafe, name } = self;
                __p.word("EiiDecl");
                if true && !foreign_item.should_render() &&
                            !impl_unsafe.should_render() && !name.should_render() {
                    return;
                }
                __p.nbsp();
                __p.word("{");
                let mut __printed_anything = false;
                if foreign_item.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("foreign_item");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                foreign_item.print_attribute(__p);
                if impl_unsafe.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("impl_unsafe");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                impl_unsafe.print_attribute(__p);
                if name.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("name");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                name.print_attribute(__p);
                __p.word("}");
            }
        }
    };PrintAttribute)]
52pub struct EiiDecl {
53    pub foreign_item: DefId,
54    /// whether or not it is unsafe to implement this EII
55    pub impl_unsafe: bool,
56    pub name: Ident,
57}
58
59#[derive(#[automatically_derived]
impl ::core::marker::Copy for CguKind { }Copy, #[automatically_derived]
impl ::core::clone::Clone for CguKind {
    #[inline]
    fn clone(&self) -> CguKind { *self }
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for CguKind {
    #[inline]
    fn eq(&self, other: &CguKind) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr
    }
}PartialEq, const _: () =
    {
        impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
            for CguKind {
            fn encode(&self, __encoder: &mut __E) {
                let disc =
                    match *self {
                        CguKind::No => { 0usize }
                        CguKind::PreDashLto => { 1usize }
                        CguKind::PostDashLto => { 2usize }
                        CguKind::Any => { 3usize }
                    };
                ::rustc_serialize::Encoder::emit_u8(__encoder, disc as u8);
                match *self {
                    CguKind::No => {}
                    CguKind::PreDashLto => {}
                    CguKind::PostDashLto => {}
                    CguKind::Any => {}
                }
            }
        }
    };Encodable, const _: () =
    {
        impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
            for CguKind {
            fn decode(__decoder: &mut __D) -> Self {
                match ::rustc_serialize::Decoder::read_u8(__decoder) as usize
                    {
                    0usize => { CguKind::No }
                    1usize => { CguKind::PreDashLto }
                    2usize => { CguKind::PostDashLto }
                    3usize => { CguKind::Any }
                    n => {
                        ::core::panicking::panic_fmt(format_args!("invalid enum variant tag while decoding `CguKind`, expected 0..4, actual {0}",
                                n));
                    }
                }
            }
        }
    };Decodable, #[automatically_derived]
impl ::core::fmt::Debug for CguKind {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::write_str(f,
            match self {
                CguKind::No => "No",
                CguKind::PreDashLto => "PreDashLto",
                CguKind::PostDashLto => "PostDashLto",
                CguKind::Any => "Any",
            })
    }
}Debug, const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for CguKind where __CTX: ::rustc_span::HashStableContext {
            #[inline]
            fn hash_stable(&self, __hcx: &mut __CTX,
                __hasher:
                    &mut ::rustc_data_structures::stable_hasher::StableHasher) {
                ::std::mem::discriminant(self).hash_stable(__hcx, __hasher);
                match *self {
                    CguKind::No => {}
                    CguKind::PreDashLto => {}
                    CguKind::PostDashLto => {}
                    CguKind::Any => {}
                }
            }
        }
    };HashStable_Generic, const _: () =
    {
        #[allow(unused)]
        impl PrintAttribute for CguKind {
            fn should_render(&self) -> bool { true }
            fn print_attribute(&self,
                __p: &mut rustc_ast_pretty::pp::Printer) {
                match self {
                    Self::No => { __p.word("No") }
                    Self::PreDashLto => { __p.word("PreDashLto") }
                    Self::PostDashLto => { __p.word("PostDashLto") }
                    Self::Any => { __p.word("Any") }
                }
            }
        }
    };PrintAttribute)]
60pub enum CguKind {
61    No,
62    PreDashLto,
63    PostDashLto,
64    Any,
65}
66
67#[derive(#[automatically_derived]
impl ::core::marker::Copy for CguFields { }Copy, #[automatically_derived]
impl ::core::clone::Clone for CguFields {
    #[inline]
    fn clone(&self) -> CguFields {
        let _: ::core::clone::AssertParamIsClone<Symbol>;
        let _: ::core::clone::AssertParamIsClone<CguKind>;
        *self
    }
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for CguFields {
    #[inline]
    fn eq(&self, other: &CguFields) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr &&
            match (self, other) {
                (CguFields::PartitionReused { cfg: __self_0, module: __self_1
                    }, CguFields::PartitionReused {
                    cfg: __arg1_0, module: __arg1_1 }) =>
                    __self_0 == __arg1_0 && __self_1 == __arg1_1,
                (CguFields::PartitionCodegened {
                    cfg: __self_0, module: __self_1 },
                    CguFields::PartitionCodegened {
                    cfg: __arg1_0, module: __arg1_1 }) =>
                    __self_0 == __arg1_0 && __self_1 == __arg1_1,
                (CguFields::ExpectedCguReuse {
                    cfg: __self_0, module: __self_1, kind: __self_2 },
                    CguFields::ExpectedCguReuse {
                    cfg: __arg1_0, module: __arg1_1, kind: __arg1_2 }) =>
                    __self_0 == __arg1_0 && __self_1 == __arg1_1 &&
                        __self_2 == __arg1_2,
                _ => unsafe { ::core::intrinsics::unreachable() }
            }
    }
}PartialEq, const _: () =
    {
        impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
            for CguFields {
            fn encode(&self, __encoder: &mut __E) {
                let disc =
                    match *self {
                        CguFields::PartitionReused {
                            cfg: ref __binding_0, module: ref __binding_1 } => {
                            0usize
                        }
                        CguFields::PartitionCodegened {
                            cfg: ref __binding_0, module: ref __binding_1 } => {
                            1usize
                        }
                        CguFields::ExpectedCguReuse {
                            cfg: ref __binding_0,
                            module: ref __binding_1,
                            kind: ref __binding_2 } => {
                            2usize
                        }
                    };
                ::rustc_serialize::Encoder::emit_u8(__encoder, disc as u8);
                match *self {
                    CguFields::PartitionReused {
                        cfg: ref __binding_0, module: ref __binding_1 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                    }
                    CguFields::PartitionCodegened {
                        cfg: ref __binding_0, module: ref __binding_1 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                    }
                    CguFields::ExpectedCguReuse {
                        cfg: ref __binding_0,
                        module: ref __binding_1,
                        kind: ref __binding_2 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_2,
                            __encoder);
                    }
                }
            }
        }
    };Encodable, const _: () =
    {
        impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
            for CguFields {
            fn decode(__decoder: &mut __D) -> Self {
                match ::rustc_serialize::Decoder::read_u8(__decoder) as usize
                    {
                    0usize => {
                        CguFields::PartitionReused {
                            cfg: ::rustc_serialize::Decodable::decode(__decoder),
                            module: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    1usize => {
                        CguFields::PartitionCodegened {
                            cfg: ::rustc_serialize::Decodable::decode(__decoder),
                            module: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    2usize => {
                        CguFields::ExpectedCguReuse {
                            cfg: ::rustc_serialize::Decodable::decode(__decoder),
                            module: ::rustc_serialize::Decodable::decode(__decoder),
                            kind: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    n => {
                        ::core::panicking::panic_fmt(format_args!("invalid enum variant tag while decoding `CguFields`, expected 0..3, actual {0}",
                                n));
                    }
                }
            }
        }
    };Decodable, #[automatically_derived]
impl ::core::fmt::Debug for CguFields {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        match self {
            CguFields::PartitionReused { cfg: __self_0, module: __self_1 } =>
                ::core::fmt::Formatter::debug_struct_field2_finish(f,
                    "PartitionReused", "cfg", __self_0, "module", &__self_1),
            CguFields::PartitionCodegened { cfg: __self_0, module: __self_1 }
                =>
                ::core::fmt::Formatter::debug_struct_field2_finish(f,
                    "PartitionCodegened", "cfg", __self_0, "module", &__self_1),
            CguFields::ExpectedCguReuse {
                cfg: __self_0, module: __self_1, kind: __self_2 } =>
                ::core::fmt::Formatter::debug_struct_field3_finish(f,
                    "ExpectedCguReuse", "cfg", __self_0, "module", __self_1,
                    "kind", &__self_2),
        }
    }
}Debug, const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for CguFields where __CTX: ::rustc_span::HashStableContext {
            #[inline]
            fn hash_stable(&self, __hcx: &mut __CTX,
                __hasher:
                    &mut ::rustc_data_structures::stable_hasher::StableHasher) {
                ::std::mem::discriminant(self).hash_stable(__hcx, __hasher);
                match *self {
                    CguFields::PartitionReused {
                        cfg: ref __binding_0, module: ref __binding_1 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                    CguFields::PartitionCodegened {
                        cfg: ref __binding_0, module: ref __binding_1 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                    CguFields::ExpectedCguReuse {
                        cfg: ref __binding_0,
                        module: ref __binding_1,
                        kind: ref __binding_2 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                        { __binding_2.hash_stable(__hcx, __hasher); }
                    }
                }
            }
        }
    };HashStable_Generic, const _: () =
    {
        #[allow(unused)]
        impl PrintAttribute for CguFields {
            fn should_render(&self) -> bool { true }
            fn print_attribute(&self,
                __p: &mut rustc_ast_pretty::pp::Printer) {
                match self {
                    Self::PartitionReused { cfg, module } => {
                        __p.word("PartitionReused");
                        if true && !cfg.should_render() && !module.should_render() {
                            return;
                        }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if cfg.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("cfg");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        cfg.print_attribute(__p);
                        if module.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("module");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        module.print_attribute(__p);
                        __p.word("}");
                    }
                    Self::PartitionCodegened { cfg, module } => {
                        __p.word("PartitionCodegened");
                        if true && !cfg.should_render() && !module.should_render() {
                            return;
                        }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if cfg.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("cfg");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        cfg.print_attribute(__p);
                        if module.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("module");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        module.print_attribute(__p);
                        __p.word("}");
                    }
                    Self::ExpectedCguReuse { cfg, module, kind } => {
                        __p.word("ExpectedCguReuse");
                        if true && !cfg.should_render() && !module.should_render()
                                && !kind.should_render() {
                            return;
                        }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if cfg.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("cfg");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        cfg.print_attribute(__p);
                        if module.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("module");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        module.print_attribute(__p);
                        if kind.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("kind");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        kind.print_attribute(__p);
                        __p.word("}");
                    }
                }
            }
        }
    };PrintAttribute)]
68pub enum CguFields {
69    PartitionReused { cfg: Symbol, module: Symbol },
70    PartitionCodegened { cfg: Symbol, module: Symbol },
71    ExpectedCguReuse { cfg: Symbol, module: Symbol, kind: CguKind },
72}
73
74#[derive(#[automatically_derived]
impl ::core::marker::Copy for DivergingFallbackBehavior { }Copy, #[automatically_derived]
impl ::core::clone::Clone for DivergingFallbackBehavior {
    #[inline]
    fn clone(&self) -> DivergingFallbackBehavior { *self }
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for DivergingFallbackBehavior {
    #[inline]
    fn eq(&self, other: &DivergingFallbackBehavior) -> 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::fmt::Debug for DivergingFallbackBehavior {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::write_str(f,
            match self {
                DivergingFallbackBehavior::ToUnit => "ToUnit",
                DivergingFallbackBehavior::ToNever => "ToNever",
                DivergingFallbackBehavior::NoFallback => "NoFallback",
            })
    }
}Debug, const _: () =
    {
        #[allow(unused)]
        impl PrintAttribute for DivergingFallbackBehavior {
            fn should_render(&self) -> bool { true }
            fn print_attribute(&self,
                __p: &mut rustc_ast_pretty::pp::Printer) {
                match self {
                    Self::ToUnit => { __p.word("ToUnit") }
                    Self::ToNever => { __p.word("ToNever") }
                    Self::NoFallback => { __p.word("NoFallback") }
                }
            }
        }
    };PrintAttribute)]
75#[derive(const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for DivergingFallbackBehavior where
            __CTX: ::rustc_span::HashStableContext {
            #[inline]
            fn hash_stable(&self, __hcx: &mut __CTX,
                __hasher:
                    &mut ::rustc_data_structures::stable_hasher::StableHasher) {
                ::std::mem::discriminant(self).hash_stable(__hcx, __hasher);
                match *self {
                    DivergingFallbackBehavior::ToUnit => {}
                    DivergingFallbackBehavior::ToNever => {}
                    DivergingFallbackBehavior::NoFallback => {}
                }
            }
        }
    };HashStable_Generic, const _: () =
    {
        impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
            for DivergingFallbackBehavior {
            fn encode(&self, __encoder: &mut __E) {
                let disc =
                    match *self {
                        DivergingFallbackBehavior::ToUnit => { 0usize }
                        DivergingFallbackBehavior::ToNever => { 1usize }
                        DivergingFallbackBehavior::NoFallback => { 2usize }
                    };
                ::rustc_serialize::Encoder::emit_u8(__encoder, disc as u8);
                match *self {
                    DivergingFallbackBehavior::ToUnit => {}
                    DivergingFallbackBehavior::ToNever => {}
                    DivergingFallbackBehavior::NoFallback => {}
                }
            }
        }
    };Encodable, const _: () =
    {
        impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
            for DivergingFallbackBehavior {
            fn decode(__decoder: &mut __D) -> Self {
                match ::rustc_serialize::Decoder::read_u8(__decoder) as usize
                    {
                    0usize => { DivergingFallbackBehavior::ToUnit }
                    1usize => { DivergingFallbackBehavior::ToNever }
                    2usize => { DivergingFallbackBehavior::NoFallback }
                    n => {
                        ::core::panicking::panic_fmt(format_args!("invalid enum variant tag while decoding `DivergingFallbackBehavior`, expected 0..3, actual {0}",
                                n));
                    }
                }
            }
        }
    };Decodable)]
76pub enum DivergingFallbackBehavior {
77    /// Always fallback to `()` (aka "always spontaneous decay")
78    ToUnit,
79    /// Always fallback to `!` (which should be equivalent to never falling back + not making
80    /// never-to-any coercions unless necessary)
81    ToNever,
82    /// Don't fallback at all
83    NoFallback,
84}
85
86#[derive(#[automatically_derived]
impl ::core::marker::Copy for DivergingBlockBehavior { }Copy, #[automatically_derived]
impl ::core::clone::Clone for DivergingBlockBehavior {
    #[inline]
    fn clone(&self) -> DivergingBlockBehavior { *self }
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for DivergingBlockBehavior {
    #[inline]
    fn eq(&self, other: &DivergingBlockBehavior) -> 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::fmt::Debug for DivergingBlockBehavior {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::write_str(f,
            match self {
                DivergingBlockBehavior::Never => "Never",
                DivergingBlockBehavior::Unit => "Unit",
            })
    }
}Debug, const _: () =
    {
        #[allow(unused)]
        impl PrintAttribute for DivergingBlockBehavior {
            fn should_render(&self) -> bool { true }
            fn print_attribute(&self,
                __p: &mut rustc_ast_pretty::pp::Printer) {
                match self {
                    Self::Never => { __p.word("Never") }
                    Self::Unit => { __p.word("Unit") }
                }
            }
        }
    };PrintAttribute, #[automatically_derived]
impl ::core::default::Default for DivergingBlockBehavior {
    #[inline]
    fn default() -> DivergingBlockBehavior { Self::Never }
}Default)]
87#[derive(const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for DivergingBlockBehavior where
            __CTX: ::rustc_span::HashStableContext {
            #[inline]
            fn hash_stable(&self, __hcx: &mut __CTX,
                __hasher:
                    &mut ::rustc_data_structures::stable_hasher::StableHasher) {
                ::std::mem::discriminant(self).hash_stable(__hcx, __hasher);
                match *self {
                    DivergingBlockBehavior::Never => {}
                    DivergingBlockBehavior::Unit => {}
                }
            }
        }
    };HashStable_Generic, const _: () =
    {
        impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
            for DivergingBlockBehavior {
            fn encode(&self, __encoder: &mut __E) {
                let disc =
                    match *self {
                        DivergingBlockBehavior::Never => { 0usize }
                        DivergingBlockBehavior::Unit => { 1usize }
                    };
                ::rustc_serialize::Encoder::emit_u8(__encoder, disc as u8);
                match *self {
                    DivergingBlockBehavior::Never => {}
                    DivergingBlockBehavior::Unit => {}
                }
            }
        }
    };Encodable, const _: () =
    {
        impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
            for DivergingBlockBehavior {
            fn decode(__decoder: &mut __D) -> Self {
                match ::rustc_serialize::Decoder::read_u8(__decoder) as usize
                    {
                    0usize => { DivergingBlockBehavior::Never }
                    1usize => { DivergingBlockBehavior::Unit }
                    n => {
                        ::core::panicking::panic_fmt(format_args!("invalid enum variant tag while decoding `DivergingBlockBehavior`, expected 0..2, actual {0}",
                                n));
                    }
                }
            }
        }
    };Decodable)]
88pub enum DivergingBlockBehavior {
89    /// This is the current stable behavior:
90    ///
91    /// ```rust
92    /// {
93    ///     return;
94    /// } // block has type = !, even though we are supposedly dropping it with `;`
95    /// ```
96    #[default]
97    Never,
98
99    /// Alternative behavior:
100    ///
101    /// ```ignore (very-unstable-new-attribute)
102    /// #![rustc_never_type_options(diverging_block_default = "unit")]
103    /// {
104    ///     return;
105    /// } // block has type = (), since we are dropping `!` from `return` with `;`
106    /// ```
107    Unit,
108}
109
110#[derive(#[automatically_derived]
impl ::core::marker::Copy for InlineAttr { }Copy, #[automatically_derived]
impl ::core::clone::Clone for InlineAttr {
    #[inline]
    fn clone(&self) -> InlineAttr {
        let _: ::core::clone::AssertParamIsClone<Span>;
        let _: ::core::clone::AssertParamIsClone<Option<Symbol>>;
        *self
    }
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for InlineAttr {
    #[inline]
    fn eq(&self, other: &InlineAttr) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr &&
            match (self, other) {
                (InlineAttr::Force { attr_span: __self_0, reason: __self_1 },
                    InlineAttr::Force { attr_span: __arg1_0, reason: __arg1_1 })
                    => __self_0 == __arg1_0 && __self_1 == __arg1_1,
                _ => true,
            }
    }
}PartialEq, const _: () =
    {
        impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
            for InlineAttr {
            fn encode(&self, __encoder: &mut __E) {
                let disc =
                    match *self {
                        InlineAttr::None => { 0usize }
                        InlineAttr::Hint => { 1usize }
                        InlineAttr::Always => { 2usize }
                        InlineAttr::Never => { 3usize }
                        InlineAttr::Force {
                            attr_span: ref __binding_0, reason: ref __binding_1 } => {
                            4usize
                        }
                    };
                ::rustc_serialize::Encoder::emit_u8(__encoder, disc as u8);
                match *self {
                    InlineAttr::None => {}
                    InlineAttr::Hint => {}
                    InlineAttr::Always => {}
                    InlineAttr::Never => {}
                    InlineAttr::Force {
                        attr_span: ref __binding_0, reason: ref __binding_1 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                    }
                }
            }
        }
    };Encodable, const _: () =
    {
        impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
            for InlineAttr {
            fn decode(__decoder: &mut __D) -> Self {
                match ::rustc_serialize::Decoder::read_u8(__decoder) as usize
                    {
                    0usize => { InlineAttr::None }
                    1usize => { InlineAttr::Hint }
                    2usize => { InlineAttr::Always }
                    3usize => { InlineAttr::Never }
                    4usize => {
                        InlineAttr::Force {
                            attr_span: ::rustc_serialize::Decodable::decode(__decoder),
                            reason: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    n => {
                        ::core::panicking::panic_fmt(format_args!("invalid enum variant tag while decoding `InlineAttr`, expected 0..5, actual {0}",
                                n));
                    }
                }
            }
        }
    };Decodable, #[automatically_derived]
impl ::core::fmt::Debug for InlineAttr {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        match self {
            InlineAttr::None => ::core::fmt::Formatter::write_str(f, "None"),
            InlineAttr::Hint => ::core::fmt::Formatter::write_str(f, "Hint"),
            InlineAttr::Always =>
                ::core::fmt::Formatter::write_str(f, "Always"),
            InlineAttr::Never =>
                ::core::fmt::Formatter::write_str(f, "Never"),
            InlineAttr::Force { attr_span: __self_0, reason: __self_1 } =>
                ::core::fmt::Formatter::debug_struct_field2_finish(f, "Force",
                    "attr_span", __self_0, "reason", &__self_1),
        }
    }
}Debug, const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for InlineAttr where __CTX: ::rustc_span::HashStableContext {
            #[inline]
            fn hash_stable(&self, __hcx: &mut __CTX,
                __hasher:
                    &mut ::rustc_data_structures::stable_hasher::StableHasher) {
                ::std::mem::discriminant(self).hash_stable(__hcx, __hasher);
                match *self {
                    InlineAttr::None => {}
                    InlineAttr::Hint => {}
                    InlineAttr::Always => {}
                    InlineAttr::Never => {}
                    InlineAttr::Force {
                        attr_span: ref __binding_0, reason: ref __binding_1 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                }
            }
        }
    };HashStable_Generic, const _: () =
    {
        #[allow(unused)]
        impl PrintAttribute for InlineAttr {
            fn should_render(&self) -> bool { true }
            fn print_attribute(&self,
                __p: &mut rustc_ast_pretty::pp::Printer) {
                match self {
                    Self::None => { __p.word("None") }
                    Self::Hint => { __p.word("Hint") }
                    Self::Always => { __p.word("Always") }
                    Self::Never => { __p.word("Never") }
                    Self::Force { attr_span, reason } => {
                        __p.word("Force");
                        if true && !attr_span.should_render() &&
                                !reason.should_render() {
                            return;
                        }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if attr_span.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("attr_span");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        attr_span.print_attribute(__p);
                        if reason.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("reason");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        reason.print_attribute(__p);
                        __p.word("}");
                    }
                }
            }
        }
    };PrintAttribute)]
111pub enum InlineAttr {
112    None,
113    Hint,
114    Always,
115    Never,
116    /// `#[rustc_force_inline]` forces inlining to happen in the MIR inliner - it reports an error
117    /// if the inlining cannot happen. It is limited to only free functions so that the calls
118    /// can always be resolved.
119    Force {
120        attr_span: Span,
121        reason: Option<Symbol>,
122    },
123}
124
125impl InlineAttr {
126    pub fn always(&self) -> bool {
127        match self {
128            InlineAttr::Always | InlineAttr::Force { .. } => true,
129            InlineAttr::None | InlineAttr::Hint | InlineAttr::Never => false,
130        }
131    }
132}
133
134#[derive(
135    #[automatically_derived]
impl ::core::marker::Copy for InstructionSetAttr { }Copy,
136    #[automatically_derived]
impl ::core::clone::Clone for InstructionSetAttr {
    #[inline]
    fn clone(&self) -> InstructionSetAttr { *self }
}Clone,
137    const _: () =
    {
        impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
            for InstructionSetAttr {
            fn encode(&self, __encoder: &mut __E) {
                let disc =
                    match *self {
                        InstructionSetAttr::ArmA32 => { 0usize }
                        InstructionSetAttr::ArmT32 => { 1usize }
                    };
                ::rustc_serialize::Encoder::emit_u8(__encoder, disc as u8);
                match *self {
                    InstructionSetAttr::ArmA32 => {}
                    InstructionSetAttr::ArmT32 => {}
                }
            }
        }
    };Encodable,
138    const _: () =
    {
        impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
            for InstructionSetAttr {
            fn decode(__decoder: &mut __D) -> Self {
                match ::rustc_serialize::Decoder::read_u8(__decoder) as usize
                    {
                    0usize => { InstructionSetAttr::ArmA32 }
                    1usize => { InstructionSetAttr::ArmT32 }
                    n => {
                        ::core::panicking::panic_fmt(format_args!("invalid enum variant tag while decoding `InstructionSetAttr`, expected 0..2, actual {0}",
                                n));
                    }
                }
            }
        }
    };Decodable,
139    #[automatically_derived]
impl ::core::fmt::Debug for InstructionSetAttr {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::write_str(f,
            match self {
                InstructionSetAttr::ArmA32 => "ArmA32",
                InstructionSetAttr::ArmT32 => "ArmT32",
            })
    }
}Debug,
140    #[automatically_derived]
impl ::core::cmp::PartialEq for InstructionSetAttr {
    #[inline]
    fn eq(&self, other: &InstructionSetAttr) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr
    }
}PartialEq,
141    #[automatically_derived]
impl ::core::cmp::Eq for InstructionSetAttr {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {}
}Eq,
142    const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for InstructionSetAttr where
            __CTX: ::rustc_span::HashStableContext {
            #[inline]
            fn hash_stable(&self, __hcx: &mut __CTX,
                __hasher:
                    &mut ::rustc_data_structures::stable_hasher::StableHasher) {
                ::std::mem::discriminant(self).hash_stable(__hcx, __hasher);
                match *self {
                    InstructionSetAttr::ArmA32 => {}
                    InstructionSetAttr::ArmT32 => {}
                }
            }
        }
    };HashStable_Generic,
143    const _: () =
    {
        #[allow(unused)]
        impl PrintAttribute for InstructionSetAttr {
            fn should_render(&self) -> bool { true }
            fn print_attribute(&self,
                __p: &mut rustc_ast_pretty::pp::Printer) {
                match self {
                    Self::ArmA32 => { __p.word("ArmA32") }
                    Self::ArmT32 => { __p.word("ArmT32") }
                }
            }
        }
    };PrintAttribute
144)]
145pub enum InstructionSetAttr {
146    ArmA32,
147    ArmT32,
148}
149
150#[derive(#[automatically_derived]
impl ::core::marker::Copy for OptimizeAttr { }Copy, #[automatically_derived]
impl ::core::clone::Clone for OptimizeAttr {
    #[inline]
    fn clone(&self) -> OptimizeAttr { *self }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for OptimizeAttr {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::write_str(f,
            match self {
                OptimizeAttr::Default => "Default",
                OptimizeAttr::DoNotOptimize => "DoNotOptimize",
                OptimizeAttr::Speed => "Speed",
                OptimizeAttr::Size => "Size",
            })
    }
}Debug, #[automatically_derived]
impl ::core::cmp::PartialEq for OptimizeAttr {
    #[inline]
    fn eq(&self, other: &OptimizeAttr) -> 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 OptimizeAttr {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {}
}Eq, #[automatically_derived]
impl ::core::default::Default for OptimizeAttr {
    #[inline]
    fn default() -> OptimizeAttr { Self::Default }
}Default, const _: () =
    {
        #[allow(unused)]
        impl PrintAttribute for OptimizeAttr {
            fn should_render(&self) -> bool { true }
            fn print_attribute(&self,
                __p: &mut rustc_ast_pretty::pp::Printer) {
                match self {
                    Self::Default => { __p.word("Default") }
                    Self::DoNotOptimize => { __p.word("DoNotOptimize") }
                    Self::Speed => { __p.word("Speed") }
                    Self::Size => { __p.word("Size") }
                }
            }
        }
    };PrintAttribute)]
151#[derive(const _: () =
    {
        impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
            for OptimizeAttr {
            fn encode(&self, __encoder: &mut __E) {
                let disc =
                    match *self {
                        OptimizeAttr::Default => { 0usize }
                        OptimizeAttr::DoNotOptimize => { 1usize }
                        OptimizeAttr::Speed => { 2usize }
                        OptimizeAttr::Size => { 3usize }
                    };
                ::rustc_serialize::Encoder::emit_u8(__encoder, disc as u8);
                match *self {
                    OptimizeAttr::Default => {}
                    OptimizeAttr::DoNotOptimize => {}
                    OptimizeAttr::Speed => {}
                    OptimizeAttr::Size => {}
                }
            }
        }
    };Encodable, const _: () =
    {
        impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
            for OptimizeAttr {
            fn decode(__decoder: &mut __D) -> Self {
                match ::rustc_serialize::Decoder::read_u8(__decoder) as usize
                    {
                    0usize => { OptimizeAttr::Default }
                    1usize => { OptimizeAttr::DoNotOptimize }
                    2usize => { OptimizeAttr::Speed }
                    3usize => { OptimizeAttr::Size }
                    n => {
                        ::core::panicking::panic_fmt(format_args!("invalid enum variant tag while decoding `OptimizeAttr`, expected 0..4, actual {0}",
                                n));
                    }
                }
            }
        }
    };Decodable, const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for OptimizeAttr where __CTX: ::rustc_span::HashStableContext {
            #[inline]
            fn hash_stable(&self, __hcx: &mut __CTX,
                __hasher:
                    &mut ::rustc_data_structures::stable_hasher::StableHasher) {
                ::std::mem::discriminant(self).hash_stable(__hcx, __hasher);
                match *self {
                    OptimizeAttr::Default => {}
                    OptimizeAttr::DoNotOptimize => {}
                    OptimizeAttr::Speed => {}
                    OptimizeAttr::Size => {}
                }
            }
        }
    };HashStable_Generic)]
152pub enum OptimizeAttr {
153    /// No `#[optimize(..)]` attribute
154    #[default]
155    Default,
156    /// `#[optimize(none)]`
157    DoNotOptimize,
158    /// `#[optimize(speed)]`
159    Speed,
160    /// `#[optimize(size)]`
161    Size,
162}
163
164impl OptimizeAttr {
165    pub fn do_not_optimize(&self) -> bool {
166        #[allow(non_exhaustive_omitted_patterns)] match self {
    Self::DoNotOptimize => true,
    _ => false,
}matches!(self, Self::DoNotOptimize)
167    }
168}
169
170#[derive(#[automatically_derived]
impl ::core::cmp::PartialEq for ReprAttr {
    #[inline]
    fn eq(&self, other: &ReprAttr) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr &&
            match (self, other) {
                (ReprAttr::ReprInt(__self_0), ReprAttr::ReprInt(__arg1_0)) =>
                    __self_0 == __arg1_0,
                (ReprAttr::ReprPacked(__self_0),
                    ReprAttr::ReprPacked(__arg1_0)) => __self_0 == __arg1_0,
                (ReprAttr::ReprAlign(__self_0), ReprAttr::ReprAlign(__arg1_0))
                    => __self_0 == __arg1_0,
                _ => true,
            }
    }
}PartialEq, #[automatically_derived]
impl ::core::fmt::Debug for ReprAttr {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        match self {
            ReprAttr::ReprInt(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "ReprInt", &__self_0),
            ReprAttr::ReprRust =>
                ::core::fmt::Formatter::write_str(f, "ReprRust"),
            ReprAttr::ReprC => ::core::fmt::Formatter::write_str(f, "ReprC"),
            ReprAttr::ReprPacked(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "ReprPacked", &__self_0),
            ReprAttr::ReprSimd =>
                ::core::fmt::Formatter::write_str(f, "ReprSimd"),
            ReprAttr::ReprTransparent =>
                ::core::fmt::Formatter::write_str(f, "ReprTransparent"),
            ReprAttr::ReprAlign(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "ReprAlign", &__self_0),
        }
    }
}Debug, const _: () =
    {
        impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
            for ReprAttr {
            fn encode(&self, __encoder: &mut __E) {
                let disc =
                    match *self {
                        ReprAttr::ReprInt(ref __binding_0) => { 0usize }
                        ReprAttr::ReprRust => { 1usize }
                        ReprAttr::ReprC => { 2usize }
                        ReprAttr::ReprPacked(ref __binding_0) => { 3usize }
                        ReprAttr::ReprSimd => { 4usize }
                        ReprAttr::ReprTransparent => { 5usize }
                        ReprAttr::ReprAlign(ref __binding_0) => { 6usize }
                    };
                ::rustc_serialize::Encoder::emit_u8(__encoder, disc as u8);
                match *self {
                    ReprAttr::ReprInt(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    ReprAttr::ReprRust => {}
                    ReprAttr::ReprC => {}
                    ReprAttr::ReprPacked(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    ReprAttr::ReprSimd => {}
                    ReprAttr::ReprTransparent => {}
                    ReprAttr::ReprAlign(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                }
            }
        }
    };Encodable, const _: () =
    {
        impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
            for ReprAttr {
            fn decode(__decoder: &mut __D) -> Self {
                match ::rustc_serialize::Decoder::read_u8(__decoder) as usize
                    {
                    0usize => {
                        ReprAttr::ReprInt(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    1usize => { ReprAttr::ReprRust }
                    2usize => { ReprAttr::ReprC }
                    3usize => {
                        ReprAttr::ReprPacked(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    4usize => { ReprAttr::ReprSimd }
                    5usize => { ReprAttr::ReprTransparent }
                    6usize => {
                        ReprAttr::ReprAlign(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    n => {
                        ::core::panicking::panic_fmt(format_args!("invalid enum variant tag while decoding `ReprAttr`, expected 0..7, actual {0}",
                                n));
                    }
                }
            }
        }
    };Decodable, #[automatically_derived]
impl ::core::marker::Copy for ReprAttr { }Copy, #[automatically_derived]
impl ::core::clone::Clone for ReprAttr {
    #[inline]
    fn clone(&self) -> ReprAttr {
        let _: ::core::clone::AssertParamIsClone<IntType>;
        let _: ::core::clone::AssertParamIsClone<Align>;
        *self
    }
}Clone, const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for ReprAttr where __CTX: ::rustc_span::HashStableContext {
            #[inline]
            fn hash_stable(&self, __hcx: &mut __CTX,
                __hasher:
                    &mut ::rustc_data_structures::stable_hasher::StableHasher) {
                ::std::mem::discriminant(self).hash_stable(__hcx, __hasher);
                match *self {
                    ReprAttr::ReprInt(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    ReprAttr::ReprRust => {}
                    ReprAttr::ReprC => {}
                    ReprAttr::ReprPacked(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    ReprAttr::ReprSimd => {}
                    ReprAttr::ReprTransparent => {}
                    ReprAttr::ReprAlign(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                }
            }
        }
    };HashStable_Generic, const _: () =
    {
        #[allow(unused)]
        impl PrintAttribute for ReprAttr {
            fn should_render(&self) -> bool { true }
            fn print_attribute(&self,
                __p: &mut rustc_ast_pretty::pp::Printer) {
                match self {
                    Self::ReprInt(f0) => {
                        __p.word("ReprInt");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::ReprRust => { __p.word("ReprRust") }
                    Self::ReprC => { __p.word("ReprC") }
                    Self::ReprPacked(f0) => {
                        __p.word("ReprPacked");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::ReprSimd => { __p.word("ReprSimd") }
                    Self::ReprTransparent => { __p.word("ReprTransparent") }
                    Self::ReprAlign(f0) => {
                        __p.word("ReprAlign");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                }
            }
        }
    };PrintAttribute)]
171pub enum ReprAttr {
172    ReprInt(IntType),
173    ReprRust,
174    ReprC,
175    ReprPacked(Align),
176    ReprSimd,
177    ReprTransparent,
178    ReprAlign(Align),
179}
180
181pub enum TransparencyError {
182    UnknownTransparency(Symbol, Span),
183    MultipleTransparencyAttrs(Span, Span),
184}
185
186#[derive(#[automatically_derived]
impl ::core::cmp::Eq for IntType {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<ast::IntTy>;
        let _: ::core::cmp::AssertParamIsEq<ast::UintTy>;
    }
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for IntType {
    #[inline]
    fn eq(&self, other: &IntType) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr &&
            match (self, other) {
                (IntType::SignedInt(__self_0), IntType::SignedInt(__arg1_0))
                    => __self_0 == __arg1_0,
                (IntType::UnsignedInt(__self_0),
                    IntType::UnsignedInt(__arg1_0)) => __self_0 == __arg1_0,
                _ => unsafe { ::core::intrinsics::unreachable() }
            }
    }
}PartialEq, #[automatically_derived]
impl ::core::fmt::Debug for IntType {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        match self {
            IntType::SignedInt(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "SignedInt", &__self_0),
            IntType::UnsignedInt(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "UnsignedInt", &__self_0),
        }
    }
}Debug, #[automatically_derived]
impl ::core::marker::Copy for IntType { }Copy, #[automatically_derived]
impl ::core::clone::Clone for IntType {
    #[inline]
    fn clone(&self) -> IntType {
        let _: ::core::clone::AssertParamIsClone<ast::IntTy>;
        let _: ::core::clone::AssertParamIsClone<ast::UintTy>;
        *self
    }
}Clone)]
187#[derive(const _: () =
    {
        impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
            for IntType {
            fn encode(&self, __encoder: &mut __E) {
                let disc =
                    match *self {
                        IntType::SignedInt(ref __binding_0) => { 0usize }
                        IntType::UnsignedInt(ref __binding_0) => { 1usize }
                    };
                ::rustc_serialize::Encoder::emit_u8(__encoder, disc as u8);
                match *self {
                    IntType::SignedInt(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    IntType::UnsignedInt(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                }
            }
        }
    };Encodable, const _: () =
    {
        impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
            for IntType {
            fn decode(__decoder: &mut __D) -> Self {
                match ::rustc_serialize::Decoder::read_u8(__decoder) as usize
                    {
                    0usize => {
                        IntType::SignedInt(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    1usize => {
                        IntType::UnsignedInt(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    n => {
                        ::core::panicking::panic_fmt(format_args!("invalid enum variant tag while decoding `IntType`, expected 0..2, actual {0}",
                                n));
                    }
                }
            }
        }
    };Decodable, const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for IntType where __CTX: ::rustc_span::HashStableContext {
            #[inline]
            fn hash_stable(&self, __hcx: &mut __CTX,
                __hasher:
                    &mut ::rustc_data_structures::stable_hasher::StableHasher) {
                ::std::mem::discriminant(self).hash_stable(__hcx, __hasher);
                match *self {
                    IntType::SignedInt(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    IntType::UnsignedInt(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                }
            }
        }
    };HashStable_Generic, const _: () =
    {
        #[allow(unused)]
        impl PrintAttribute for IntType {
            fn should_render(&self) -> bool { true }
            fn print_attribute(&self,
                __p: &mut rustc_ast_pretty::pp::Printer) {
                match self {
                    Self::SignedInt(f0) => {
                        __p.word("SignedInt");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::UnsignedInt(f0) => {
                        __p.word("UnsignedInt");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                }
            }
        }
    };PrintAttribute)]
188pub enum IntType {
189    SignedInt(ast::IntTy),
190    UnsignedInt(ast::UintTy),
191}
192
193#[derive(#[automatically_derived]
impl ::core::marker::Copy for Deprecation { }Copy, #[automatically_derived]
impl ::core::fmt::Debug for Deprecation {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field3_finish(f, "Deprecation",
            "since", &self.since, "note", &self.note, "suggestion",
            &&self.suggestion)
    }
}Debug, const _: () =
    {
        impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
            for Deprecation {
            fn encode(&self, __encoder: &mut __E) {
                match *self {
                    Deprecation {
                        since: ref __binding_0,
                        note: ref __binding_1,
                        suggestion: ref __binding_2 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_2,
                            __encoder);
                    }
                }
            }
        }
    };Encodable, const _: () =
    {
        impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
            for Deprecation {
            fn decode(__decoder: &mut __D) -> Self {
                Deprecation {
                    since: ::rustc_serialize::Decodable::decode(__decoder),
                    note: ::rustc_serialize::Decodable::decode(__decoder),
                    suggestion: ::rustc_serialize::Decodable::decode(__decoder),
                }
            }
        }
    };Decodable, #[automatically_derived]
impl ::core::clone::Clone for Deprecation {
    #[inline]
    fn clone(&self) -> Deprecation {
        let _: ::core::clone::AssertParamIsClone<DeprecatedSince>;
        let _: ::core::clone::AssertParamIsClone<Option<Ident>>;
        let _: ::core::clone::AssertParamIsClone<Option<Symbol>>;
        *self
    }
}Clone, const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for Deprecation where __CTX: ::rustc_span::HashStableContext {
            #[inline]
            fn hash_stable(&self, __hcx: &mut __CTX,
                __hasher:
                    &mut ::rustc_data_structures::stable_hasher::StableHasher) {
                match *self {
                    Deprecation {
                        since: ref __binding_0,
                        note: ref __binding_1,
                        suggestion: ref __binding_2 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                        { __binding_2.hash_stable(__hcx, __hasher); }
                    }
                }
            }
        }
    };HashStable_Generic, const _: () =
    {
        #[allow(unused)]
        impl PrintAttribute for Deprecation {
            fn should_render(&self) -> bool { true }
            fn print_attribute(&self,
                __p: &mut rustc_ast_pretty::pp::Printer) {
                let Self { since, note, suggestion } = self;
                __p.word("Deprecation");
                if true && !since.should_render() && !note.should_render() &&
                        !suggestion.should_render() {
                    return;
                }
                __p.nbsp();
                __p.word("{");
                let mut __printed_anything = false;
                if since.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("since");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                since.print_attribute(__p);
                if note.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("note");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                note.print_attribute(__p);
                if suggestion.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("suggestion");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                suggestion.print_attribute(__p);
                __p.word("}");
            }
        }
    };PrintAttribute)]
194pub struct Deprecation {
195    pub since: DeprecatedSince,
196    /// The note to issue a reason.
197    pub note: Option<Ident>,
198    /// A text snippet used to completely replace any use of the deprecated item in an expression.
199    ///
200    /// This is currently unstable.
201    pub suggestion: Option<Symbol>,
202}
203
204/// Release in which an API is deprecated.
205#[derive(#[automatically_derived]
impl ::core::marker::Copy for DeprecatedSince { }Copy, #[automatically_derived]
impl ::core::fmt::Debug for DeprecatedSince {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        match self {
            DeprecatedSince::RustcVersion(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "RustcVersion", &__self_0),
            DeprecatedSince::Future =>
                ::core::fmt::Formatter::write_str(f, "Future"),
            DeprecatedSince::NonStandard(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "NonStandard", &__self_0),
            DeprecatedSince::Unspecified =>
                ::core::fmt::Formatter::write_str(f, "Unspecified"),
            DeprecatedSince::Err =>
                ::core::fmt::Formatter::write_str(f, "Err"),
        }
    }
}Debug, const _: () =
    {
        impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
            for DeprecatedSince {
            fn encode(&self, __encoder: &mut __E) {
                let disc =
                    match *self {
                        DeprecatedSince::RustcVersion(ref __binding_0) => { 0usize }
                        DeprecatedSince::Future => { 1usize }
                        DeprecatedSince::NonStandard(ref __binding_0) => { 2usize }
                        DeprecatedSince::Unspecified => { 3usize }
                        DeprecatedSince::Err => { 4usize }
                    };
                ::rustc_serialize::Encoder::emit_u8(__encoder, disc as u8);
                match *self {
                    DeprecatedSince::RustcVersion(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    DeprecatedSince::Future => {}
                    DeprecatedSince::NonStandard(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    DeprecatedSince::Unspecified => {}
                    DeprecatedSince::Err => {}
                }
            }
        }
    };Encodable, const _: () =
    {
        impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
            for DeprecatedSince {
            fn decode(__decoder: &mut __D) -> Self {
                match ::rustc_serialize::Decoder::read_u8(__decoder) as usize
                    {
                    0usize => {
                        DeprecatedSince::RustcVersion(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    1usize => { DeprecatedSince::Future }
                    2usize => {
                        DeprecatedSince::NonStandard(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    3usize => { DeprecatedSince::Unspecified }
                    4usize => { DeprecatedSince::Err }
                    n => {
                        ::core::panicking::panic_fmt(format_args!("invalid enum variant tag while decoding `DeprecatedSince`, expected 0..5, actual {0}",
                                n));
                    }
                }
            }
        }
    };Decodable, #[automatically_derived]
impl ::core::clone::Clone for DeprecatedSince {
    #[inline]
    fn clone(&self) -> DeprecatedSince {
        let _: ::core::clone::AssertParamIsClone<RustcVersion>;
        let _: ::core::clone::AssertParamIsClone<Symbol>;
        *self
    }
}Clone, const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for DeprecatedSince where __CTX: ::rustc_span::HashStableContext {
            #[inline]
            fn hash_stable(&self, __hcx: &mut __CTX,
                __hasher:
                    &mut ::rustc_data_structures::stable_hasher::StableHasher) {
                ::std::mem::discriminant(self).hash_stable(__hcx, __hasher);
                match *self {
                    DeprecatedSince::RustcVersion(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    DeprecatedSince::Future => {}
                    DeprecatedSince::NonStandard(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    DeprecatedSince::Unspecified => {}
                    DeprecatedSince::Err => {}
                }
            }
        }
    };HashStable_Generic, const _: () =
    {
        #[allow(unused)]
        impl PrintAttribute for DeprecatedSince {
            fn should_render(&self) -> bool { true }
            fn print_attribute(&self,
                __p: &mut rustc_ast_pretty::pp::Printer) {
                match self {
                    Self::RustcVersion(f0) => {
                        __p.word("RustcVersion");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::Future => { __p.word("Future") }
                    Self::NonStandard(f0) => {
                        __p.word("NonStandard");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::Unspecified => { __p.word("Unspecified") }
                    Self::Err => { __p.word("Err") }
                }
            }
        }
    };PrintAttribute)]
206pub enum DeprecatedSince {
207    RustcVersion(RustcVersion),
208    /// Deprecated in the future ("to be determined").
209    Future,
210    /// `feature(staged_api)` is off. Deprecation versions outside the standard
211    /// library are allowed to be arbitrary strings, for better or worse.
212    NonStandard(Symbol),
213    /// Deprecation version is unspecified but optional.
214    Unspecified,
215    /// Failed to parse a deprecation version, or the deprecation version is
216    /// unspecified and required. An error has already been emitted.
217    Err,
218}
219
220/// Successfully-parsed value of a `#[coverage(..)]` attribute.
221#[derive(#[automatically_derived]
impl ::core::marker::Copy for CoverageAttrKind { }Copy, #[automatically_derived]
impl ::core::fmt::Debug for CoverageAttrKind {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::write_str(f,
            match self {
                CoverageAttrKind::On => "On",
                CoverageAttrKind::Off => "Off",
            })
    }
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for CoverageAttrKind {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {}
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for CoverageAttrKind {
    #[inline]
    fn eq(&self, other: &CoverageAttrKind) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr
    }
}PartialEq, const _: () =
    {
        impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
            for CoverageAttrKind {
            fn encode(&self, __encoder: &mut __E) {
                let disc =
                    match *self {
                        CoverageAttrKind::On => { 0usize }
                        CoverageAttrKind::Off => { 1usize }
                    };
                ::rustc_serialize::Encoder::emit_u8(__encoder, disc as u8);
                match *self {
                    CoverageAttrKind::On => {}
                    CoverageAttrKind::Off => {}
                }
            }
        }
    };Encodable, const _: () =
    {
        impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
            for CoverageAttrKind {
            fn decode(__decoder: &mut __D) -> Self {
                match ::rustc_serialize::Decoder::read_u8(__decoder) as usize
                    {
                    0usize => { CoverageAttrKind::On }
                    1usize => { CoverageAttrKind::Off }
                    n => {
                        ::core::panicking::panic_fmt(format_args!("invalid enum variant tag while decoding `CoverageAttrKind`, expected 0..2, actual {0}",
                                n));
                    }
                }
            }
        }
    };Decodable, #[automatically_derived]
impl ::core::clone::Clone for CoverageAttrKind {
    #[inline]
    fn clone(&self) -> CoverageAttrKind { *self }
}Clone)]
222#[derive(const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for CoverageAttrKind where __CTX: ::rustc_span::HashStableContext
            {
            #[inline]
            fn hash_stable(&self, __hcx: &mut __CTX,
                __hasher:
                    &mut ::rustc_data_structures::stable_hasher::StableHasher) {
                ::std::mem::discriminant(self).hash_stable(__hcx, __hasher);
                match *self {
                    CoverageAttrKind::On => {}
                    CoverageAttrKind::Off => {}
                }
            }
        }
    };HashStable_Generic, const _: () =
    {
        #[allow(unused)]
        impl PrintAttribute for CoverageAttrKind {
            fn should_render(&self) -> bool { true }
            fn print_attribute(&self,
                __p: &mut rustc_ast_pretty::pp::Printer) {
                match self {
                    Self::On => { __p.word("On") }
                    Self::Off => { __p.word("Off") }
                }
            }
        }
    };PrintAttribute)]
223pub enum CoverageAttrKind {
224    On,
225    Off,
226}
227
228/// Successfully-parsed value of a `#[rustc_abi(..)]` attribute.
229#[derive(#[automatically_derived]
impl ::core::marker::Copy for RustcAbiAttrKind { }Copy, #[automatically_derived]
impl ::core::fmt::Debug for RustcAbiAttrKind {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::write_str(f,
            match self {
                RustcAbiAttrKind::Debug => "Debug",
                RustcAbiAttrKind::AssertEq => "AssertEq",
            })
    }
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for RustcAbiAttrKind {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {}
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for RustcAbiAttrKind {
    #[inline]
    fn eq(&self, other: &RustcAbiAttrKind) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr
    }
}PartialEq, const _: () =
    {
        impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
            for RustcAbiAttrKind {
            fn encode(&self, __encoder: &mut __E) {
                let disc =
                    match *self {
                        RustcAbiAttrKind::Debug => { 0usize }
                        RustcAbiAttrKind::AssertEq => { 1usize }
                    };
                ::rustc_serialize::Encoder::emit_u8(__encoder, disc as u8);
                match *self {
                    RustcAbiAttrKind::Debug => {}
                    RustcAbiAttrKind::AssertEq => {}
                }
            }
        }
    };Encodable, const _: () =
    {
        impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
            for RustcAbiAttrKind {
            fn decode(__decoder: &mut __D) -> Self {
                match ::rustc_serialize::Decoder::read_u8(__decoder) as usize
                    {
                    0usize => { RustcAbiAttrKind::Debug }
                    1usize => { RustcAbiAttrKind::AssertEq }
                    n => {
                        ::core::panicking::panic_fmt(format_args!("invalid enum variant tag while decoding `RustcAbiAttrKind`, expected 0..2, actual {0}",
                                n));
                    }
                }
            }
        }
    };Decodable, #[automatically_derived]
impl ::core::clone::Clone for RustcAbiAttrKind {
    #[inline]
    fn clone(&self) -> RustcAbiAttrKind { *self }
}Clone)]
230#[derive(const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for RustcAbiAttrKind where __CTX: ::rustc_span::HashStableContext
            {
            #[inline]
            fn hash_stable(&self, __hcx: &mut __CTX,
                __hasher:
                    &mut ::rustc_data_structures::stable_hasher::StableHasher) {
                ::std::mem::discriminant(self).hash_stable(__hcx, __hasher);
                match *self {
                    RustcAbiAttrKind::Debug => {}
                    RustcAbiAttrKind::AssertEq => {}
                }
            }
        }
    };HashStable_Generic, const _: () =
    {
        #[allow(unused)]
        impl PrintAttribute for RustcAbiAttrKind {
            fn should_render(&self) -> bool { true }
            fn print_attribute(&self,
                __p: &mut rustc_ast_pretty::pp::Printer) {
                match self {
                    Self::Debug => { __p.word("Debug") }
                    Self::AssertEq => { __p.word("AssertEq") }
                }
            }
        }
    };PrintAttribute)]
231pub enum RustcAbiAttrKind {
232    Debug,
233    AssertEq,
234}
235
236impl Deprecation {
237    /// Whether an item marked with #[deprecated(since = "X")] is currently
238    /// deprecated (i.e., whether X is not greater than the current rustc
239    /// version).
240    pub fn is_in_effect(&self) -> bool {
241        match self.since {
242            DeprecatedSince::RustcVersion(since) => since <= RustcVersion::CURRENT,
243            DeprecatedSince::Future => false,
244            // The `since` field doesn't have semantic purpose without `#![staged_api]`.
245            DeprecatedSince::NonStandard(_) => true,
246            // Assume deprecation is in effect if "since" field is absent or invalid.
247            DeprecatedSince::Unspecified | DeprecatedSince::Err => true,
248        }
249    }
250
251    pub fn is_since_rustc_version(&self) -> bool {
252        #[allow(non_exhaustive_omitted_patterns)] match self.since {
    DeprecatedSince::RustcVersion(_) => true,
    _ => false,
}matches!(self.since, DeprecatedSince::RustcVersion(_))
253    }
254}
255
256/// There are three valid forms of the attribute:
257/// `#[used]`, which is equivalent to `#[used(linker)]` on targets that support it, but `#[used(compiler)]` if not.
258/// `#[used(compiler)]`
259/// `#[used(linker)]`
260#[derive(const _: () =
    {
        impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
            for UsedBy {
            fn encode(&self, __encoder: &mut __E) {
                let disc =
                    match *self {
                        UsedBy::Default => { 0usize }
                        UsedBy::Compiler => { 1usize }
                        UsedBy::Linker => { 2usize }
                    };
                ::rustc_serialize::Encoder::emit_u8(__encoder, disc as u8);
                match *self {
                    UsedBy::Default => {}
                    UsedBy::Compiler => {}
                    UsedBy::Linker => {}
                }
            }
        }
    };Encodable, const _: () =
    {
        impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
            for UsedBy {
            fn decode(__decoder: &mut __D) -> Self {
                match ::rustc_serialize::Decoder::read_u8(__decoder) as usize
                    {
                    0usize => { UsedBy::Default }
                    1usize => { UsedBy::Compiler }
                    2usize => { UsedBy::Linker }
                    n => {
                        ::core::panicking::panic_fmt(format_args!("invalid enum variant tag while decoding `UsedBy`, expected 0..3, actual {0}",
                                n));
                    }
                }
            }
        }
    };Decodable, #[automatically_derived]
impl ::core::marker::Copy for UsedBy { }Copy, #[automatically_derived]
impl ::core::clone::Clone for UsedBy {
    #[inline]
    fn clone(&self) -> UsedBy { *self }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for UsedBy {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::write_str(f,
            match self {
                UsedBy::Default => "Default",
                UsedBy::Compiler => "Compiler",
                UsedBy::Linker => "Linker",
            })
    }
}Debug, #[automatically_derived]
impl ::core::cmp::PartialEq for UsedBy {
    #[inline]
    fn eq(&self, other: &UsedBy) -> 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 UsedBy {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {}
}Eq, #[automatically_derived]
impl ::core::hash::Hash for UsedBy {
    #[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)]
261#[derive(const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for UsedBy where __CTX: ::rustc_span::HashStableContext {
            #[inline]
            fn hash_stable(&self, __hcx: &mut __CTX,
                __hasher:
                    &mut ::rustc_data_structures::stable_hasher::StableHasher) {
                ::std::mem::discriminant(self).hash_stable(__hcx, __hasher);
                match *self {
                    UsedBy::Default => {}
                    UsedBy::Compiler => {}
                    UsedBy::Linker => {}
                }
            }
        }
    };HashStable_Generic, const _: () =
    {
        #[allow(unused)]
        impl PrintAttribute for UsedBy {
            fn should_render(&self) -> bool { true }
            fn print_attribute(&self,
                __p: &mut rustc_ast_pretty::pp::Printer) {
                match self {
                    Self::Default => { __p.word("Default") }
                    Self::Compiler => { __p.word("Compiler") }
                    Self::Linker => { __p.word("Linker") }
                }
            }
        }
    };PrintAttribute)]
262pub enum UsedBy {
263    Default,
264    Compiler,
265    Linker,
266}
267
268#[derive(const _: () =
    {
        impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
            for MacroUseArgs {
            fn encode(&self, __encoder: &mut __E) {
                let disc =
                    match *self {
                        MacroUseArgs::UseAll => { 0usize }
                        MacroUseArgs::UseSpecific(ref __binding_0) => { 1usize }
                    };
                ::rustc_serialize::Encoder::emit_u8(__encoder, disc as u8);
                match *self {
                    MacroUseArgs::UseAll => {}
                    MacroUseArgs::UseSpecific(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                }
            }
        }
    };Encodable, const _: () =
    {
        impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
            for MacroUseArgs {
            fn decode(__decoder: &mut __D) -> Self {
                match ::rustc_serialize::Decoder::read_u8(__decoder) as usize
                    {
                    0usize => { MacroUseArgs::UseAll }
                    1usize => {
                        MacroUseArgs::UseSpecific(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    n => {
                        ::core::panicking::panic_fmt(format_args!("invalid enum variant tag while decoding `MacroUseArgs`, expected 0..2, actual {0}",
                                n));
                    }
                }
            }
        }
    };Decodable, #[automatically_derived]
impl ::core::clone::Clone for MacroUseArgs {
    #[inline]
    fn clone(&self) -> MacroUseArgs {
        match self {
            MacroUseArgs::UseAll => MacroUseArgs::UseAll,
            MacroUseArgs::UseSpecific(__self_0) =>
                MacroUseArgs::UseSpecific(::core::clone::Clone::clone(__self_0)),
        }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for MacroUseArgs {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        match self {
            MacroUseArgs::UseAll =>
                ::core::fmt::Formatter::write_str(f, "UseAll"),
            MacroUseArgs::UseSpecific(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "UseSpecific", &__self_0),
        }
    }
}Debug, #[automatically_derived]
impl ::core::cmp::PartialEq for MacroUseArgs {
    #[inline]
    fn eq(&self, other: &MacroUseArgs) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr &&
            match (self, other) {
                (MacroUseArgs::UseSpecific(__self_0),
                    MacroUseArgs::UseSpecific(__arg1_0)) =>
                    __self_0 == __arg1_0,
                _ => true,
            }
    }
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for MacroUseArgs {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<ThinVec<Ident>>;
    }
}Eq, #[automatically_derived]
impl ::core::hash::Hash for MacroUseArgs {
    #[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 {
            MacroUseArgs::UseSpecific(__self_0) =>
                ::core::hash::Hash::hash(__self_0, state),
            _ => {}
        }
    }
}Hash)]
269#[derive(const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for MacroUseArgs where __CTX: ::rustc_span::HashStableContext {
            #[inline]
            fn hash_stable(&self, __hcx: &mut __CTX,
                __hasher:
                    &mut ::rustc_data_structures::stable_hasher::StableHasher) {
                ::std::mem::discriminant(self).hash_stable(__hcx, __hasher);
                match *self {
                    MacroUseArgs::UseAll => {}
                    MacroUseArgs::UseSpecific(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                }
            }
        }
    };HashStable_Generic, const _: () =
    {
        #[allow(unused)]
        impl PrintAttribute for MacroUseArgs {
            fn should_render(&self) -> bool { true }
            fn print_attribute(&self,
                __p: &mut rustc_ast_pretty::pp::Printer) {
                match self {
                    Self::UseAll => { __p.word("UseAll") }
                    Self::UseSpecific(f0) => {
                        __p.word("UseSpecific");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                }
            }
        }
    };PrintAttribute)]
270pub enum MacroUseArgs {
271    UseAll,
272    UseSpecific(ThinVec<Ident>),
273}
274
275impl Default for MacroUseArgs {
276    fn default() -> Self {
277        Self::UseSpecific(ThinVec::new())
278    }
279}
280
281#[derive(#[automatically_derived]
impl<ScopeId: ::core::fmt::Debug> ::core::fmt::Debug for
    StrippedCfgItem<ScopeId> {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field3_finish(f,
            "StrippedCfgItem", "parent_scope", &self.parent_scope, "ident",
            &self.ident, "cfg", &&self.cfg)
    }
}Debug, #[automatically_derived]
impl<ScopeId: ::core::clone::Clone> ::core::clone::Clone for
    StrippedCfgItem<ScopeId> {
    #[inline]
    fn clone(&self) -> StrippedCfgItem<ScopeId> {
        StrippedCfgItem {
            parent_scope: ::core::clone::Clone::clone(&self.parent_scope),
            ident: ::core::clone::Clone::clone(&self.ident),
            cfg: ::core::clone::Clone::clone(&self.cfg),
        }
    }
}Clone, const _: () =
    {
        impl<ScopeId, __E: ::rustc_span::SpanEncoder>
            ::rustc_serialize::Encodable<__E> for StrippedCfgItem<ScopeId>
            where ScopeId: ::rustc_serialize::Encodable<__E> {
            fn encode(&self, __encoder: &mut __E) {
                match *self {
                    StrippedCfgItem {
                        parent_scope: ref __binding_0,
                        ident: ref __binding_1,
                        cfg: ref __binding_2 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_2,
                            __encoder);
                    }
                }
            }
        }
    };Encodable, const _: () =
    {
        impl<ScopeId, __D: ::rustc_span::SpanDecoder>
            ::rustc_serialize::Decodable<__D> for StrippedCfgItem<ScopeId>
            where ScopeId: ::rustc_serialize::Decodable<__D> {
            fn decode(__decoder: &mut __D) -> Self {
                StrippedCfgItem {
                    parent_scope: ::rustc_serialize::Decodable::decode(__decoder),
                    ident: ::rustc_serialize::Decodable::decode(__decoder),
                    cfg: ::rustc_serialize::Decodable::decode(__decoder),
                }
            }
        }
    };Decodable, const _: () =
    {
        impl<ScopeId, __CTX>
            ::rustc_data_structures::stable_hasher::HashStable<__CTX> for
            StrippedCfgItem<ScopeId> where
            __CTX: ::rustc_span::HashStableContext,
            ScopeId: ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            {
            #[inline]
            fn hash_stable(&self, __hcx: &mut __CTX,
                __hasher:
                    &mut ::rustc_data_structures::stable_hasher::StableHasher) {
                match *self {
                    StrippedCfgItem {
                        parent_scope: ref __binding_0,
                        ident: ref __binding_1,
                        cfg: ref __binding_2 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                        { __binding_2.hash_stable(__hcx, __hasher); }
                    }
                }
            }
        }
    };HashStable_Generic)]
282pub struct StrippedCfgItem<ScopeId = DefId> {
283    pub parent_scope: ScopeId,
284    pub ident: Ident,
285    pub cfg: (CfgEntry, Span),
286}
287
288impl<ScopeId> StrippedCfgItem<ScopeId> {
289    pub fn map_scope_id<New>(self, f: impl FnOnce(ScopeId) -> New) -> StrippedCfgItem<New> {
290        StrippedCfgItem { parent_scope: f(self.parent_scope), ident: self.ident, cfg: self.cfg }
291    }
292}
293
294/// Possible values for the `#[linkage]` attribute, allowing to specify the
295/// linkage type for a `MonoItem`.
296///
297/// See <https://llvm.org/docs/LangRef.html#linkage-types> for more details about these variants.
298#[derive(const _: () =
    {
        impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
            for Linkage {
            fn encode(&self, __encoder: &mut __E) {
                let disc =
                    match *self {
                        Linkage::AvailableExternally => { 0usize }
                        Linkage::Common => { 1usize }
                        Linkage::ExternalWeak => { 2usize }
                        Linkage::External => { 3usize }
                        Linkage::Internal => { 4usize }
                        Linkage::LinkOnceAny => { 5usize }
                        Linkage::LinkOnceODR => { 6usize }
                        Linkage::WeakAny => { 7usize }
                        Linkage::WeakODR => { 8usize }
                    };
                ::rustc_serialize::Encoder::emit_u8(__encoder, disc as u8);
                match *self {
                    Linkage::AvailableExternally => {}
                    Linkage::Common => {}
                    Linkage::ExternalWeak => {}
                    Linkage::External => {}
                    Linkage::Internal => {}
                    Linkage::LinkOnceAny => {}
                    Linkage::LinkOnceODR => {}
                    Linkage::WeakAny => {}
                    Linkage::WeakODR => {}
                }
            }
        }
    };Encodable, const _: () =
    {
        impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
            for Linkage {
            fn decode(__decoder: &mut __D) -> Self {
                match ::rustc_serialize::Decoder::read_u8(__decoder) as usize
                    {
                    0usize => { Linkage::AvailableExternally }
                    1usize => { Linkage::Common }
                    2usize => { Linkage::ExternalWeak }
                    3usize => { Linkage::External }
                    4usize => { Linkage::Internal }
                    5usize => { Linkage::LinkOnceAny }
                    6usize => { Linkage::LinkOnceODR }
                    7usize => { Linkage::WeakAny }
                    8usize => { Linkage::WeakODR }
                    n => {
                        ::core::panicking::panic_fmt(format_args!("invalid enum variant tag while decoding `Linkage`, expected 0..9, actual {0}",
                                n));
                    }
                }
            }
        }
    };Decodable, #[automatically_derived]
impl ::core::clone::Clone for Linkage {
    #[inline]
    fn clone(&self) -> Linkage { *self }
}Clone, #[automatically_derived]
impl ::core::marker::Copy for Linkage { }Copy, #[automatically_derived]
impl ::core::fmt::Debug for Linkage {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::write_str(f,
            match self {
                Linkage::AvailableExternally => "AvailableExternally",
                Linkage::Common => "Common",
                Linkage::ExternalWeak => "ExternalWeak",
                Linkage::External => "External",
                Linkage::Internal => "Internal",
                Linkage::LinkOnceAny => "LinkOnceAny",
                Linkage::LinkOnceODR => "LinkOnceODR",
                Linkage::WeakAny => "WeakAny",
                Linkage::WeakODR => "WeakODR",
            })
    }
}Debug, #[automatically_derived]
impl ::core::cmp::PartialEq for Linkage {
    #[inline]
    fn eq(&self, other: &Linkage) -> 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 Linkage {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {}
}Eq, #[automatically_derived]
impl ::core::hash::Hash for Linkage {
    #[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)]
299#[derive(const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for Linkage where __CTX: ::rustc_span::HashStableContext {
            #[inline]
            fn hash_stable(&self, __hcx: &mut __CTX,
                __hasher:
                    &mut ::rustc_data_structures::stable_hasher::StableHasher) {
                ::std::mem::discriminant(self).hash_stable(__hcx, __hasher);
                match *self {
                    Linkage::AvailableExternally => {}
                    Linkage::Common => {}
                    Linkage::ExternalWeak => {}
                    Linkage::External => {}
                    Linkage::Internal => {}
                    Linkage::LinkOnceAny => {}
                    Linkage::LinkOnceODR => {}
                    Linkage::WeakAny => {}
                    Linkage::WeakODR => {}
                }
            }
        }
    };HashStable_Generic, const _: () =
    {
        #[allow(unused)]
        impl PrintAttribute for Linkage {
            fn should_render(&self) -> bool { true }
            fn print_attribute(&self,
                __p: &mut rustc_ast_pretty::pp::Printer) {
                match self {
                    Self::AvailableExternally => {
                        __p.word("AvailableExternally")
                    }
                    Self::Common => { __p.word("Common") }
                    Self::ExternalWeak => { __p.word("ExternalWeak") }
                    Self::External => { __p.word("External") }
                    Self::Internal => { __p.word("Internal") }
                    Self::LinkOnceAny => { __p.word("LinkOnceAny") }
                    Self::LinkOnceODR => { __p.word("LinkOnceODR") }
                    Self::WeakAny => { __p.word("WeakAny") }
                    Self::WeakODR => { __p.word("WeakODR") }
                }
            }
        }
    };PrintAttribute)]
300pub enum Linkage {
301    AvailableExternally,
302    Common,
303    ExternalWeak,
304    External,
305    Internal,
306    LinkOnceAny,
307    LinkOnceODR,
308    WeakAny,
309    WeakODR,
310}
311
312#[derive(#[automatically_derived]
impl ::core::clone::Clone for MirDialect {
    #[inline]
    fn clone(&self) -> MirDialect { *self }
}Clone, #[automatically_derived]
impl ::core::marker::Copy for MirDialect { }Copy, const _: () =
    {
        impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
            for MirDialect {
            fn decode(__decoder: &mut __D) -> Self {
                match ::rustc_serialize::Decoder::read_u8(__decoder) as usize
                    {
                    0usize => { MirDialect::Analysis }
                    1usize => { MirDialect::Built }
                    2usize => { MirDialect::Runtime }
                    n => {
                        ::core::panicking::panic_fmt(format_args!("invalid enum variant tag while decoding `MirDialect`, expected 0..3, actual {0}",
                                n));
                    }
                }
            }
        }
    };Decodable, #[automatically_derived]
impl ::core::fmt::Debug for MirDialect {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::write_str(f,
            match self {
                MirDialect::Analysis => "Analysis",
                MirDialect::Built => "Built",
                MirDialect::Runtime => "Runtime",
            })
    }
}Debug, const _: () =
    {
        impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
            for MirDialect {
            fn encode(&self, __encoder: &mut __E) {
                let disc =
                    match *self {
                        MirDialect::Analysis => { 0usize }
                        MirDialect::Built => { 1usize }
                        MirDialect::Runtime => { 2usize }
                    };
                ::rustc_serialize::Encoder::emit_u8(__encoder, disc as u8);
                match *self {
                    MirDialect::Analysis => {}
                    MirDialect::Built => {}
                    MirDialect::Runtime => {}
                }
            }
        }
    };Encodable, #[automatically_derived]
impl ::core::cmp::PartialEq for MirDialect {
    #[inline]
    fn eq(&self, other: &MirDialect) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr
    }
}PartialEq)]
313#[derive(const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for MirDialect where __CTX: ::rustc_span::HashStableContext {
            #[inline]
            fn hash_stable(&self, __hcx: &mut __CTX,
                __hasher:
                    &mut ::rustc_data_structures::stable_hasher::StableHasher) {
                ::std::mem::discriminant(self).hash_stable(__hcx, __hasher);
                match *self {
                    MirDialect::Analysis => {}
                    MirDialect::Built => {}
                    MirDialect::Runtime => {}
                }
            }
        }
    };HashStable_Generic, const _: () =
    {
        #[allow(unused)]
        impl PrintAttribute for MirDialect {
            fn should_render(&self) -> bool { true }
            fn print_attribute(&self,
                __p: &mut rustc_ast_pretty::pp::Printer) {
                match self {
                    Self::Analysis => { __p.word("Analysis") }
                    Self::Built => { __p.word("Built") }
                    Self::Runtime => { __p.word("Runtime") }
                }
            }
        }
    };PrintAttribute)]
314pub enum MirDialect {
315    Analysis,
316    Built,
317    Runtime,
318}
319
320impl IntoDiagArg for MirDialect {
321    fn into_diag_arg(self, _path: &mut Option<PathBuf>) -> DiagArgValue {
322        let arg = match self {
323            MirDialect::Analysis => "analysis",
324            MirDialect::Built => "built",
325            MirDialect::Runtime => "runtime",
326        };
327        DiagArgValue::Str(Cow::Borrowed(arg))
328    }
329}
330
331#[derive(#[automatically_derived]
impl ::core::clone::Clone for MirPhase {
    #[inline]
    fn clone(&self) -> MirPhase { *self }
}Clone, #[automatically_derived]
impl ::core::marker::Copy for MirPhase { }Copy, const _: () =
    {
        impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
            for MirPhase {
            fn decode(__decoder: &mut __D) -> Self {
                match ::rustc_serialize::Decoder::read_u8(__decoder) as usize
                    {
                    0usize => { MirPhase::Initial }
                    1usize => { MirPhase::PostCleanup }
                    2usize => { MirPhase::Optimized }
                    n => {
                        ::core::panicking::panic_fmt(format_args!("invalid enum variant tag while decoding `MirPhase`, expected 0..3, actual {0}",
                                n));
                    }
                }
            }
        }
    };Decodable, #[automatically_derived]
impl ::core::fmt::Debug for MirPhase {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::write_str(f,
            match self {
                MirPhase::Initial => "Initial",
                MirPhase::PostCleanup => "PostCleanup",
                MirPhase::Optimized => "Optimized",
            })
    }
}Debug, const _: () =
    {
        impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
            for MirPhase {
            fn encode(&self, __encoder: &mut __E) {
                let disc =
                    match *self {
                        MirPhase::Initial => { 0usize }
                        MirPhase::PostCleanup => { 1usize }
                        MirPhase::Optimized => { 2usize }
                    };
                ::rustc_serialize::Encoder::emit_u8(__encoder, disc as u8);
                match *self {
                    MirPhase::Initial => {}
                    MirPhase::PostCleanup => {}
                    MirPhase::Optimized => {}
                }
            }
        }
    };Encodable, #[automatically_derived]
impl ::core::cmp::PartialEq for MirPhase {
    #[inline]
    fn eq(&self, other: &MirPhase) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr
    }
}PartialEq)]
332#[derive(const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for MirPhase where __CTX: ::rustc_span::HashStableContext {
            #[inline]
            fn hash_stable(&self, __hcx: &mut __CTX,
                __hasher:
                    &mut ::rustc_data_structures::stable_hasher::StableHasher) {
                ::std::mem::discriminant(self).hash_stable(__hcx, __hasher);
                match *self {
                    MirPhase::Initial => {}
                    MirPhase::PostCleanup => {}
                    MirPhase::Optimized => {}
                }
            }
        }
    };HashStable_Generic, const _: () =
    {
        #[allow(unused)]
        impl PrintAttribute for MirPhase {
            fn should_render(&self) -> bool { true }
            fn print_attribute(&self,
                __p: &mut rustc_ast_pretty::pp::Printer) {
                match self {
                    Self::Initial => { __p.word("Initial") }
                    Self::PostCleanup => { __p.word("PostCleanup") }
                    Self::Optimized => { __p.word("Optimized") }
                }
            }
        }
    };PrintAttribute)]
333pub enum MirPhase {
334    Initial,
335    PostCleanup,
336    Optimized,
337}
338
339impl IntoDiagArg for MirPhase {
340    fn into_diag_arg(self, _path: &mut Option<PathBuf>) -> DiagArgValue {
341        let arg = match self {
342            MirPhase::Initial => "initial",
343            MirPhase::PostCleanup => "post-cleanup",
344            MirPhase::Optimized => "optimized",
345        };
346        DiagArgValue::Str(Cow::Borrowed(arg))
347    }
348}
349
350/// Different ways that the PE Format can decorate a symbol name.
351/// From <https://docs.microsoft.com/en-us/windows/win32/debug/pe-format#import-name-type>
352#[derive(
353    #[automatically_derived]
impl ::core::marker::Copy for PeImportNameType { }Copy,
354    #[automatically_derived]
impl ::core::clone::Clone for PeImportNameType {
    #[inline]
    fn clone(&self) -> PeImportNameType {
        let _: ::core::clone::AssertParamIsClone<u16>;
        *self
    }
}Clone,
355    #[automatically_derived]
impl ::core::fmt::Debug for PeImportNameType {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        match self {
            PeImportNameType::Ordinal(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "Ordinal", &__self_0),
            PeImportNameType::Decorated =>
                ::core::fmt::Formatter::write_str(f, "Decorated"),
            PeImportNameType::NoPrefix =>
                ::core::fmt::Formatter::write_str(f, "NoPrefix"),
            PeImportNameType::Undecorated =>
                ::core::fmt::Formatter::write_str(f, "Undecorated"),
        }
    }
}Debug,
356    const _: () =
    {
        impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
            for PeImportNameType {
            fn encode(&self, __encoder: &mut __E) {
                let disc =
                    match *self {
                        PeImportNameType::Ordinal(ref __binding_0) => { 0usize }
                        PeImportNameType::Decorated => { 1usize }
                        PeImportNameType::NoPrefix => { 2usize }
                        PeImportNameType::Undecorated => { 3usize }
                    };
                ::rustc_serialize::Encoder::emit_u8(__encoder, disc as u8);
                match *self {
                    PeImportNameType::Ordinal(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    PeImportNameType::Decorated => {}
                    PeImportNameType::NoPrefix => {}
                    PeImportNameType::Undecorated => {}
                }
            }
        }
    };Encodable,
357    const _: () =
    {
        impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
            for PeImportNameType {
            fn decode(__decoder: &mut __D) -> Self {
                match ::rustc_serialize::Decoder::read_u8(__decoder) as usize
                    {
                    0usize => {
                        PeImportNameType::Ordinal(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    1usize => { PeImportNameType::Decorated }
                    2usize => { PeImportNameType::NoPrefix }
                    3usize => { PeImportNameType::Undecorated }
                    n => {
                        ::core::panicking::panic_fmt(format_args!("invalid enum variant tag while decoding `PeImportNameType`, expected 0..4, actual {0}",
                                n));
                    }
                }
            }
        }
    };Decodable,
358    const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for PeImportNameType where __CTX: ::rustc_span::HashStableContext
            {
            #[inline]
            fn hash_stable(&self, __hcx: &mut __CTX,
                __hasher:
                    &mut ::rustc_data_structures::stable_hasher::StableHasher) {
                ::std::mem::discriminant(self).hash_stable(__hcx, __hasher);
                match *self {
                    PeImportNameType::Ordinal(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    PeImportNameType::Decorated => {}
                    PeImportNameType::NoPrefix => {}
                    PeImportNameType::Undecorated => {}
                }
            }
        }
    };HashStable_Generic,
359    #[automatically_derived]
impl ::core::cmp::PartialEq for PeImportNameType {
    #[inline]
    fn eq(&self, other: &PeImportNameType) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr &&
            match (self, other) {
                (PeImportNameType::Ordinal(__self_0),
                    PeImportNameType::Ordinal(__arg1_0)) =>
                    __self_0 == __arg1_0,
                _ => true,
            }
    }
}PartialEq,
360    #[automatically_derived]
impl ::core::cmp::Eq for PeImportNameType {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<u16>;
    }
}Eq,
361    const _: () =
    {
        #[allow(unused)]
        impl PrintAttribute for PeImportNameType {
            fn should_render(&self) -> bool { true }
            fn print_attribute(&self,
                __p: &mut rustc_ast_pretty::pp::Printer) {
                match self {
                    Self::Ordinal(f0) => {
                        __p.word("Ordinal");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::Decorated => { __p.word("Decorated") }
                    Self::NoPrefix => { __p.word("NoPrefix") }
                    Self::Undecorated => { __p.word("Undecorated") }
                }
            }
        }
    };PrintAttribute
362)]
363pub enum PeImportNameType {
364    /// IMPORT_ORDINAL
365    /// Uses the ordinal (i.e., a number) rather than the name.
366    Ordinal(u16),
367    /// Same as IMPORT_NAME
368    /// Name is decorated with all prefixes and suffixes.
369    Decorated,
370    /// Same as IMPORT_NAME_NOPREFIX
371    /// Prefix (e.g., the leading `_` or `@`) is skipped, but suffix is kept.
372    NoPrefix,
373    /// Same as IMPORT_NAME_UNDECORATE
374    /// Prefix (e.g., the leading `_` or `@`) and suffix (the first `@` and all
375    /// trailing characters) are skipped.
376    Undecorated,
377}
378
379#[derive(
380    #[automatically_derived]
impl ::core::marker::Copy for NativeLibKind { }Copy,
381    #[automatically_derived]
impl ::core::clone::Clone for NativeLibKind {
    #[inline]
    fn clone(&self) -> NativeLibKind {
        let _: ::core::clone::AssertParamIsClone<Option<bool>>;
        let _: ::core::clone::AssertParamIsClone<Option<bool>>;
        let _: ::core::clone::AssertParamIsClone<Option<bool>>;
        let _: ::core::clone::AssertParamIsClone<Option<bool>>;
        let _: ::core::clone::AssertParamIsClone<Option<bool>>;
        let _: ::core::clone::AssertParamIsClone<Option<bool>>;
        *self
    }
}Clone,
382    #[automatically_derived]
impl ::core::fmt::Debug for NativeLibKind {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        match self {
            NativeLibKind::Static {
                bundle: __self_0,
                whole_archive: __self_1,
                export_symbols: __self_2 } =>
                ::core::fmt::Formatter::debug_struct_field3_finish(f,
                    "Static", "bundle", __self_0, "whole_archive", __self_1,
                    "export_symbols", &__self_2),
            NativeLibKind::Dylib { as_needed: __self_0 } =>
                ::core::fmt::Formatter::debug_struct_field1_finish(f, "Dylib",
                    "as_needed", &__self_0),
            NativeLibKind::RawDylib { as_needed: __self_0 } =>
                ::core::fmt::Formatter::debug_struct_field1_finish(f,
                    "RawDylib", "as_needed", &__self_0),
            NativeLibKind::Framework { as_needed: __self_0 } =>
                ::core::fmt::Formatter::debug_struct_field1_finish(f,
                    "Framework", "as_needed", &__self_0),
            NativeLibKind::LinkArg =>
                ::core::fmt::Formatter::write_str(f, "LinkArg"),
            NativeLibKind::WasmImportModule =>
                ::core::fmt::Formatter::write_str(f, "WasmImportModule"),
            NativeLibKind::Unspecified =>
                ::core::fmt::Formatter::write_str(f, "Unspecified"),
        }
    }
}Debug,
383    #[automatically_derived]
impl ::core::cmp::PartialEq for NativeLibKind {
    #[inline]
    fn eq(&self, other: &NativeLibKind) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr &&
            match (self, other) {
                (NativeLibKind::Static {
                    bundle: __self_0,
                    whole_archive: __self_1,
                    export_symbols: __self_2 }, NativeLibKind::Static {
                    bundle: __arg1_0,
                    whole_archive: __arg1_1,
                    export_symbols: __arg1_2 }) =>
                    __self_0 == __arg1_0 && __self_1 == __arg1_1 &&
                        __self_2 == __arg1_2,
                (NativeLibKind::Dylib { as_needed: __self_0 },
                    NativeLibKind::Dylib { as_needed: __arg1_0 }) =>
                    __self_0 == __arg1_0,
                (NativeLibKind::RawDylib { as_needed: __self_0 },
                    NativeLibKind::RawDylib { as_needed: __arg1_0 }) =>
                    __self_0 == __arg1_0,
                (NativeLibKind::Framework { as_needed: __self_0 },
                    NativeLibKind::Framework { as_needed: __arg1_0 }) =>
                    __self_0 == __arg1_0,
                _ => true,
            }
    }
}PartialEq,
384    #[automatically_derived]
impl ::core::cmp::Eq for NativeLibKind {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<Option<bool>>;
        let _: ::core::cmp::AssertParamIsEq<Option<bool>>;
        let _: ::core::cmp::AssertParamIsEq<Option<bool>>;
        let _: ::core::cmp::AssertParamIsEq<Option<bool>>;
        let _: ::core::cmp::AssertParamIsEq<Option<bool>>;
        let _: ::core::cmp::AssertParamIsEq<Option<bool>>;
    }
}Eq,
385    #[automatically_derived]
impl ::core::cmp::PartialOrd for NativeLibKind {
    #[inline]
    fn partial_cmp(&self, other: &NativeLibKind)
        -> ::core::option::Option<::core::cmp::Ordering> {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        match (self, other) {
            (NativeLibKind::Static {
                bundle: __self_0,
                whole_archive: __self_1,
                export_symbols: __self_2 }, NativeLibKind::Static {
                bundle: __arg1_0,
                whole_archive: __arg1_1,
                export_symbols: __arg1_2 }) =>
                match ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0)
                    {
                    ::core::option::Option::Some(::core::cmp::Ordering::Equal)
                        =>
                        match ::core::cmp::PartialOrd::partial_cmp(__self_1,
                                __arg1_1) {
                            ::core::option::Option::Some(::core::cmp::Ordering::Equal)
                                => ::core::cmp::PartialOrd::partial_cmp(__self_2, __arg1_2),
                            cmp => cmp,
                        },
                    cmp => cmp,
                },
            (NativeLibKind::Dylib { as_needed: __self_0 },
                NativeLibKind::Dylib { as_needed: __arg1_0 }) =>
                ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0),
            (NativeLibKind::RawDylib { as_needed: __self_0 },
                NativeLibKind::RawDylib { as_needed: __arg1_0 }) =>
                ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0),
            (NativeLibKind::Framework { as_needed: __self_0 },
                NativeLibKind::Framework { as_needed: __arg1_0 }) =>
                ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0),
            _ =>
                ::core::cmp::PartialOrd::partial_cmp(&__self_discr,
                    &__arg1_discr),
        }
    }
}PartialOrd,
386    #[automatically_derived]
impl ::core::cmp::Ord for NativeLibKind {
    #[inline]
    fn cmp(&self, other: &NativeLibKind) -> ::core::cmp::Ordering {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        match ::core::cmp::Ord::cmp(&__self_discr, &__arg1_discr) {
            ::core::cmp::Ordering::Equal =>
                match (self, other) {
                    (NativeLibKind::Static {
                        bundle: __self_0,
                        whole_archive: __self_1,
                        export_symbols: __self_2 }, NativeLibKind::Static {
                        bundle: __arg1_0,
                        whole_archive: __arg1_1,
                        export_symbols: __arg1_2 }) =>
                        match ::core::cmp::Ord::cmp(__self_0, __arg1_0) {
                            ::core::cmp::Ordering::Equal =>
                                match ::core::cmp::Ord::cmp(__self_1, __arg1_1) {
                                    ::core::cmp::Ordering::Equal =>
                                        ::core::cmp::Ord::cmp(__self_2, __arg1_2),
                                    cmp => cmp,
                                },
                            cmp => cmp,
                        },
                    (NativeLibKind::Dylib { as_needed: __self_0 },
                        NativeLibKind::Dylib { as_needed: __arg1_0 }) =>
                        ::core::cmp::Ord::cmp(__self_0, __arg1_0),
                    (NativeLibKind::RawDylib { as_needed: __self_0 },
                        NativeLibKind::RawDylib { as_needed: __arg1_0 }) =>
                        ::core::cmp::Ord::cmp(__self_0, __arg1_0),
                    (NativeLibKind::Framework { as_needed: __self_0 },
                        NativeLibKind::Framework { as_needed: __arg1_0 }) =>
                        ::core::cmp::Ord::cmp(__self_0, __arg1_0),
                    _ => ::core::cmp::Ordering::Equal,
                },
            cmp => cmp,
        }
    }
}Ord,
387    #[automatically_derived]
impl ::core::hash::Hash for NativeLibKind {
    #[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 {
            NativeLibKind::Static {
                bundle: __self_0,
                whole_archive: __self_1,
                export_symbols: __self_2 } => {
                ::core::hash::Hash::hash(__self_0, state);
                ::core::hash::Hash::hash(__self_1, state);
                ::core::hash::Hash::hash(__self_2, state)
            }
            NativeLibKind::Dylib { as_needed: __self_0 } =>
                ::core::hash::Hash::hash(__self_0, state),
            NativeLibKind::RawDylib { as_needed: __self_0 } =>
                ::core::hash::Hash::hash(__self_0, state),
            NativeLibKind::Framework { as_needed: __self_0 } =>
                ::core::hash::Hash::hash(__self_0, state),
            _ => {}
        }
    }
}Hash,
388    const _: () =
    {
        impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
            for NativeLibKind {
            fn encode(&self, __encoder: &mut __E) {
                let disc =
                    match *self {
                        NativeLibKind::Static {
                            bundle: ref __binding_0,
                            whole_archive: ref __binding_1,
                            export_symbols: ref __binding_2 } => {
                            0usize
                        }
                        NativeLibKind::Dylib { as_needed: ref __binding_0 } => {
                            1usize
                        }
                        NativeLibKind::RawDylib { as_needed: ref __binding_0 } => {
                            2usize
                        }
                        NativeLibKind::Framework { as_needed: ref __binding_0 } => {
                            3usize
                        }
                        NativeLibKind::LinkArg => { 4usize }
                        NativeLibKind::WasmImportModule => { 5usize }
                        NativeLibKind::Unspecified => { 6usize }
                    };
                ::rustc_serialize::Encoder::emit_u8(__encoder, disc as u8);
                match *self {
                    NativeLibKind::Static {
                        bundle: ref __binding_0,
                        whole_archive: ref __binding_1,
                        export_symbols: ref __binding_2 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_2,
                            __encoder);
                    }
                    NativeLibKind::Dylib { as_needed: ref __binding_0 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    NativeLibKind::RawDylib { as_needed: ref __binding_0 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    NativeLibKind::Framework { as_needed: ref __binding_0 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    NativeLibKind::LinkArg => {}
                    NativeLibKind::WasmImportModule => {}
                    NativeLibKind::Unspecified => {}
                }
            }
        }
    };Encodable,
389    const _: () =
    {
        impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
            for NativeLibKind {
            fn decode(__decoder: &mut __D) -> Self {
                match ::rustc_serialize::Decoder::read_u8(__decoder) as usize
                    {
                    0usize => {
                        NativeLibKind::Static {
                            bundle: ::rustc_serialize::Decodable::decode(__decoder),
                            whole_archive: ::rustc_serialize::Decodable::decode(__decoder),
                            export_symbols: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    1usize => {
                        NativeLibKind::Dylib {
                            as_needed: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    2usize => {
                        NativeLibKind::RawDylib {
                            as_needed: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    3usize => {
                        NativeLibKind::Framework {
                            as_needed: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    4usize => { NativeLibKind::LinkArg }
                    5usize => { NativeLibKind::WasmImportModule }
                    6usize => { NativeLibKind::Unspecified }
                    n => {
                        ::core::panicking::panic_fmt(format_args!("invalid enum variant tag while decoding `NativeLibKind`, expected 0..7, actual {0}",
                                n));
                    }
                }
            }
        }
    };Decodable,
390    const _: () =
    {
        #[allow(unused)]
        impl PrintAttribute for NativeLibKind {
            fn should_render(&self) -> bool { true }
            fn print_attribute(&self,
                __p: &mut rustc_ast_pretty::pp::Printer) {
                match self {
                    Self::Static { bundle, whole_archive, export_symbols } => {
                        __p.word("Static");
                        if true && !bundle.should_render() &&
                                    !whole_archive.should_render() &&
                                !export_symbols.should_render() {
                            return;
                        }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if bundle.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("bundle");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        bundle.print_attribute(__p);
                        if whole_archive.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("whole_archive");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        whole_archive.print_attribute(__p);
                        if export_symbols.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("export_symbols");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        export_symbols.print_attribute(__p);
                        __p.word("}");
                    }
                    Self::Dylib { as_needed } => {
                        __p.word("Dylib");
                        if true && !as_needed.should_render() { return; }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if as_needed.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("as_needed");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        as_needed.print_attribute(__p);
                        __p.word("}");
                    }
                    Self::RawDylib { as_needed } => {
                        __p.word("RawDylib");
                        if true && !as_needed.should_render() { return; }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if as_needed.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("as_needed");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        as_needed.print_attribute(__p);
                        __p.word("}");
                    }
                    Self::Framework { as_needed } => {
                        __p.word("Framework");
                        if true && !as_needed.should_render() { return; }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if as_needed.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("as_needed");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        as_needed.print_attribute(__p);
                        __p.word("}");
                    }
                    Self::LinkArg => { __p.word("LinkArg") }
                    Self::WasmImportModule => { __p.word("WasmImportModule") }
                    Self::Unspecified => { __p.word("Unspecified") }
                }
            }
        }
    };PrintAttribute
391)]
392#[derive(const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for NativeLibKind where __CTX: ::rustc_span::HashStableContext {
            #[inline]
            fn hash_stable(&self, __hcx: &mut __CTX,
                __hasher:
                    &mut ::rustc_data_structures::stable_hasher::StableHasher) {
                ::std::mem::discriminant(self).hash_stable(__hcx, __hasher);
                match *self {
                    NativeLibKind::Static {
                        bundle: ref __binding_0,
                        whole_archive: ref __binding_1,
                        export_symbols: ref __binding_2 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                        { __binding_2.hash_stable(__hcx, __hasher); }
                    }
                    NativeLibKind::Dylib { as_needed: ref __binding_0 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    NativeLibKind::RawDylib { as_needed: ref __binding_0 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    NativeLibKind::Framework { as_needed: ref __binding_0 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    NativeLibKind::LinkArg => {}
                    NativeLibKind::WasmImportModule => {}
                    NativeLibKind::Unspecified => {}
                }
            }
        }
    };HashStable_Generic)]
393pub enum NativeLibKind {
394    /// Static library (e.g. `libfoo.a` on Linux or `foo.lib` on Windows/MSVC)
395    Static {
396        /// Whether to bundle objects from static library into produced rlib
397        bundle: Option<bool>,
398        /// Whether to link static library without throwing any object files away
399        whole_archive: Option<bool>,
400        /// Whether to export c static library symbols
401        export_symbols: Option<bool>,
402    },
403    /// Dynamic library (e.g. `libfoo.so` on Linux)
404    /// or an import library corresponding to a dynamic library (e.g. `foo.lib` on Windows/MSVC).
405    Dylib {
406        /// Whether the dynamic library will be linked only if it satisfies some undefined symbols
407        as_needed: Option<bool>,
408    },
409    /// Dynamic library (e.g. `foo.dll` on Windows) without a corresponding import library.
410    /// On Linux, it refers to a generated shared library stub.
411    RawDylib {
412        /// Whether the dynamic library will be linked only if it satisfies some undefined symbols
413        as_needed: Option<bool>,
414    },
415    /// A macOS-specific kind of dynamic libraries.
416    Framework {
417        /// Whether the framework will be linked only if it satisfies some undefined symbols
418        as_needed: Option<bool>,
419    },
420    /// Argument which is passed to linker, relative order with libraries and other arguments
421    /// is preserved
422    LinkArg,
423
424    /// Module imported from WebAssembly
425    WasmImportModule,
426
427    /// The library kind wasn't specified, `Dylib` is currently used as a default.
428    Unspecified,
429}
430
431impl NativeLibKind {
432    pub fn has_modifiers(&self) -> bool {
433        match self {
434            NativeLibKind::Static { bundle, whole_archive, export_symbols } => {
435                bundle.is_some() || whole_archive.is_some() || export_symbols.is_some()
436            }
437            NativeLibKind::Dylib { as_needed }
438            | NativeLibKind::Framework { as_needed }
439            | NativeLibKind::RawDylib { as_needed } => as_needed.is_some(),
440            NativeLibKind::Unspecified
441            | NativeLibKind::LinkArg
442            | NativeLibKind::WasmImportModule => false,
443        }
444    }
445
446    pub fn is_statically_included(&self) -> bool {
447        #[allow(non_exhaustive_omitted_patterns)] match self {
    NativeLibKind::Static { .. } => true,
    _ => false,
}matches!(self, NativeLibKind::Static { .. })
448    }
449
450    pub fn is_dllimport(&self) -> bool {
451        #[allow(non_exhaustive_omitted_patterns)] match self {
    NativeLibKind::Dylib { .. } | NativeLibKind::RawDylib { .. } |
        NativeLibKind::Unspecified => true,
    _ => false,
}matches!(
452            self,
453            NativeLibKind::Dylib { .. }
454                | NativeLibKind::RawDylib { .. }
455                | NativeLibKind::Unspecified
456        )
457    }
458}
459
460#[derive(#[automatically_derived]
impl ::core::fmt::Debug for LinkEntry {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        let names: &'static _ =
            &["span", "kind", "name", "cfg", "verbatim", "import_name_type"];
        let values: &[&dyn ::core::fmt::Debug] =
            &[&self.span, &self.kind, &self.name, &self.cfg, &self.verbatim,
                        &&self.import_name_type];
        ::core::fmt::Formatter::debug_struct_fields_finish(f, "LinkEntry",
            names, values)
    }
}Debug, const _: () =
    {
        impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
            for LinkEntry {
            fn encode(&self, __encoder: &mut __E) {
                match *self {
                    LinkEntry {
                        span: ref __binding_0,
                        kind: ref __binding_1,
                        name: ref __binding_2,
                        cfg: ref __binding_3,
                        verbatim: ref __binding_4,
                        import_name_type: ref __binding_5 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_2,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_3,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_4,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_5,
                            __encoder);
                    }
                }
            }
        }
    };Encodable, const _: () =
    {
        impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
            for LinkEntry {
            fn decode(__decoder: &mut __D) -> Self {
                LinkEntry {
                    span: ::rustc_serialize::Decodable::decode(__decoder),
                    kind: ::rustc_serialize::Decodable::decode(__decoder),
                    name: ::rustc_serialize::Decodable::decode(__decoder),
                    cfg: ::rustc_serialize::Decodable::decode(__decoder),
                    verbatim: ::rustc_serialize::Decodable::decode(__decoder),
                    import_name_type: ::rustc_serialize::Decodable::decode(__decoder),
                }
            }
        }
    };Decodable, #[automatically_derived]
impl ::core::clone::Clone for LinkEntry {
    #[inline]
    fn clone(&self) -> LinkEntry {
        LinkEntry {
            span: ::core::clone::Clone::clone(&self.span),
            kind: ::core::clone::Clone::clone(&self.kind),
            name: ::core::clone::Clone::clone(&self.name),
            cfg: ::core::clone::Clone::clone(&self.cfg),
            verbatim: ::core::clone::Clone::clone(&self.verbatim),
            import_name_type: ::core::clone::Clone::clone(&self.import_name_type),
        }
    }
}Clone, const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for LinkEntry where __CTX: ::rustc_span::HashStableContext {
            #[inline]
            fn hash_stable(&self, __hcx: &mut __CTX,
                __hasher:
                    &mut ::rustc_data_structures::stable_hasher::StableHasher) {
                match *self {
                    LinkEntry {
                        span: ref __binding_0,
                        kind: ref __binding_1,
                        name: ref __binding_2,
                        cfg: ref __binding_3,
                        verbatim: ref __binding_4,
                        import_name_type: ref __binding_5 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                        { __binding_2.hash_stable(__hcx, __hasher); }
                        { __binding_3.hash_stable(__hcx, __hasher); }
                        { __binding_4.hash_stable(__hcx, __hasher); }
                        { __binding_5.hash_stable(__hcx, __hasher); }
                    }
                }
            }
        }
    };HashStable_Generic, const _: () =
    {
        #[allow(unused)]
        impl PrintAttribute for LinkEntry {
            fn should_render(&self) -> bool { true }
            fn print_attribute(&self,
                __p: &mut rustc_ast_pretty::pp::Printer) {
                let Self { span, kind, name, cfg, verbatim, import_name_type
                        } = self;
                __p.word("LinkEntry");
                if true && !span.should_render() && !kind.should_render() &&
                                    !name.should_render() && !cfg.should_render() &&
                            !verbatim.should_render() &&
                        !import_name_type.should_render() {
                    return;
                }
                __p.nbsp();
                __p.word("{");
                let mut __printed_anything = false;
                if span.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("span");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                span.print_attribute(__p);
                if kind.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("kind");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                kind.print_attribute(__p);
                if name.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("name");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                name.print_attribute(__p);
                if cfg.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("cfg");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                cfg.print_attribute(__p);
                if verbatim.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("verbatim");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                verbatim.print_attribute(__p);
                if import_name_type.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("import_name_type");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                import_name_type.print_attribute(__p);
                __p.word("}");
            }
        }
    };PrintAttribute)]
461pub struct LinkEntry {
462    pub span: Span,
463    pub kind: NativeLibKind,
464    pub name: Symbol,
465    pub cfg: Option<CfgEntry>,
466    pub verbatim: Option<bool>,
467    pub import_name_type: Option<(PeImportNameType, Span)>,
468}
469
470#[derive(const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for DebuggerVisualizerType where
            __CTX: ::rustc_span::HashStableContext {
            #[inline]
            fn hash_stable(&self, __hcx: &mut __CTX,
                __hasher:
                    &mut ::rustc_data_structures::stable_hasher::StableHasher) {
                ::std::mem::discriminant(self).hash_stable(__hcx, __hasher);
                match *self {
                    DebuggerVisualizerType::Natvis => {}
                    DebuggerVisualizerType::GdbPrettyPrinter => {}
                }
            }
        }
    };HashStable_Generic, const _: () =
    {
        #[allow(unused)]
        impl PrintAttribute for DebuggerVisualizerType {
            fn should_render(&self) -> bool { true }
            fn print_attribute(&self,
                __p: &mut rustc_ast_pretty::pp::Printer) {
                match self {
                    Self::Natvis => { __p.word("Natvis") }
                    Self::GdbPrettyPrinter => { __p.word("GdbPrettyPrinter") }
                }
            }
        }
    };PrintAttribute)]
471#[derive(#[automatically_derived]
impl ::core::marker::Copy for DebuggerVisualizerType { }Copy, #[automatically_derived]
impl ::core::cmp::PartialEq for DebuggerVisualizerType {
    #[inline]
    fn eq(&self, other: &DebuggerVisualizerType) -> 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::PartialOrd for DebuggerVisualizerType {
    #[inline]
    fn partial_cmp(&self, other: &DebuggerVisualizerType)
        -> ::core::option::Option<::core::cmp::Ordering> {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        ::core::cmp::PartialOrd::partial_cmp(&__self_discr, &__arg1_discr)
    }
}PartialOrd, #[automatically_derived]
impl ::core::clone::Clone for DebuggerVisualizerType {
    #[inline]
    fn clone(&self) -> DebuggerVisualizerType { *self }
}Clone, #[automatically_derived]
impl ::core::cmp::Ord for DebuggerVisualizerType {
    #[inline]
    fn cmp(&self, other: &DebuggerVisualizerType) -> ::core::cmp::Ordering {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        ::core::cmp::Ord::cmp(&__self_discr, &__arg1_discr)
    }
}Ord, #[automatically_derived]
impl ::core::cmp::Eq for DebuggerVisualizerType {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {}
}Eq, #[automatically_derived]
impl ::core::hash::Hash for DebuggerVisualizerType {
    #[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, #[automatically_derived]
impl ::core::fmt::Debug for DebuggerVisualizerType {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::write_str(f,
            match self {
                DebuggerVisualizerType::Natvis => "Natvis",
                DebuggerVisualizerType::GdbPrettyPrinter =>
                    "GdbPrettyPrinter",
            })
    }
}Debug, const _: () =
    {
        impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
            for DebuggerVisualizerType {
            fn encode(&self, __encoder: &mut __E) {
                let disc =
                    match *self {
                        DebuggerVisualizerType::Natvis => { 0usize }
                        DebuggerVisualizerType::GdbPrettyPrinter => { 1usize }
                    };
                ::rustc_serialize::Encoder::emit_u8(__encoder, disc as u8);
                match *self {
                    DebuggerVisualizerType::Natvis => {}
                    DebuggerVisualizerType::GdbPrettyPrinter => {}
                }
            }
        }
    };Encodable, const _: () =
    {
        impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
            for DebuggerVisualizerType {
            fn decode(__decoder: &mut __D) -> Self {
                match ::rustc_serialize::Decoder::read_u8(__decoder) as usize
                    {
                    0usize => { DebuggerVisualizerType::Natvis }
                    1usize => { DebuggerVisualizerType::GdbPrettyPrinter }
                    n => {
                        ::core::panicking::panic_fmt(format_args!("invalid enum variant tag while decoding `DebuggerVisualizerType`, expected 0..2, actual {0}",
                                n));
                    }
                }
            }
        }
    };Decodable)]
472pub enum DebuggerVisualizerType {
473    Natvis,
474    GdbPrettyPrinter,
475}
476
477#[derive(#[automatically_derived]
impl ::core::fmt::Debug for DebugVisualizer {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field3_finish(f,
            "DebugVisualizer", "span", &self.span, "visualizer_type",
            &self.visualizer_type, "path", &&self.path)
    }
}Debug, const _: () =
    {
        impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
            for DebugVisualizer {
            fn encode(&self, __encoder: &mut __E) {
                match *self {
                    DebugVisualizer {
                        span: ref __binding_0,
                        visualizer_type: ref __binding_1,
                        path: ref __binding_2 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_2,
                            __encoder);
                    }
                }
            }
        }
    };Encodable, const _: () =
    {
        impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
            for DebugVisualizer {
            fn decode(__decoder: &mut __D) -> Self {
                DebugVisualizer {
                    span: ::rustc_serialize::Decodable::decode(__decoder),
                    visualizer_type: ::rustc_serialize::Decodable::decode(__decoder),
                    path: ::rustc_serialize::Decodable::decode(__decoder),
                }
            }
        }
    };Decodable, #[automatically_derived]
impl ::core::clone::Clone for DebugVisualizer {
    #[inline]
    fn clone(&self) -> DebugVisualizer {
        DebugVisualizer {
            span: ::core::clone::Clone::clone(&self.span),
            visualizer_type: ::core::clone::Clone::clone(&self.visualizer_type),
            path: ::core::clone::Clone::clone(&self.path),
        }
    }
}Clone, const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for DebugVisualizer where __CTX: ::rustc_span::HashStableContext {
            #[inline]
            fn hash_stable(&self, __hcx: &mut __CTX,
                __hasher:
                    &mut ::rustc_data_structures::stable_hasher::StableHasher) {
                match *self {
                    DebugVisualizer {
                        span: ref __binding_0,
                        visualizer_type: ref __binding_1,
                        path: ref __binding_2 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                        { __binding_2.hash_stable(__hcx, __hasher); }
                    }
                }
            }
        }
    };HashStable_Generic, const _: () =
    {
        #[allow(unused)]
        impl PrintAttribute for DebugVisualizer {
            fn should_render(&self) -> bool { true }
            fn print_attribute(&self,
                __p: &mut rustc_ast_pretty::pp::Printer) {
                let Self { span, visualizer_type, path } = self;
                __p.word("DebugVisualizer");
                if true && !span.should_render() &&
                            !visualizer_type.should_render() && !path.should_render() {
                    return;
                }
                __p.nbsp();
                __p.word("{");
                let mut __printed_anything = false;
                if span.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("span");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                span.print_attribute(__p);
                if visualizer_type.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("visualizer_type");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                visualizer_type.print_attribute(__p);
                if path.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("path");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                path.print_attribute(__p);
                __p.word("}");
            }
        }
    };PrintAttribute)]
478pub struct DebugVisualizer {
479    pub span: Span,
480    pub visualizer_type: DebuggerVisualizerType,
481    pub path: Symbol,
482}
483
484#[derive(#[automatically_derived]
impl ::core::clone::Clone for RtsanSetting {
    #[inline]
    fn clone(&self) -> RtsanSetting { *self }
}Clone, #[automatically_derived]
impl ::core::marker::Copy for RtsanSetting { }Copy, #[automatically_derived]
impl ::core::fmt::Debug for RtsanSetting {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::write_str(f,
            match self {
                RtsanSetting::Nonblocking => "Nonblocking",
                RtsanSetting::Blocking => "Blocking",
                RtsanSetting::Caller => "Caller",
            })
    }
}Debug, const _: () =
    {
        impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
            for RtsanSetting {
            fn decode(__decoder: &mut __D) -> Self {
                match ::rustc_serialize::Decoder::read_u8(__decoder) as usize
                    {
                    0usize => { RtsanSetting::Nonblocking }
                    1usize => { RtsanSetting::Blocking }
                    2usize => { RtsanSetting::Caller }
                    n => {
                        ::core::panicking::panic_fmt(format_args!("invalid enum variant tag while decoding `RtsanSetting`, expected 0..3, actual {0}",
                                n));
                    }
                }
            }
        }
    };Decodable, const _: () =
    {
        impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
            for RtsanSetting {
            fn encode(&self, __encoder: &mut __E) {
                let disc =
                    match *self {
                        RtsanSetting::Nonblocking => { 0usize }
                        RtsanSetting::Blocking => { 1usize }
                        RtsanSetting::Caller => { 2usize }
                    };
                ::rustc_serialize::Encoder::emit_u8(__encoder, disc as u8);
                match *self {
                    RtsanSetting::Nonblocking => {}
                    RtsanSetting::Blocking => {}
                    RtsanSetting::Caller => {}
                }
            }
        }
    };Encodable, #[automatically_derived]
impl ::core::cmp::Eq for RtsanSetting {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {}
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for RtsanSetting {
    #[inline]
    fn eq(&self, other: &RtsanSetting) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr
    }
}PartialEq)]
485#[derive(const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for RtsanSetting where __CTX: ::rustc_span::HashStableContext {
            #[inline]
            fn hash_stable(&self, __hcx: &mut __CTX,
                __hasher:
                    &mut ::rustc_data_structures::stable_hasher::StableHasher) {
                ::std::mem::discriminant(self).hash_stable(__hcx, __hasher);
                match *self {
                    RtsanSetting::Nonblocking => {}
                    RtsanSetting::Blocking => {}
                    RtsanSetting::Caller => {}
                }
            }
        }
    };HashStable_Generic, const _: () =
    {
        #[allow(unused)]
        impl PrintAttribute for RtsanSetting {
            fn should_render(&self) -> bool { true }
            fn print_attribute(&self,
                __p: &mut rustc_ast_pretty::pp::Printer) {
                match self {
                    Self::Nonblocking => { __p.word("Nonblocking") }
                    Self::Blocking => { __p.word("Blocking") }
                    Self::Caller => { __p.word("Caller") }
                }
            }
        }
    };PrintAttribute)]
486#[derive_const(#[automatically_derived]
impl const ::core::default::Default for RtsanSetting {
    #[inline]
    fn default() -> RtsanSetting { Self::Caller }
}Default)]
487pub enum RtsanSetting {
488    Nonblocking,
489    Blocking,
490    #[default]
491    Caller,
492}
493
494#[derive(#[automatically_derived]
impl ::core::cmp::Eq for WindowsSubsystemKind {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {}
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for WindowsSubsystemKind {
    #[inline]
    fn eq(&self, other: &WindowsSubsystemKind) -> 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::fmt::Debug for WindowsSubsystemKind {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::write_str(f,
            match self {
                WindowsSubsystemKind::Console => "Console",
                WindowsSubsystemKind::Windows => "Windows",
            })
    }
}Debug, #[automatically_derived]
impl ::core::marker::Copy for WindowsSubsystemKind { }Copy, #[automatically_derived]
impl ::core::clone::Clone for WindowsSubsystemKind {
    #[inline]
    fn clone(&self) -> WindowsSubsystemKind { *self }
}Clone)]
495#[derive(const _: () =
    {
        impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
            for WindowsSubsystemKind {
            fn encode(&self, __encoder: &mut __E) {
                let disc =
                    match *self {
                        WindowsSubsystemKind::Console => { 0usize }
                        WindowsSubsystemKind::Windows => { 1usize }
                    };
                ::rustc_serialize::Encoder::emit_u8(__encoder, disc as u8);
                match *self {
                    WindowsSubsystemKind::Console => {}
                    WindowsSubsystemKind::Windows => {}
                }
            }
        }
    };Encodable, const _: () =
    {
        impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
            for WindowsSubsystemKind {
            fn decode(__decoder: &mut __D) -> Self {
                match ::rustc_serialize::Decoder::read_u8(__decoder) as usize
                    {
                    0usize => { WindowsSubsystemKind::Console }
                    1usize => { WindowsSubsystemKind::Windows }
                    n => {
                        ::core::panicking::panic_fmt(format_args!("invalid enum variant tag while decoding `WindowsSubsystemKind`, expected 0..2, actual {0}",
                                n));
                    }
                }
            }
        }
    };Decodable, const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for WindowsSubsystemKind where
            __CTX: ::rustc_span::HashStableContext {
            #[inline]
            fn hash_stable(&self, __hcx: &mut __CTX,
                __hasher:
                    &mut ::rustc_data_structures::stable_hasher::StableHasher) {
                ::std::mem::discriminant(self).hash_stable(__hcx, __hasher);
                match *self {
                    WindowsSubsystemKind::Console => {}
                    WindowsSubsystemKind::Windows => {}
                }
            }
        }
    };HashStable_Generic, const _: () =
    {
        #[allow(unused)]
        impl PrintAttribute for WindowsSubsystemKind {
            fn should_render(&self) -> bool { true }
            fn print_attribute(&self,
                __p: &mut rustc_ast_pretty::pp::Printer) {
                match self {
                    Self::Console => { __p.word("Console") }
                    Self::Windows => { __p.word("Windows") }
                }
            }
        }
    };PrintAttribute)]
496pub enum WindowsSubsystemKind {
497    Console,
498    Windows,
499}
500
501impl WindowsSubsystemKind {
502    pub fn as_str(&self) -> &'static str {
503        match self {
504            WindowsSubsystemKind::Console => "console",
505            WindowsSubsystemKind::Windows => "windows",
506        }
507    }
508}
509
510#[derive(#[automatically_derived]
impl ::core::marker::Copy for DocInline { }Copy, #[automatically_derived]
impl ::core::clone::Clone for DocInline {
    #[inline]
    fn clone(&self) -> DocInline { *self }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for DocInline {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::write_str(f,
            match self {
                DocInline::Inline => "Inline",
                DocInline::NoInline => "NoInline",
            })
    }
}Debug, #[automatically_derived]
impl ::core::cmp::PartialEq for DocInline {
    #[inline]
    fn eq(&self, other: &DocInline) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr
    }
}PartialEq)]
511#[derive(const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for DocInline where __CTX: ::rustc_span::HashStableContext {
            #[inline]
            fn hash_stable(&self, __hcx: &mut __CTX,
                __hasher:
                    &mut ::rustc_data_structures::stable_hasher::StableHasher) {
                ::std::mem::discriminant(self).hash_stable(__hcx, __hasher);
                match *self {
                    DocInline::Inline => {}
                    DocInline::NoInline => {}
                }
            }
        }
    };HashStable_Generic, const _: () =
    {
        impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
            for DocInline {
            fn encode(&self, __encoder: &mut __E) {
                let disc =
                    match *self {
                        DocInline::Inline => { 0usize }
                        DocInline::NoInline => { 1usize }
                    };
                ::rustc_serialize::Encoder::emit_u8(__encoder, disc as u8);
                match *self {
                    DocInline::Inline => {}
                    DocInline::NoInline => {}
                }
            }
        }
    };Encodable, const _: () =
    {
        impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
            for DocInline {
            fn decode(__decoder: &mut __D) -> Self {
                match ::rustc_serialize::Decoder::read_u8(__decoder) as usize
                    {
                    0usize => { DocInline::Inline }
                    1usize => { DocInline::NoInline }
                    n => {
                        ::core::panicking::panic_fmt(format_args!("invalid enum variant tag while decoding `DocInline`, expected 0..2, actual {0}",
                                n));
                    }
                }
            }
        }
    };Decodable, const _: () =
    {
        #[allow(unused)]
        impl PrintAttribute for DocInline {
            fn should_render(&self) -> bool { true }
            fn print_attribute(&self,
                __p: &mut rustc_ast_pretty::pp::Printer) {
                match self {
                    Self::Inline => { __p.word("Inline") }
                    Self::NoInline => { __p.word("NoInline") }
                }
            }
        }
    };PrintAttribute)]
512pub enum DocInline {
513    Inline,
514    NoInline,
515}
516
517#[derive(#[automatically_derived]
impl ::core::marker::Copy for HideOrShow { }Copy, #[automatically_derived]
impl ::core::clone::Clone for HideOrShow {
    #[inline]
    fn clone(&self) -> HideOrShow { *self }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for HideOrShow {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::write_str(f,
            match self {
                HideOrShow::Hide => "Hide",
                HideOrShow::Show => "Show",
            })
    }
}Debug, #[automatically_derived]
impl ::core::cmp::PartialEq for HideOrShow {
    #[inline]
    fn eq(&self, other: &HideOrShow) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr
    }
}PartialEq)]
518#[derive(const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for HideOrShow where __CTX: ::rustc_span::HashStableContext {
            #[inline]
            fn hash_stable(&self, __hcx: &mut __CTX,
                __hasher:
                    &mut ::rustc_data_structures::stable_hasher::StableHasher) {
                ::std::mem::discriminant(self).hash_stable(__hcx, __hasher);
                match *self { HideOrShow::Hide => {} HideOrShow::Show => {} }
            }
        }
    };HashStable_Generic, const _: () =
    {
        impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
            for HideOrShow {
            fn encode(&self, __encoder: &mut __E) {
                let disc =
                    match *self {
                        HideOrShow::Hide => { 0usize }
                        HideOrShow::Show => { 1usize }
                    };
                ::rustc_serialize::Encoder::emit_u8(__encoder, disc as u8);
                match *self { HideOrShow::Hide => {} HideOrShow::Show => {} }
            }
        }
    };Encodable, const _: () =
    {
        impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
            for HideOrShow {
            fn decode(__decoder: &mut __D) -> Self {
                match ::rustc_serialize::Decoder::read_u8(__decoder) as usize
                    {
                    0usize => { HideOrShow::Hide }
                    1usize => { HideOrShow::Show }
                    n => {
                        ::core::panicking::panic_fmt(format_args!("invalid enum variant tag while decoding `HideOrShow`, expected 0..2, actual {0}",
                                n));
                    }
                }
            }
        }
    };Decodable, const _: () =
    {
        #[allow(unused)]
        impl PrintAttribute for HideOrShow {
            fn should_render(&self) -> bool { true }
            fn print_attribute(&self,
                __p: &mut rustc_ast_pretty::pp::Printer) {
                match self {
                    Self::Hide => { __p.word("Hide") }
                    Self::Show => { __p.word("Show") }
                }
            }
        }
    };PrintAttribute)]
519pub enum HideOrShow {
520    Hide,
521    Show,
522}
523
524#[derive(#[automatically_derived]
impl ::core::clone::Clone for CfgInfo {
    #[inline]
    fn clone(&self) -> CfgInfo {
        CfgInfo {
            name: ::core::clone::Clone::clone(&self.name),
            name_span: ::core::clone::Clone::clone(&self.name_span),
            value: ::core::clone::Clone::clone(&self.value),
        }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for CfgInfo {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field3_finish(f, "CfgInfo",
            "name", &self.name, "name_span", &self.name_span, "value",
            &&self.value)
    }
}Debug, const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for CfgInfo where __CTX: ::rustc_span::HashStableContext {
            #[inline]
            fn hash_stable(&self, __hcx: &mut __CTX,
                __hasher:
                    &mut ::rustc_data_structures::stable_hasher::StableHasher) {
                match *self {
                    CfgInfo {
                        name: ref __binding_0,
                        name_span: ref __binding_1,
                        value: ref __binding_2 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                        { __binding_2.hash_stable(__hcx, __hasher); }
                    }
                }
            }
        }
    };HashStable_Generic, const _: () =
    {
        impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
            for CfgInfo {
            fn encode(&self, __encoder: &mut __E) {
                match *self {
                    CfgInfo {
                        name: ref __binding_0,
                        name_span: ref __binding_1,
                        value: ref __binding_2 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_2,
                            __encoder);
                    }
                }
            }
        }
    };Encodable, const _: () =
    {
        impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
            for CfgInfo {
            fn decode(__decoder: &mut __D) -> Self {
                CfgInfo {
                    name: ::rustc_serialize::Decodable::decode(__decoder),
                    name_span: ::rustc_serialize::Decodable::decode(__decoder),
                    value: ::rustc_serialize::Decodable::decode(__decoder),
                }
            }
        }
    };Decodable, const _: () =
    {
        #[allow(unused)]
        impl PrintAttribute for CfgInfo {
            fn should_render(&self) -> bool { true }
            fn print_attribute(&self,
                __p: &mut rustc_ast_pretty::pp::Printer) {
                let Self { name, name_span, value } = self;
                __p.word("CfgInfo");
                if true && !name.should_render() && !name_span.should_render()
                        && !value.should_render() {
                    return;
                }
                __p.nbsp();
                __p.word("{");
                let mut __printed_anything = false;
                if name.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("name");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                name.print_attribute(__p);
                if name_span.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("name_span");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                name_span.print_attribute(__p);
                if value.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("value");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                value.print_attribute(__p);
                __p.word("}");
            }
        }
    };PrintAttribute)]
525pub struct CfgInfo {
526    pub name: Symbol,
527    pub name_span: Span,
528    pub value: Option<(Symbol, Span)>,
529}
530
531impl CfgInfo {
532    pub fn span_for_name_and_value(&self) -> Span {
533        if let Some((_, value_span)) = self.value {
534            self.name_span.with_hi(value_span.hi())
535        } else {
536            self.name_span
537        }
538    }
539}
540
541#[derive(#[automatically_derived]
impl ::core::clone::Clone for CfgHideShow {
    #[inline]
    fn clone(&self) -> CfgHideShow {
        CfgHideShow {
            kind: ::core::clone::Clone::clone(&self.kind),
            values: ::core::clone::Clone::clone(&self.values),
        }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for CfgHideShow {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f, "CfgHideShow",
            "kind", &self.kind, "values", &&self.values)
    }
}Debug, const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for CfgHideShow where __CTX: ::rustc_span::HashStableContext {
            #[inline]
            fn hash_stable(&self, __hcx: &mut __CTX,
                __hasher:
                    &mut ::rustc_data_structures::stable_hasher::StableHasher) {
                match *self {
                    CfgHideShow { kind: ref __binding_0, values: ref __binding_1
                        } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                }
            }
        }
    };HashStable_Generic, const _: () =
    {
        impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
            for CfgHideShow {
            fn encode(&self, __encoder: &mut __E) {
                match *self {
                    CfgHideShow { kind: ref __binding_0, values: ref __binding_1
                        } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                    }
                }
            }
        }
    };Encodable, const _: () =
    {
        impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
            for CfgHideShow {
            fn decode(__decoder: &mut __D) -> Self {
                CfgHideShow {
                    kind: ::rustc_serialize::Decodable::decode(__decoder),
                    values: ::rustc_serialize::Decodable::decode(__decoder),
                }
            }
        }
    };Decodable, const _: () =
    {
        #[allow(unused)]
        impl PrintAttribute for CfgHideShow {
            fn should_render(&self) -> bool { true }
            fn print_attribute(&self,
                __p: &mut rustc_ast_pretty::pp::Printer) {
                let Self { kind, values } = self;
                __p.word("CfgHideShow");
                if true && !kind.should_render() && !values.should_render() {
                    return;
                }
                __p.nbsp();
                __p.word("{");
                let mut __printed_anything = false;
                if kind.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("kind");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                kind.print_attribute(__p);
                if values.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("values");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                values.print_attribute(__p);
                __p.word("}");
            }
        }
    };PrintAttribute)]
542pub struct CfgHideShow {
543    pub kind: HideOrShow,
544    pub values: ThinVec<CfgInfo>,
545}
546
547#[derive(#[automatically_derived]
impl ::core::clone::Clone for DocAttribute {
    #[inline]
    fn clone(&self) -> DocAttribute {
        DocAttribute {
            aliases: ::core::clone::Clone::clone(&self.aliases),
            hidden: ::core::clone::Clone::clone(&self.hidden),
            inline: ::core::clone::Clone::clone(&self.inline),
            cfg: ::core::clone::Clone::clone(&self.cfg),
            auto_cfg: ::core::clone::Clone::clone(&self.auto_cfg),
            auto_cfg_change: ::core::clone::Clone::clone(&self.auto_cfg_change),
            fake_variadic: ::core::clone::Clone::clone(&self.fake_variadic),
            keyword: ::core::clone::Clone::clone(&self.keyword),
            attribute: ::core::clone::Clone::clone(&self.attribute),
            masked: ::core::clone::Clone::clone(&self.masked),
            notable_trait: ::core::clone::Clone::clone(&self.notable_trait),
            search_unbox: ::core::clone::Clone::clone(&self.search_unbox),
            html_favicon_url: ::core::clone::Clone::clone(&self.html_favicon_url),
            html_logo_url: ::core::clone::Clone::clone(&self.html_logo_url),
            html_playground_url: ::core::clone::Clone::clone(&self.html_playground_url),
            html_root_url: ::core::clone::Clone::clone(&self.html_root_url),
            html_no_source: ::core::clone::Clone::clone(&self.html_no_source),
            issue_tracker_base_url: ::core::clone::Clone::clone(&self.issue_tracker_base_url),
            rust_logo: ::core::clone::Clone::clone(&self.rust_logo),
            test_attrs: ::core::clone::Clone::clone(&self.test_attrs),
            no_crate_inject: ::core::clone::Clone::clone(&self.no_crate_inject),
        }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for DocAttribute {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        let names: &'static _ =
            &["aliases", "hidden", "inline", "cfg", "auto_cfg",
                        "auto_cfg_change", "fake_variadic", "keyword", "attribute",
                        "masked", "notable_trait", "search_unbox",
                        "html_favicon_url", "html_logo_url", "html_playground_url",
                        "html_root_url", "html_no_source", "issue_tracker_base_url",
                        "rust_logo", "test_attrs", "no_crate_inject"];
        let values: &[&dyn ::core::fmt::Debug] =
            &[&self.aliases, &self.hidden, &self.inline, &self.cfg,
                        &self.auto_cfg, &self.auto_cfg_change, &self.fake_variadic,
                        &self.keyword, &self.attribute, &self.masked,
                        &self.notable_trait, &self.search_unbox,
                        &self.html_favicon_url, &self.html_logo_url,
                        &self.html_playground_url, &self.html_root_url,
                        &self.html_no_source, &self.issue_tracker_base_url,
                        &self.rust_logo, &self.test_attrs, &&self.no_crate_inject];
        ::core::fmt::Formatter::debug_struct_fields_finish(f, "DocAttribute",
            names, values)
    }
}Debug, #[automatically_derived]
impl ::core::default::Default for DocAttribute {
    #[inline]
    fn default() -> DocAttribute {
        DocAttribute {
            aliases: ::core::default::Default::default(),
            hidden: ::core::default::Default::default(),
            inline: ::core::default::Default::default(),
            cfg: ::core::default::Default::default(),
            auto_cfg: ::core::default::Default::default(),
            auto_cfg_change: ::core::default::Default::default(),
            fake_variadic: ::core::default::Default::default(),
            keyword: ::core::default::Default::default(),
            attribute: ::core::default::Default::default(),
            masked: ::core::default::Default::default(),
            notable_trait: ::core::default::Default::default(),
            search_unbox: ::core::default::Default::default(),
            html_favicon_url: ::core::default::Default::default(),
            html_logo_url: ::core::default::Default::default(),
            html_playground_url: ::core::default::Default::default(),
            html_root_url: ::core::default::Default::default(),
            html_no_source: ::core::default::Default::default(),
            issue_tracker_base_url: ::core::default::Default::default(),
            rust_logo: ::core::default::Default::default(),
            test_attrs: ::core::default::Default::default(),
            no_crate_inject: ::core::default::Default::default(),
        }
    }
}Default, const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for DocAttribute where __CTX: ::rustc_span::HashStableContext {
            #[inline]
            fn hash_stable(&self, __hcx: &mut __CTX,
                __hasher:
                    &mut ::rustc_data_structures::stable_hasher::StableHasher) {
                match *self {
                    DocAttribute {
                        aliases: ref __binding_0,
                        hidden: ref __binding_1,
                        inline: ref __binding_2,
                        cfg: ref __binding_3,
                        auto_cfg: ref __binding_4,
                        auto_cfg_change: ref __binding_5,
                        fake_variadic: ref __binding_6,
                        keyword: ref __binding_7,
                        attribute: ref __binding_8,
                        masked: ref __binding_9,
                        notable_trait: ref __binding_10,
                        search_unbox: ref __binding_11,
                        html_favicon_url: ref __binding_12,
                        html_logo_url: ref __binding_13,
                        html_playground_url: ref __binding_14,
                        html_root_url: ref __binding_15,
                        html_no_source: ref __binding_16,
                        issue_tracker_base_url: ref __binding_17,
                        rust_logo: ref __binding_18,
                        test_attrs: ref __binding_19,
                        no_crate_inject: ref __binding_20 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                        { __binding_2.hash_stable(__hcx, __hasher); }
                        { __binding_3.hash_stable(__hcx, __hasher); }
                        { __binding_4.hash_stable(__hcx, __hasher); }
                        { __binding_5.hash_stable(__hcx, __hasher); }
                        { __binding_6.hash_stable(__hcx, __hasher); }
                        { __binding_7.hash_stable(__hcx, __hasher); }
                        { __binding_8.hash_stable(__hcx, __hasher); }
                        { __binding_9.hash_stable(__hcx, __hasher); }
                        { __binding_10.hash_stable(__hcx, __hasher); }
                        { __binding_11.hash_stable(__hcx, __hasher); }
                        { __binding_12.hash_stable(__hcx, __hasher); }
                        { __binding_13.hash_stable(__hcx, __hasher); }
                        { __binding_14.hash_stable(__hcx, __hasher); }
                        { __binding_15.hash_stable(__hcx, __hasher); }
                        { __binding_16.hash_stable(__hcx, __hasher); }
                        { __binding_17.hash_stable(__hcx, __hasher); }
                        { __binding_18.hash_stable(__hcx, __hasher); }
                        { __binding_19.hash_stable(__hcx, __hasher); }
                        { __binding_20.hash_stable(__hcx, __hasher); }
                    }
                }
            }
        }
    };HashStable_Generic, const _: () =
    {
        impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
            for DocAttribute {
            fn decode(__decoder: &mut __D) -> Self {
                DocAttribute {
                    aliases: ::rustc_serialize::Decodable::decode(__decoder),
                    hidden: ::rustc_serialize::Decodable::decode(__decoder),
                    inline: ::rustc_serialize::Decodable::decode(__decoder),
                    cfg: ::rustc_serialize::Decodable::decode(__decoder),
                    auto_cfg: ::rustc_serialize::Decodable::decode(__decoder),
                    auto_cfg_change: ::rustc_serialize::Decodable::decode(__decoder),
                    fake_variadic: ::rustc_serialize::Decodable::decode(__decoder),
                    keyword: ::rustc_serialize::Decodable::decode(__decoder),
                    attribute: ::rustc_serialize::Decodable::decode(__decoder),
                    masked: ::rustc_serialize::Decodable::decode(__decoder),
                    notable_trait: ::rustc_serialize::Decodable::decode(__decoder),
                    search_unbox: ::rustc_serialize::Decodable::decode(__decoder),
                    html_favicon_url: ::rustc_serialize::Decodable::decode(__decoder),
                    html_logo_url: ::rustc_serialize::Decodable::decode(__decoder),
                    html_playground_url: ::rustc_serialize::Decodable::decode(__decoder),
                    html_root_url: ::rustc_serialize::Decodable::decode(__decoder),
                    html_no_source: ::rustc_serialize::Decodable::decode(__decoder),
                    issue_tracker_base_url: ::rustc_serialize::Decodable::decode(__decoder),
                    rust_logo: ::rustc_serialize::Decodable::decode(__decoder),
                    test_attrs: ::rustc_serialize::Decodable::decode(__decoder),
                    no_crate_inject: ::rustc_serialize::Decodable::decode(__decoder),
                }
            }
        }
    };Decodable, const _: () =
    {
        #[allow(unused)]
        impl PrintAttribute for DocAttribute {
            fn should_render(&self) -> bool { true }
            fn print_attribute(&self,
                __p: &mut rustc_ast_pretty::pp::Printer) {
                let Self {
                        aliases,
                        hidden,
                        inline,
                        cfg,
                        auto_cfg,
                        auto_cfg_change,
                        fake_variadic,
                        keyword,
                        attribute,
                        masked,
                        notable_trait,
                        search_unbox,
                        html_favicon_url,
                        html_logo_url,
                        html_playground_url,
                        html_root_url,
                        html_no_source,
                        issue_tracker_base_url,
                        rust_logo,
                        test_attrs,
                        no_crate_inject } = self;
                __p.word("DocAttribute");
                if true && !aliases.should_render() && !hidden.should_render()
                                                                                                && !inline.should_render() && !cfg.should_render() &&
                                                                                        !auto_cfg.should_render() &&
                                                                                    !auto_cfg_change.should_render() &&
                                                                                !fake_variadic.should_render() && !keyword.should_render()
                                                                        && !attribute.should_render() && !masked.should_render() &&
                                                                !notable_trait.should_render() &&
                                                            !search_unbox.should_render() &&
                                                        !html_favicon_url.should_render() &&
                                                    !html_logo_url.should_render() &&
                                                !html_playground_url.should_render() &&
                                            !html_root_url.should_render() &&
                                        !html_no_source.should_render() &&
                                    !issue_tracker_base_url.should_render() &&
                                !rust_logo.should_render() && !test_attrs.should_render() &&
                        !no_crate_inject.should_render() {
                    return;
                }
                __p.nbsp();
                __p.word("{");
                let mut __printed_anything = false;
                if aliases.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("aliases");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                aliases.print_attribute(__p);
                if hidden.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("hidden");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                hidden.print_attribute(__p);
                if inline.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("inline");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                inline.print_attribute(__p);
                if cfg.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("cfg");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                cfg.print_attribute(__p);
                if auto_cfg.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("auto_cfg");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                auto_cfg.print_attribute(__p);
                if auto_cfg_change.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("auto_cfg_change");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                auto_cfg_change.print_attribute(__p);
                if fake_variadic.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("fake_variadic");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                fake_variadic.print_attribute(__p);
                if keyword.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("keyword");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                keyword.print_attribute(__p);
                if attribute.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("attribute");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                attribute.print_attribute(__p);
                if masked.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("masked");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                masked.print_attribute(__p);
                if notable_trait.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("notable_trait");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                notable_trait.print_attribute(__p);
                if search_unbox.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("search_unbox");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                search_unbox.print_attribute(__p);
                if html_favicon_url.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("html_favicon_url");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                html_favicon_url.print_attribute(__p);
                if html_logo_url.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("html_logo_url");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                html_logo_url.print_attribute(__p);
                if html_playground_url.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("html_playground_url");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                html_playground_url.print_attribute(__p);
                if html_root_url.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("html_root_url");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                html_root_url.print_attribute(__p);
                if html_no_source.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("html_no_source");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                html_no_source.print_attribute(__p);
                if issue_tracker_base_url.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("issue_tracker_base_url");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                issue_tracker_base_url.print_attribute(__p);
                if rust_logo.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("rust_logo");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                rust_logo.print_attribute(__p);
                if test_attrs.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("test_attrs");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                test_attrs.print_attribute(__p);
                if no_crate_inject.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("no_crate_inject");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                no_crate_inject.print_attribute(__p);
                __p.word("}");
            }
        }
    };PrintAttribute)]
548pub struct DocAttribute {
549    pub aliases: FxIndexMap<Symbol, Span>,
550    pub hidden: Option<Span>,
551    // Because we need to emit the error if there is more than one `inline` attribute on an item
552    // at the same time as the other doc attributes, we store a list instead of using `Option`.
553    pub inline: ThinVec<(DocInline, Span)>,
554
555    // unstable
556    pub cfg: ThinVec<CfgEntry>,
557    pub auto_cfg: ThinVec<(CfgHideShow, Span)>,
558    /// This is for `#[doc(auto_cfg = false|true)]`/`#[doc(auto_cfg)]`.
559    pub auto_cfg_change: ThinVec<(bool, Span)>,
560
561    // builtin
562    pub fake_variadic: Option<Span>,
563    pub keyword: Option<(Symbol, Span)>,
564    pub attribute: Option<(Symbol, Span)>,
565    pub masked: Option<Span>,
566    pub notable_trait: Option<Span>,
567    pub search_unbox: Option<Span>,
568
569    // valid on crate
570    pub html_favicon_url: Option<(Symbol, Span)>,
571    pub html_logo_url: Option<(Symbol, Span)>,
572    pub html_playground_url: Option<(Symbol, Span)>,
573    pub html_root_url: Option<(Symbol, Span)>,
574    pub html_no_source: Option<Span>,
575    pub issue_tracker_base_url: Option<(Symbol, Span)>,
576    pub rust_logo: Option<Span>,
577
578    // #[doc(test(...))]
579    pub test_attrs: ThinVec<Span>,
580    pub no_crate_inject: Option<Span>,
581}
582
583impl<E: rustc_span::SpanEncoder> rustc_serialize::Encodable<E> for DocAttribute {
584    fn encode(&self, encoder: &mut E) {
585        let DocAttribute {
586            aliases,
587            hidden,
588            inline,
589            cfg,
590            auto_cfg,
591            auto_cfg_change,
592            fake_variadic,
593            keyword,
594            attribute,
595            masked,
596            notable_trait,
597            search_unbox,
598            html_favicon_url,
599            html_logo_url,
600            html_playground_url,
601            html_root_url,
602            html_no_source,
603            issue_tracker_base_url,
604            rust_logo,
605            test_attrs,
606            no_crate_inject,
607        } = self;
608        rustc_serialize::Encodable::<E>::encode(aliases, encoder);
609        rustc_serialize::Encodable::<E>::encode(hidden, encoder);
610
611        // FIXME: The `doc(inline)` attribute is never encoded, but is it actually the right thing
612        // to do? I suspect the condition was broken, should maybe instead not encode anything if we
613        // have `doc(no_inline)`.
614        let inline: ThinVec<_> =
615            inline.iter().filter(|(i, _)| *i != DocInline::Inline).cloned().collect();
616        rustc_serialize::Encodable::<E>::encode(&inline, encoder);
617
618        rustc_serialize::Encodable::<E>::encode(cfg, encoder);
619        rustc_serialize::Encodable::<E>::encode(auto_cfg, encoder);
620        rustc_serialize::Encodable::<E>::encode(auto_cfg_change, encoder);
621        rustc_serialize::Encodable::<E>::encode(fake_variadic, encoder);
622        rustc_serialize::Encodable::<E>::encode(keyword, encoder);
623        rustc_serialize::Encodable::<E>::encode(attribute, encoder);
624        rustc_serialize::Encodable::<E>::encode(masked, encoder);
625        rustc_serialize::Encodable::<E>::encode(notable_trait, encoder);
626        rustc_serialize::Encodable::<E>::encode(search_unbox, encoder);
627        rustc_serialize::Encodable::<E>::encode(html_favicon_url, encoder);
628        rustc_serialize::Encodable::<E>::encode(html_logo_url, encoder);
629        rustc_serialize::Encodable::<E>::encode(html_playground_url, encoder);
630        rustc_serialize::Encodable::<E>::encode(html_root_url, encoder);
631        rustc_serialize::Encodable::<E>::encode(html_no_source, encoder);
632        rustc_serialize::Encodable::<E>::encode(issue_tracker_base_url, encoder);
633        rustc_serialize::Encodable::<E>::encode(rust_logo, encoder);
634        rustc_serialize::Encodable::<E>::encode(test_attrs, encoder);
635        rustc_serialize::Encodable::<E>::encode(no_crate_inject, encoder);
636    }
637}
638
639/// How to perform collapse macros debug info
640/// if-ext - if macro from different crate (related to callsite code)
641/// | cmd \ attr    | no  | (unspecified) | external | yes |
642/// | no            | no  | no            | no       | no  |
643/// | (unspecified) | no  | no            | if-ext   | yes |
644/// | external      | no  | if-ext        | if-ext   | yes |
645/// | yes           | yes | yes           | yes      | yes |
646#[derive(#[automatically_derived]
impl ::core::marker::Copy for CollapseMacroDebuginfo { }Copy, #[automatically_derived]
impl ::core::clone::Clone for CollapseMacroDebuginfo {
    #[inline]
    fn clone(&self) -> CollapseMacroDebuginfo { *self }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for CollapseMacroDebuginfo {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::write_str(f,
            match self {
                CollapseMacroDebuginfo::No => "No",
                CollapseMacroDebuginfo::Unspecified => "Unspecified",
                CollapseMacroDebuginfo::External => "External",
                CollapseMacroDebuginfo::Yes => "Yes",
            })
    }
}Debug, #[automatically_derived]
impl ::core::hash::Hash for CollapseMacroDebuginfo {
    #[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, #[automatically_derived]
impl ::core::cmp::PartialEq for CollapseMacroDebuginfo {
    #[inline]
    fn eq(&self, other: &CollapseMacroDebuginfo) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr
    }
}PartialEq)]
647#[derive(const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for CollapseMacroDebuginfo where
            __CTX: ::rustc_span::HashStableContext {
            #[inline]
            fn hash_stable(&self, __hcx: &mut __CTX,
                __hasher:
                    &mut ::rustc_data_structures::stable_hasher::StableHasher) {
                ::std::mem::discriminant(self).hash_stable(__hcx, __hasher);
                match *self {
                    CollapseMacroDebuginfo::No => {}
                    CollapseMacroDebuginfo::Unspecified => {}
                    CollapseMacroDebuginfo::External => {}
                    CollapseMacroDebuginfo::Yes => {}
                }
            }
        }
    };HashStable_Generic, const _: () =
    {
        impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
            for CollapseMacroDebuginfo {
            fn encode(&self, __encoder: &mut __E) {
                let disc =
                    match *self {
                        CollapseMacroDebuginfo::No => { 0usize }
                        CollapseMacroDebuginfo::Unspecified => { 1usize }
                        CollapseMacroDebuginfo::External => { 2usize }
                        CollapseMacroDebuginfo::Yes => { 3usize }
                    };
                ::rustc_serialize::Encoder::emit_u8(__encoder, disc as u8);
                match *self {
                    CollapseMacroDebuginfo::No => {}
                    CollapseMacroDebuginfo::Unspecified => {}
                    CollapseMacroDebuginfo::External => {}
                    CollapseMacroDebuginfo::Yes => {}
                }
            }
        }
    };Encodable, const _: () =
    {
        impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
            for CollapseMacroDebuginfo {
            fn decode(__decoder: &mut __D) -> Self {
                match ::rustc_serialize::Decoder::read_u8(__decoder) as usize
                    {
                    0usize => { CollapseMacroDebuginfo::No }
                    1usize => { CollapseMacroDebuginfo::Unspecified }
                    2usize => { CollapseMacroDebuginfo::External }
                    3usize => { CollapseMacroDebuginfo::Yes }
                    n => {
                        ::core::panicking::panic_fmt(format_args!("invalid enum variant tag while decoding `CollapseMacroDebuginfo`, expected 0..4, actual {0}",
                                n));
                    }
                }
            }
        }
    };Decodable, const _: () =
    {
        #[allow(unused)]
        impl PrintAttribute for CollapseMacroDebuginfo {
            fn should_render(&self) -> bool { true }
            fn print_attribute(&self,
                __p: &mut rustc_ast_pretty::pp::Printer) {
                match self {
                    Self::No => { __p.word("No") }
                    Self::Unspecified => { __p.word("Unspecified") }
                    Self::External => { __p.word("External") }
                    Self::Yes => { __p.word("Yes") }
                }
            }
        }
    };PrintAttribute)]
648pub enum CollapseMacroDebuginfo {
649    /// Don't collapse debuginfo for the macro
650    No = 0,
651    /// Unspecified value
652    Unspecified = 1,
653    /// Collapse debuginfo if the macro comes from a different crate
654    External = 2,
655    /// Collapse debuginfo for the macro
656    Yes = 3,
657}
658
659/// Crate type, as specified by `#![crate_type]`
660#[derive(#[automatically_derived]
impl ::core::marker::Copy for CrateType { }Copy, #[automatically_derived]
impl ::core::clone::Clone for CrateType {
    #[inline]
    fn clone(&self) -> CrateType { *self }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for CrateType {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::write_str(f,
            match self {
                CrateType::Executable => "Executable",
                CrateType::Dylib => "Dylib",
                CrateType::Rlib => "Rlib",
                CrateType::StaticLib => "StaticLib",
                CrateType::Cdylib => "Cdylib",
                CrateType::ProcMacro => "ProcMacro",
                CrateType::Sdylib => "Sdylib",
            })
    }
}Debug, #[automatically_derived]
impl ::core::hash::Hash for CrateType {
    #[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, #[automatically_derived]
impl ::core::cmp::PartialEq for CrateType {
    #[inline]
    fn eq(&self, other: &CrateType) -> 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::default::Default for CrateType {
    #[inline]
    fn default() -> CrateType { Self::Rlib }
}Default, #[automatically_derived]
impl ::core::cmp::PartialOrd for CrateType {
    #[inline]
    fn partial_cmp(&self, other: &CrateType)
        -> ::core::option::Option<::core::cmp::Ordering> {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        ::core::cmp::PartialOrd::partial_cmp(&__self_discr, &__arg1_discr)
    }
}PartialOrd, #[automatically_derived]
impl ::core::cmp::Eq for CrateType {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {}
}Eq, #[automatically_derived]
impl ::core::cmp::Ord for CrateType {
    #[inline]
    fn cmp(&self, other: &CrateType) -> ::core::cmp::Ordering {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        ::core::cmp::Ord::cmp(&__self_discr, &__arg1_discr)
    }
}Ord)]
661#[derive(const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for CrateType where __CTX: ::rustc_span::HashStableContext {
            #[inline]
            fn hash_stable(&self, __hcx: &mut __CTX,
                __hasher:
                    &mut ::rustc_data_structures::stable_hasher::StableHasher) {
                ::std::mem::discriminant(self).hash_stable(__hcx, __hasher);
                match *self {
                    CrateType::Executable => {}
                    CrateType::Dylib => {}
                    CrateType::Rlib => {}
                    CrateType::StaticLib => {}
                    CrateType::Cdylib => {}
                    CrateType::ProcMacro => {}
                    CrateType::Sdylib => {}
                }
            }
        }
    };HashStable_Generic, const _: () =
    {
        impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
            for CrateType {
            fn encode(&self, __encoder: &mut __E) {
                let disc =
                    match *self {
                        CrateType::Executable => { 0usize }
                        CrateType::Dylib => { 1usize }
                        CrateType::Rlib => { 2usize }
                        CrateType::StaticLib => { 3usize }
                        CrateType::Cdylib => { 4usize }
                        CrateType::ProcMacro => { 5usize }
                        CrateType::Sdylib => { 6usize }
                    };
                ::rustc_serialize::Encoder::emit_u8(__encoder, disc as u8);
                match *self {
                    CrateType::Executable => {}
                    CrateType::Dylib => {}
                    CrateType::Rlib => {}
                    CrateType::StaticLib => {}
                    CrateType::Cdylib => {}
                    CrateType::ProcMacro => {}
                    CrateType::Sdylib => {}
                }
            }
        }
    };Encodable, const _: () =
    {
        impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
            for CrateType {
            fn decode(__decoder: &mut __D) -> Self {
                match ::rustc_serialize::Decoder::read_u8(__decoder) as usize
                    {
                    0usize => { CrateType::Executable }
                    1usize => { CrateType::Dylib }
                    2usize => { CrateType::Rlib }
                    3usize => { CrateType::StaticLib }
                    4usize => { CrateType::Cdylib }
                    5usize => { CrateType::ProcMacro }
                    6usize => { CrateType::Sdylib }
                    n => {
                        ::core::panicking::panic_fmt(format_args!("invalid enum variant tag while decoding `CrateType`, expected 0..7, actual {0}",
                                n));
                    }
                }
            }
        }
    };Decodable, const _: () =
    {
        #[allow(unused)]
        impl PrintAttribute for CrateType {
            fn should_render(&self) -> bool { true }
            fn print_attribute(&self,
                __p: &mut rustc_ast_pretty::pp::Printer) {
                match self {
                    Self::Executable => { __p.word("Executable") }
                    Self::Dylib => { __p.word("Dylib") }
                    Self::Rlib => { __p.word("Rlib") }
                    Self::StaticLib => { __p.word("StaticLib") }
                    Self::Cdylib => { __p.word("Cdylib") }
                    Self::ProcMacro => { __p.word("ProcMacro") }
                    Self::Sdylib => { __p.word("Sdylib") }
                }
            }
        }
    };PrintAttribute)]
662pub enum CrateType {
663    /// `#![crate_type = "bin"]`
664    Executable,
665    /// `#![crate_type = "dylib"]`
666    Dylib,
667    /// `#![crate_type = "rlib"]` or `#![crate_type = "lib"]`
668    #[default]
669    Rlib,
670    /// `#![crate_type = "staticlib"]`
671    StaticLib,
672    /// `#![crate_type = "cdylib"]`
673    Cdylib,
674    /// `#![crate_type = "proc-macro"]`
675    ProcMacro,
676    /// `#![crate_type = "sdylib"]`
677    // Unstable; feature(export_stable)
678    Sdylib,
679}
680
681impl CrateType {
682    /// Pairs of each `#[crate_type] = "..."` value and the crate type it resolves to
683    pub fn all() -> &'static [(Symbol, Self)] {
684        if true {
    match (&CrateType::default(), &CrateType::Rlib) {
        (left_val, right_val) => {
            if !(*left_val == *right_val) {
                let kind = ::core::panicking::AssertKind::Eq;
                ::core::panicking::assert_failed(kind, &*left_val,
                    &*right_val, ::core::option::Option::None);
            }
        }
    };
};debug_assert_eq!(CrateType::default(), CrateType::Rlib);
685        &[
686            (rustc_span::sym::lib, CrateType::Rlib),
687            (rustc_span::sym::rlib, CrateType::Rlib),
688            (rustc_span::sym::dylib, CrateType::Dylib),
689            (rustc_span::sym::cdylib, CrateType::Cdylib),
690            (rustc_span::sym::staticlib, CrateType::StaticLib),
691            (rustc_span::sym::proc_dash_macro, CrateType::ProcMacro),
692            (rustc_span::sym::bin, CrateType::Executable),
693            (rustc_span::sym::sdylib, CrateType::Sdylib),
694        ]
695    }
696
697    /// Same as [`CrateType::all`], but does not include unstable options.
698    /// Used for diagnostics.
699    pub fn all_stable() -> &'static [(Symbol, Self)] {
700        if true {
    match (&CrateType::default(), &CrateType::Rlib) {
        (left_val, right_val) => {
            if !(*left_val == *right_val) {
                let kind = ::core::panicking::AssertKind::Eq;
                ::core::panicking::assert_failed(kind, &*left_val,
                    &*right_val, ::core::option::Option::None);
            }
        }
    };
};debug_assert_eq!(CrateType::default(), CrateType::Rlib);
701        &[
702            (rustc_span::sym::lib, CrateType::Rlib),
703            (rustc_span::sym::rlib, CrateType::Rlib),
704            (rustc_span::sym::dylib, CrateType::Dylib),
705            (rustc_span::sym::cdylib, CrateType::Cdylib),
706            (rustc_span::sym::staticlib, CrateType::StaticLib),
707            (rustc_span::sym::proc_dash_macro, CrateType::ProcMacro),
708            (rustc_span::sym::bin, CrateType::Executable),
709        ]
710    }
711
712    pub fn has_metadata(self) -> bool {
713        match self {
714            CrateType::Rlib | CrateType::Dylib | CrateType::ProcMacro => true,
715            CrateType::Executable
716            | CrateType::Cdylib
717            | CrateType::StaticLib
718            | CrateType::Sdylib => false,
719        }
720    }
721}
722
723impl TryFrom<Symbol> for CrateType {
724    type Error = ();
725
726    fn try_from(value: Symbol) -> Result<Self, Self::Error> {
727        Ok(match value {
728            rustc_span::sym::bin => CrateType::Executable,
729            rustc_span::sym::dylib => CrateType::Dylib,
730            rustc_span::sym::staticlib => CrateType::StaticLib,
731            rustc_span::sym::cdylib => CrateType::Cdylib,
732            rustc_span::sym::rlib => CrateType::Rlib,
733            rustc_span::sym::lib => CrateType::default(),
734            rustc_span::sym::proc_dash_macro => CrateType::ProcMacro,
735            rustc_span::sym::sdylib => CrateType::Sdylib,
736            _ => return Err(()),
737        })
738    }
739}
740
741impl std::fmt::Display for CrateType {
742    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
743        match *self {
744            CrateType::Executable => "bin".fmt(f),
745            CrateType::Dylib => "dylib".fmt(f),
746            CrateType::Rlib => "rlib".fmt(f),
747            CrateType::StaticLib => "staticlib".fmt(f),
748            CrateType::Cdylib => "cdylib".fmt(f),
749            CrateType::ProcMacro => "proc-macro".fmt(f),
750            CrateType::Sdylib => "sdylib".fmt(f),
751        }
752    }
753}
754
755impl IntoDiagArg for CrateType {
756    fn into_diag_arg(self, _: &mut Option<std::path::PathBuf>) -> DiagArgValue {
757        self.to_string().into_diag_arg(&mut None)
758    }
759}
760
761#[derive(#[automatically_derived]
impl ::core::clone::Clone for RustcLayoutType {
    #[inline]
    fn clone(&self) -> RustcLayoutType {
        match self {
            RustcLayoutType::Abi => RustcLayoutType::Abi,
            RustcLayoutType::Align => RustcLayoutType::Align,
            RustcLayoutType::Size => RustcLayoutType::Size,
            RustcLayoutType::HomogenousAggregate =>
                RustcLayoutType::HomogenousAggregate,
            RustcLayoutType::Debug => RustcLayoutType::Debug,
        }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for RustcLayoutType {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::write_str(f,
            match self {
                RustcLayoutType::Abi => "Abi",
                RustcLayoutType::Align => "Align",
                RustcLayoutType::Size => "Size",
                RustcLayoutType::HomogenousAggregate => "HomogenousAggregate",
                RustcLayoutType::Debug => "Debug",
            })
    }
}Debug, const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for RustcLayoutType where __CTX: ::rustc_span::HashStableContext {
            #[inline]
            fn hash_stable(&self, __hcx: &mut __CTX,
                __hasher:
                    &mut ::rustc_data_structures::stable_hasher::StableHasher) {
                ::std::mem::discriminant(self).hash_stable(__hcx, __hasher);
                match *self {
                    RustcLayoutType::Abi => {}
                    RustcLayoutType::Align => {}
                    RustcLayoutType::Size => {}
                    RustcLayoutType::HomogenousAggregate => {}
                    RustcLayoutType::Debug => {}
                }
            }
        }
    };HashStable_Generic, const _: () =
    {
        impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
            for RustcLayoutType {
            fn encode(&self, __encoder: &mut __E) {
                let disc =
                    match *self {
                        RustcLayoutType::Abi => { 0usize }
                        RustcLayoutType::Align => { 1usize }
                        RustcLayoutType::Size => { 2usize }
                        RustcLayoutType::HomogenousAggregate => { 3usize }
                        RustcLayoutType::Debug => { 4usize }
                    };
                ::rustc_serialize::Encoder::emit_u8(__encoder, disc as u8);
                match *self {
                    RustcLayoutType::Abi => {}
                    RustcLayoutType::Align => {}
                    RustcLayoutType::Size => {}
                    RustcLayoutType::HomogenousAggregate => {}
                    RustcLayoutType::Debug => {}
                }
            }
        }
    };Encodable, const _: () =
    {
        impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
            for RustcLayoutType {
            fn decode(__decoder: &mut __D) -> Self {
                match ::rustc_serialize::Decoder::read_u8(__decoder) as usize
                    {
                    0usize => { RustcLayoutType::Abi }
                    1usize => { RustcLayoutType::Align }
                    2usize => { RustcLayoutType::Size }
                    3usize => { RustcLayoutType::HomogenousAggregate }
                    4usize => { RustcLayoutType::Debug }
                    n => {
                        ::core::panicking::panic_fmt(format_args!("invalid enum variant tag while decoding `RustcLayoutType`, expected 0..5, actual {0}",
                                n));
                    }
                }
            }
        }
    };Decodable, const _: () =
    {
        #[allow(unused)]
        impl PrintAttribute for RustcLayoutType {
            fn should_render(&self) -> bool { true }
            fn print_attribute(&self,
                __p: &mut rustc_ast_pretty::pp::Printer) {
                match self {
                    Self::Abi => { __p.word("Abi") }
                    Self::Align => { __p.word("Align") }
                    Self::Size => { __p.word("Size") }
                    Self::HomogenousAggregate => {
                        __p.word("HomogenousAggregate")
                    }
                    Self::Debug => { __p.word("Debug") }
                }
            }
        }
    };PrintAttribute)]
762pub enum RustcLayoutType {
763    Abi,
764    Align,
765    Size,
766    HomogenousAggregate,
767    Debug,
768}
769
770#[derive(#[automatically_derived]
impl ::core::clone::Clone for RustcMirKind {
    #[inline]
    fn clone(&self) -> RustcMirKind {
        match self {
            RustcMirKind::PeekMaybeInit => RustcMirKind::PeekMaybeInit,
            RustcMirKind::PeekMaybeUninit => RustcMirKind::PeekMaybeUninit,
            RustcMirKind::PeekLiveness => RustcMirKind::PeekLiveness,
            RustcMirKind::StopAfterDataflow =>
                RustcMirKind::StopAfterDataflow,
            RustcMirKind::BorrowckGraphvizPostflow { path: __self_0 } =>
                RustcMirKind::BorrowckGraphvizPostflow {
                    path: ::core::clone::Clone::clone(__self_0),
                },
            RustcMirKind::BorrowckGraphvizFormat { format: __self_0 } =>
                RustcMirKind::BorrowckGraphvizFormat {
                    format: ::core::clone::Clone::clone(__self_0),
                },
        }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for RustcMirKind {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        match self {
            RustcMirKind::PeekMaybeInit =>
                ::core::fmt::Formatter::write_str(f, "PeekMaybeInit"),
            RustcMirKind::PeekMaybeUninit =>
                ::core::fmt::Formatter::write_str(f, "PeekMaybeUninit"),
            RustcMirKind::PeekLiveness =>
                ::core::fmt::Formatter::write_str(f, "PeekLiveness"),
            RustcMirKind::StopAfterDataflow =>
                ::core::fmt::Formatter::write_str(f, "StopAfterDataflow"),
            RustcMirKind::BorrowckGraphvizPostflow { path: __self_0 } =>
                ::core::fmt::Formatter::debug_struct_field1_finish(f,
                    "BorrowckGraphvizPostflow", "path", &__self_0),
            RustcMirKind::BorrowckGraphvizFormat { format: __self_0 } =>
                ::core::fmt::Formatter::debug_struct_field1_finish(f,
                    "BorrowckGraphvizFormat", "format", &__self_0),
        }
    }
}Debug, const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for RustcMirKind where __CTX: ::rustc_span::HashStableContext {
            #[inline]
            fn hash_stable(&self, __hcx: &mut __CTX,
                __hasher:
                    &mut ::rustc_data_structures::stable_hasher::StableHasher) {
                ::std::mem::discriminant(self).hash_stable(__hcx, __hasher);
                match *self {
                    RustcMirKind::PeekMaybeInit => {}
                    RustcMirKind::PeekMaybeUninit => {}
                    RustcMirKind::PeekLiveness => {}
                    RustcMirKind::StopAfterDataflow => {}
                    RustcMirKind::BorrowckGraphvizPostflow {
                        path: ref __binding_0 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    RustcMirKind::BorrowckGraphvizFormat {
                        format: ref __binding_0 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                }
            }
        }
    };HashStable_Generic, const _: () =
    {
        impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
            for RustcMirKind {
            fn encode(&self, __encoder: &mut __E) {
                let disc =
                    match *self {
                        RustcMirKind::PeekMaybeInit => { 0usize }
                        RustcMirKind::PeekMaybeUninit => { 1usize }
                        RustcMirKind::PeekLiveness => { 2usize }
                        RustcMirKind::StopAfterDataflow => { 3usize }
                        RustcMirKind::BorrowckGraphvizPostflow {
                            path: ref __binding_0 } => {
                            4usize
                        }
                        RustcMirKind::BorrowckGraphvizFormat {
                            format: ref __binding_0 } => {
                            5usize
                        }
                    };
                ::rustc_serialize::Encoder::emit_u8(__encoder, disc as u8);
                match *self {
                    RustcMirKind::PeekMaybeInit => {}
                    RustcMirKind::PeekMaybeUninit => {}
                    RustcMirKind::PeekLiveness => {}
                    RustcMirKind::StopAfterDataflow => {}
                    RustcMirKind::BorrowckGraphvizPostflow {
                        path: ref __binding_0 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    RustcMirKind::BorrowckGraphvizFormat {
                        format: ref __binding_0 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                }
            }
        }
    };Encodable, const _: () =
    {
        impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
            for RustcMirKind {
            fn decode(__decoder: &mut __D) -> Self {
                match ::rustc_serialize::Decoder::read_u8(__decoder) as usize
                    {
                    0usize => { RustcMirKind::PeekMaybeInit }
                    1usize => { RustcMirKind::PeekMaybeUninit }
                    2usize => { RustcMirKind::PeekLiveness }
                    3usize => { RustcMirKind::StopAfterDataflow }
                    4usize => {
                        RustcMirKind::BorrowckGraphvizPostflow {
                            path: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    5usize => {
                        RustcMirKind::BorrowckGraphvizFormat {
                            format: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    n => {
                        ::core::panicking::panic_fmt(format_args!("invalid enum variant tag while decoding `RustcMirKind`, expected 0..6, actual {0}",
                                n));
                    }
                }
            }
        }
    };Decodable, const _: () =
    {
        #[allow(unused)]
        impl PrintAttribute for RustcMirKind {
            fn should_render(&self) -> bool { true }
            fn print_attribute(&self,
                __p: &mut rustc_ast_pretty::pp::Printer) {
                match self {
                    Self::PeekMaybeInit => { __p.word("PeekMaybeInit") }
                    Self::PeekMaybeUninit => { __p.word("PeekMaybeUninit") }
                    Self::PeekLiveness => { __p.word("PeekLiveness") }
                    Self::StopAfterDataflow => { __p.word("StopAfterDataflow") }
                    Self::BorrowckGraphvizPostflow { path } => {
                        __p.word("BorrowckGraphvizPostflow");
                        if true && !path.should_render() { return; }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if path.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("path");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        path.print_attribute(__p);
                        __p.word("}");
                    }
                    Self::BorrowckGraphvizFormat { format } => {
                        __p.word("BorrowckGraphvizFormat");
                        if true && !format.should_render() { return; }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if format.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("format");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        format.print_attribute(__p);
                        __p.word("}");
                    }
                }
            }
        }
    };PrintAttribute, #[automatically_derived]
impl ::core::cmp::PartialEq for RustcMirKind {
    #[inline]
    fn eq(&self, other: &RustcMirKind) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr &&
            match (self, other) {
                (RustcMirKind::BorrowckGraphvizPostflow { path: __self_0 },
                    RustcMirKind::BorrowckGraphvizPostflow { path: __arg1_0 })
                    => __self_0 == __arg1_0,
                (RustcMirKind::BorrowckGraphvizFormat { format: __self_0 },
                    RustcMirKind::BorrowckGraphvizFormat { format: __arg1_0 })
                    => __self_0 == __arg1_0,
                _ => true,
            }
    }
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for RustcMirKind {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<PathBuf>;
        let _: ::core::cmp::AssertParamIsEq<BorrowckGraphvizFormatKind>;
    }
}Eq)]
771pub enum RustcMirKind {
772    PeekMaybeInit,
773    PeekMaybeUninit,
774    PeekLiveness,
775    StopAfterDataflow,
776    BorrowckGraphvizPostflow { path: PathBuf },
777    BorrowckGraphvizFormat { format: BorrowckGraphvizFormatKind },
778}
779
780#[derive(#[automatically_derived]
impl ::core::clone::Clone for BorrowckGraphvizFormatKind {
    #[inline]
    fn clone(&self) -> BorrowckGraphvizFormatKind {
        BorrowckGraphvizFormatKind::TwoPhase
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for BorrowckGraphvizFormatKind {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::write_str(f, "TwoPhase")
    }
}Debug, const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for BorrowckGraphvizFormatKind where
            __CTX: ::rustc_span::HashStableContext {
            #[inline]
            fn hash_stable(&self, __hcx: &mut __CTX,
                __hasher:
                    &mut ::rustc_data_structures::stable_hasher::StableHasher) {
                ::std::mem::discriminant(self).hash_stable(__hcx, __hasher);
                match *self { BorrowckGraphvizFormatKind::TwoPhase => {} }
            }
        }
    };HashStable_Generic, const _: () =
    {
        impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
            for BorrowckGraphvizFormatKind {
            fn encode(&self, __encoder: &mut __E) {
                match *self { BorrowckGraphvizFormatKind::TwoPhase => {} }
            }
        }
    };Encodable, const _: () =
    {
        impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
            for BorrowckGraphvizFormatKind {
            fn decode(__decoder: &mut __D) -> Self {
                BorrowckGraphvizFormatKind::TwoPhase
            }
        }
    };Decodable, const _: () =
    {
        #[allow(unused)]
        impl PrintAttribute for BorrowckGraphvizFormatKind {
            fn should_render(&self) -> bool { true }
            fn print_attribute(&self,
                __p: &mut rustc_ast_pretty::pp::Printer) {
                match self { Self::TwoPhase => { __p.word("TwoPhase") } }
            }
        }
    };PrintAttribute, #[automatically_derived]
impl ::core::cmp::PartialEq for BorrowckGraphvizFormatKind {
    #[inline]
    fn eq(&self, other: &BorrowckGraphvizFormatKind) -> bool { true }
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for BorrowckGraphvizFormatKind {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {}
}Eq)]
781pub enum BorrowckGraphvizFormatKind {
782    TwoPhase,
783}
784
785#[derive(#[automatically_derived]
impl ::core::clone::Clone for RustcCleanAttribute {
    #[inline]
    fn clone(&self) -> RustcCleanAttribute {
        RustcCleanAttribute {
            span: ::core::clone::Clone::clone(&self.span),
            cfg: ::core::clone::Clone::clone(&self.cfg),
            except: ::core::clone::Clone::clone(&self.except),
            loaded_from_disk: ::core::clone::Clone::clone(&self.loaded_from_disk),
        }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for RustcCleanAttribute {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field4_finish(f,
            "RustcCleanAttribute", "span", &self.span, "cfg", &self.cfg,
            "except", &self.except, "loaded_from_disk",
            &&self.loaded_from_disk)
    }
}Debug, #[automatically_derived]
impl ::core::cmp::PartialEq for RustcCleanAttribute {
    #[inline]
    fn eq(&self, other: &RustcCleanAttribute) -> bool {
        self.span == other.span && self.cfg == other.cfg &&
                self.except == other.except &&
            self.loaded_from_disk == other.loaded_from_disk
    }
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for RustcCleanAttribute {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<Span>;
        let _: ::core::cmp::AssertParamIsEq<Symbol>;
        let _: ::core::cmp::AssertParamIsEq<Option<RustcCleanQueries>>;
        let _: ::core::cmp::AssertParamIsEq<Option<RustcCleanQueries>>;
    }
}Eq)]
786#[derive(const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for RustcCleanAttribute where
            __CTX: ::rustc_span::HashStableContext {
            #[inline]
            fn hash_stable(&self, __hcx: &mut __CTX,
                __hasher:
                    &mut ::rustc_data_structures::stable_hasher::StableHasher) {
                match *self {
                    RustcCleanAttribute {
                        span: ref __binding_0,
                        cfg: ref __binding_1,
                        except: ref __binding_2,
                        loaded_from_disk: ref __binding_3 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                        { __binding_2.hash_stable(__hcx, __hasher); }
                        { __binding_3.hash_stable(__hcx, __hasher); }
                    }
                }
            }
        }
    };HashStable_Generic, const _: () =
    {
        impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
            for RustcCleanAttribute {
            fn encode(&self, __encoder: &mut __E) {
                match *self {
                    RustcCleanAttribute {
                        span: ref __binding_0,
                        cfg: ref __binding_1,
                        except: ref __binding_2,
                        loaded_from_disk: ref __binding_3 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_2,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_3,
                            __encoder);
                    }
                }
            }
        }
    };Encodable, const _: () =
    {
        impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
            for RustcCleanAttribute {
            fn decode(__decoder: &mut __D) -> Self {
                RustcCleanAttribute {
                    span: ::rustc_serialize::Decodable::decode(__decoder),
                    cfg: ::rustc_serialize::Decodable::decode(__decoder),
                    except: ::rustc_serialize::Decodable::decode(__decoder),
                    loaded_from_disk: ::rustc_serialize::Decodable::decode(__decoder),
                }
            }
        }
    };Decodable, const _: () =
    {
        #[allow(unused)]
        impl PrintAttribute for RustcCleanAttribute {
            fn should_render(&self) -> bool { true }
            fn print_attribute(&self,
                __p: &mut rustc_ast_pretty::pp::Printer) {
                let Self { span, cfg, except, loaded_from_disk } = self;
                __p.word("RustcCleanAttribute");
                if true && !span.should_render() && !cfg.should_render() &&
                            !except.should_render() && !loaded_from_disk.should_render()
                    {
                    return;
                }
                __p.nbsp();
                __p.word("{");
                let mut __printed_anything = false;
                if span.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("span");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                span.print_attribute(__p);
                if cfg.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("cfg");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                cfg.print_attribute(__p);
                if except.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("except");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                except.print_attribute(__p);
                if loaded_from_disk.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("loaded_from_disk");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                loaded_from_disk.print_attribute(__p);
                __p.word("}");
            }
        }
    };PrintAttribute)]
787pub struct RustcCleanAttribute {
788    pub span: Span,
789    pub cfg: Symbol,
790    pub except: Option<RustcCleanQueries>,
791    pub loaded_from_disk: Option<RustcCleanQueries>,
792}
793
794/// Represents the `except=` or `loaded_from_disk=` argument of `#[rustc_clean]`
795#[derive(#[automatically_derived]
impl ::core::clone::Clone for RustcCleanQueries {
    #[inline]
    fn clone(&self) -> RustcCleanQueries {
        RustcCleanQueries {
            entries: ::core::clone::Clone::clone(&self.entries),
            span: ::core::clone::Clone::clone(&self.span),
        }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for RustcCleanQueries {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f,
            "RustcCleanQueries", "entries", &self.entries, "span",
            &&self.span)
    }
}Debug, #[automatically_derived]
impl ::core::cmp::PartialEq for RustcCleanQueries {
    #[inline]
    fn eq(&self, other: &RustcCleanQueries) -> bool {
        self.entries == other.entries && self.span == other.span
    }
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for RustcCleanQueries {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<ThinVec<Symbol>>;
        let _: ::core::cmp::AssertParamIsEq<Span>;
    }
}Eq)]
796#[derive(const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for RustcCleanQueries where __CTX: ::rustc_span::HashStableContext
            {
            #[inline]
            fn hash_stable(&self, __hcx: &mut __CTX,
                __hasher:
                    &mut ::rustc_data_structures::stable_hasher::StableHasher) {
                match *self {
                    RustcCleanQueries {
                        entries: ref __binding_0, span: ref __binding_1 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                }
            }
        }
    };HashStable_Generic, const _: () =
    {
        impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
            for RustcCleanQueries {
            fn encode(&self, __encoder: &mut __E) {
                match *self {
                    RustcCleanQueries {
                        entries: ref __binding_0, span: ref __binding_1 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                    }
                }
            }
        }
    };Encodable, const _: () =
    {
        impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
            for RustcCleanQueries {
            fn decode(__decoder: &mut __D) -> Self {
                RustcCleanQueries {
                    entries: ::rustc_serialize::Decodable::decode(__decoder),
                    span: ::rustc_serialize::Decodable::decode(__decoder),
                }
            }
        }
    };Decodable, const _: () =
    {
        #[allow(unused)]
        impl PrintAttribute for RustcCleanQueries {
            fn should_render(&self) -> bool { true }
            fn print_attribute(&self,
                __p: &mut rustc_ast_pretty::pp::Printer) {
                let Self { entries, span } = self;
                __p.word("RustcCleanQueries");
                if true && !entries.should_render() && !span.should_render() {
                    return;
                }
                __p.nbsp();
                __p.word("{");
                let mut __printed_anything = false;
                if entries.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("entries");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                entries.print_attribute(__p);
                if span.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("span");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                span.print_attribute(__p);
                __p.word("}");
            }
        }
    };PrintAttribute)]
797pub struct RustcCleanQueries {
798    pub entries: ThinVec<Symbol>,
799    pub span: Span,
800}
801
802#[derive(#[automatically_derived]
impl ::core::clone::Clone for RustcAutodiff {
    #[inline]
    fn clone(&self) -> RustcAutodiff {
        RustcAutodiff {
            mode: ::core::clone::Clone::clone(&self.mode),
            width: ::core::clone::Clone::clone(&self.width),
            input_activity: ::core::clone::Clone::clone(&self.input_activity),
            ret_activity: ::core::clone::Clone::clone(&self.ret_activity),
        }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for RustcAutodiff {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field4_finish(f, "RustcAutodiff",
            "mode", &self.mode, "width", &self.width, "input_activity",
            &self.input_activity, "ret_activity", &&self.ret_activity)
    }
}Debug, #[automatically_derived]
impl ::core::cmp::PartialEq for RustcAutodiff {
    #[inline]
    fn eq(&self, other: &RustcAutodiff) -> bool {
        self.width == other.width && self.mode == other.mode &&
                self.input_activity == other.input_activity &&
            self.ret_activity == other.ret_activity
    }
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for RustcAutodiff {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<DiffMode>;
        let _: ::core::cmp::AssertParamIsEq<u32>;
        let _: ::core::cmp::AssertParamIsEq<ThinVec<DiffActivity>>;
        let _: ::core::cmp::AssertParamIsEq<DiffActivity>;
    }
}Eq)]
803#[derive(const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for RustcAutodiff where __CTX: ::rustc_span::HashStableContext {
            #[inline]
            fn hash_stable(&self, __hcx: &mut __CTX,
                __hasher:
                    &mut ::rustc_data_structures::stable_hasher::StableHasher) {
                match *self {
                    RustcAutodiff {
                        mode: ref __binding_0,
                        width: ref __binding_1,
                        input_activity: ref __binding_2,
                        ret_activity: ref __binding_3 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                        { __binding_2.hash_stable(__hcx, __hasher); }
                        { __binding_3.hash_stable(__hcx, __hasher); }
                    }
                }
            }
        }
    };HashStable_Generic, const _: () =
    {
        impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
            for RustcAutodiff {
            fn encode(&self, __encoder: &mut __E) {
                match *self {
                    RustcAutodiff {
                        mode: ref __binding_0,
                        width: ref __binding_1,
                        input_activity: ref __binding_2,
                        ret_activity: ref __binding_3 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_2,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_3,
                            __encoder);
                    }
                }
            }
        }
    };Encodable, const _: () =
    {
        impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
            for RustcAutodiff {
            fn decode(__decoder: &mut __D) -> Self {
                RustcAutodiff {
                    mode: ::rustc_serialize::Decodable::decode(__decoder),
                    width: ::rustc_serialize::Decodable::decode(__decoder),
                    input_activity: ::rustc_serialize::Decodable::decode(__decoder),
                    ret_activity: ::rustc_serialize::Decodable::decode(__decoder),
                }
            }
        }
    };Decodable, const _: () =
    {
        #[allow(unused)]
        impl PrintAttribute for RustcAutodiff {
            fn should_render(&self) -> bool { true }
            fn print_attribute(&self,
                __p: &mut rustc_ast_pretty::pp::Printer) {
                let Self { mode, width, input_activity, ret_activity } = self;
                __p.word("RustcAutodiff");
                if true && !mode.should_render() && !width.should_render() &&
                            !input_activity.should_render() &&
                        !ret_activity.should_render() {
                    return;
                }
                __p.nbsp();
                __p.word("{");
                let mut __printed_anything = false;
                if mode.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("mode");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                mode.print_attribute(__p);
                if width.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("width");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                width.print_attribute(__p);
                if input_activity.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("input_activity");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                input_activity.print_attribute(__p);
                if ret_activity.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("ret_activity");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                ret_activity.print_attribute(__p);
                __p.word("}");
            }
        }
    };PrintAttribute)]
804pub struct RustcAutodiff {
805    /// Conceptually either forward or reverse mode AD, as described in various autodiff papers and
806    /// e.g. in the [JAX
807    /// Documentation](https://jax.readthedocs.io/en/latest/_tutorials/advanced-autodiff.html#how-it-s-made-two-foundational-autodiff-functions).
808    pub mode: DiffMode,
809    /// A user-provided, batching width. If not given, we will default to 1 (no batching).
810    /// Calling a differentiated, non-batched function through a loop 100 times is equivalent to:
811    /// - Calling the function 50 times with a batch size of 2
812    /// - Calling the function 25 times with a batch size of 4,
813    /// etc. A batched function takes more (or longer) arguments, and might be able to benefit from
814    /// cache locality, better re-usal of primal values, and other optimizations.
815    /// We will (before LLVM's vectorizer runs) just generate most LLVM-IR instructions `width`
816    /// times, so this massively increases code size. As such, values like 1024 are unlikely to
817    /// work. We should consider limiting this to u8 or u16, but will leave it at u32 for
818    /// experiments for now and focus on documenting the implications of a large width.
819    pub width: u32,
820    pub input_activity: ThinVec<DiffActivity>,
821    pub ret_activity: DiffActivity,
822}
823
824impl RustcAutodiff {
825    pub fn has_primal_ret(&self) -> bool {
826        #[allow(non_exhaustive_omitted_patterns)] match self.ret_activity {
    DiffActivity::Active | DiffActivity::Dual => true,
    _ => false,
}matches!(self.ret_activity, DiffActivity::Active | DiffActivity::Dual)
827    }
828}
829
830impl RustcAutodiff {
831    pub fn has_ret_activity(&self) -> bool {
832        self.ret_activity != DiffActivity::None
833    }
834    pub fn has_active_only_ret(&self) -> bool {
835        self.ret_activity == DiffActivity::ActiveOnly
836    }
837
838    pub fn error() -> Self {
839        RustcAutodiff {
840            mode: DiffMode::Error,
841            width: 0,
842            ret_activity: DiffActivity::None,
843            input_activity: ThinVec::new(),
844        }
845    }
846
847    pub fn source() -> Self {
848        RustcAutodiff {
849            mode: DiffMode::Source,
850            width: 0,
851            ret_activity: DiffActivity::None,
852            input_activity: ThinVec::new(),
853        }
854    }
855
856    pub fn is_active(&self) -> bool {
857        self.mode != DiffMode::Error
858    }
859
860    pub fn is_source(&self) -> bool {
861        self.mode == DiffMode::Source
862    }
863    pub fn apply_autodiff(&self) -> bool {
864        !#[allow(non_exhaustive_omitted_patterns)] match self.mode {
    DiffMode::Error | DiffMode::Source => true,
    _ => false,
}matches!(self.mode, DiffMode::Error | DiffMode::Source)
865    }
866
867    pub fn into_item(
868        self,
869        source: String,
870        target: String,
871        inputs: Vec<TypeTree>,
872        output: TypeTree,
873    ) -> AutoDiffItem {
874        AutoDiffItem { source, target, inputs, output, attrs: self }
875    }
876}
877
878/// We generate one of these structs for each `#[autodiff(...)]` attribute.
879#[derive(#[automatically_derived]
impl ::core::clone::Clone for AutoDiffItem {
    #[inline]
    fn clone(&self) -> AutoDiffItem {
        AutoDiffItem {
            source: ::core::clone::Clone::clone(&self.source),
            target: ::core::clone::Clone::clone(&self.target),
            attrs: ::core::clone::Clone::clone(&self.attrs),
            inputs: ::core::clone::Clone::clone(&self.inputs),
            output: ::core::clone::Clone::clone(&self.output),
        }
    }
}Clone, #[automatically_derived]
impl ::core::cmp::Eq for AutoDiffItem {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<String>;
        let _: ::core::cmp::AssertParamIsEq<RustcAutodiff>;
        let _: ::core::cmp::AssertParamIsEq<Vec<TypeTree>>;
        let _: ::core::cmp::AssertParamIsEq<TypeTree>;
    }
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for AutoDiffItem {
    #[inline]
    fn eq(&self, other: &AutoDiffItem) -> bool {
        self.source == other.source && self.target == other.target &&
                    self.attrs == other.attrs && self.inputs == other.inputs &&
            self.output == other.output
    }
}PartialEq, const _: () =
    {
        impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
            for AutoDiffItem {
            fn encode(&self, __encoder: &mut __E) {
                match *self {
                    AutoDiffItem {
                        source: ref __binding_0,
                        target: ref __binding_1,
                        attrs: ref __binding_2,
                        inputs: ref __binding_3,
                        output: ref __binding_4 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_2,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_3,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_4,
                            __encoder);
                    }
                }
            }
        }
    };Encodable, const _: () =
    {
        impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
            for AutoDiffItem {
            fn decode(__decoder: &mut __D) -> Self {
                AutoDiffItem {
                    source: ::rustc_serialize::Decodable::decode(__decoder),
                    target: ::rustc_serialize::Decodable::decode(__decoder),
                    attrs: ::rustc_serialize::Decodable::decode(__decoder),
                    inputs: ::rustc_serialize::Decodable::decode(__decoder),
                    output: ::rustc_serialize::Decodable::decode(__decoder),
                }
            }
        }
    };Decodable, #[automatically_derived]
impl ::core::fmt::Debug for AutoDiffItem {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field5_finish(f, "AutoDiffItem",
            "source", &self.source, "target", &self.target, "attrs",
            &self.attrs, "inputs", &self.inputs, "output", &&self.output)
    }
}Debug, const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for AutoDiffItem where __CTX: ::rustc_span::HashStableContext {
            #[inline]
            fn hash_stable(&self, __hcx: &mut __CTX,
                __hasher:
                    &mut ::rustc_data_structures::stable_hasher::StableHasher) {
                match *self {
                    AutoDiffItem {
                        source: ref __binding_0,
                        target: ref __binding_1,
                        attrs: ref __binding_2,
                        inputs: ref __binding_3,
                        output: ref __binding_4 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                        { __binding_2.hash_stable(__hcx, __hasher); }
                        { __binding_3.hash_stable(__hcx, __hasher); }
                        { __binding_4.hash_stable(__hcx, __hasher); }
                    }
                }
            }
        }
    };HashStable_Generic)]
880pub struct AutoDiffItem {
881    /// The name of the function getting differentiated
882    pub source: String,
883    /// The name of the function being generated
884    pub target: String,
885    pub attrs: RustcAutodiff,
886    pub inputs: Vec<TypeTree>,
887    pub output: TypeTree,
888}
889
890impl fmt::Display for AutoDiffItem {
891    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
892        f.write_fmt(format_args!("Differentiating {0} -> {1}", self.source,
        self.target))write!(f, "Differentiating {} -> {}", self.source, self.target)?;
893        f.write_fmt(format_args!(" with attributes: {0:?}", self.attrs))write!(f, " with attributes: {:?}", self.attrs)?;
894        f.write_fmt(format_args!(" with inputs: {0:?}", self.inputs))write!(f, " with inputs: {:?}", self.inputs)?;
895        f.write_fmt(format_args!(" with output: {0:?}", self.output))write!(f, " with output: {:?}", self.output)
896    }
897}
898
899#[derive(#[automatically_derived]
impl ::core::clone::Clone for LintAttribute {
    #[inline]
    fn clone(&self) -> LintAttribute {
        LintAttribute {
            reason: ::core::clone::Clone::clone(&self.reason),
            kind: ::core::clone::Clone::clone(&self.kind),
            attr_style: ::core::clone::Clone::clone(&self.attr_style),
            attr_span: ::core::clone::Clone::clone(&self.attr_span),
            attr_id: ::core::clone::Clone::clone(&self.attr_id),
            lint_instances: ::core::clone::Clone::clone(&self.lint_instances),
        }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for LintAttribute {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        let names: &'static _ =
            &["reason", "kind", "attr_style", "attr_span", "attr_id",
                        "lint_instances"];
        let values: &[&dyn ::core::fmt::Debug] =
            &[&self.reason, &self.kind, &self.attr_style, &self.attr_span,
                        &self.attr_id, &&self.lint_instances];
        ::core::fmt::Formatter::debug_struct_fields_finish(f, "LintAttribute",
            names, values)
    }
}Debug, const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for LintAttribute where __CTX: ::rustc_span::HashStableContext {
            #[inline]
            fn hash_stable(&self, __hcx: &mut __CTX,
                __hasher:
                    &mut ::rustc_data_structures::stable_hasher::StableHasher) {
                match *self {
                    LintAttribute {
                        reason: ref __binding_0,
                        kind: ref __binding_1,
                        attr_style: ref __binding_2,
                        attr_span: ref __binding_3,
                        attr_id: ref __binding_4,
                        lint_instances: ref __binding_5 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                        { __binding_2.hash_stable(__hcx, __hasher); }
                        { __binding_3.hash_stable(__hcx, __hasher); }
                        { __binding_4.hash_stable(__hcx, __hasher); }
                        { __binding_5.hash_stable(__hcx, __hasher); }
                    }
                }
            }
        }
    };HashStable_Generic, const _: () =
    {
        impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
            for LintAttribute {
            fn encode(&self, __encoder: &mut __E) {
                match *self {
                    LintAttribute {
                        reason: ref __binding_0,
                        kind: ref __binding_1,
                        attr_style: ref __binding_2,
                        attr_span: ref __binding_3,
                        attr_id: ref __binding_4,
                        lint_instances: ref __binding_5 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_2,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_3,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_4,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_5,
                            __encoder);
                    }
                }
            }
        }
    };Encodable, const _: () =
    {
        impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
            for LintAttribute {
            fn decode(__decoder: &mut __D) -> Self {
                LintAttribute {
                    reason: ::rustc_serialize::Decodable::decode(__decoder),
                    kind: ::rustc_serialize::Decodable::decode(__decoder),
                    attr_style: ::rustc_serialize::Decodable::decode(__decoder),
                    attr_span: ::rustc_serialize::Decodable::decode(__decoder),
                    attr_id: ::rustc_serialize::Decodable::decode(__decoder),
                    lint_instances: ::rustc_serialize::Decodable::decode(__decoder),
                }
            }
        }
    };Decodable, const _: () =
    {
        #[allow(unused)]
        impl PrintAttribute for LintAttribute {
            fn should_render(&self) -> bool { true }
            fn print_attribute(&self,
                __p: &mut rustc_ast_pretty::pp::Printer) {
                let Self {
                        reason, kind, attr_style, attr_span, attr_id, lint_instances
                        } = self;
                __p.word("LintAttribute");
                if true && !reason.should_render() && !kind.should_render() &&
                                    !attr_style.should_render() && !attr_span.should_render() &&
                            !attr_id.should_render() && !lint_instances.should_render()
                    {
                    return;
                }
                __p.nbsp();
                __p.word("{");
                let mut __printed_anything = false;
                if reason.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("reason");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                reason.print_attribute(__p);
                if kind.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("kind");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                kind.print_attribute(__p);
                if attr_style.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("attr_style");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                attr_style.print_attribute(__p);
                if attr_span.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("attr_span");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                attr_span.print_attribute(__p);
                if attr_id.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("attr_id");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                attr_id.print_attribute(__p);
                if lint_instances.should_render() {
                    if __printed_anything { __p.word_space(","); }
                    __p.word("lint_instances");
                    __p.word(":");
                    __p.nbsp();
                    __printed_anything = true;
                }
                lint_instances.print_attribute(__p);
                __p.word("}");
            }
        }
    };PrintAttribute)]
900pub struct LintAttribute {
901    /// See RFC #2383
902    pub reason: Option<Symbol>,
903    pub kind: LintAttributeKind,
904    pub attr_style: AttrStyle,
905    pub attr_span: Span,
906    /// Needed by `LintExpectationId` to track fulfilled expectations
907    pub attr_id: HashIgnoredAttrId,
908    pub lint_instances: ThinVec<LintInstance>,
909}
910
911#[derive(#[automatically_derived]
impl ::core::fmt::Debug for LintInstance {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field5_finish(f, "LintInstance",
            "span", &self.span, "lint_name", &self.lint_name, "original_name",
            &self.original_name, "lint_index", &self.lint_index, "kind",
            &&self.kind)
    }
}Debug, #[automatically_derived]
impl ::core::clone::Clone for LintInstance {
    #[inline]
    fn clone(&self) -> LintInstance {
        LintInstance {
            span: ::core::clone::Clone::clone(&self.span),
            lint_name: ::core::clone::Clone::clone(&self.lint_name),
            original_name: ::core::clone::Clone::clone(&self.original_name),
            lint_index: ::core::clone::Clone::clone(&self.lint_index),
            kind: ::core::clone::Clone::clone(&self.kind),
        }
    }
}Clone, const _: () =
    {
        impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
            for LintInstance {
            fn encode(&self, __encoder: &mut __E) {
                match *self {
                    LintInstance {
                        span: ref __binding_0,
                        lint_name: ref __binding_1,
                        original_name: ref __binding_2,
                        lint_index: ref __binding_3,
                        kind: ref __binding_4 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_2,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_3,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_4,
                            __encoder);
                    }
                }
            }
        }
    };Encodable, const _: () =
    {
        impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
            for LintInstance {
            fn decode(__decoder: &mut __D) -> Self {
                LintInstance {
                    span: ::rustc_serialize::Decodable::decode(__decoder),
                    lint_name: ::rustc_serialize::Decodable::decode(__decoder),
                    original_name: ::rustc_serialize::Decodable::decode(__decoder),
                    lint_index: ::rustc_serialize::Decodable::decode(__decoder),
                    kind: ::rustc_serialize::Decodable::decode(__decoder),
                }
            }
        }
    };Decodable, const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for LintInstance where __CTX: ::rustc_span::HashStableContext {
            #[inline]
            fn hash_stable(&self, __hcx: &mut __CTX,
                __hasher:
                    &mut ::rustc_data_structures::stable_hasher::StableHasher) {
                match *self {
                    LintInstance {
                        span: ref __binding_0,
                        lint_name: ref __binding_1,
                        original_name: ref __binding_2,
                        lint_index: ref __binding_3,
                        kind: ref __binding_4 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                        { __binding_2.hash_stable(__hcx, __hasher); }
                        { __binding_3.hash_stable(__hcx, __hasher); }
                        { __binding_4.hash_stable(__hcx, __hasher); }
                    }
                }
            }
        }
    };HashStable_Generic)]
912pub struct LintInstance {
913    /// The span of the `MetaItem` that produced this `LintInstance`
914    span: Span,
915    /// The fully resolved name of the lint
916    /// for renamed lints, this gets updated to match the new name
917    lint_name: Symbol,
918    /// The raw identifier for resolving this lint
919    /// if this is none, lint_name never diffed from the original
920    /// name after parsing, original_name.unwrap_or(self.lint_name)
921    original_name: Option<Symbol>,
922    /// Index of this lint, used to keep track of lint groups
923    lint_index: usize,
924    kind: LintAttrTool,
925}
926
927impl fmt::Display for LintInstance {
928    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
929        self.full_lint().fmt(f)
930    }
931}
932
933impl LintInstance {
934    pub fn new(
935        original_name: Symbol,
936        long_lint_name: String,
937        span: Span,
938        lint_index: usize,
939    ) -> Self {
940        let original_name = (original_name.as_str() != long_lint_name).then_some(original_name);
941        let mut tool_name = None;
942
943        let lint_name = match long_lint_name.split_once("::") {
944            Some((new_tool_name, lint_name)) => {
945                tool_name = Some(Symbol::intern(new_tool_name));
946                Symbol::intern(lint_name)
947            }
948            None => Symbol::intern(&long_lint_name),
949        };
950        let kind = match tool_name {
951            Some(tool_name) => {
952                let full_lint = Symbol::intern(&::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}::{1}", tool_name, lint_name))
    })format!("{tool_name}::{lint_name}",));
953                LintAttrTool::Present { tool_name, full_lint }
954            }
955            None => LintAttrTool::NoTool,
956        };
957
958        Self { original_name, span, lint_index, lint_name, kind }
959    }
960
961    pub fn full_lint(&self) -> Symbol {
962        match self.kind {
963            LintAttrTool::Present { full_lint, .. } => full_lint,
964            LintAttrTool::NoTool => self.lint_name,
965        }
966    }
967
968    pub fn span(&self) -> Span {
969        self.span
970    }
971
972    pub fn lint_index(&self) -> usize {
973        self.lint_index
974    }
975
976    pub fn lint_name(&self) -> Symbol {
977        self.lint_name
978    }
979
980    pub fn original_name_without_tool(&self) -> Symbol {
981        let full_original_lint_name = self.original_lint_name();
982        match self.kind {
983            LintAttrTool::Present { tool_name, .. } => Symbol::intern(
984                full_original_lint_name
985                    .as_str()
986                    .trim_start_matches(tool_name.as_str())
987                    .trim_start_matches("::"),
988            ),
989            LintAttrTool::NoTool => full_original_lint_name,
990        }
991    }
992
993    pub fn tool_name(&self) -> Option<Symbol> {
994        if let LintAttrTool::Present { tool_name, .. } = self.kind { Some(tool_name) } else { None }
995    }
996
997    pub fn tool_is_named(&self, other: Symbol) -> bool {
998        self.tool_name().is_some_and(|tool_name| tool_name == other)
999    }
1000
1001    pub fn original_lint_name(&self) -> Symbol {
1002        match self.original_name {
1003            Some(name) => name,
1004            None => self.full_lint(),
1005        }
1006    }
1007}
1008
1009#[derive(#[automatically_derived]
impl ::core::fmt::Debug for LintAttrTool {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        match self {
            LintAttrTool::Present { tool_name: __self_0, full_lint: __self_1 }
                =>
                ::core::fmt::Formatter::debug_struct_field2_finish(f,
                    "Present", "tool_name", __self_0, "full_lint", &__self_1),
            LintAttrTool::NoTool =>
                ::core::fmt::Formatter::write_str(f, "NoTool"),
        }
    }
}Debug, #[automatically_derived]
impl ::core::clone::Clone for LintAttrTool {
    #[inline]
    fn clone(&self) -> LintAttrTool {
        match self {
            LintAttrTool::Present { tool_name: __self_0, full_lint: __self_1 }
                =>
                LintAttrTool::Present {
                    tool_name: ::core::clone::Clone::clone(__self_0),
                    full_lint: ::core::clone::Clone::clone(__self_1),
                },
            LintAttrTool::NoTool => LintAttrTool::NoTool,
        }
    }
}Clone, const _: () =
    {
        #[allow(unused)]
        impl PrintAttribute for LintAttrTool {
            fn should_render(&self) -> bool { true }
            fn print_attribute(&self,
                __p: &mut rustc_ast_pretty::pp::Printer) {
                match self {
                    Self::Present { tool_name, full_lint } => {
                        __p.word("Present");
                        if true && !tool_name.should_render() &&
                                !full_lint.should_render() {
                            return;
                        }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if tool_name.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("tool_name");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        tool_name.print_attribute(__p);
                        if full_lint.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("full_lint");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        full_lint.print_attribute(__p);
                        __p.word("}");
                    }
                    Self::NoTool => { __p.word("NoTool") }
                }
            }
        }
    };PrintAttribute, const _: () =
    {
        impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
            for LintAttrTool {
            fn encode(&self, __encoder: &mut __E) {
                let disc =
                    match *self {
                        LintAttrTool::Present {
                            tool_name: ref __binding_0, full_lint: ref __binding_1 } =>
                            {
                            0usize
                        }
                        LintAttrTool::NoTool => { 1usize }
                    };
                ::rustc_serialize::Encoder::emit_u8(__encoder, disc as u8);
                match *self {
                    LintAttrTool::Present {
                        tool_name: ref __binding_0, full_lint: ref __binding_1 } =>
                        {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                    }
                    LintAttrTool::NoTool => {}
                }
            }
        }
    };Encodable, const _: () =
    {
        impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
            for LintAttrTool {
            fn decode(__decoder: &mut __D) -> Self {
                match ::rustc_serialize::Decoder::read_u8(__decoder) as usize
                    {
                    0usize => {
                        LintAttrTool::Present {
                            tool_name: ::rustc_serialize::Decodable::decode(__decoder),
                            full_lint: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    1usize => { LintAttrTool::NoTool }
                    n => {
                        ::core::panicking::panic_fmt(format_args!("invalid enum variant tag while decoding `LintAttrTool`, expected 0..2, actual {0}",
                                n));
                    }
                }
            }
        }
    };Decodable, const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for LintAttrTool where __CTX: ::rustc_span::HashStableContext {
            #[inline]
            fn hash_stable(&self, __hcx: &mut __CTX,
                __hasher:
                    &mut ::rustc_data_structures::stable_hasher::StableHasher) {
                ::std::mem::discriminant(self).hash_stable(__hcx, __hasher);
                match *self {
                    LintAttrTool::Present {
                        tool_name: ref __binding_0, full_lint: ref __binding_1 } =>
                        {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                    LintAttrTool::NoTool => {}
                }
            }
        }
    };HashStable_Generic)]
1010enum LintAttrTool {
1011    Present { tool_name: Symbol, full_lint: Symbol },
1012    NoTool,
1013}
1014
1015#[derive(#[automatically_derived]
impl ::core::clone::Clone for LintAttributeKind {
    #[inline]
    fn clone(&self) -> LintAttributeKind { *self }
}Clone, #[automatically_derived]
impl ::core::marker::Copy for LintAttributeKind { }Copy, #[automatically_derived]
impl ::core::fmt::Debug for LintAttributeKind {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::write_str(f,
            match self {
                LintAttributeKind::Allow => "Allow",
                LintAttributeKind::Deny => "Deny",
                LintAttributeKind::Expect => "Expect",
                LintAttributeKind::Forbid => "Forbid",
                LintAttributeKind::Warn => "Warn",
            })
    }
}Debug, const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for LintAttributeKind where __CTX: ::rustc_span::HashStableContext
            {
            #[inline]
            fn hash_stable(&self, __hcx: &mut __CTX,
                __hasher:
                    &mut ::rustc_data_structures::stable_hasher::StableHasher) {
                ::std::mem::discriminant(self).hash_stable(__hcx, __hasher);
                match *self {
                    LintAttributeKind::Allow => {}
                    LintAttributeKind::Deny => {}
                    LintAttributeKind::Expect => {}
                    LintAttributeKind::Forbid => {}
                    LintAttributeKind::Warn => {}
                }
            }
        }
    };HashStable_Generic, const _: () =
    {
        impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
            for LintAttributeKind {
            fn encode(&self, __encoder: &mut __E) {
                let disc =
                    match *self {
                        LintAttributeKind::Allow => { 0usize }
                        LintAttributeKind::Deny => { 1usize }
                        LintAttributeKind::Expect => { 2usize }
                        LintAttributeKind::Forbid => { 3usize }
                        LintAttributeKind::Warn => { 4usize }
                    };
                ::rustc_serialize::Encoder::emit_u8(__encoder, disc as u8);
                match *self {
                    LintAttributeKind::Allow => {}
                    LintAttributeKind::Deny => {}
                    LintAttributeKind::Expect => {}
                    LintAttributeKind::Forbid => {}
                    LintAttributeKind::Warn => {}
                }
            }
        }
    };Encodable, const _: () =
    {
        impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
            for LintAttributeKind {
            fn decode(__decoder: &mut __D) -> Self {
                match ::rustc_serialize::Decoder::read_u8(__decoder) as usize
                    {
                    0usize => { LintAttributeKind::Allow }
                    1usize => { LintAttributeKind::Deny }
                    2usize => { LintAttributeKind::Expect }
                    3usize => { LintAttributeKind::Forbid }
                    4usize => { LintAttributeKind::Warn }
                    n => {
                        ::core::panicking::panic_fmt(format_args!("invalid enum variant tag while decoding `LintAttributeKind`, expected 0..5, actual {0}",
                                n));
                    }
                }
            }
        }
    };Decodable, const _: () =
    {
        #[allow(unused)]
        impl PrintAttribute for LintAttributeKind {
            fn should_render(&self) -> bool { true }
            fn print_attribute(&self,
                __p: &mut rustc_ast_pretty::pp::Printer) {
                match self {
                    Self::Allow => { __p.word("Allow") }
                    Self::Deny => { __p.word("Deny") }
                    Self::Expect => { __p.word("Expect") }
                    Self::Forbid => { __p.word("Forbid") }
                    Self::Warn => { __p.word("Warn") }
                }
            }
        }
    };PrintAttribute, #[automatically_derived]
impl ::core::cmp::PartialEq for LintAttributeKind {
    #[inline]
    fn eq(&self, other: &LintAttributeKind) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr
    }
}PartialEq)]
1016pub enum LintAttributeKind {
1017    Allow,
1018    Deny,
1019    Expect,
1020    Forbid,
1021    Warn,
1022}
1023
1024impl LintAttributeKind {
1025    pub const fn symbol(&self) -> Symbol {
1026        match self {
1027            Self::Allow => sym::allow,
1028            Self::Deny => sym::deny,
1029            Self::Expect => sym::expect,
1030            Self::Forbid => sym::forbid,
1031            Self::Warn => sym::warn,
1032        }
1033    }
1034}
1035
1036/// Represents parsed *built-in* inert attributes.
1037///
1038/// ## Overview
1039/// These attributes are markers that guide the compilation process and are never expanded into other code.
1040/// They persist throughout the compilation phases, from AST to HIR and beyond.
1041///
1042/// ## Attribute Processing
1043/// While attributes are initially parsed by [`rustc_parse`] into [`ast::Attribute`], they still contain raw token streams
1044/// because different attributes have different internal structures. This enum represents the final,
1045/// fully parsed form of these attributes, where each variant contains all the information and
1046/// structure relevant for the specific attribute.
1047///
1048/// Some attributes can be applied multiple times to the same item, and they are "collapsed" into a single
1049/// semantic attribute. For example:
1050/// ```rust
1051/// #[repr(C)]
1052/// #[repr(packed)]
1053/// struct S { }
1054/// ```
1055/// This is equivalent to `#[repr(C, packed)]` and results in a single [`AttributeKind::Repr`] containing
1056/// both `C` and `packed` annotations. This collapsing happens during parsing and is reflected in the
1057/// data structures defined in this enum.
1058///
1059/// ## Usage
1060/// These parsed attributes are used throughout the compiler to:
1061/// - Control code generation (e.g., `#[repr]`)
1062/// - Mark API stability (`#[stable]`, `#[unstable]`)
1063/// - Provide documentation (`#[doc]`)
1064/// - Guide compiler behavior (e.g., `#[allow_internal_unstable]`)
1065///
1066/// ## Note on Attribute Organization
1067/// Some attributes like `InlineAttr`, `OptimizeAttr`, and `InstructionSetAttr` are defined separately
1068/// from this enum because they are used in specific compiler phases (like code generation) and don't
1069/// need to persist throughout the entire compilation process. They are typically processed and
1070/// converted into their final form earlier in the compilation pipeline.
1071///
1072/// For example:
1073/// - `InlineAttr` is used during code generation to control function inlining
1074/// - `OptimizeAttr` is used to control optimization levels
1075/// - `InstructionSetAttr` is used for target-specific code generation
1076///
1077/// These attributes are handled by their respective compiler passes in the [`rustc_codegen_ssa`] crate
1078/// and don't need to be preserved in the same way as the attributes in this enum.
1079///
1080/// For more details on attribute parsing, see the [`rustc_attr_parsing`] crate.
1081///
1082/// [`rustc_parse`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_parse/index.html
1083/// [`rustc_codegen_ssa`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_codegen_ssa/index.html
1084/// [`rustc_attr_parsing`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_attr_parsing/index.html
1085#[derive(#[automatically_derived]
impl ::core::clone::Clone for AttributeKind {
    #[inline]
    fn clone(&self) -> AttributeKind {
        match self {
            AttributeKind::AllowInternalUnsafe(__self_0) =>
                AttributeKind::AllowInternalUnsafe(::core::clone::Clone::clone(__self_0)),
            AttributeKind::AllowInternalUnstable(__self_0, __self_1) =>
                AttributeKind::AllowInternalUnstable(::core::clone::Clone::clone(__self_0),
                    ::core::clone::Clone::clone(__self_1)),
            AttributeKind::AutomaticallyDerived(__self_0) =>
                AttributeKind::AutomaticallyDerived(::core::clone::Clone::clone(__self_0)),
            AttributeKind::CfgAttrTrace => AttributeKind::CfgAttrTrace,
            AttributeKind::CfgTrace(__self_0) =>
                AttributeKind::CfgTrace(::core::clone::Clone::clone(__self_0)),
            AttributeKind::CfiEncoding { encoding: __self_0 } =>
                AttributeKind::CfiEncoding {
                    encoding: ::core::clone::Clone::clone(__self_0),
                },
            AttributeKind::Cold(__self_0) =>
                AttributeKind::Cold(::core::clone::Clone::clone(__self_0)),
            AttributeKind::CollapseDebugInfo(__self_0) =>
                AttributeKind::CollapseDebugInfo(::core::clone::Clone::clone(__self_0)),
            AttributeKind::CompilerBuiltins =>
                AttributeKind::CompilerBuiltins,
            AttributeKind::ConstContinue(__self_0) =>
                AttributeKind::ConstContinue(::core::clone::Clone::clone(__self_0)),
            AttributeKind::Coroutine(__self_0) =>
                AttributeKind::Coroutine(::core::clone::Clone::clone(__self_0)),
            AttributeKind::Coverage(__self_0, __self_1) =>
                AttributeKind::Coverage(::core::clone::Clone::clone(__self_0),
                    ::core::clone::Clone::clone(__self_1)),
            AttributeKind::CrateName {
                name: __self_0, name_span: __self_1, attr_span: __self_2 } =>
                AttributeKind::CrateName {
                    name: ::core::clone::Clone::clone(__self_0),
                    name_span: ::core::clone::Clone::clone(__self_1),
                    attr_span: ::core::clone::Clone::clone(__self_2),
                },
            AttributeKind::CrateType(__self_0) =>
                AttributeKind::CrateType(::core::clone::Clone::clone(__self_0)),
            AttributeKind::CustomMir(__self_0, __self_1, __self_2) =>
                AttributeKind::CustomMir(::core::clone::Clone::clone(__self_0),
                    ::core::clone::Clone::clone(__self_1),
                    ::core::clone::Clone::clone(__self_2)),
            AttributeKind::DebuggerVisualizer(__self_0) =>
                AttributeKind::DebuggerVisualizer(::core::clone::Clone::clone(__self_0)),
            AttributeKind::DefaultLibAllocator =>
                AttributeKind::DefaultLibAllocator,
            AttributeKind::Deprecated { deprecation: __self_0, span: __self_1
                } =>
                AttributeKind::Deprecated {
                    deprecation: ::core::clone::Clone::clone(__self_0),
                    span: ::core::clone::Clone::clone(__self_1),
                },
            AttributeKind::DoNotRecommend { attr_span: __self_0 } =>
                AttributeKind::DoNotRecommend {
                    attr_span: ::core::clone::Clone::clone(__self_0),
                },
            AttributeKind::Doc(__self_0) =>
                AttributeKind::Doc(::core::clone::Clone::clone(__self_0)),
            AttributeKind::DocComment {
                style: __self_0,
                kind: __self_1,
                span: __self_2,
                comment: __self_3 } =>
                AttributeKind::DocComment {
                    style: ::core::clone::Clone::clone(__self_0),
                    kind: ::core::clone::Clone::clone(__self_1),
                    span: ::core::clone::Clone::clone(__self_2),
                    comment: ::core::clone::Clone::clone(__self_3),
                },
            AttributeKind::EiiDeclaration(__self_0) =>
                AttributeKind::EiiDeclaration(::core::clone::Clone::clone(__self_0)),
            AttributeKind::EiiImpls(__self_0) =>
                AttributeKind::EiiImpls(::core::clone::Clone::clone(__self_0)),
            AttributeKind::ExportName { name: __self_0, span: __self_1 } =>
                AttributeKind::ExportName {
                    name: ::core::clone::Clone::clone(__self_0),
                    span: ::core::clone::Clone::clone(__self_1),
                },
            AttributeKind::ExportStable => AttributeKind::ExportStable,
            AttributeKind::Feature(__self_0, __self_1) =>
                AttributeKind::Feature(::core::clone::Clone::clone(__self_0),
                    ::core::clone::Clone::clone(__self_1)),
            AttributeKind::FfiConst(__self_0) =>
                AttributeKind::FfiConst(::core::clone::Clone::clone(__self_0)),
            AttributeKind::FfiPure(__self_0) =>
                AttributeKind::FfiPure(::core::clone::Clone::clone(__self_0)),
            AttributeKind::Fundamental => AttributeKind::Fundamental,
            AttributeKind::Ignore { span: __self_0, reason: __self_1 } =>
                AttributeKind::Ignore {
                    span: ::core::clone::Clone::clone(__self_0),
                    reason: ::core::clone::Clone::clone(__self_1),
                },
            AttributeKind::Inline(__self_0, __self_1) =>
                AttributeKind::Inline(::core::clone::Clone::clone(__self_0),
                    ::core::clone::Clone::clone(__self_1)),
            AttributeKind::InstructionSet(__self_0) =>
                AttributeKind::InstructionSet(::core::clone::Clone::clone(__self_0)),
            AttributeKind::Lang(__self_0, __self_1) =>
                AttributeKind::Lang(::core::clone::Clone::clone(__self_0),
                    ::core::clone::Clone::clone(__self_1)),
            AttributeKind::Link(__self_0, __self_1) =>
                AttributeKind::Link(::core::clone::Clone::clone(__self_0),
                    ::core::clone::Clone::clone(__self_1)),
            AttributeKind::LinkName { name: __self_0, span: __self_1 } =>
                AttributeKind::LinkName {
                    name: ::core::clone::Clone::clone(__self_0),
                    span: ::core::clone::Clone::clone(__self_1),
                },
            AttributeKind::LinkOrdinal { ordinal: __self_0, span: __self_1 }
                =>
                AttributeKind::LinkOrdinal {
                    ordinal: ::core::clone::Clone::clone(__self_0),
                    span: ::core::clone::Clone::clone(__self_1),
                },
            AttributeKind::LinkSection { name: __self_0, span: __self_1 } =>
                AttributeKind::LinkSection {
                    name: ::core::clone::Clone::clone(__self_0),
                    span: ::core::clone::Clone::clone(__self_1),
                },
            AttributeKind::Linkage(__self_0, __self_1) =>
                AttributeKind::Linkage(::core::clone::Clone::clone(__self_0),
                    ::core::clone::Clone::clone(__self_1)),
            AttributeKind::LintAttributes(__self_0) =>
                AttributeKind::LintAttributes(::core::clone::Clone::clone(__self_0)),
            AttributeKind::LoopMatch(__self_0) =>
                AttributeKind::LoopMatch(::core::clone::Clone::clone(__self_0)),
            AttributeKind::MacroEscape(__self_0) =>
                AttributeKind::MacroEscape(::core::clone::Clone::clone(__self_0)),
            AttributeKind::MacroExport {
                span: __self_0, local_inner_macros: __self_1 } =>
                AttributeKind::MacroExport {
                    span: ::core::clone::Clone::clone(__self_0),
                    local_inner_macros: ::core::clone::Clone::clone(__self_1),
                },
            AttributeKind::MacroUse { span: __self_0, arguments: __self_1 } =>
                AttributeKind::MacroUse {
                    span: ::core::clone::Clone::clone(__self_0),
                    arguments: ::core::clone::Clone::clone(__self_1),
                },
            AttributeKind::Marker(__self_0) =>
                AttributeKind::Marker(::core::clone::Clone::clone(__self_0)),
            AttributeKind::MayDangle(__self_0) =>
                AttributeKind::MayDangle(::core::clone::Clone::clone(__self_0)),
            AttributeKind::MoveSizeLimit {
                attr_span: __self_0, limit_span: __self_1, limit: __self_2 }
                =>
                AttributeKind::MoveSizeLimit {
                    attr_span: ::core::clone::Clone::clone(__self_0),
                    limit_span: ::core::clone::Clone::clone(__self_1),
                    limit: ::core::clone::Clone::clone(__self_2),
                },
            AttributeKind::MustNotSupend { reason: __self_0 } =>
                AttributeKind::MustNotSupend {
                    reason: ::core::clone::Clone::clone(__self_0),
                },
            AttributeKind::MustUse { span: __self_0, reason: __self_1 } =>
                AttributeKind::MustUse {
                    span: ::core::clone::Clone::clone(__self_0),
                    reason: ::core::clone::Clone::clone(__self_1),
                },
            AttributeKind::Naked(__self_0) =>
                AttributeKind::Naked(::core::clone::Clone::clone(__self_0)),
            AttributeKind::NeedsAllocator => AttributeKind::NeedsAllocator,
            AttributeKind::NeedsPanicRuntime =>
                AttributeKind::NeedsPanicRuntime,
            AttributeKind::NoBuiltins => AttributeKind::NoBuiltins,
            AttributeKind::NoCore(__self_0) =>
                AttributeKind::NoCore(::core::clone::Clone::clone(__self_0)),
            AttributeKind::NoImplicitPrelude(__self_0) =>
                AttributeKind::NoImplicitPrelude(::core::clone::Clone::clone(__self_0)),
            AttributeKind::NoLink => AttributeKind::NoLink,
            AttributeKind::NoMain => AttributeKind::NoMain,
            AttributeKind::NoMangle(__self_0) =>
                AttributeKind::NoMangle(::core::clone::Clone::clone(__self_0)),
            AttributeKind::NoStd(__self_0) =>
                AttributeKind::NoStd(::core::clone::Clone::clone(__self_0)),
            AttributeKind::NonExhaustive(__self_0) =>
                AttributeKind::NonExhaustive(::core::clone::Clone::clone(__self_0)),
            AttributeKind::OnConst { span: __self_0, directive: __self_1 } =>
                AttributeKind::OnConst {
                    span: ::core::clone::Clone::clone(__self_0),
                    directive: ::core::clone::Clone::clone(__self_1),
                },
            AttributeKind::OnMove { span: __self_0, directive: __self_1 } =>
                AttributeKind::OnMove {
                    span: ::core::clone::Clone::clone(__self_0),
                    directive: ::core::clone::Clone::clone(__self_1),
                },
            AttributeKind::OnUnimplemented {
                span: __self_0, directive: __self_1 } =>
                AttributeKind::OnUnimplemented {
                    span: ::core::clone::Clone::clone(__self_0),
                    directive: ::core::clone::Clone::clone(__self_1),
                },
            AttributeKind::Optimize(__self_0, __self_1) =>
                AttributeKind::Optimize(::core::clone::Clone::clone(__self_0),
                    ::core::clone::Clone::clone(__self_1)),
            AttributeKind::PanicRuntime => AttributeKind::PanicRuntime,
            AttributeKind::PatchableFunctionEntry {
                prefix: __self_0, entry: __self_1 } =>
                AttributeKind::PatchableFunctionEntry {
                    prefix: ::core::clone::Clone::clone(__self_0),
                    entry: ::core::clone::Clone::clone(__self_1),
                },
            AttributeKind::Path(__self_0, __self_1) =>
                AttributeKind::Path(::core::clone::Clone::clone(__self_0),
                    ::core::clone::Clone::clone(__self_1)),
            AttributeKind::PatternComplexityLimit {
                attr_span: __self_0, limit_span: __self_1, limit: __self_2 }
                =>
                AttributeKind::PatternComplexityLimit {
                    attr_span: ::core::clone::Clone::clone(__self_0),
                    limit_span: ::core::clone::Clone::clone(__self_1),
                    limit: ::core::clone::Clone::clone(__self_2),
                },
            AttributeKind::PinV2(__self_0) =>
                AttributeKind::PinV2(::core::clone::Clone::clone(__self_0)),
            AttributeKind::Pointee(__self_0) =>
                AttributeKind::Pointee(::core::clone::Clone::clone(__self_0)),
            AttributeKind::PreludeImport => AttributeKind::PreludeImport,
            AttributeKind::ProcMacro(__self_0) =>
                AttributeKind::ProcMacro(::core::clone::Clone::clone(__self_0)),
            AttributeKind::ProcMacroAttribute(__self_0) =>
                AttributeKind::ProcMacroAttribute(::core::clone::Clone::clone(__self_0)),
            AttributeKind::ProcMacroDerive {
                trait_name: __self_0, helper_attrs: __self_1, span: __self_2 }
                =>
                AttributeKind::ProcMacroDerive {
                    trait_name: ::core::clone::Clone::clone(__self_0),
                    helper_attrs: ::core::clone::Clone::clone(__self_1),
                    span: ::core::clone::Clone::clone(__self_2),
                },
            AttributeKind::ProfilerRuntime => AttributeKind::ProfilerRuntime,
            AttributeKind::RecursionLimit {
                attr_span: __self_0, limit_span: __self_1, limit: __self_2 }
                =>
                AttributeKind::RecursionLimit {
                    attr_span: ::core::clone::Clone::clone(__self_0),
                    limit_span: ::core::clone::Clone::clone(__self_1),
                    limit: ::core::clone::Clone::clone(__self_2),
                },
            AttributeKind::ReexportTestHarnessMain(__self_0) =>
                AttributeKind::ReexportTestHarnessMain(::core::clone::Clone::clone(__self_0)),
            AttributeKind::RegisterTool(__self_0, __self_1) =>
                AttributeKind::RegisterTool(::core::clone::Clone::clone(__self_0),
                    ::core::clone::Clone::clone(__self_1)),
            AttributeKind::Repr { reprs: __self_0, first_span: __self_1 } =>
                AttributeKind::Repr {
                    reprs: ::core::clone::Clone::clone(__self_0),
                    first_span: ::core::clone::Clone::clone(__self_1),
                },
            AttributeKind::RustcAbi { attr_span: __self_0, kind: __self_1 } =>
                AttributeKind::RustcAbi {
                    attr_span: ::core::clone::Clone::clone(__self_0),
                    kind: ::core::clone::Clone::clone(__self_1),
                },
            AttributeKind::RustcAlign { align: __self_0, span: __self_1 } =>
                AttributeKind::RustcAlign {
                    align: ::core::clone::Clone::clone(__self_0),
                    span: ::core::clone::Clone::clone(__self_1),
                },
            AttributeKind::RustcAllocator => AttributeKind::RustcAllocator,
            AttributeKind::RustcAllocatorZeroed =>
                AttributeKind::RustcAllocatorZeroed,
            AttributeKind::RustcAllocatorZeroedVariant { name: __self_0 } =>
                AttributeKind::RustcAllocatorZeroedVariant {
                    name: ::core::clone::Clone::clone(__self_0),
                },
            AttributeKind::RustcAllowConstFnUnstable(__self_0, __self_1) =>
                AttributeKind::RustcAllowConstFnUnstable(::core::clone::Clone::clone(__self_0),
                    ::core::clone::Clone::clone(__self_1)),
            AttributeKind::RustcAllowIncoherentImpl(__self_0) =>
                AttributeKind::RustcAllowIncoherentImpl(::core::clone::Clone::clone(__self_0)),
            AttributeKind::RustcAsPtr(__self_0) =>
                AttributeKind::RustcAsPtr(::core::clone::Clone::clone(__self_0)),
            AttributeKind::RustcAutodiff(__self_0) =>
                AttributeKind::RustcAutodiff(::core::clone::Clone::clone(__self_0)),
            AttributeKind::RustcBodyStability {
                stability: __self_0, span: __self_1 } =>
                AttributeKind::RustcBodyStability {
                    stability: ::core::clone::Clone::clone(__self_0),
                    span: ::core::clone::Clone::clone(__self_1),
                },
            AttributeKind::RustcBuiltinMacro {
                builtin_name: __self_0, helper_attrs: __self_1, span: __self_2
                } =>
                AttributeKind::RustcBuiltinMacro {
                    builtin_name: ::core::clone::Clone::clone(__self_0),
                    helper_attrs: ::core::clone::Clone::clone(__self_1),
                    span: ::core::clone::Clone::clone(__self_2),
                },
            AttributeKind::RustcCaptureAnalysis =>
                AttributeKind::RustcCaptureAnalysis,
            AttributeKind::RustcCguTestAttr(__self_0) =>
                AttributeKind::RustcCguTestAttr(::core::clone::Clone::clone(__self_0)),
            AttributeKind::RustcClean(__self_0) =>
                AttributeKind::RustcClean(::core::clone::Clone::clone(__self_0)),
            AttributeKind::RustcCoherenceIsCore(__self_0) =>
                AttributeKind::RustcCoherenceIsCore(::core::clone::Clone::clone(__self_0)),
            AttributeKind::RustcCoinductive(__self_0) =>
                AttributeKind::RustcCoinductive(::core::clone::Clone::clone(__self_0)),
            AttributeKind::RustcConfusables {
                symbols: __self_0, first_span: __self_1 } =>
                AttributeKind::RustcConfusables {
                    symbols: ::core::clone::Clone::clone(__self_0),
                    first_span: ::core::clone::Clone::clone(__self_1),
                },
            AttributeKind::RustcConstStability {
                stability: __self_0, span: __self_1 } =>
                AttributeKind::RustcConstStability {
                    stability: ::core::clone::Clone::clone(__self_0),
                    span: ::core::clone::Clone::clone(__self_1),
                },
            AttributeKind::RustcConstStableIndirect =>
                AttributeKind::RustcConstStableIndirect,
            AttributeKind::RustcConversionSuggestion =>
                AttributeKind::RustcConversionSuggestion,
            AttributeKind::RustcDeallocator =>
                AttributeKind::RustcDeallocator,
            AttributeKind::RustcDefPath(__self_0) =>
                AttributeKind::RustcDefPath(::core::clone::Clone::clone(__self_0)),
            AttributeKind::RustcDelayedBugFromInsideQuery =>
                AttributeKind::RustcDelayedBugFromInsideQuery,
            AttributeKind::RustcDenyExplicitImpl(__self_0) =>
                AttributeKind::RustcDenyExplicitImpl(::core::clone::Clone::clone(__self_0)),
            AttributeKind::RustcDeprecatedSafe2024 { suggestion: __self_0 } =>
                AttributeKind::RustcDeprecatedSafe2024 {
                    suggestion: ::core::clone::Clone::clone(__self_0),
                },
            AttributeKind::RustcDiagnosticItem(__self_0) =>
                AttributeKind::RustcDiagnosticItem(::core::clone::Clone::clone(__self_0)),
            AttributeKind::RustcDoNotConstCheck =>
                AttributeKind::RustcDoNotConstCheck,
            AttributeKind::RustcDocPrimitive(__self_0, __self_1) =>
                AttributeKind::RustcDocPrimitive(::core::clone::Clone::clone(__self_0),
                    ::core::clone::Clone::clone(__self_1)),
            AttributeKind::RustcDummy => AttributeKind::RustcDummy,
            AttributeKind::RustcDumpDefParents =>
                AttributeKind::RustcDumpDefParents,
            AttributeKind::RustcDumpInferredOutlives =>
                AttributeKind::RustcDumpInferredOutlives,
            AttributeKind::RustcDumpItemBounds =>
                AttributeKind::RustcDumpItemBounds,
            AttributeKind::RustcDumpObjectLifetimeDefaults =>
                AttributeKind::RustcDumpObjectLifetimeDefaults,
            AttributeKind::RustcDumpPredicates =>
                AttributeKind::RustcDumpPredicates,
            AttributeKind::RustcDumpUserArgs =>
                AttributeKind::RustcDumpUserArgs,
            AttributeKind::RustcDumpVariances =>
                AttributeKind::RustcDumpVariances,
            AttributeKind::RustcDumpVariancesOfOpaques =>
                AttributeKind::RustcDumpVariancesOfOpaques,
            AttributeKind::RustcDumpVtable(__self_0) =>
                AttributeKind::RustcDumpVtable(::core::clone::Clone::clone(__self_0)),
            AttributeKind::RustcDynIncompatibleTrait(__self_0) =>
                AttributeKind::RustcDynIncompatibleTrait(::core::clone::Clone::clone(__self_0)),
            AttributeKind::RustcEffectiveVisibility =>
                AttributeKind::RustcEffectiveVisibility,
            AttributeKind::RustcEiiForeignItem =>
                AttributeKind::RustcEiiForeignItem,
            AttributeKind::RustcEvaluateWhereClauses =>
                AttributeKind::RustcEvaluateWhereClauses,
            AttributeKind::RustcHasIncoherentInherentImpls =>
                AttributeKind::RustcHasIncoherentInherentImpls,
            AttributeKind::RustcHiddenTypeOfOpaques =>
                AttributeKind::RustcHiddenTypeOfOpaques,
            AttributeKind::RustcIfThisChanged(__self_0, __self_1) =>
                AttributeKind::RustcIfThisChanged(::core::clone::Clone::clone(__self_0),
                    ::core::clone::Clone::clone(__self_1)),
            AttributeKind::RustcInheritOverflowChecks =>
                AttributeKind::RustcInheritOverflowChecks,
            AttributeKind::RustcInsignificantDtor =>
                AttributeKind::RustcInsignificantDtor,
            AttributeKind::RustcIntrinsic => AttributeKind::RustcIntrinsic,
            AttributeKind::RustcIntrinsicConstStableIndirect =>
                AttributeKind::RustcIntrinsicConstStableIndirect,
            AttributeKind::RustcLayout(__self_0) =>
                AttributeKind::RustcLayout(::core::clone::Clone::clone(__self_0)),
            AttributeKind::RustcLayoutScalarValidRangeEnd(__self_0, __self_1)
                =>
                AttributeKind::RustcLayoutScalarValidRangeEnd(::core::clone::Clone::clone(__self_0),
                    ::core::clone::Clone::clone(__self_1)),
            AttributeKind::RustcLayoutScalarValidRangeStart(__self_0,
                __self_1) =>
                AttributeKind::RustcLayoutScalarValidRangeStart(::core::clone::Clone::clone(__self_0),
                    ::core::clone::Clone::clone(__self_1)),
            AttributeKind::RustcLegacyConstGenerics {
                fn_indexes: __self_0, attr_span: __self_1 } =>
                AttributeKind::RustcLegacyConstGenerics {
                    fn_indexes: ::core::clone::Clone::clone(__self_0),
                    attr_span: ::core::clone::Clone::clone(__self_1),
                },
            AttributeKind::RustcLintOptDenyFieldAccess {
                lint_message: __self_0 } =>
                AttributeKind::RustcLintOptDenyFieldAccess {
                    lint_message: ::core::clone::Clone::clone(__self_0),
                },
            AttributeKind::RustcLintOptTy => AttributeKind::RustcLintOptTy,
            AttributeKind::RustcLintQueryInstability =>
                AttributeKind::RustcLintQueryInstability,
            AttributeKind::RustcLintUntrackedQueryInformation =>
                AttributeKind::RustcLintUntrackedQueryInformation,
            AttributeKind::RustcMacroTransparency(__self_0) =>
                AttributeKind::RustcMacroTransparency(::core::clone::Clone::clone(__self_0)),
            AttributeKind::RustcMain => AttributeKind::RustcMain,
            AttributeKind::RustcMir(__self_0) =>
                AttributeKind::RustcMir(::core::clone::Clone::clone(__self_0)),
            AttributeKind::RustcMustImplementOneOf {
                attr_span: __self_0, fn_names: __self_1 } =>
                AttributeKind::RustcMustImplementOneOf {
                    attr_span: ::core::clone::Clone::clone(__self_0),
                    fn_names: ::core::clone::Clone::clone(__self_1),
                },
            AttributeKind::RustcNeverReturnsNullPtr =>
                AttributeKind::RustcNeverReturnsNullPtr,
            AttributeKind::RustcNeverTypeOptions {
                fallback: __self_0, diverging_block_default: __self_1 } =>
                AttributeKind::RustcNeverTypeOptions {
                    fallback: ::core::clone::Clone::clone(__self_0),
                    diverging_block_default: ::core::clone::Clone::clone(__self_1),
                },
            AttributeKind::RustcNoImplicitAutorefs =>
                AttributeKind::RustcNoImplicitAutorefs,
            AttributeKind::RustcNoImplicitBounds =>
                AttributeKind::RustcNoImplicitBounds,
            AttributeKind::RustcNoMirInline =>
                AttributeKind::RustcNoMirInline,
            AttributeKind::RustcNonConstTraitMethod =>
                AttributeKind::RustcNonConstTraitMethod,
            AttributeKind::RustcNonnullOptimizationGuaranteed =>
                AttributeKind::RustcNonnullOptimizationGuaranteed,
            AttributeKind::RustcNounwind => AttributeKind::RustcNounwind,
            AttributeKind::RustcObjcClass {
                classname: __self_0, span: __self_1 } =>
                AttributeKind::RustcObjcClass {
                    classname: ::core::clone::Clone::clone(__self_0),
                    span: ::core::clone::Clone::clone(__self_1),
                },
            AttributeKind::RustcObjcSelector {
                methname: __self_0, span: __self_1 } =>
                AttributeKind::RustcObjcSelector {
                    methname: ::core::clone::Clone::clone(__self_0),
                    span: ::core::clone::Clone::clone(__self_1),
                },
            AttributeKind::RustcOffloadKernel =>
                AttributeKind::RustcOffloadKernel,
            AttributeKind::RustcParenSugar(__self_0) =>
                AttributeKind::RustcParenSugar(::core::clone::Clone::clone(__self_0)),
            AttributeKind::RustcPassByValue(__self_0) =>
                AttributeKind::RustcPassByValue(::core::clone::Clone::clone(__self_0)),
            AttributeKind::RustcPassIndirectlyInNonRusticAbis(__self_0) =>
                AttributeKind::RustcPassIndirectlyInNonRusticAbis(::core::clone::Clone::clone(__self_0)),
            AttributeKind::RustcPreserveUbChecks =>
                AttributeKind::RustcPreserveUbChecks,
            AttributeKind::RustcProcMacroDecls =>
                AttributeKind::RustcProcMacroDecls,
            AttributeKind::RustcPubTransparent(__self_0) =>
                AttributeKind::RustcPubTransparent(::core::clone::Clone::clone(__self_0)),
            AttributeKind::RustcReallocator =>
                AttributeKind::RustcReallocator,
            AttributeKind::RustcRegions => AttributeKind::RustcRegions,
            AttributeKind::RustcReservationImpl(__self_0, __self_1) =>
                AttributeKind::RustcReservationImpl(::core::clone::Clone::clone(__self_0),
                    ::core::clone::Clone::clone(__self_1)),
            AttributeKind::RustcScalableVector {
                element_count: __self_0, span: __self_1 } =>
                AttributeKind::RustcScalableVector {
                    element_count: ::core::clone::Clone::clone(__self_0),
                    span: ::core::clone::Clone::clone(__self_1),
                },
            AttributeKind::RustcShouldNotBeCalledOnConstItems(__self_0) =>
                AttributeKind::RustcShouldNotBeCalledOnConstItems(::core::clone::Clone::clone(__self_0)),
            AttributeKind::RustcSimdMonomorphizeLaneLimit(__self_0) =>
                AttributeKind::RustcSimdMonomorphizeLaneLimit(::core::clone::Clone::clone(__self_0)),
            AttributeKind::RustcSkipDuringMethodDispatch {
                array: __self_0, boxed_slice: __self_1, span: __self_2 } =>
                AttributeKind::RustcSkipDuringMethodDispatch {
                    array: ::core::clone::Clone::clone(__self_0),
                    boxed_slice: ::core::clone::Clone::clone(__self_1),
                    span: ::core::clone::Clone::clone(__self_2),
                },
            AttributeKind::RustcSpecializationTrait(__self_0) =>
                AttributeKind::RustcSpecializationTrait(::core::clone::Clone::clone(__self_0)),
            AttributeKind::RustcStdInternalSymbol(__self_0) =>
                AttributeKind::RustcStdInternalSymbol(::core::clone::Clone::clone(__self_0)),
            AttributeKind::RustcStrictCoherence(__self_0) =>
                AttributeKind::RustcStrictCoherence(::core::clone::Clone::clone(__self_0)),
            AttributeKind::RustcSymbolName(__self_0) =>
                AttributeKind::RustcSymbolName(::core::clone::Clone::clone(__self_0)),
            AttributeKind::RustcTestMarker(__self_0) =>
                AttributeKind::RustcTestMarker(::core::clone::Clone::clone(__self_0)),
            AttributeKind::RustcThenThisWouldNeed(__self_0, __self_1) =>
                AttributeKind::RustcThenThisWouldNeed(::core::clone::Clone::clone(__self_0),
                    ::core::clone::Clone::clone(__self_1)),
            AttributeKind::RustcTrivialFieldReads =>
                AttributeKind::RustcTrivialFieldReads,
            AttributeKind::RustcUnsafeSpecializationMarker(__self_0) =>
                AttributeKind::RustcUnsafeSpecializationMarker(::core::clone::Clone::clone(__self_0)),
            AttributeKind::Sanitize {
                on_set: __self_0,
                off_set: __self_1,
                rtsan: __self_2,
                span: __self_3 } =>
                AttributeKind::Sanitize {
                    on_set: ::core::clone::Clone::clone(__self_0),
                    off_set: ::core::clone::Clone::clone(__self_1),
                    rtsan: ::core::clone::Clone::clone(__self_2),
                    span: ::core::clone::Clone::clone(__self_3),
                },
            AttributeKind::ShouldPanic { reason: __self_0, span: __self_1 } =>
                AttributeKind::ShouldPanic {
                    reason: ::core::clone::Clone::clone(__self_0),
                    span: ::core::clone::Clone::clone(__self_1),
                },
            AttributeKind::Stability { stability: __self_0, span: __self_1 }
                =>
                AttributeKind::Stability {
                    stability: ::core::clone::Clone::clone(__self_0),
                    span: ::core::clone::Clone::clone(__self_1),
                },
            AttributeKind::TargetFeature {
                features: __self_0, attr_span: __self_1, was_forced: __self_2
                } =>
                AttributeKind::TargetFeature {
                    features: ::core::clone::Clone::clone(__self_0),
                    attr_span: ::core::clone::Clone::clone(__self_1),
                    was_forced: ::core::clone::Clone::clone(__self_2),
                },
            AttributeKind::TestRunner(__self_0) =>
                AttributeKind::TestRunner(::core::clone::Clone::clone(__self_0)),
            AttributeKind::ThreadLocal => AttributeKind::ThreadLocal,
            AttributeKind::TrackCaller(__self_0) =>
                AttributeKind::TrackCaller(::core::clone::Clone::clone(__self_0)),
            AttributeKind::TypeLengthLimit {
                attr_span: __self_0, limit_span: __self_1, limit: __self_2 }
                =>
                AttributeKind::TypeLengthLimit {
                    attr_span: ::core::clone::Clone::clone(__self_0),
                    limit_span: ::core::clone::Clone::clone(__self_1),
                    limit: ::core::clone::Clone::clone(__self_2),
                },
            AttributeKind::UnstableFeatureBound(__self_0) =>
                AttributeKind::UnstableFeatureBound(::core::clone::Clone::clone(__self_0)),
            AttributeKind::Used { used_by: __self_0, span: __self_1 } =>
                AttributeKind::Used {
                    used_by: ::core::clone::Clone::clone(__self_0),
                    span: ::core::clone::Clone::clone(__self_1),
                },
            AttributeKind::WindowsSubsystem(__self_0, __self_1) =>
                AttributeKind::WindowsSubsystem(::core::clone::Clone::clone(__self_0),
                    ::core::clone::Clone::clone(__self_1)),
        }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for AttributeKind {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        match self {
            AttributeKind::AllowInternalUnsafe(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "AllowInternalUnsafe", &__self_0),
            AttributeKind::AllowInternalUnstable(__self_0, __self_1) =>
                ::core::fmt::Formatter::debug_tuple_field2_finish(f,
                    "AllowInternalUnstable", __self_0, &__self_1),
            AttributeKind::AutomaticallyDerived(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "AutomaticallyDerived", &__self_0),
            AttributeKind::CfgAttrTrace =>
                ::core::fmt::Formatter::write_str(f, "CfgAttrTrace"),
            AttributeKind::CfgTrace(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "CfgTrace", &__self_0),
            AttributeKind::CfiEncoding { encoding: __self_0 } =>
                ::core::fmt::Formatter::debug_struct_field1_finish(f,
                    "CfiEncoding", "encoding", &__self_0),
            AttributeKind::Cold(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "Cold",
                    &__self_0),
            AttributeKind::CollapseDebugInfo(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "CollapseDebugInfo", &__self_0),
            AttributeKind::CompilerBuiltins =>
                ::core::fmt::Formatter::write_str(f, "CompilerBuiltins"),
            AttributeKind::ConstContinue(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "ConstContinue", &__self_0),
            AttributeKind::Coroutine(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "Coroutine", &__self_0),
            AttributeKind::Coverage(__self_0, __self_1) =>
                ::core::fmt::Formatter::debug_tuple_field2_finish(f,
                    "Coverage", __self_0, &__self_1),
            AttributeKind::CrateName {
                name: __self_0, name_span: __self_1, attr_span: __self_2 } =>
                ::core::fmt::Formatter::debug_struct_field3_finish(f,
                    "CrateName", "name", __self_0, "name_span", __self_1,
                    "attr_span", &__self_2),
            AttributeKind::CrateType(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "CrateType", &__self_0),
            AttributeKind::CustomMir(__self_0, __self_1, __self_2) =>
                ::core::fmt::Formatter::debug_tuple_field3_finish(f,
                    "CustomMir", __self_0, __self_1, &__self_2),
            AttributeKind::DebuggerVisualizer(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "DebuggerVisualizer", &__self_0),
            AttributeKind::DefaultLibAllocator =>
                ::core::fmt::Formatter::write_str(f, "DefaultLibAllocator"),
            AttributeKind::Deprecated { deprecation: __self_0, span: __self_1
                } =>
                ::core::fmt::Formatter::debug_struct_field2_finish(f,
                    "Deprecated", "deprecation", __self_0, "span", &__self_1),
            AttributeKind::DoNotRecommend { attr_span: __self_0 } =>
                ::core::fmt::Formatter::debug_struct_field1_finish(f,
                    "DoNotRecommend", "attr_span", &__self_0),
            AttributeKind::Doc(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "Doc",
                    &__self_0),
            AttributeKind::DocComment {
                style: __self_0,
                kind: __self_1,
                span: __self_2,
                comment: __self_3 } =>
                ::core::fmt::Formatter::debug_struct_field4_finish(f,
                    "DocComment", "style", __self_0, "kind", __self_1, "span",
                    __self_2, "comment", &__self_3),
            AttributeKind::EiiDeclaration(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "EiiDeclaration", &__self_0),
            AttributeKind::EiiImpls(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "EiiImpls", &__self_0),
            AttributeKind::ExportName { name: __self_0, span: __self_1 } =>
                ::core::fmt::Formatter::debug_struct_field2_finish(f,
                    "ExportName", "name", __self_0, "span", &__self_1),
            AttributeKind::ExportStable =>
                ::core::fmt::Formatter::write_str(f, "ExportStable"),
            AttributeKind::Feature(__self_0, __self_1) =>
                ::core::fmt::Formatter::debug_tuple_field2_finish(f,
                    "Feature", __self_0, &__self_1),
            AttributeKind::FfiConst(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "FfiConst", &__self_0),
            AttributeKind::FfiPure(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "FfiPure", &__self_0),
            AttributeKind::Fundamental =>
                ::core::fmt::Formatter::write_str(f, "Fundamental"),
            AttributeKind::Ignore { span: __self_0, reason: __self_1 } =>
                ::core::fmt::Formatter::debug_struct_field2_finish(f,
                    "Ignore", "span", __self_0, "reason", &__self_1),
            AttributeKind::Inline(__self_0, __self_1) =>
                ::core::fmt::Formatter::debug_tuple_field2_finish(f, "Inline",
                    __self_0, &__self_1),
            AttributeKind::InstructionSet(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "InstructionSet", &__self_0),
            AttributeKind::Lang(__self_0, __self_1) =>
                ::core::fmt::Formatter::debug_tuple_field2_finish(f, "Lang",
                    __self_0, &__self_1),
            AttributeKind::Link(__self_0, __self_1) =>
                ::core::fmt::Formatter::debug_tuple_field2_finish(f, "Link",
                    __self_0, &__self_1),
            AttributeKind::LinkName { name: __self_0, span: __self_1 } =>
                ::core::fmt::Formatter::debug_struct_field2_finish(f,
                    "LinkName", "name", __self_0, "span", &__self_1),
            AttributeKind::LinkOrdinal { ordinal: __self_0, span: __self_1 }
                =>
                ::core::fmt::Formatter::debug_struct_field2_finish(f,
                    "LinkOrdinal", "ordinal", __self_0, "span", &__self_1),
            AttributeKind::LinkSection { name: __self_0, span: __self_1 } =>
                ::core::fmt::Formatter::debug_struct_field2_finish(f,
                    "LinkSection", "name", __self_0, "span", &__self_1),
            AttributeKind::Linkage(__self_0, __self_1) =>
                ::core::fmt::Formatter::debug_tuple_field2_finish(f,
                    "Linkage", __self_0, &__self_1),
            AttributeKind::LintAttributes(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "LintAttributes", &__self_0),
            AttributeKind::LoopMatch(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "LoopMatch", &__self_0),
            AttributeKind::MacroEscape(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "MacroEscape", &__self_0),
            AttributeKind::MacroExport {
                span: __self_0, local_inner_macros: __self_1 } =>
                ::core::fmt::Formatter::debug_struct_field2_finish(f,
                    "MacroExport", "span", __self_0, "local_inner_macros",
                    &__self_1),
            AttributeKind::MacroUse { span: __self_0, arguments: __self_1 } =>
                ::core::fmt::Formatter::debug_struct_field2_finish(f,
                    "MacroUse", "span", __self_0, "arguments", &__self_1),
            AttributeKind::Marker(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "Marker",
                    &__self_0),
            AttributeKind::MayDangle(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "MayDangle", &__self_0),
            AttributeKind::MoveSizeLimit {
                attr_span: __self_0, limit_span: __self_1, limit: __self_2 }
                =>
                ::core::fmt::Formatter::debug_struct_field3_finish(f,
                    "MoveSizeLimit", "attr_span", __self_0, "limit_span",
                    __self_1, "limit", &__self_2),
            AttributeKind::MustNotSupend { reason: __self_0 } =>
                ::core::fmt::Formatter::debug_struct_field1_finish(f,
                    "MustNotSupend", "reason", &__self_0),
            AttributeKind::MustUse { span: __self_0, reason: __self_1 } =>
                ::core::fmt::Formatter::debug_struct_field2_finish(f,
                    "MustUse", "span", __self_0, "reason", &__self_1),
            AttributeKind::Naked(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "Naked",
                    &__self_0),
            AttributeKind::NeedsAllocator =>
                ::core::fmt::Formatter::write_str(f, "NeedsAllocator"),
            AttributeKind::NeedsPanicRuntime =>
                ::core::fmt::Formatter::write_str(f, "NeedsPanicRuntime"),
            AttributeKind::NoBuiltins =>
                ::core::fmt::Formatter::write_str(f, "NoBuiltins"),
            AttributeKind::NoCore(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "NoCore",
                    &__self_0),
            AttributeKind::NoImplicitPrelude(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "NoImplicitPrelude", &__self_0),
            AttributeKind::NoLink =>
                ::core::fmt::Formatter::write_str(f, "NoLink"),
            AttributeKind::NoMain =>
                ::core::fmt::Formatter::write_str(f, "NoMain"),
            AttributeKind::NoMangle(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "NoMangle", &__self_0),
            AttributeKind::NoStd(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "NoStd",
                    &__self_0),
            AttributeKind::NonExhaustive(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "NonExhaustive", &__self_0),
            AttributeKind::OnConst { span: __self_0, directive: __self_1 } =>
                ::core::fmt::Formatter::debug_struct_field2_finish(f,
                    "OnConst", "span", __self_0, "directive", &__self_1),
            AttributeKind::OnMove { span: __self_0, directive: __self_1 } =>
                ::core::fmt::Formatter::debug_struct_field2_finish(f,
                    "OnMove", "span", __self_0, "directive", &__self_1),
            AttributeKind::OnUnimplemented {
                span: __self_0, directive: __self_1 } =>
                ::core::fmt::Formatter::debug_struct_field2_finish(f,
                    "OnUnimplemented", "span", __self_0, "directive",
                    &__self_1),
            AttributeKind::Optimize(__self_0, __self_1) =>
                ::core::fmt::Formatter::debug_tuple_field2_finish(f,
                    "Optimize", __self_0, &__self_1),
            AttributeKind::PanicRuntime =>
                ::core::fmt::Formatter::write_str(f, "PanicRuntime"),
            AttributeKind::PatchableFunctionEntry {
                prefix: __self_0, entry: __self_1 } =>
                ::core::fmt::Formatter::debug_struct_field2_finish(f,
                    "PatchableFunctionEntry", "prefix", __self_0, "entry",
                    &__self_1),
            AttributeKind::Path(__self_0, __self_1) =>
                ::core::fmt::Formatter::debug_tuple_field2_finish(f, "Path",
                    __self_0, &__self_1),
            AttributeKind::PatternComplexityLimit {
                attr_span: __self_0, limit_span: __self_1, limit: __self_2 }
                =>
                ::core::fmt::Formatter::debug_struct_field3_finish(f,
                    "PatternComplexityLimit", "attr_span", __self_0,
                    "limit_span", __self_1, "limit", &__self_2),
            AttributeKind::PinV2(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "PinV2",
                    &__self_0),
            AttributeKind::Pointee(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "Pointee", &__self_0),
            AttributeKind::PreludeImport =>
                ::core::fmt::Formatter::write_str(f, "PreludeImport"),
            AttributeKind::ProcMacro(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "ProcMacro", &__self_0),
            AttributeKind::ProcMacroAttribute(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "ProcMacroAttribute", &__self_0),
            AttributeKind::ProcMacroDerive {
                trait_name: __self_0, helper_attrs: __self_1, span: __self_2 }
                =>
                ::core::fmt::Formatter::debug_struct_field3_finish(f,
                    "ProcMacroDerive", "trait_name", __self_0, "helper_attrs",
                    __self_1, "span", &__self_2),
            AttributeKind::ProfilerRuntime =>
                ::core::fmt::Formatter::write_str(f, "ProfilerRuntime"),
            AttributeKind::RecursionLimit {
                attr_span: __self_0, limit_span: __self_1, limit: __self_2 }
                =>
                ::core::fmt::Formatter::debug_struct_field3_finish(f,
                    "RecursionLimit", "attr_span", __self_0, "limit_span",
                    __self_1, "limit", &__self_2),
            AttributeKind::ReexportTestHarnessMain(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "ReexportTestHarnessMain", &__self_0),
            AttributeKind::RegisterTool(__self_0, __self_1) =>
                ::core::fmt::Formatter::debug_tuple_field2_finish(f,
                    "RegisterTool", __self_0, &__self_1),
            AttributeKind::Repr { reprs: __self_0, first_span: __self_1 } =>
                ::core::fmt::Formatter::debug_struct_field2_finish(f, "Repr",
                    "reprs", __self_0, "first_span", &__self_1),
            AttributeKind::RustcAbi { attr_span: __self_0, kind: __self_1 } =>
                ::core::fmt::Formatter::debug_struct_field2_finish(f,
                    "RustcAbi", "attr_span", __self_0, "kind", &__self_1),
            AttributeKind::RustcAlign { align: __self_0, span: __self_1 } =>
                ::core::fmt::Formatter::debug_struct_field2_finish(f,
                    "RustcAlign", "align", __self_0, "span", &__self_1),
            AttributeKind::RustcAllocator =>
                ::core::fmt::Formatter::write_str(f, "RustcAllocator"),
            AttributeKind::RustcAllocatorZeroed =>
                ::core::fmt::Formatter::write_str(f, "RustcAllocatorZeroed"),
            AttributeKind::RustcAllocatorZeroedVariant { name: __self_0 } =>
                ::core::fmt::Formatter::debug_struct_field1_finish(f,
                    "RustcAllocatorZeroedVariant", "name", &__self_0),
            AttributeKind::RustcAllowConstFnUnstable(__self_0, __self_1) =>
                ::core::fmt::Formatter::debug_tuple_field2_finish(f,
                    "RustcAllowConstFnUnstable", __self_0, &__self_1),
            AttributeKind::RustcAllowIncoherentImpl(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "RustcAllowIncoherentImpl", &__self_0),
            AttributeKind::RustcAsPtr(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "RustcAsPtr", &__self_0),
            AttributeKind::RustcAutodiff(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "RustcAutodiff", &__self_0),
            AttributeKind::RustcBodyStability {
                stability: __self_0, span: __self_1 } =>
                ::core::fmt::Formatter::debug_struct_field2_finish(f,
                    "RustcBodyStability", "stability", __self_0, "span",
                    &__self_1),
            AttributeKind::RustcBuiltinMacro {
                builtin_name: __self_0, helper_attrs: __self_1, span: __self_2
                } =>
                ::core::fmt::Formatter::debug_struct_field3_finish(f,
                    "RustcBuiltinMacro", "builtin_name", __self_0,
                    "helper_attrs", __self_1, "span", &__self_2),
            AttributeKind::RustcCaptureAnalysis =>
                ::core::fmt::Formatter::write_str(f, "RustcCaptureAnalysis"),
            AttributeKind::RustcCguTestAttr(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "RustcCguTestAttr", &__self_0),
            AttributeKind::RustcClean(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "RustcClean", &__self_0),
            AttributeKind::RustcCoherenceIsCore(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "RustcCoherenceIsCore", &__self_0),
            AttributeKind::RustcCoinductive(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "RustcCoinductive", &__self_0),
            AttributeKind::RustcConfusables {
                symbols: __self_0, first_span: __self_1 } =>
                ::core::fmt::Formatter::debug_struct_field2_finish(f,
                    "RustcConfusables", "symbols", __self_0, "first_span",
                    &__self_1),
            AttributeKind::RustcConstStability {
                stability: __self_0, span: __self_1 } =>
                ::core::fmt::Formatter::debug_struct_field2_finish(f,
                    "RustcConstStability", "stability", __self_0, "span",
                    &__self_1),
            AttributeKind::RustcConstStableIndirect =>
                ::core::fmt::Formatter::write_str(f,
                    "RustcConstStableIndirect"),
            AttributeKind::RustcConversionSuggestion =>
                ::core::fmt::Formatter::write_str(f,
                    "RustcConversionSuggestion"),
            AttributeKind::RustcDeallocator =>
                ::core::fmt::Formatter::write_str(f, "RustcDeallocator"),
            AttributeKind::RustcDefPath(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "RustcDefPath", &__self_0),
            AttributeKind::RustcDelayedBugFromInsideQuery =>
                ::core::fmt::Formatter::write_str(f,
                    "RustcDelayedBugFromInsideQuery"),
            AttributeKind::RustcDenyExplicitImpl(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "RustcDenyExplicitImpl", &__self_0),
            AttributeKind::RustcDeprecatedSafe2024 { suggestion: __self_0 } =>
                ::core::fmt::Formatter::debug_struct_field1_finish(f,
                    "RustcDeprecatedSafe2024", "suggestion", &__self_0),
            AttributeKind::RustcDiagnosticItem(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "RustcDiagnosticItem", &__self_0),
            AttributeKind::RustcDoNotConstCheck =>
                ::core::fmt::Formatter::write_str(f, "RustcDoNotConstCheck"),
            AttributeKind::RustcDocPrimitive(__self_0, __self_1) =>
                ::core::fmt::Formatter::debug_tuple_field2_finish(f,
                    "RustcDocPrimitive", __self_0, &__self_1),
            AttributeKind::RustcDummy =>
                ::core::fmt::Formatter::write_str(f, "RustcDummy"),
            AttributeKind::RustcDumpDefParents =>
                ::core::fmt::Formatter::write_str(f, "RustcDumpDefParents"),
            AttributeKind::RustcDumpInferredOutlives =>
                ::core::fmt::Formatter::write_str(f,
                    "RustcDumpInferredOutlives"),
            AttributeKind::RustcDumpItemBounds =>
                ::core::fmt::Formatter::write_str(f, "RustcDumpItemBounds"),
            AttributeKind::RustcDumpObjectLifetimeDefaults =>
                ::core::fmt::Formatter::write_str(f,
                    "RustcDumpObjectLifetimeDefaults"),
            AttributeKind::RustcDumpPredicates =>
                ::core::fmt::Formatter::write_str(f, "RustcDumpPredicates"),
            AttributeKind::RustcDumpUserArgs =>
                ::core::fmt::Formatter::write_str(f, "RustcDumpUserArgs"),
            AttributeKind::RustcDumpVariances =>
                ::core::fmt::Formatter::write_str(f, "RustcDumpVariances"),
            AttributeKind::RustcDumpVariancesOfOpaques =>
                ::core::fmt::Formatter::write_str(f,
                    "RustcDumpVariancesOfOpaques"),
            AttributeKind::RustcDumpVtable(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "RustcDumpVtable", &__self_0),
            AttributeKind::RustcDynIncompatibleTrait(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "RustcDynIncompatibleTrait", &__self_0),
            AttributeKind::RustcEffectiveVisibility =>
                ::core::fmt::Formatter::write_str(f,
                    "RustcEffectiveVisibility"),
            AttributeKind::RustcEiiForeignItem =>
                ::core::fmt::Formatter::write_str(f, "RustcEiiForeignItem"),
            AttributeKind::RustcEvaluateWhereClauses =>
                ::core::fmt::Formatter::write_str(f,
                    "RustcEvaluateWhereClauses"),
            AttributeKind::RustcHasIncoherentInherentImpls =>
                ::core::fmt::Formatter::write_str(f,
                    "RustcHasIncoherentInherentImpls"),
            AttributeKind::RustcHiddenTypeOfOpaques =>
                ::core::fmt::Formatter::write_str(f,
                    "RustcHiddenTypeOfOpaques"),
            AttributeKind::RustcIfThisChanged(__self_0, __self_1) =>
                ::core::fmt::Formatter::debug_tuple_field2_finish(f,
                    "RustcIfThisChanged", __self_0, &__self_1),
            AttributeKind::RustcInheritOverflowChecks =>
                ::core::fmt::Formatter::write_str(f,
                    "RustcInheritOverflowChecks"),
            AttributeKind::RustcInsignificantDtor =>
                ::core::fmt::Formatter::write_str(f,
                    "RustcInsignificantDtor"),
            AttributeKind::RustcIntrinsic =>
                ::core::fmt::Formatter::write_str(f, "RustcIntrinsic"),
            AttributeKind::RustcIntrinsicConstStableIndirect =>
                ::core::fmt::Formatter::write_str(f,
                    "RustcIntrinsicConstStableIndirect"),
            AttributeKind::RustcLayout(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "RustcLayout", &__self_0),
            AttributeKind::RustcLayoutScalarValidRangeEnd(__self_0, __self_1)
                =>
                ::core::fmt::Formatter::debug_tuple_field2_finish(f,
                    "RustcLayoutScalarValidRangeEnd", __self_0, &__self_1),
            AttributeKind::RustcLayoutScalarValidRangeStart(__self_0,
                __self_1) =>
                ::core::fmt::Formatter::debug_tuple_field2_finish(f,
                    "RustcLayoutScalarValidRangeStart", __self_0, &__self_1),
            AttributeKind::RustcLegacyConstGenerics {
                fn_indexes: __self_0, attr_span: __self_1 } =>
                ::core::fmt::Formatter::debug_struct_field2_finish(f,
                    "RustcLegacyConstGenerics", "fn_indexes", __self_0,
                    "attr_span", &__self_1),
            AttributeKind::RustcLintOptDenyFieldAccess {
                lint_message: __self_0 } =>
                ::core::fmt::Formatter::debug_struct_field1_finish(f,
                    "RustcLintOptDenyFieldAccess", "lint_message", &__self_0),
            AttributeKind::RustcLintOptTy =>
                ::core::fmt::Formatter::write_str(f, "RustcLintOptTy"),
            AttributeKind::RustcLintQueryInstability =>
                ::core::fmt::Formatter::write_str(f,
                    "RustcLintQueryInstability"),
            AttributeKind::RustcLintUntrackedQueryInformation =>
                ::core::fmt::Formatter::write_str(f,
                    "RustcLintUntrackedQueryInformation"),
            AttributeKind::RustcMacroTransparency(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "RustcMacroTransparency", &__self_0),
            AttributeKind::RustcMain =>
                ::core::fmt::Formatter::write_str(f, "RustcMain"),
            AttributeKind::RustcMir(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "RustcMir", &__self_0),
            AttributeKind::RustcMustImplementOneOf {
                attr_span: __self_0, fn_names: __self_1 } =>
                ::core::fmt::Formatter::debug_struct_field2_finish(f,
                    "RustcMustImplementOneOf", "attr_span", __self_0,
                    "fn_names", &__self_1),
            AttributeKind::RustcNeverReturnsNullPtr =>
                ::core::fmt::Formatter::write_str(f,
                    "RustcNeverReturnsNullPtr"),
            AttributeKind::RustcNeverTypeOptions {
                fallback: __self_0, diverging_block_default: __self_1 } =>
                ::core::fmt::Formatter::debug_struct_field2_finish(f,
                    "RustcNeverTypeOptions", "fallback", __self_0,
                    "diverging_block_default", &__self_1),
            AttributeKind::RustcNoImplicitAutorefs =>
                ::core::fmt::Formatter::write_str(f,
                    "RustcNoImplicitAutorefs"),
            AttributeKind::RustcNoImplicitBounds =>
                ::core::fmt::Formatter::write_str(f, "RustcNoImplicitBounds"),
            AttributeKind::RustcNoMirInline =>
                ::core::fmt::Formatter::write_str(f, "RustcNoMirInline"),
            AttributeKind::RustcNonConstTraitMethod =>
                ::core::fmt::Formatter::write_str(f,
                    "RustcNonConstTraitMethod"),
            AttributeKind::RustcNonnullOptimizationGuaranteed =>
                ::core::fmt::Formatter::write_str(f,
                    "RustcNonnullOptimizationGuaranteed"),
            AttributeKind::RustcNounwind =>
                ::core::fmt::Formatter::write_str(f, "RustcNounwind"),
            AttributeKind::RustcObjcClass {
                classname: __self_0, span: __self_1 } =>
                ::core::fmt::Formatter::debug_struct_field2_finish(f,
                    "RustcObjcClass", "classname", __self_0, "span", &__self_1),
            AttributeKind::RustcObjcSelector {
                methname: __self_0, span: __self_1 } =>
                ::core::fmt::Formatter::debug_struct_field2_finish(f,
                    "RustcObjcSelector", "methname", __self_0, "span",
                    &__self_1),
            AttributeKind::RustcOffloadKernel =>
                ::core::fmt::Formatter::write_str(f, "RustcOffloadKernel"),
            AttributeKind::RustcParenSugar(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "RustcParenSugar", &__self_0),
            AttributeKind::RustcPassByValue(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "RustcPassByValue", &__self_0),
            AttributeKind::RustcPassIndirectlyInNonRusticAbis(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "RustcPassIndirectlyInNonRusticAbis", &__self_0),
            AttributeKind::RustcPreserveUbChecks =>
                ::core::fmt::Formatter::write_str(f, "RustcPreserveUbChecks"),
            AttributeKind::RustcProcMacroDecls =>
                ::core::fmt::Formatter::write_str(f, "RustcProcMacroDecls"),
            AttributeKind::RustcPubTransparent(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "RustcPubTransparent", &__self_0),
            AttributeKind::RustcReallocator =>
                ::core::fmt::Formatter::write_str(f, "RustcReallocator"),
            AttributeKind::RustcRegions =>
                ::core::fmt::Formatter::write_str(f, "RustcRegions"),
            AttributeKind::RustcReservationImpl(__self_0, __self_1) =>
                ::core::fmt::Formatter::debug_tuple_field2_finish(f,
                    "RustcReservationImpl", __self_0, &__self_1),
            AttributeKind::RustcScalableVector {
                element_count: __self_0, span: __self_1 } =>
                ::core::fmt::Formatter::debug_struct_field2_finish(f,
                    "RustcScalableVector", "element_count", __self_0, "span",
                    &__self_1),
            AttributeKind::RustcShouldNotBeCalledOnConstItems(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "RustcShouldNotBeCalledOnConstItems", &__self_0),
            AttributeKind::RustcSimdMonomorphizeLaneLimit(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "RustcSimdMonomorphizeLaneLimit", &__self_0),
            AttributeKind::RustcSkipDuringMethodDispatch {
                array: __self_0, boxed_slice: __self_1, span: __self_2 } =>
                ::core::fmt::Formatter::debug_struct_field3_finish(f,
                    "RustcSkipDuringMethodDispatch", "array", __self_0,
                    "boxed_slice", __self_1, "span", &__self_2),
            AttributeKind::RustcSpecializationTrait(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "RustcSpecializationTrait", &__self_0),
            AttributeKind::RustcStdInternalSymbol(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "RustcStdInternalSymbol", &__self_0),
            AttributeKind::RustcStrictCoherence(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "RustcStrictCoherence", &__self_0),
            AttributeKind::RustcSymbolName(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "RustcSymbolName", &__self_0),
            AttributeKind::RustcTestMarker(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "RustcTestMarker", &__self_0),
            AttributeKind::RustcThenThisWouldNeed(__self_0, __self_1) =>
                ::core::fmt::Formatter::debug_tuple_field2_finish(f,
                    "RustcThenThisWouldNeed", __self_0, &__self_1),
            AttributeKind::RustcTrivialFieldReads =>
                ::core::fmt::Formatter::write_str(f,
                    "RustcTrivialFieldReads"),
            AttributeKind::RustcUnsafeSpecializationMarker(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "RustcUnsafeSpecializationMarker", &__self_0),
            AttributeKind::Sanitize {
                on_set: __self_0,
                off_set: __self_1,
                rtsan: __self_2,
                span: __self_3 } =>
                ::core::fmt::Formatter::debug_struct_field4_finish(f,
                    "Sanitize", "on_set", __self_0, "off_set", __self_1,
                    "rtsan", __self_2, "span", &__self_3),
            AttributeKind::ShouldPanic { reason: __self_0, span: __self_1 } =>
                ::core::fmt::Formatter::debug_struct_field2_finish(f,
                    "ShouldPanic", "reason", __self_0, "span", &__self_1),
            AttributeKind::Stability { stability: __self_0, span: __self_1 }
                =>
                ::core::fmt::Formatter::debug_struct_field2_finish(f,
                    "Stability", "stability", __self_0, "span", &__self_1),
            AttributeKind::TargetFeature {
                features: __self_0, attr_span: __self_1, was_forced: __self_2
                } =>
                ::core::fmt::Formatter::debug_struct_field3_finish(f,
                    "TargetFeature", "features", __self_0, "attr_span",
                    __self_1, "was_forced", &__self_2),
            AttributeKind::TestRunner(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "TestRunner", &__self_0),
            AttributeKind::ThreadLocal =>
                ::core::fmt::Formatter::write_str(f, "ThreadLocal"),
            AttributeKind::TrackCaller(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "TrackCaller", &__self_0),
            AttributeKind::TypeLengthLimit {
                attr_span: __self_0, limit_span: __self_1, limit: __self_2 }
                =>
                ::core::fmt::Formatter::debug_struct_field3_finish(f,
                    "TypeLengthLimit", "attr_span", __self_0, "limit_span",
                    __self_1, "limit", &__self_2),
            AttributeKind::UnstableFeatureBound(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "UnstableFeatureBound", &__self_0),
            AttributeKind::Used { used_by: __self_0, span: __self_1 } =>
                ::core::fmt::Formatter::debug_struct_field2_finish(f, "Used",
                    "used_by", __self_0, "span", &__self_1),
            AttributeKind::WindowsSubsystem(__self_0, __self_1) =>
                ::core::fmt::Formatter::debug_tuple_field2_finish(f,
                    "WindowsSubsystem", __self_0, &__self_1),
        }
    }
}Debug, const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for AttributeKind where __CTX: ::rustc_span::HashStableContext {
            #[inline]
            fn hash_stable(&self, __hcx: &mut __CTX,
                __hasher:
                    &mut ::rustc_data_structures::stable_hasher::StableHasher) {
                ::std::mem::discriminant(self).hash_stable(__hcx, __hasher);
                match *self {
                    AttributeKind::AllowInternalUnsafe(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::AllowInternalUnstable(ref __binding_0,
                        ref __binding_1) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::AutomaticallyDerived(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::CfgAttrTrace => {}
                    AttributeKind::CfgTrace(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::CfiEncoding { encoding: ref __binding_0 } =>
                        {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::Cold(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::CollapseDebugInfo(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::CompilerBuiltins => {}
                    AttributeKind::ConstContinue(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::Coroutine(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::Coverage(ref __binding_0, ref __binding_1) =>
                        {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::CrateName {
                        name: ref __binding_0,
                        name_span: ref __binding_1,
                        attr_span: ref __binding_2 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                        { __binding_2.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::CrateType(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::CustomMir(ref __binding_0, ref __binding_1,
                        ref __binding_2) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                        { __binding_2.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::DebuggerVisualizer(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::DefaultLibAllocator => {}
                    AttributeKind::Deprecated {
                        deprecation: ref __binding_0, span: ref __binding_1 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::DoNotRecommend { attr_span: ref __binding_0 }
                        => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::Doc(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::DocComment {
                        style: ref __binding_0,
                        kind: ref __binding_1,
                        span: ref __binding_2,
                        comment: ref __binding_3 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                        { __binding_2.hash_stable(__hcx, __hasher); }
                        { __binding_3.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::EiiDeclaration(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::EiiImpls(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::ExportName {
                        name: ref __binding_0, span: ref __binding_1 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::ExportStable => {}
                    AttributeKind::Feature(ref __binding_0, ref __binding_1) =>
                        {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::FfiConst(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::FfiPure(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::Fundamental => {}
                    AttributeKind::Ignore {
                        span: ref __binding_0, reason: ref __binding_1 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::Inline(ref __binding_0, ref __binding_1) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::InstructionSet(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::Lang(ref __binding_0, ref __binding_1) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::Link(ref __binding_0, ref __binding_1) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::LinkName {
                        name: ref __binding_0, span: ref __binding_1 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::LinkOrdinal {
                        ordinal: ref __binding_0, span: ref __binding_1 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::LinkSection {
                        name: ref __binding_0, span: ref __binding_1 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::Linkage(ref __binding_0, ref __binding_1) =>
                        {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::LintAttributes(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::LoopMatch(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::MacroEscape(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::MacroExport {
                        span: ref __binding_0, local_inner_macros: ref __binding_1 }
                        => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::MacroUse {
                        span: ref __binding_0, arguments: ref __binding_1 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::Marker(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::MayDangle(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::MoveSizeLimit {
                        attr_span: ref __binding_0,
                        limit_span: ref __binding_1,
                        limit: ref __binding_2 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                        { __binding_2.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::MustNotSupend { reason: ref __binding_0 } =>
                        {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::MustUse {
                        span: ref __binding_0, reason: ref __binding_1 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::Naked(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::NeedsAllocator => {}
                    AttributeKind::NeedsPanicRuntime => {}
                    AttributeKind::NoBuiltins => {}
                    AttributeKind::NoCore(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::NoImplicitPrelude(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::NoLink => {}
                    AttributeKind::NoMain => {}
                    AttributeKind::NoMangle(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::NoStd(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::NonExhaustive(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::OnConst {
                        span: ref __binding_0, directive: ref __binding_1 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::OnMove {
                        span: ref __binding_0, directive: ref __binding_1 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::OnUnimplemented {
                        span: ref __binding_0, directive: ref __binding_1 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::Optimize(ref __binding_0, ref __binding_1) =>
                        {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::PanicRuntime => {}
                    AttributeKind::PatchableFunctionEntry {
                        prefix: ref __binding_0, entry: ref __binding_1 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::Path(ref __binding_0, ref __binding_1) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::PatternComplexityLimit {
                        attr_span: ref __binding_0,
                        limit_span: ref __binding_1,
                        limit: ref __binding_2 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                        { __binding_2.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::PinV2(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::Pointee(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::PreludeImport => {}
                    AttributeKind::ProcMacro(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::ProcMacroAttribute(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::ProcMacroDerive {
                        trait_name: ref __binding_0,
                        helper_attrs: ref __binding_1,
                        span: ref __binding_2 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                        { __binding_2.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::ProfilerRuntime => {}
                    AttributeKind::RecursionLimit {
                        attr_span: ref __binding_0,
                        limit_span: ref __binding_1,
                        limit: ref __binding_2 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                        { __binding_2.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::ReexportTestHarnessMain(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::RegisterTool(ref __binding_0,
                        ref __binding_1) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::Repr {
                        reprs: ref __binding_0, first_span: ref __binding_1 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::RustcAbi {
                        attr_span: ref __binding_0, kind: ref __binding_1 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::RustcAlign {
                        align: ref __binding_0, span: ref __binding_1 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::RustcAllocator => {}
                    AttributeKind::RustcAllocatorZeroed => {}
                    AttributeKind::RustcAllocatorZeroedVariant {
                        name: ref __binding_0 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::RustcAllowConstFnUnstable(ref __binding_0,
                        ref __binding_1) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::RustcAllowIncoherentImpl(ref __binding_0) =>
                        {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::RustcAsPtr(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::RustcAutodiff(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::RustcBodyStability {
                        stability: ref __binding_0, span: ref __binding_1 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::RustcBuiltinMacro {
                        builtin_name: ref __binding_0,
                        helper_attrs: ref __binding_1,
                        span: ref __binding_2 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                        { __binding_2.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::RustcCaptureAnalysis => {}
                    AttributeKind::RustcCguTestAttr(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::RustcClean(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::RustcCoherenceIsCore(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::RustcCoinductive(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::RustcConfusables {
                        symbols: ref __binding_0, first_span: ref __binding_1 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::RustcConstStability {
                        stability: ref __binding_0, span: ref __binding_1 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::RustcConstStableIndirect => {}
                    AttributeKind::RustcConversionSuggestion => {}
                    AttributeKind::RustcDeallocator => {}
                    AttributeKind::RustcDefPath(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::RustcDelayedBugFromInsideQuery => {}
                    AttributeKind::RustcDenyExplicitImpl(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::RustcDeprecatedSafe2024 {
                        suggestion: ref __binding_0 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::RustcDiagnosticItem(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::RustcDoNotConstCheck => {}
                    AttributeKind::RustcDocPrimitive(ref __binding_0,
                        ref __binding_1) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::RustcDummy => {}
                    AttributeKind::RustcDumpDefParents => {}
                    AttributeKind::RustcDumpInferredOutlives => {}
                    AttributeKind::RustcDumpItemBounds => {}
                    AttributeKind::RustcDumpObjectLifetimeDefaults => {}
                    AttributeKind::RustcDumpPredicates => {}
                    AttributeKind::RustcDumpUserArgs => {}
                    AttributeKind::RustcDumpVariances => {}
                    AttributeKind::RustcDumpVariancesOfOpaques => {}
                    AttributeKind::RustcDumpVtable(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::RustcDynIncompatibleTrait(ref __binding_0) =>
                        {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::RustcEffectiveVisibility => {}
                    AttributeKind::RustcEiiForeignItem => {}
                    AttributeKind::RustcEvaluateWhereClauses => {}
                    AttributeKind::RustcHasIncoherentInherentImpls => {}
                    AttributeKind::RustcHiddenTypeOfOpaques => {}
                    AttributeKind::RustcIfThisChanged(ref __binding_0,
                        ref __binding_1) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::RustcInheritOverflowChecks => {}
                    AttributeKind::RustcInsignificantDtor => {}
                    AttributeKind::RustcIntrinsic => {}
                    AttributeKind::RustcIntrinsicConstStableIndirect => {}
                    AttributeKind::RustcLayout(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::RustcLayoutScalarValidRangeEnd(ref __binding_0,
                        ref __binding_1) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::RustcLayoutScalarValidRangeStart(ref __binding_0,
                        ref __binding_1) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::RustcLegacyConstGenerics {
                        fn_indexes: ref __binding_0, attr_span: ref __binding_1 } =>
                        {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::RustcLintOptDenyFieldAccess {
                        lint_message: ref __binding_0 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::RustcLintOptTy => {}
                    AttributeKind::RustcLintQueryInstability => {}
                    AttributeKind::RustcLintUntrackedQueryInformation => {}
                    AttributeKind::RustcMacroTransparency(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::RustcMain => {}
                    AttributeKind::RustcMir(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::RustcMustImplementOneOf {
                        attr_span: ref __binding_0, fn_names: ref __binding_1 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::RustcNeverReturnsNullPtr => {}
                    AttributeKind::RustcNeverTypeOptions {
                        fallback: ref __binding_0,
                        diverging_block_default: ref __binding_1 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::RustcNoImplicitAutorefs => {}
                    AttributeKind::RustcNoImplicitBounds => {}
                    AttributeKind::RustcNoMirInline => {}
                    AttributeKind::RustcNonConstTraitMethod => {}
                    AttributeKind::RustcNonnullOptimizationGuaranteed => {}
                    AttributeKind::RustcNounwind => {}
                    AttributeKind::RustcObjcClass {
                        classname: ref __binding_0, span: ref __binding_1 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::RustcObjcSelector {
                        methname: ref __binding_0, span: ref __binding_1 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::RustcOffloadKernel => {}
                    AttributeKind::RustcParenSugar(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::RustcPassByValue(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::RustcPassIndirectlyInNonRusticAbis(ref __binding_0)
                        => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::RustcPreserveUbChecks => {}
                    AttributeKind::RustcProcMacroDecls => {}
                    AttributeKind::RustcPubTransparent(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::RustcReallocator => {}
                    AttributeKind::RustcRegions => {}
                    AttributeKind::RustcReservationImpl(ref __binding_0,
                        ref __binding_1) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::RustcScalableVector {
                        element_count: ref __binding_0, span: ref __binding_1 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::RustcShouldNotBeCalledOnConstItems(ref __binding_0)
                        => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::RustcSimdMonomorphizeLaneLimit(ref __binding_0)
                        => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::RustcSkipDuringMethodDispatch {
                        array: ref __binding_0,
                        boxed_slice: ref __binding_1,
                        span: ref __binding_2 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                        { __binding_2.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::RustcSpecializationTrait(ref __binding_0) =>
                        {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::RustcStdInternalSymbol(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::RustcStrictCoherence(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::RustcSymbolName(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::RustcTestMarker(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::RustcThenThisWouldNeed(ref __binding_0,
                        ref __binding_1) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::RustcTrivialFieldReads => {}
                    AttributeKind::RustcUnsafeSpecializationMarker(ref __binding_0)
                        => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::Sanitize {
                        on_set: ref __binding_0,
                        off_set: ref __binding_1,
                        rtsan: ref __binding_2,
                        span: ref __binding_3 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                        { __binding_2.hash_stable(__hcx, __hasher); }
                        { __binding_3.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::ShouldPanic {
                        reason: ref __binding_0, span: ref __binding_1 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::Stability {
                        stability: ref __binding_0, span: ref __binding_1 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::TargetFeature {
                        features: ref __binding_0,
                        attr_span: ref __binding_1,
                        was_forced: ref __binding_2 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                        { __binding_2.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::TestRunner(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::ThreadLocal => {}
                    AttributeKind::TrackCaller(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::TypeLengthLimit {
                        attr_span: ref __binding_0,
                        limit_span: ref __binding_1,
                        limit: ref __binding_2 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                        { __binding_2.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::UnstableFeatureBound(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::Used {
                        used_by: ref __binding_0, span: ref __binding_1 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::WindowsSubsystem(ref __binding_0,
                        ref __binding_1) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                }
            }
        }
    };HashStable_Generic, const _: () =
    {
        impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
            for AttributeKind {
            fn encode(&self, __encoder: &mut __E) {
                let disc =
                    match *self {
                        AttributeKind::AllowInternalUnsafe(ref __binding_0) => {
                            0usize
                        }
                        AttributeKind::AllowInternalUnstable(ref __binding_0,
                            ref __binding_1) => {
                            1usize
                        }
                        AttributeKind::AutomaticallyDerived(ref __binding_0) => {
                            2usize
                        }
                        AttributeKind::CfgAttrTrace => { 3usize }
                        AttributeKind::CfgTrace(ref __binding_0) => { 4usize }
                        AttributeKind::CfiEncoding { encoding: ref __binding_0 } =>
                            {
                            5usize
                        }
                        AttributeKind::Cold(ref __binding_0) => { 6usize }
                        AttributeKind::CollapseDebugInfo(ref __binding_0) => {
                            7usize
                        }
                        AttributeKind::CompilerBuiltins => { 8usize }
                        AttributeKind::ConstContinue(ref __binding_0) => { 9usize }
                        AttributeKind::Coroutine(ref __binding_0) => { 10usize }
                        AttributeKind::Coverage(ref __binding_0, ref __binding_1) =>
                            {
                            11usize
                        }
                        AttributeKind::CrateName {
                            name: ref __binding_0,
                            name_span: ref __binding_1,
                            attr_span: ref __binding_2 } => {
                            12usize
                        }
                        AttributeKind::CrateType(ref __binding_0) => { 13usize }
                        AttributeKind::CustomMir(ref __binding_0, ref __binding_1,
                            ref __binding_2) => {
                            14usize
                        }
                        AttributeKind::DebuggerVisualizer(ref __binding_0) => {
                            15usize
                        }
                        AttributeKind::DefaultLibAllocator => { 16usize }
                        AttributeKind::Deprecated {
                            deprecation: ref __binding_0, span: ref __binding_1 } => {
                            17usize
                        }
                        AttributeKind::DoNotRecommend { attr_span: ref __binding_0 }
                            => {
                            18usize
                        }
                        AttributeKind::Doc(ref __binding_0) => { 19usize }
                        AttributeKind::DocComment {
                            style: ref __binding_0,
                            kind: ref __binding_1,
                            span: ref __binding_2,
                            comment: ref __binding_3 } => {
                            20usize
                        }
                        AttributeKind::EiiDeclaration(ref __binding_0) => {
                            21usize
                        }
                        AttributeKind::EiiImpls(ref __binding_0) => { 22usize }
                        AttributeKind::ExportName {
                            name: ref __binding_0, span: ref __binding_1 } => {
                            23usize
                        }
                        AttributeKind::ExportStable => { 24usize }
                        AttributeKind::Feature(ref __binding_0, ref __binding_1) =>
                            {
                            25usize
                        }
                        AttributeKind::FfiConst(ref __binding_0) => { 26usize }
                        AttributeKind::FfiPure(ref __binding_0) => { 27usize }
                        AttributeKind::Fundamental => { 28usize }
                        AttributeKind::Ignore {
                            span: ref __binding_0, reason: ref __binding_1 } => {
                            29usize
                        }
                        AttributeKind::Inline(ref __binding_0, ref __binding_1) => {
                            30usize
                        }
                        AttributeKind::InstructionSet(ref __binding_0) => {
                            31usize
                        }
                        AttributeKind::Lang(ref __binding_0, ref __binding_1) => {
                            32usize
                        }
                        AttributeKind::Link(ref __binding_0, ref __binding_1) => {
                            33usize
                        }
                        AttributeKind::LinkName {
                            name: ref __binding_0, span: ref __binding_1 } => {
                            34usize
                        }
                        AttributeKind::LinkOrdinal {
                            ordinal: ref __binding_0, span: ref __binding_1 } => {
                            35usize
                        }
                        AttributeKind::LinkSection {
                            name: ref __binding_0, span: ref __binding_1 } => {
                            36usize
                        }
                        AttributeKind::Linkage(ref __binding_0, ref __binding_1) =>
                            {
                            37usize
                        }
                        AttributeKind::LintAttributes(ref __binding_0) => {
                            38usize
                        }
                        AttributeKind::LoopMatch(ref __binding_0) => { 39usize }
                        AttributeKind::MacroEscape(ref __binding_0) => { 40usize }
                        AttributeKind::MacroExport {
                            span: ref __binding_0, local_inner_macros: ref __binding_1 }
                            => {
                            41usize
                        }
                        AttributeKind::MacroUse {
                            span: ref __binding_0, arguments: ref __binding_1 } => {
                            42usize
                        }
                        AttributeKind::Marker(ref __binding_0) => { 43usize }
                        AttributeKind::MayDangle(ref __binding_0) => { 44usize }
                        AttributeKind::MoveSizeLimit {
                            attr_span: ref __binding_0,
                            limit_span: ref __binding_1,
                            limit: ref __binding_2 } => {
                            45usize
                        }
                        AttributeKind::MustNotSupend { reason: ref __binding_0 } =>
                            {
                            46usize
                        }
                        AttributeKind::MustUse {
                            span: ref __binding_0, reason: ref __binding_1 } => {
                            47usize
                        }
                        AttributeKind::Naked(ref __binding_0) => { 48usize }
                        AttributeKind::NeedsAllocator => { 49usize }
                        AttributeKind::NeedsPanicRuntime => { 50usize }
                        AttributeKind::NoBuiltins => { 51usize }
                        AttributeKind::NoCore(ref __binding_0) => { 52usize }
                        AttributeKind::NoImplicitPrelude(ref __binding_0) => {
                            53usize
                        }
                        AttributeKind::NoLink => { 54usize }
                        AttributeKind::NoMain => { 55usize }
                        AttributeKind::NoMangle(ref __binding_0) => { 56usize }
                        AttributeKind::NoStd(ref __binding_0) => { 57usize }
                        AttributeKind::NonExhaustive(ref __binding_0) => { 58usize }
                        AttributeKind::OnConst {
                            span: ref __binding_0, directive: ref __binding_1 } => {
                            59usize
                        }
                        AttributeKind::OnMove {
                            span: ref __binding_0, directive: ref __binding_1 } => {
                            60usize
                        }
                        AttributeKind::OnUnimplemented {
                            span: ref __binding_0, directive: ref __binding_1 } => {
                            61usize
                        }
                        AttributeKind::Optimize(ref __binding_0, ref __binding_1) =>
                            {
                            62usize
                        }
                        AttributeKind::PanicRuntime => { 63usize }
                        AttributeKind::PatchableFunctionEntry {
                            prefix: ref __binding_0, entry: ref __binding_1 } => {
                            64usize
                        }
                        AttributeKind::Path(ref __binding_0, ref __binding_1) => {
                            65usize
                        }
                        AttributeKind::PatternComplexityLimit {
                            attr_span: ref __binding_0,
                            limit_span: ref __binding_1,
                            limit: ref __binding_2 } => {
                            66usize
                        }
                        AttributeKind::PinV2(ref __binding_0) => { 67usize }
                        AttributeKind::Pointee(ref __binding_0) => { 68usize }
                        AttributeKind::PreludeImport => { 69usize }
                        AttributeKind::ProcMacro(ref __binding_0) => { 70usize }
                        AttributeKind::ProcMacroAttribute(ref __binding_0) => {
                            71usize
                        }
                        AttributeKind::ProcMacroDerive {
                            trait_name: ref __binding_0,
                            helper_attrs: ref __binding_1,
                            span: ref __binding_2 } => {
                            72usize
                        }
                        AttributeKind::ProfilerRuntime => { 73usize }
                        AttributeKind::RecursionLimit {
                            attr_span: ref __binding_0,
                            limit_span: ref __binding_1,
                            limit: ref __binding_2 } => {
                            74usize
                        }
                        AttributeKind::ReexportTestHarnessMain(ref __binding_0) => {
                            75usize
                        }
                        AttributeKind::RegisterTool(ref __binding_0,
                            ref __binding_1) => {
                            76usize
                        }
                        AttributeKind::Repr {
                            reprs: ref __binding_0, first_span: ref __binding_1 } => {
                            77usize
                        }
                        AttributeKind::RustcAbi {
                            attr_span: ref __binding_0, kind: ref __binding_1 } => {
                            78usize
                        }
                        AttributeKind::RustcAlign {
                            align: ref __binding_0, span: ref __binding_1 } => {
                            79usize
                        }
                        AttributeKind::RustcAllocator => { 80usize }
                        AttributeKind::RustcAllocatorZeroed => { 81usize }
                        AttributeKind::RustcAllocatorZeroedVariant {
                            name: ref __binding_0 } => {
                            82usize
                        }
                        AttributeKind::RustcAllowConstFnUnstable(ref __binding_0,
                            ref __binding_1) => {
                            83usize
                        }
                        AttributeKind::RustcAllowIncoherentImpl(ref __binding_0) =>
                            {
                            84usize
                        }
                        AttributeKind::RustcAsPtr(ref __binding_0) => { 85usize }
                        AttributeKind::RustcAutodiff(ref __binding_0) => { 86usize }
                        AttributeKind::RustcBodyStability {
                            stability: ref __binding_0, span: ref __binding_1 } => {
                            87usize
                        }
                        AttributeKind::RustcBuiltinMacro {
                            builtin_name: ref __binding_0,
                            helper_attrs: ref __binding_1,
                            span: ref __binding_2 } => {
                            88usize
                        }
                        AttributeKind::RustcCaptureAnalysis => { 89usize }
                        AttributeKind::RustcCguTestAttr(ref __binding_0) => {
                            90usize
                        }
                        AttributeKind::RustcClean(ref __binding_0) => { 91usize }
                        AttributeKind::RustcCoherenceIsCore(ref __binding_0) => {
                            92usize
                        }
                        AttributeKind::RustcCoinductive(ref __binding_0) => {
                            93usize
                        }
                        AttributeKind::RustcConfusables {
                            symbols: ref __binding_0, first_span: ref __binding_1 } => {
                            94usize
                        }
                        AttributeKind::RustcConstStability {
                            stability: ref __binding_0, span: ref __binding_1 } => {
                            95usize
                        }
                        AttributeKind::RustcConstStableIndirect => { 96usize }
                        AttributeKind::RustcConversionSuggestion => { 97usize }
                        AttributeKind::RustcDeallocator => { 98usize }
                        AttributeKind::RustcDefPath(ref __binding_0) => { 99usize }
                        AttributeKind::RustcDelayedBugFromInsideQuery => {
                            100usize
                        }
                        AttributeKind::RustcDenyExplicitImpl(ref __binding_0) => {
                            101usize
                        }
                        AttributeKind::RustcDeprecatedSafe2024 {
                            suggestion: ref __binding_0 } => {
                            102usize
                        }
                        AttributeKind::RustcDiagnosticItem(ref __binding_0) => {
                            103usize
                        }
                        AttributeKind::RustcDoNotConstCheck => { 104usize }
                        AttributeKind::RustcDocPrimitive(ref __binding_0,
                            ref __binding_1) => {
                            105usize
                        }
                        AttributeKind::RustcDummy => { 106usize }
                        AttributeKind::RustcDumpDefParents => { 107usize }
                        AttributeKind::RustcDumpInferredOutlives => { 108usize }
                        AttributeKind::RustcDumpItemBounds => { 109usize }
                        AttributeKind::RustcDumpObjectLifetimeDefaults => {
                            110usize
                        }
                        AttributeKind::RustcDumpPredicates => { 111usize }
                        AttributeKind::RustcDumpUserArgs => { 112usize }
                        AttributeKind::RustcDumpVariances => { 113usize }
                        AttributeKind::RustcDumpVariancesOfOpaques => { 114usize }
                        AttributeKind::RustcDumpVtable(ref __binding_0) => {
                            115usize
                        }
                        AttributeKind::RustcDynIncompatibleTrait(ref __binding_0) =>
                            {
                            116usize
                        }
                        AttributeKind::RustcEffectiveVisibility => { 117usize }
                        AttributeKind::RustcEiiForeignItem => { 118usize }
                        AttributeKind::RustcEvaluateWhereClauses => { 119usize }
                        AttributeKind::RustcHasIncoherentInherentImpls => {
                            120usize
                        }
                        AttributeKind::RustcHiddenTypeOfOpaques => { 121usize }
                        AttributeKind::RustcIfThisChanged(ref __binding_0,
                            ref __binding_1) => {
                            122usize
                        }
                        AttributeKind::RustcInheritOverflowChecks => { 123usize }
                        AttributeKind::RustcInsignificantDtor => { 124usize }
                        AttributeKind::RustcIntrinsic => { 125usize }
                        AttributeKind::RustcIntrinsicConstStableIndirect => {
                            126usize
                        }
                        AttributeKind::RustcLayout(ref __binding_0) => { 127usize }
                        AttributeKind::RustcLayoutScalarValidRangeEnd(ref __binding_0,
                            ref __binding_1) => {
                            128usize
                        }
                        AttributeKind::RustcLayoutScalarValidRangeStart(ref __binding_0,
                            ref __binding_1) => {
                            129usize
                        }
                        AttributeKind::RustcLegacyConstGenerics {
                            fn_indexes: ref __binding_0, attr_span: ref __binding_1 } =>
                            {
                            130usize
                        }
                        AttributeKind::RustcLintOptDenyFieldAccess {
                            lint_message: ref __binding_0 } => {
                            131usize
                        }
                        AttributeKind::RustcLintOptTy => { 132usize }
                        AttributeKind::RustcLintQueryInstability => { 133usize }
                        AttributeKind::RustcLintUntrackedQueryInformation => {
                            134usize
                        }
                        AttributeKind::RustcMacroTransparency(ref __binding_0) => {
                            135usize
                        }
                        AttributeKind::RustcMain => { 136usize }
                        AttributeKind::RustcMir(ref __binding_0) => { 137usize }
                        AttributeKind::RustcMustImplementOneOf {
                            attr_span: ref __binding_0, fn_names: ref __binding_1 } => {
                            138usize
                        }
                        AttributeKind::RustcNeverReturnsNullPtr => { 139usize }
                        AttributeKind::RustcNeverTypeOptions {
                            fallback: ref __binding_0,
                            diverging_block_default: ref __binding_1 } => {
                            140usize
                        }
                        AttributeKind::RustcNoImplicitAutorefs => { 141usize }
                        AttributeKind::RustcNoImplicitBounds => { 142usize }
                        AttributeKind::RustcNoMirInline => { 143usize }
                        AttributeKind::RustcNonConstTraitMethod => { 144usize }
                        AttributeKind::RustcNonnullOptimizationGuaranteed => {
                            145usize
                        }
                        AttributeKind::RustcNounwind => { 146usize }
                        AttributeKind::RustcObjcClass {
                            classname: ref __binding_0, span: ref __binding_1 } => {
                            147usize
                        }
                        AttributeKind::RustcObjcSelector {
                            methname: ref __binding_0, span: ref __binding_1 } => {
                            148usize
                        }
                        AttributeKind::RustcOffloadKernel => { 149usize }
                        AttributeKind::RustcParenSugar(ref __binding_0) => {
                            150usize
                        }
                        AttributeKind::RustcPassByValue(ref __binding_0) => {
                            151usize
                        }
                        AttributeKind::RustcPassIndirectlyInNonRusticAbis(ref __binding_0)
                            => {
                            152usize
                        }
                        AttributeKind::RustcPreserveUbChecks => { 153usize }
                        AttributeKind::RustcProcMacroDecls => { 154usize }
                        AttributeKind::RustcPubTransparent(ref __binding_0) => {
                            155usize
                        }
                        AttributeKind::RustcReallocator => { 156usize }
                        AttributeKind::RustcRegions => { 157usize }
                        AttributeKind::RustcReservationImpl(ref __binding_0,
                            ref __binding_1) => {
                            158usize
                        }
                        AttributeKind::RustcScalableVector {
                            element_count: ref __binding_0, span: ref __binding_1 } => {
                            159usize
                        }
                        AttributeKind::RustcShouldNotBeCalledOnConstItems(ref __binding_0)
                            => {
                            160usize
                        }
                        AttributeKind::RustcSimdMonomorphizeLaneLimit(ref __binding_0)
                            => {
                            161usize
                        }
                        AttributeKind::RustcSkipDuringMethodDispatch {
                            array: ref __binding_0,
                            boxed_slice: ref __binding_1,
                            span: ref __binding_2 } => {
                            162usize
                        }
                        AttributeKind::RustcSpecializationTrait(ref __binding_0) =>
                            {
                            163usize
                        }
                        AttributeKind::RustcStdInternalSymbol(ref __binding_0) => {
                            164usize
                        }
                        AttributeKind::RustcStrictCoherence(ref __binding_0) => {
                            165usize
                        }
                        AttributeKind::RustcSymbolName(ref __binding_0) => {
                            166usize
                        }
                        AttributeKind::RustcTestMarker(ref __binding_0) => {
                            167usize
                        }
                        AttributeKind::RustcThenThisWouldNeed(ref __binding_0,
                            ref __binding_1) => {
                            168usize
                        }
                        AttributeKind::RustcTrivialFieldReads => { 169usize }
                        AttributeKind::RustcUnsafeSpecializationMarker(ref __binding_0)
                            => {
                            170usize
                        }
                        AttributeKind::Sanitize {
                            on_set: ref __binding_0,
                            off_set: ref __binding_1,
                            rtsan: ref __binding_2,
                            span: ref __binding_3 } => {
                            171usize
                        }
                        AttributeKind::ShouldPanic {
                            reason: ref __binding_0, span: ref __binding_1 } => {
                            172usize
                        }
                        AttributeKind::Stability {
                            stability: ref __binding_0, span: ref __binding_1 } => {
                            173usize
                        }
                        AttributeKind::TargetFeature {
                            features: ref __binding_0,
                            attr_span: ref __binding_1,
                            was_forced: ref __binding_2 } => {
                            174usize
                        }
                        AttributeKind::TestRunner(ref __binding_0) => { 175usize }
                        AttributeKind::ThreadLocal => { 176usize }
                        AttributeKind::TrackCaller(ref __binding_0) => { 177usize }
                        AttributeKind::TypeLengthLimit {
                            attr_span: ref __binding_0,
                            limit_span: ref __binding_1,
                            limit: ref __binding_2 } => {
                            178usize
                        }
                        AttributeKind::UnstableFeatureBound(ref __binding_0) => {
                            179usize
                        }
                        AttributeKind::Used {
                            used_by: ref __binding_0, span: ref __binding_1 } => {
                            180usize
                        }
                        AttributeKind::WindowsSubsystem(ref __binding_0,
                            ref __binding_1) => {
                            181usize
                        }
                    };
                ::rustc_serialize::Encoder::emit_u8(__encoder, disc as u8);
                match *self {
                    AttributeKind::AllowInternalUnsafe(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::AllowInternalUnstable(ref __binding_0,
                        ref __binding_1) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                    }
                    AttributeKind::AutomaticallyDerived(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::CfgAttrTrace => {}
                    AttributeKind::CfgTrace(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::CfiEncoding { encoding: ref __binding_0 } =>
                        {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::Cold(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::CollapseDebugInfo(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::CompilerBuiltins => {}
                    AttributeKind::ConstContinue(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::Coroutine(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::Coverage(ref __binding_0, ref __binding_1) =>
                        {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                    }
                    AttributeKind::CrateName {
                        name: ref __binding_0,
                        name_span: ref __binding_1,
                        attr_span: ref __binding_2 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_2,
                            __encoder);
                    }
                    AttributeKind::CrateType(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::CustomMir(ref __binding_0, ref __binding_1,
                        ref __binding_2) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_2,
                            __encoder);
                    }
                    AttributeKind::DebuggerVisualizer(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::DefaultLibAllocator => {}
                    AttributeKind::Deprecated {
                        deprecation: ref __binding_0, span: ref __binding_1 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                    }
                    AttributeKind::DoNotRecommend { attr_span: ref __binding_0 }
                        => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::Doc(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::DocComment {
                        style: ref __binding_0,
                        kind: ref __binding_1,
                        span: ref __binding_2,
                        comment: ref __binding_3 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_2,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_3,
                            __encoder);
                    }
                    AttributeKind::EiiDeclaration(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::EiiImpls(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::ExportName {
                        name: ref __binding_0, span: ref __binding_1 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                    }
                    AttributeKind::ExportStable => {}
                    AttributeKind::Feature(ref __binding_0, ref __binding_1) =>
                        {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                    }
                    AttributeKind::FfiConst(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::FfiPure(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::Fundamental => {}
                    AttributeKind::Ignore {
                        span: ref __binding_0, reason: ref __binding_1 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                    }
                    AttributeKind::Inline(ref __binding_0, ref __binding_1) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                    }
                    AttributeKind::InstructionSet(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::Lang(ref __binding_0, ref __binding_1) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                    }
                    AttributeKind::Link(ref __binding_0, ref __binding_1) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                    }
                    AttributeKind::LinkName {
                        name: ref __binding_0, span: ref __binding_1 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                    }
                    AttributeKind::LinkOrdinal {
                        ordinal: ref __binding_0, span: ref __binding_1 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                    }
                    AttributeKind::LinkSection {
                        name: ref __binding_0, span: ref __binding_1 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                    }
                    AttributeKind::Linkage(ref __binding_0, ref __binding_1) =>
                        {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                    }
                    AttributeKind::LintAttributes(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::LoopMatch(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::MacroEscape(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::MacroExport {
                        span: ref __binding_0, local_inner_macros: ref __binding_1 }
                        => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                    }
                    AttributeKind::MacroUse {
                        span: ref __binding_0, arguments: ref __binding_1 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                    }
                    AttributeKind::Marker(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::MayDangle(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::MoveSizeLimit {
                        attr_span: ref __binding_0,
                        limit_span: ref __binding_1,
                        limit: ref __binding_2 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_2,
                            __encoder);
                    }
                    AttributeKind::MustNotSupend { reason: ref __binding_0 } =>
                        {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::MustUse {
                        span: ref __binding_0, reason: ref __binding_1 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                    }
                    AttributeKind::Naked(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::NeedsAllocator => {}
                    AttributeKind::NeedsPanicRuntime => {}
                    AttributeKind::NoBuiltins => {}
                    AttributeKind::NoCore(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::NoImplicitPrelude(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::NoLink => {}
                    AttributeKind::NoMain => {}
                    AttributeKind::NoMangle(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::NoStd(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::NonExhaustive(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::OnConst {
                        span: ref __binding_0, directive: ref __binding_1 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                    }
                    AttributeKind::OnMove {
                        span: ref __binding_0, directive: ref __binding_1 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                    }
                    AttributeKind::OnUnimplemented {
                        span: ref __binding_0, directive: ref __binding_1 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                    }
                    AttributeKind::Optimize(ref __binding_0, ref __binding_1) =>
                        {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                    }
                    AttributeKind::PanicRuntime => {}
                    AttributeKind::PatchableFunctionEntry {
                        prefix: ref __binding_0, entry: ref __binding_1 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                    }
                    AttributeKind::Path(ref __binding_0, ref __binding_1) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                    }
                    AttributeKind::PatternComplexityLimit {
                        attr_span: ref __binding_0,
                        limit_span: ref __binding_1,
                        limit: ref __binding_2 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_2,
                            __encoder);
                    }
                    AttributeKind::PinV2(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::Pointee(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::PreludeImport => {}
                    AttributeKind::ProcMacro(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::ProcMacroAttribute(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::ProcMacroDerive {
                        trait_name: ref __binding_0,
                        helper_attrs: ref __binding_1,
                        span: ref __binding_2 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_2,
                            __encoder);
                    }
                    AttributeKind::ProfilerRuntime => {}
                    AttributeKind::RecursionLimit {
                        attr_span: ref __binding_0,
                        limit_span: ref __binding_1,
                        limit: ref __binding_2 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_2,
                            __encoder);
                    }
                    AttributeKind::ReexportTestHarnessMain(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::RegisterTool(ref __binding_0,
                        ref __binding_1) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                    }
                    AttributeKind::Repr {
                        reprs: ref __binding_0, first_span: ref __binding_1 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                    }
                    AttributeKind::RustcAbi {
                        attr_span: ref __binding_0, kind: ref __binding_1 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                    }
                    AttributeKind::RustcAlign {
                        align: ref __binding_0, span: ref __binding_1 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                    }
                    AttributeKind::RustcAllocator => {}
                    AttributeKind::RustcAllocatorZeroed => {}
                    AttributeKind::RustcAllocatorZeroedVariant {
                        name: ref __binding_0 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::RustcAllowConstFnUnstable(ref __binding_0,
                        ref __binding_1) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                    }
                    AttributeKind::RustcAllowIncoherentImpl(ref __binding_0) =>
                        {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::RustcAsPtr(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::RustcAutodiff(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::RustcBodyStability {
                        stability: ref __binding_0, span: ref __binding_1 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                    }
                    AttributeKind::RustcBuiltinMacro {
                        builtin_name: ref __binding_0,
                        helper_attrs: ref __binding_1,
                        span: ref __binding_2 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_2,
                            __encoder);
                    }
                    AttributeKind::RustcCaptureAnalysis => {}
                    AttributeKind::RustcCguTestAttr(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::RustcClean(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::RustcCoherenceIsCore(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::RustcCoinductive(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::RustcConfusables {
                        symbols: ref __binding_0, first_span: ref __binding_1 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                    }
                    AttributeKind::RustcConstStability {
                        stability: ref __binding_0, span: ref __binding_1 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                    }
                    AttributeKind::RustcConstStableIndirect => {}
                    AttributeKind::RustcConversionSuggestion => {}
                    AttributeKind::RustcDeallocator => {}
                    AttributeKind::RustcDefPath(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::RustcDelayedBugFromInsideQuery => {}
                    AttributeKind::RustcDenyExplicitImpl(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::RustcDeprecatedSafe2024 {
                        suggestion: ref __binding_0 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::RustcDiagnosticItem(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::RustcDoNotConstCheck => {}
                    AttributeKind::RustcDocPrimitive(ref __binding_0,
                        ref __binding_1) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                    }
                    AttributeKind::RustcDummy => {}
                    AttributeKind::RustcDumpDefParents => {}
                    AttributeKind::RustcDumpInferredOutlives => {}
                    AttributeKind::RustcDumpItemBounds => {}
                    AttributeKind::RustcDumpObjectLifetimeDefaults => {}
                    AttributeKind::RustcDumpPredicates => {}
                    AttributeKind::RustcDumpUserArgs => {}
                    AttributeKind::RustcDumpVariances => {}
                    AttributeKind::RustcDumpVariancesOfOpaques => {}
                    AttributeKind::RustcDumpVtable(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::RustcDynIncompatibleTrait(ref __binding_0) =>
                        {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::RustcEffectiveVisibility => {}
                    AttributeKind::RustcEiiForeignItem => {}
                    AttributeKind::RustcEvaluateWhereClauses => {}
                    AttributeKind::RustcHasIncoherentInherentImpls => {}
                    AttributeKind::RustcHiddenTypeOfOpaques => {}
                    AttributeKind::RustcIfThisChanged(ref __binding_0,
                        ref __binding_1) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                    }
                    AttributeKind::RustcInheritOverflowChecks => {}
                    AttributeKind::RustcInsignificantDtor => {}
                    AttributeKind::RustcIntrinsic => {}
                    AttributeKind::RustcIntrinsicConstStableIndirect => {}
                    AttributeKind::RustcLayout(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::RustcLayoutScalarValidRangeEnd(ref __binding_0,
                        ref __binding_1) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                    }
                    AttributeKind::RustcLayoutScalarValidRangeStart(ref __binding_0,
                        ref __binding_1) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                    }
                    AttributeKind::RustcLegacyConstGenerics {
                        fn_indexes: ref __binding_0, attr_span: ref __binding_1 } =>
                        {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                    }
                    AttributeKind::RustcLintOptDenyFieldAccess {
                        lint_message: ref __binding_0 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::RustcLintOptTy => {}
                    AttributeKind::RustcLintQueryInstability => {}
                    AttributeKind::RustcLintUntrackedQueryInformation => {}
                    AttributeKind::RustcMacroTransparency(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::RustcMain => {}
                    AttributeKind::RustcMir(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::RustcMustImplementOneOf {
                        attr_span: ref __binding_0, fn_names: ref __binding_1 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                    }
                    AttributeKind::RustcNeverReturnsNullPtr => {}
                    AttributeKind::RustcNeverTypeOptions {
                        fallback: ref __binding_0,
                        diverging_block_default: ref __binding_1 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                    }
                    AttributeKind::RustcNoImplicitAutorefs => {}
                    AttributeKind::RustcNoImplicitBounds => {}
                    AttributeKind::RustcNoMirInline => {}
                    AttributeKind::RustcNonConstTraitMethod => {}
                    AttributeKind::RustcNonnullOptimizationGuaranteed => {}
                    AttributeKind::RustcNounwind => {}
                    AttributeKind::RustcObjcClass {
                        classname: ref __binding_0, span: ref __binding_1 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                    }
                    AttributeKind::RustcObjcSelector {
                        methname: ref __binding_0, span: ref __binding_1 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                    }
                    AttributeKind::RustcOffloadKernel => {}
                    AttributeKind::RustcParenSugar(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::RustcPassByValue(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::RustcPassIndirectlyInNonRusticAbis(ref __binding_0)
                        => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::RustcPreserveUbChecks => {}
                    AttributeKind::RustcProcMacroDecls => {}
                    AttributeKind::RustcPubTransparent(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::RustcReallocator => {}
                    AttributeKind::RustcRegions => {}
                    AttributeKind::RustcReservationImpl(ref __binding_0,
                        ref __binding_1) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                    }
                    AttributeKind::RustcScalableVector {
                        element_count: ref __binding_0, span: ref __binding_1 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                    }
                    AttributeKind::RustcShouldNotBeCalledOnConstItems(ref __binding_0)
                        => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::RustcSimdMonomorphizeLaneLimit(ref __binding_0)
                        => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::RustcSkipDuringMethodDispatch {
                        array: ref __binding_0,
                        boxed_slice: ref __binding_1,
                        span: ref __binding_2 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_2,
                            __encoder);
                    }
                    AttributeKind::RustcSpecializationTrait(ref __binding_0) =>
                        {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::RustcStdInternalSymbol(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::RustcStrictCoherence(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::RustcSymbolName(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::RustcTestMarker(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::RustcThenThisWouldNeed(ref __binding_0,
                        ref __binding_1) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                    }
                    AttributeKind::RustcTrivialFieldReads => {}
                    AttributeKind::RustcUnsafeSpecializationMarker(ref __binding_0)
                        => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::Sanitize {
                        on_set: ref __binding_0,
                        off_set: ref __binding_1,
                        rtsan: ref __binding_2,
                        span: ref __binding_3 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_2,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_3,
                            __encoder);
                    }
                    AttributeKind::ShouldPanic {
                        reason: ref __binding_0, span: ref __binding_1 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                    }
                    AttributeKind::Stability {
                        stability: ref __binding_0, span: ref __binding_1 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                    }
                    AttributeKind::TargetFeature {
                        features: ref __binding_0,
                        attr_span: ref __binding_1,
                        was_forced: ref __binding_2 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_2,
                            __encoder);
                    }
                    AttributeKind::TestRunner(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::ThreadLocal => {}
                    AttributeKind::TrackCaller(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::TypeLengthLimit {
                        attr_span: ref __binding_0,
                        limit_span: ref __binding_1,
                        limit: ref __binding_2 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_2,
                            __encoder);
                    }
                    AttributeKind::UnstableFeatureBound(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::Used {
                        used_by: ref __binding_0, span: ref __binding_1 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                    }
                    AttributeKind::WindowsSubsystem(ref __binding_0,
                        ref __binding_1) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                    }
                }
            }
        }
    };Encodable, const _: () =
    {
        impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
            for AttributeKind {
            fn decode(__decoder: &mut __D) -> Self {
                match ::rustc_serialize::Decoder::read_u8(__decoder) as usize
                    {
                    0usize => {
                        AttributeKind::AllowInternalUnsafe(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    1usize => {
                        AttributeKind::AllowInternalUnstable(::rustc_serialize::Decodable::decode(__decoder),
                            ::rustc_serialize::Decodable::decode(__decoder))
                    }
                    2usize => {
                        AttributeKind::AutomaticallyDerived(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    3usize => { AttributeKind::CfgAttrTrace }
                    4usize => {
                        AttributeKind::CfgTrace(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    5usize => {
                        AttributeKind::CfiEncoding {
                            encoding: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    6usize => {
                        AttributeKind::Cold(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    7usize => {
                        AttributeKind::CollapseDebugInfo(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    8usize => { AttributeKind::CompilerBuiltins }
                    9usize => {
                        AttributeKind::ConstContinue(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    10usize => {
                        AttributeKind::Coroutine(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    11usize => {
                        AttributeKind::Coverage(::rustc_serialize::Decodable::decode(__decoder),
                            ::rustc_serialize::Decodable::decode(__decoder))
                    }
                    12usize => {
                        AttributeKind::CrateName {
                            name: ::rustc_serialize::Decodable::decode(__decoder),
                            name_span: ::rustc_serialize::Decodable::decode(__decoder),
                            attr_span: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    13usize => {
                        AttributeKind::CrateType(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    14usize => {
                        AttributeKind::CustomMir(::rustc_serialize::Decodable::decode(__decoder),
                            ::rustc_serialize::Decodable::decode(__decoder),
                            ::rustc_serialize::Decodable::decode(__decoder))
                    }
                    15usize => {
                        AttributeKind::DebuggerVisualizer(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    16usize => { AttributeKind::DefaultLibAllocator }
                    17usize => {
                        AttributeKind::Deprecated {
                            deprecation: ::rustc_serialize::Decodable::decode(__decoder),
                            span: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    18usize => {
                        AttributeKind::DoNotRecommend {
                            attr_span: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    19usize => {
                        AttributeKind::Doc(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    20usize => {
                        AttributeKind::DocComment {
                            style: ::rustc_serialize::Decodable::decode(__decoder),
                            kind: ::rustc_serialize::Decodable::decode(__decoder),
                            span: ::rustc_serialize::Decodable::decode(__decoder),
                            comment: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    21usize => {
                        AttributeKind::EiiDeclaration(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    22usize => {
                        AttributeKind::EiiImpls(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    23usize => {
                        AttributeKind::ExportName {
                            name: ::rustc_serialize::Decodable::decode(__decoder),
                            span: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    24usize => { AttributeKind::ExportStable }
                    25usize => {
                        AttributeKind::Feature(::rustc_serialize::Decodable::decode(__decoder),
                            ::rustc_serialize::Decodable::decode(__decoder))
                    }
                    26usize => {
                        AttributeKind::FfiConst(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    27usize => {
                        AttributeKind::FfiPure(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    28usize => { AttributeKind::Fundamental }
                    29usize => {
                        AttributeKind::Ignore {
                            span: ::rustc_serialize::Decodable::decode(__decoder),
                            reason: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    30usize => {
                        AttributeKind::Inline(::rustc_serialize::Decodable::decode(__decoder),
                            ::rustc_serialize::Decodable::decode(__decoder))
                    }
                    31usize => {
                        AttributeKind::InstructionSet(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    32usize => {
                        AttributeKind::Lang(::rustc_serialize::Decodable::decode(__decoder),
                            ::rustc_serialize::Decodable::decode(__decoder))
                    }
                    33usize => {
                        AttributeKind::Link(::rustc_serialize::Decodable::decode(__decoder),
                            ::rustc_serialize::Decodable::decode(__decoder))
                    }
                    34usize => {
                        AttributeKind::LinkName {
                            name: ::rustc_serialize::Decodable::decode(__decoder),
                            span: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    35usize => {
                        AttributeKind::LinkOrdinal {
                            ordinal: ::rustc_serialize::Decodable::decode(__decoder),
                            span: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    36usize => {
                        AttributeKind::LinkSection {
                            name: ::rustc_serialize::Decodable::decode(__decoder),
                            span: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    37usize => {
                        AttributeKind::Linkage(::rustc_serialize::Decodable::decode(__decoder),
                            ::rustc_serialize::Decodable::decode(__decoder))
                    }
                    38usize => {
                        AttributeKind::LintAttributes(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    39usize => {
                        AttributeKind::LoopMatch(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    40usize => {
                        AttributeKind::MacroEscape(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    41usize => {
                        AttributeKind::MacroExport {
                            span: ::rustc_serialize::Decodable::decode(__decoder),
                            local_inner_macros: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    42usize => {
                        AttributeKind::MacroUse {
                            span: ::rustc_serialize::Decodable::decode(__decoder),
                            arguments: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    43usize => {
                        AttributeKind::Marker(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    44usize => {
                        AttributeKind::MayDangle(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    45usize => {
                        AttributeKind::MoveSizeLimit {
                            attr_span: ::rustc_serialize::Decodable::decode(__decoder),
                            limit_span: ::rustc_serialize::Decodable::decode(__decoder),
                            limit: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    46usize => {
                        AttributeKind::MustNotSupend {
                            reason: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    47usize => {
                        AttributeKind::MustUse {
                            span: ::rustc_serialize::Decodable::decode(__decoder),
                            reason: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    48usize => {
                        AttributeKind::Naked(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    49usize => { AttributeKind::NeedsAllocator }
                    50usize => { AttributeKind::NeedsPanicRuntime }
                    51usize => { AttributeKind::NoBuiltins }
                    52usize => {
                        AttributeKind::NoCore(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    53usize => {
                        AttributeKind::NoImplicitPrelude(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    54usize => { AttributeKind::NoLink }
                    55usize => { AttributeKind::NoMain }
                    56usize => {
                        AttributeKind::NoMangle(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    57usize => {
                        AttributeKind::NoStd(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    58usize => {
                        AttributeKind::NonExhaustive(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    59usize => {
                        AttributeKind::OnConst {
                            span: ::rustc_serialize::Decodable::decode(__decoder),
                            directive: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    60usize => {
                        AttributeKind::OnMove {
                            span: ::rustc_serialize::Decodable::decode(__decoder),
                            directive: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    61usize => {
                        AttributeKind::OnUnimplemented {
                            span: ::rustc_serialize::Decodable::decode(__decoder),
                            directive: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    62usize => {
                        AttributeKind::Optimize(::rustc_serialize::Decodable::decode(__decoder),
                            ::rustc_serialize::Decodable::decode(__decoder))
                    }
                    63usize => { AttributeKind::PanicRuntime }
                    64usize => {
                        AttributeKind::PatchableFunctionEntry {
                            prefix: ::rustc_serialize::Decodable::decode(__decoder),
                            entry: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    65usize => {
                        AttributeKind::Path(::rustc_serialize::Decodable::decode(__decoder),
                            ::rustc_serialize::Decodable::decode(__decoder))
                    }
                    66usize => {
                        AttributeKind::PatternComplexityLimit {
                            attr_span: ::rustc_serialize::Decodable::decode(__decoder),
                            limit_span: ::rustc_serialize::Decodable::decode(__decoder),
                            limit: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    67usize => {
                        AttributeKind::PinV2(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    68usize => {
                        AttributeKind::Pointee(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    69usize => { AttributeKind::PreludeImport }
                    70usize => {
                        AttributeKind::ProcMacro(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    71usize => {
                        AttributeKind::ProcMacroAttribute(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    72usize => {
                        AttributeKind::ProcMacroDerive {
                            trait_name: ::rustc_serialize::Decodable::decode(__decoder),
                            helper_attrs: ::rustc_serialize::Decodable::decode(__decoder),
                            span: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    73usize => { AttributeKind::ProfilerRuntime }
                    74usize => {
                        AttributeKind::RecursionLimit {
                            attr_span: ::rustc_serialize::Decodable::decode(__decoder),
                            limit_span: ::rustc_serialize::Decodable::decode(__decoder),
                            limit: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    75usize => {
                        AttributeKind::ReexportTestHarnessMain(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    76usize => {
                        AttributeKind::RegisterTool(::rustc_serialize::Decodable::decode(__decoder),
                            ::rustc_serialize::Decodable::decode(__decoder))
                    }
                    77usize => {
                        AttributeKind::Repr {
                            reprs: ::rustc_serialize::Decodable::decode(__decoder),
                            first_span: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    78usize => {
                        AttributeKind::RustcAbi {
                            attr_span: ::rustc_serialize::Decodable::decode(__decoder),
                            kind: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    79usize => {
                        AttributeKind::RustcAlign {
                            align: ::rustc_serialize::Decodable::decode(__decoder),
                            span: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    80usize => { AttributeKind::RustcAllocator }
                    81usize => { AttributeKind::RustcAllocatorZeroed }
                    82usize => {
                        AttributeKind::RustcAllocatorZeroedVariant {
                            name: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    83usize => {
                        AttributeKind::RustcAllowConstFnUnstable(::rustc_serialize::Decodable::decode(__decoder),
                            ::rustc_serialize::Decodable::decode(__decoder))
                    }
                    84usize => {
                        AttributeKind::RustcAllowIncoherentImpl(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    85usize => {
                        AttributeKind::RustcAsPtr(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    86usize => {
                        AttributeKind::RustcAutodiff(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    87usize => {
                        AttributeKind::RustcBodyStability {
                            stability: ::rustc_serialize::Decodable::decode(__decoder),
                            span: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    88usize => {
                        AttributeKind::RustcBuiltinMacro {
                            builtin_name: ::rustc_serialize::Decodable::decode(__decoder),
                            helper_attrs: ::rustc_serialize::Decodable::decode(__decoder),
                            span: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    89usize => { AttributeKind::RustcCaptureAnalysis }
                    90usize => {
                        AttributeKind::RustcCguTestAttr(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    91usize => {
                        AttributeKind::RustcClean(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    92usize => {
                        AttributeKind::RustcCoherenceIsCore(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    93usize => {
                        AttributeKind::RustcCoinductive(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    94usize => {
                        AttributeKind::RustcConfusables {
                            symbols: ::rustc_serialize::Decodable::decode(__decoder),
                            first_span: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    95usize => {
                        AttributeKind::RustcConstStability {
                            stability: ::rustc_serialize::Decodable::decode(__decoder),
                            span: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    96usize => { AttributeKind::RustcConstStableIndirect }
                    97usize => { AttributeKind::RustcConversionSuggestion }
                    98usize => { AttributeKind::RustcDeallocator }
                    99usize => {
                        AttributeKind::RustcDefPath(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    100usize => {
                        AttributeKind::RustcDelayedBugFromInsideQuery
                    }
                    101usize => {
                        AttributeKind::RustcDenyExplicitImpl(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    102usize => {
                        AttributeKind::RustcDeprecatedSafe2024 {
                            suggestion: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    103usize => {
                        AttributeKind::RustcDiagnosticItem(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    104usize => { AttributeKind::RustcDoNotConstCheck }
                    105usize => {
                        AttributeKind::RustcDocPrimitive(::rustc_serialize::Decodable::decode(__decoder),
                            ::rustc_serialize::Decodable::decode(__decoder))
                    }
                    106usize => { AttributeKind::RustcDummy }
                    107usize => { AttributeKind::RustcDumpDefParents }
                    108usize => { AttributeKind::RustcDumpInferredOutlives }
                    109usize => { AttributeKind::RustcDumpItemBounds }
                    110usize => {
                        AttributeKind::RustcDumpObjectLifetimeDefaults
                    }
                    111usize => { AttributeKind::RustcDumpPredicates }
                    112usize => { AttributeKind::RustcDumpUserArgs }
                    113usize => { AttributeKind::RustcDumpVariances }
                    114usize => { AttributeKind::RustcDumpVariancesOfOpaques }
                    115usize => {
                        AttributeKind::RustcDumpVtable(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    116usize => {
                        AttributeKind::RustcDynIncompatibleTrait(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    117usize => { AttributeKind::RustcEffectiveVisibility }
                    118usize => { AttributeKind::RustcEiiForeignItem }
                    119usize => { AttributeKind::RustcEvaluateWhereClauses }
                    120usize => {
                        AttributeKind::RustcHasIncoherentInherentImpls
                    }
                    121usize => { AttributeKind::RustcHiddenTypeOfOpaques }
                    122usize => {
                        AttributeKind::RustcIfThisChanged(::rustc_serialize::Decodable::decode(__decoder),
                            ::rustc_serialize::Decodable::decode(__decoder))
                    }
                    123usize => { AttributeKind::RustcInheritOverflowChecks }
                    124usize => { AttributeKind::RustcInsignificantDtor }
                    125usize => { AttributeKind::RustcIntrinsic }
                    126usize => {
                        AttributeKind::RustcIntrinsicConstStableIndirect
                    }
                    127usize => {
                        AttributeKind::RustcLayout(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    128usize => {
                        AttributeKind::RustcLayoutScalarValidRangeEnd(::rustc_serialize::Decodable::decode(__decoder),
                            ::rustc_serialize::Decodable::decode(__decoder))
                    }
                    129usize => {
                        AttributeKind::RustcLayoutScalarValidRangeStart(::rustc_serialize::Decodable::decode(__decoder),
                            ::rustc_serialize::Decodable::decode(__decoder))
                    }
                    130usize => {
                        AttributeKind::RustcLegacyConstGenerics {
                            fn_indexes: ::rustc_serialize::Decodable::decode(__decoder),
                            attr_span: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    131usize => {
                        AttributeKind::RustcLintOptDenyFieldAccess {
                            lint_message: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    132usize => { AttributeKind::RustcLintOptTy }
                    133usize => { AttributeKind::RustcLintQueryInstability }
                    134usize => {
                        AttributeKind::RustcLintUntrackedQueryInformation
                    }
                    135usize => {
                        AttributeKind::RustcMacroTransparency(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    136usize => { AttributeKind::RustcMain }
                    137usize => {
                        AttributeKind::RustcMir(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    138usize => {
                        AttributeKind::RustcMustImplementOneOf {
                            attr_span: ::rustc_serialize::Decodable::decode(__decoder),
                            fn_names: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    139usize => { AttributeKind::RustcNeverReturnsNullPtr }
                    140usize => {
                        AttributeKind::RustcNeverTypeOptions {
                            fallback: ::rustc_serialize::Decodable::decode(__decoder),
                            diverging_block_default: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    141usize => { AttributeKind::RustcNoImplicitAutorefs }
                    142usize => { AttributeKind::RustcNoImplicitBounds }
                    143usize => { AttributeKind::RustcNoMirInline }
                    144usize => { AttributeKind::RustcNonConstTraitMethod }
                    145usize => {
                        AttributeKind::RustcNonnullOptimizationGuaranteed
                    }
                    146usize => { AttributeKind::RustcNounwind }
                    147usize => {
                        AttributeKind::RustcObjcClass {
                            classname: ::rustc_serialize::Decodable::decode(__decoder),
                            span: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    148usize => {
                        AttributeKind::RustcObjcSelector {
                            methname: ::rustc_serialize::Decodable::decode(__decoder),
                            span: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    149usize => { AttributeKind::RustcOffloadKernel }
                    150usize => {
                        AttributeKind::RustcParenSugar(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    151usize => {
                        AttributeKind::RustcPassByValue(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    152usize => {
                        AttributeKind::RustcPassIndirectlyInNonRusticAbis(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    153usize => { AttributeKind::RustcPreserveUbChecks }
                    154usize => { AttributeKind::RustcProcMacroDecls }
                    155usize => {
                        AttributeKind::RustcPubTransparent(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    156usize => { AttributeKind::RustcReallocator }
                    157usize => { AttributeKind::RustcRegions }
                    158usize => {
                        AttributeKind::RustcReservationImpl(::rustc_serialize::Decodable::decode(__decoder),
                            ::rustc_serialize::Decodable::decode(__decoder))
                    }
                    159usize => {
                        AttributeKind::RustcScalableVector {
                            element_count: ::rustc_serialize::Decodable::decode(__decoder),
                            span: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    160usize => {
                        AttributeKind::RustcShouldNotBeCalledOnConstItems(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    161usize => {
                        AttributeKind::RustcSimdMonomorphizeLaneLimit(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    162usize => {
                        AttributeKind::RustcSkipDuringMethodDispatch {
                            array: ::rustc_serialize::Decodable::decode(__decoder),
                            boxed_slice: ::rustc_serialize::Decodable::decode(__decoder),
                            span: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    163usize => {
                        AttributeKind::RustcSpecializationTrait(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    164usize => {
                        AttributeKind::RustcStdInternalSymbol(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    165usize => {
                        AttributeKind::RustcStrictCoherence(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    166usize => {
                        AttributeKind::RustcSymbolName(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    167usize => {
                        AttributeKind::RustcTestMarker(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    168usize => {
                        AttributeKind::RustcThenThisWouldNeed(::rustc_serialize::Decodable::decode(__decoder),
                            ::rustc_serialize::Decodable::decode(__decoder))
                    }
                    169usize => { AttributeKind::RustcTrivialFieldReads }
                    170usize => {
                        AttributeKind::RustcUnsafeSpecializationMarker(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    171usize => {
                        AttributeKind::Sanitize {
                            on_set: ::rustc_serialize::Decodable::decode(__decoder),
                            off_set: ::rustc_serialize::Decodable::decode(__decoder),
                            rtsan: ::rustc_serialize::Decodable::decode(__decoder),
                            span: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    172usize => {
                        AttributeKind::ShouldPanic {
                            reason: ::rustc_serialize::Decodable::decode(__decoder),
                            span: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    173usize => {
                        AttributeKind::Stability {
                            stability: ::rustc_serialize::Decodable::decode(__decoder),
                            span: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    174usize => {
                        AttributeKind::TargetFeature {
                            features: ::rustc_serialize::Decodable::decode(__decoder),
                            attr_span: ::rustc_serialize::Decodable::decode(__decoder),
                            was_forced: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    175usize => {
                        AttributeKind::TestRunner(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    176usize => { AttributeKind::ThreadLocal }
                    177usize => {
                        AttributeKind::TrackCaller(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    178usize => {
                        AttributeKind::TypeLengthLimit {
                            attr_span: ::rustc_serialize::Decodable::decode(__decoder),
                            limit_span: ::rustc_serialize::Decodable::decode(__decoder),
                            limit: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    179usize => {
                        AttributeKind::UnstableFeatureBound(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    180usize => {
                        AttributeKind::Used {
                            used_by: ::rustc_serialize::Decodable::decode(__decoder),
                            span: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    181usize => {
                        AttributeKind::WindowsSubsystem(::rustc_serialize::Decodable::decode(__decoder),
                            ::rustc_serialize::Decodable::decode(__decoder))
                    }
                    n => {
                        ::core::panicking::panic_fmt(format_args!("invalid enum variant tag while decoding `AttributeKind`, expected 0..182, actual {0}",
                                n));
                    }
                }
            }
        }
    };Decodable, const _: () =
    {
        #[allow(unused)]
        impl PrintAttribute for AttributeKind {
            fn should_render(&self) -> bool { true }
            fn print_attribute(&self,
                __p: &mut rustc_ast_pretty::pp::Printer) {
                match self {
                    Self::AllowInternalUnsafe(f0) => {
                        __p.word("AllowInternalUnsafe");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::AllowInternalUnstable(f0, f1) => {
                        __p.word("AllowInternalUnstable");
                        if true && !f0.should_render() && !f1.should_render() {
                            return;
                        }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        if f1.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f1.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::AutomaticallyDerived(f0) => {
                        __p.word("AutomaticallyDerived");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::CfgAttrTrace => { __p.word("CfgAttrTrace") }
                    Self::CfgTrace(f0) => {
                        __p.word("CfgTrace");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::CfiEncoding { encoding } => {
                        __p.word("CfiEncoding");
                        if true && !encoding.should_render() { return; }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if encoding.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("encoding");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        encoding.print_attribute(__p);
                        __p.word("}");
                    }
                    Self::Cold(f0) => {
                        __p.word("Cold");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::CollapseDebugInfo(f0) => {
                        __p.word("CollapseDebugInfo");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::CompilerBuiltins => { __p.word("CompilerBuiltins") }
                    Self::ConstContinue(f0) => {
                        __p.word("ConstContinue");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::Coroutine(f0) => {
                        __p.word("Coroutine");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::Coverage(f0, f1) => {
                        __p.word("Coverage");
                        if true && !f0.should_render() && !f1.should_render() {
                            return;
                        }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        if f1.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f1.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::CrateName { name, name_span, attr_span } => {
                        __p.word("CrateName");
                        if true && !name.should_render() &&
                                    !name_span.should_render() && !attr_span.should_render() {
                            return;
                        }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if name.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("name");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        name.print_attribute(__p);
                        if name_span.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("name_span");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        name_span.print_attribute(__p);
                        if attr_span.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("attr_span");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        attr_span.print_attribute(__p);
                        __p.word("}");
                    }
                    Self::CrateType(f0) => {
                        __p.word("CrateType");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::CustomMir(f0, f1, f2) => {
                        __p.word("CustomMir");
                        if true && !f0.should_render() && !f1.should_render() &&
                                !f2.should_render() {
                            return;
                        }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        if f1.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f1.print_attribute(__p);
                        if f2.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f2.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::DebuggerVisualizer(f0) => {
                        __p.word("DebuggerVisualizer");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::DefaultLibAllocator => {
                        __p.word("DefaultLibAllocator")
                    }
                    Self::Deprecated { deprecation, span } => {
                        __p.word("Deprecated");
                        if true && !deprecation.should_render() &&
                                !span.should_render() {
                            return;
                        }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if deprecation.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("deprecation");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        deprecation.print_attribute(__p);
                        if span.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("span");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        span.print_attribute(__p);
                        __p.word("}");
                    }
                    Self::DoNotRecommend { attr_span } => {
                        __p.word("DoNotRecommend");
                        if true && !attr_span.should_render() { return; }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if attr_span.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("attr_span");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        attr_span.print_attribute(__p);
                        __p.word("}");
                    }
                    Self::Doc(f0) => {
                        __p.word("Doc");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::DocComment { style, kind, span, comment } => {
                        __p.word("DocComment");
                        if true && !style.should_render() && !kind.should_render()
                                    && !span.should_render() && !comment.should_render() {
                            return;
                        }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if style.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("style");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        style.print_attribute(__p);
                        if kind.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("kind");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        kind.print_attribute(__p);
                        if span.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("span");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        span.print_attribute(__p);
                        if comment.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("comment");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        comment.print_attribute(__p);
                        __p.word("}");
                    }
                    Self::EiiDeclaration(f0) => {
                        __p.word("EiiDeclaration");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::EiiImpls(f0) => {
                        __p.word("EiiImpls");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::ExportName { name, span } => {
                        __p.word("ExportName");
                        if true && !name.should_render() && !span.should_render() {
                            return;
                        }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if name.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("name");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        name.print_attribute(__p);
                        if span.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("span");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        span.print_attribute(__p);
                        __p.word("}");
                    }
                    Self::ExportStable => { __p.word("ExportStable") }
                    Self::Feature(f0, f1) => {
                        __p.word("Feature");
                        if true && !f0.should_render() && !f1.should_render() {
                            return;
                        }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        if f1.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f1.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::FfiConst(f0) => {
                        __p.word("FfiConst");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::FfiPure(f0) => {
                        __p.word("FfiPure");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::Fundamental => { __p.word("Fundamental") }
                    Self::Ignore { span, reason } => {
                        __p.word("Ignore");
                        if true && !span.should_render() && !reason.should_render()
                            {
                            return;
                        }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if span.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("span");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        span.print_attribute(__p);
                        if reason.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("reason");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        reason.print_attribute(__p);
                        __p.word("}");
                    }
                    Self::Inline(f0, f1) => {
                        __p.word("Inline");
                        if true && !f0.should_render() && !f1.should_render() {
                            return;
                        }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        if f1.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f1.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::InstructionSet(f0) => {
                        __p.word("InstructionSet");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::Lang(f0, f1) => {
                        __p.word("Lang");
                        if true && !f0.should_render() && !f1.should_render() {
                            return;
                        }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        if f1.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f1.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::Link(f0, f1) => {
                        __p.word("Link");
                        if true && !f0.should_render() && !f1.should_render() {
                            return;
                        }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        if f1.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f1.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::LinkName { name, span } => {
                        __p.word("LinkName");
                        if true && !name.should_render() && !span.should_render() {
                            return;
                        }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if name.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("name");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        name.print_attribute(__p);
                        if span.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("span");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        span.print_attribute(__p);
                        __p.word("}");
                    }
                    Self::LinkOrdinal { ordinal, span } => {
                        __p.word("LinkOrdinal");
                        if true && !ordinal.should_render() && !span.should_render()
                            {
                            return;
                        }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if ordinal.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("ordinal");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        ordinal.print_attribute(__p);
                        if span.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("span");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        span.print_attribute(__p);
                        __p.word("}");
                    }
                    Self::LinkSection { name, span } => {
                        __p.word("LinkSection");
                        if true && !name.should_render() && !span.should_render() {
                            return;
                        }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if name.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("name");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        name.print_attribute(__p);
                        if span.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("span");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        span.print_attribute(__p);
                        __p.word("}");
                    }
                    Self::Linkage(f0, f1) => {
                        __p.word("Linkage");
                        if true && !f0.should_render() && !f1.should_render() {
                            return;
                        }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        if f1.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f1.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::LintAttributes(f0) => {
                        __p.word("LintAttributes");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::LoopMatch(f0) => {
                        __p.word("LoopMatch");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::MacroEscape(f0) => {
                        __p.word("MacroEscape");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::MacroExport { span, local_inner_macros } => {
                        __p.word("MacroExport");
                        if true && !span.should_render() &&
                                !local_inner_macros.should_render() {
                            return;
                        }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if span.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("span");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        span.print_attribute(__p);
                        if local_inner_macros.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("local_inner_macros");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        local_inner_macros.print_attribute(__p);
                        __p.word("}");
                    }
                    Self::MacroUse { span, arguments } => {
                        __p.word("MacroUse");
                        if true && !span.should_render() &&
                                !arguments.should_render() {
                            return;
                        }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if span.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("span");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        span.print_attribute(__p);
                        if arguments.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("arguments");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        arguments.print_attribute(__p);
                        __p.word("}");
                    }
                    Self::Marker(f0) => {
                        __p.word("Marker");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::MayDangle(f0) => {
                        __p.word("MayDangle");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::MoveSizeLimit { attr_span, limit_span, limit } => {
                        __p.word("MoveSizeLimit");
                        if true && !attr_span.should_render() &&
                                    !limit_span.should_render() && !limit.should_render() {
                            return;
                        }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if attr_span.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("attr_span");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        attr_span.print_attribute(__p);
                        if limit_span.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("limit_span");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        limit_span.print_attribute(__p);
                        if limit.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("limit");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        limit.print_attribute(__p);
                        __p.word("}");
                    }
                    Self::MustNotSupend { reason } => {
                        __p.word("MustNotSupend");
                        if true && !reason.should_render() { return; }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if reason.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("reason");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        reason.print_attribute(__p);
                        __p.word("}");
                    }
                    Self::MustUse { span, reason } => {
                        __p.word("MustUse");
                        if true && !span.should_render() && !reason.should_render()
                            {
                            return;
                        }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if span.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("span");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        span.print_attribute(__p);
                        if reason.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("reason");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        reason.print_attribute(__p);
                        __p.word("}");
                    }
                    Self::Naked(f0) => {
                        __p.word("Naked");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::NeedsAllocator => { __p.word("NeedsAllocator") }
                    Self::NeedsPanicRuntime => { __p.word("NeedsPanicRuntime") }
                    Self::NoBuiltins => { __p.word("NoBuiltins") }
                    Self::NoCore(f0) => {
                        __p.word("NoCore");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::NoImplicitPrelude(f0) => {
                        __p.word("NoImplicitPrelude");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::NoLink => { __p.word("NoLink") }
                    Self::NoMain => { __p.word("NoMain") }
                    Self::NoMangle(f0) => {
                        __p.word("NoMangle");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::NoStd(f0) => {
                        __p.word("NoStd");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::NonExhaustive(f0) => {
                        __p.word("NonExhaustive");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::OnConst { span, directive } => {
                        __p.word("OnConst");
                        if true && !span.should_render() &&
                                !directive.should_render() {
                            return;
                        }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if span.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("span");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        span.print_attribute(__p);
                        if directive.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("directive");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        directive.print_attribute(__p);
                        __p.word("}");
                    }
                    Self::OnMove { span, directive } => {
                        __p.word("OnMove");
                        if true && !span.should_render() &&
                                !directive.should_render() {
                            return;
                        }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if span.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("span");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        span.print_attribute(__p);
                        if directive.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("directive");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        directive.print_attribute(__p);
                        __p.word("}");
                    }
                    Self::OnUnimplemented { span, directive } => {
                        __p.word("OnUnimplemented");
                        if true && !span.should_render() &&
                                !directive.should_render() {
                            return;
                        }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if span.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("span");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        span.print_attribute(__p);
                        if directive.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("directive");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        directive.print_attribute(__p);
                        __p.word("}");
                    }
                    Self::Optimize(f0, f1) => {
                        __p.word("Optimize");
                        if true && !f0.should_render() && !f1.should_render() {
                            return;
                        }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        if f1.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f1.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::PanicRuntime => { __p.word("PanicRuntime") }
                    Self::PatchableFunctionEntry { prefix, entry } => {
                        __p.word("PatchableFunctionEntry");
                        if true && !prefix.should_render() && !entry.should_render()
                            {
                            return;
                        }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if prefix.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("prefix");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        prefix.print_attribute(__p);
                        if entry.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("entry");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        entry.print_attribute(__p);
                        __p.word("}");
                    }
                    Self::Path(f0, f1) => {
                        __p.word("Path");
                        if true && !f0.should_render() && !f1.should_render() {
                            return;
                        }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        if f1.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f1.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::PatternComplexityLimit { attr_span, limit_span, limit
                        } => {
                        __p.word("PatternComplexityLimit");
                        if true && !attr_span.should_render() &&
                                    !limit_span.should_render() && !limit.should_render() {
                            return;
                        }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if attr_span.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("attr_span");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        attr_span.print_attribute(__p);
                        if limit_span.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("limit_span");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        limit_span.print_attribute(__p);
                        if limit.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("limit");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        limit.print_attribute(__p);
                        __p.word("}");
                    }
                    Self::PinV2(f0) => {
                        __p.word("PinV2");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::Pointee(f0) => {
                        __p.word("Pointee");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::PreludeImport => { __p.word("PreludeImport") }
                    Self::ProcMacro(f0) => {
                        __p.word("ProcMacro");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::ProcMacroAttribute(f0) => {
                        __p.word("ProcMacroAttribute");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::ProcMacroDerive { trait_name, helper_attrs, span } =>
                        {
                        __p.word("ProcMacroDerive");
                        if true && !trait_name.should_render() &&
                                    !helper_attrs.should_render() && !span.should_render() {
                            return;
                        }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if trait_name.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("trait_name");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        trait_name.print_attribute(__p);
                        if helper_attrs.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("helper_attrs");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        helper_attrs.print_attribute(__p);
                        if span.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("span");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        span.print_attribute(__p);
                        __p.word("}");
                    }
                    Self::ProfilerRuntime => { __p.word("ProfilerRuntime") }
                    Self::RecursionLimit { attr_span, limit_span, limit } => {
                        __p.word("RecursionLimit");
                        if true && !attr_span.should_render() &&
                                    !limit_span.should_render() && !limit.should_render() {
                            return;
                        }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if attr_span.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("attr_span");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        attr_span.print_attribute(__p);
                        if limit_span.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("limit_span");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        limit_span.print_attribute(__p);
                        if limit.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("limit");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        limit.print_attribute(__p);
                        __p.word("}");
                    }
                    Self::ReexportTestHarnessMain(f0) => {
                        __p.word("ReexportTestHarnessMain");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::RegisterTool(f0, f1) => {
                        __p.word("RegisterTool");
                        if true && !f0.should_render() && !f1.should_render() {
                            return;
                        }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        if f1.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f1.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::Repr { reprs, first_span } => {
                        __p.word("Repr");
                        if true && !reprs.should_render() &&
                                !first_span.should_render() {
                            return;
                        }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if reprs.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("reprs");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        reprs.print_attribute(__p);
                        if first_span.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("first_span");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        first_span.print_attribute(__p);
                        __p.word("}");
                    }
                    Self::RustcAbi { attr_span, kind } => {
                        __p.word("RustcAbi");
                        if true && !attr_span.should_render() &&
                                !kind.should_render() {
                            return;
                        }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if attr_span.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("attr_span");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        attr_span.print_attribute(__p);
                        if kind.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("kind");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        kind.print_attribute(__p);
                        __p.word("}");
                    }
                    Self::RustcAlign { align, span } => {
                        __p.word("RustcAlign");
                        if true && !align.should_render() && !span.should_render() {
                            return;
                        }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if align.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("align");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        align.print_attribute(__p);
                        if span.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("span");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        span.print_attribute(__p);
                        __p.word("}");
                    }
                    Self::RustcAllocator => { __p.word("RustcAllocator") }
                    Self::RustcAllocatorZeroed => {
                        __p.word("RustcAllocatorZeroed")
                    }
                    Self::RustcAllocatorZeroedVariant { name } => {
                        __p.word("RustcAllocatorZeroedVariant");
                        if true && !name.should_render() { return; }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if name.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("name");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        name.print_attribute(__p);
                        __p.word("}");
                    }
                    Self::RustcAllowConstFnUnstable(f0, f1) => {
                        __p.word("RustcAllowConstFnUnstable");
                        if true && !f0.should_render() && !f1.should_render() {
                            return;
                        }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        if f1.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f1.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::RustcAllowIncoherentImpl(f0) => {
                        __p.word("RustcAllowIncoherentImpl");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::RustcAsPtr(f0) => {
                        __p.word("RustcAsPtr");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::RustcAutodiff(f0) => {
                        __p.word("RustcAutodiff");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::RustcBodyStability { stability, span } => {
                        __p.word("RustcBodyStability");
                        if true && !stability.should_render() &&
                                !span.should_render() {
                            return;
                        }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if stability.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("stability");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        stability.print_attribute(__p);
                        if span.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("span");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        span.print_attribute(__p);
                        __p.word("}");
                    }
                    Self::RustcBuiltinMacro { builtin_name, helper_attrs, span }
                        => {
                        __p.word("RustcBuiltinMacro");
                        if true && !builtin_name.should_render() &&
                                    !helper_attrs.should_render() && !span.should_render() {
                            return;
                        }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if builtin_name.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("builtin_name");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        builtin_name.print_attribute(__p);
                        if helper_attrs.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("helper_attrs");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        helper_attrs.print_attribute(__p);
                        if span.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("span");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        span.print_attribute(__p);
                        __p.word("}");
                    }
                    Self::RustcCaptureAnalysis => {
                        __p.word("RustcCaptureAnalysis")
                    }
                    Self::RustcCguTestAttr(f0) => {
                        __p.word("RustcCguTestAttr");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::RustcClean(f0) => {
                        __p.word("RustcClean");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::RustcCoherenceIsCore(f0) => {
                        __p.word("RustcCoherenceIsCore");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::RustcCoinductive(f0) => {
                        __p.word("RustcCoinductive");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::RustcConfusables { symbols, first_span } => {
                        __p.word("RustcConfusables");
                        if true && !symbols.should_render() &&
                                !first_span.should_render() {
                            return;
                        }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if symbols.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("symbols");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        symbols.print_attribute(__p);
                        if first_span.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("first_span");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        first_span.print_attribute(__p);
                        __p.word("}");
                    }
                    Self::RustcConstStability { stability, span } => {
                        __p.word("RustcConstStability");
                        if true && !stability.should_render() &&
                                !span.should_render() {
                            return;
                        }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if stability.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("stability");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        stability.print_attribute(__p);
                        if span.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("span");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        span.print_attribute(__p);
                        __p.word("}");
                    }
                    Self::RustcConstStableIndirect => {
                        __p.word("RustcConstStableIndirect")
                    }
                    Self::RustcConversionSuggestion => {
                        __p.word("RustcConversionSuggestion")
                    }
                    Self::RustcDeallocator => { __p.word("RustcDeallocator") }
                    Self::RustcDefPath(f0) => {
                        __p.word("RustcDefPath");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::RustcDelayedBugFromInsideQuery => {
                        __p.word("RustcDelayedBugFromInsideQuery")
                    }
                    Self::RustcDenyExplicitImpl(f0) => {
                        __p.word("RustcDenyExplicitImpl");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::RustcDeprecatedSafe2024 { suggestion } => {
                        __p.word("RustcDeprecatedSafe2024");
                        if true && !suggestion.should_render() { return; }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if suggestion.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("suggestion");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        suggestion.print_attribute(__p);
                        __p.word("}");
                    }
                    Self::RustcDiagnosticItem(f0) => {
                        __p.word("RustcDiagnosticItem");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::RustcDoNotConstCheck => {
                        __p.word("RustcDoNotConstCheck")
                    }
                    Self::RustcDocPrimitive(f0, f1) => {
                        __p.word("RustcDocPrimitive");
                        if true && !f0.should_render() && !f1.should_render() {
                            return;
                        }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        if f1.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f1.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::RustcDummy => { __p.word("RustcDummy") }
                    Self::RustcDumpDefParents => {
                        __p.word("RustcDumpDefParents")
                    }
                    Self::RustcDumpInferredOutlives => {
                        __p.word("RustcDumpInferredOutlives")
                    }
                    Self::RustcDumpItemBounds => {
                        __p.word("RustcDumpItemBounds")
                    }
                    Self::RustcDumpObjectLifetimeDefaults => {
                        __p.word("RustcDumpObjectLifetimeDefaults")
                    }
                    Self::RustcDumpPredicates => {
                        __p.word("RustcDumpPredicates")
                    }
                    Self::RustcDumpUserArgs => { __p.word("RustcDumpUserArgs") }
                    Self::RustcDumpVariances => {
                        __p.word("RustcDumpVariances")
                    }
                    Self::RustcDumpVariancesOfOpaques => {
                        __p.word("RustcDumpVariancesOfOpaques")
                    }
                    Self::RustcDumpVtable(f0) => {
                        __p.word("RustcDumpVtable");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::RustcDynIncompatibleTrait(f0) => {
                        __p.word("RustcDynIncompatibleTrait");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::RustcEffectiveVisibility => {
                        __p.word("RustcEffectiveVisibility")
                    }
                    Self::RustcEiiForeignItem => {
                        __p.word("RustcEiiForeignItem")
                    }
                    Self::RustcEvaluateWhereClauses => {
                        __p.word("RustcEvaluateWhereClauses")
                    }
                    Self::RustcHasIncoherentInherentImpls => {
                        __p.word("RustcHasIncoherentInherentImpls")
                    }
                    Self::RustcHiddenTypeOfOpaques => {
                        __p.word("RustcHiddenTypeOfOpaques")
                    }
                    Self::RustcIfThisChanged(f0, f1) => {
                        __p.word("RustcIfThisChanged");
                        if true && !f0.should_render() && !f1.should_render() {
                            return;
                        }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        if f1.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f1.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::RustcInheritOverflowChecks => {
                        __p.word("RustcInheritOverflowChecks")
                    }
                    Self::RustcInsignificantDtor => {
                        __p.word("RustcInsignificantDtor")
                    }
                    Self::RustcIntrinsic => { __p.word("RustcIntrinsic") }
                    Self::RustcIntrinsicConstStableIndirect => {
                        __p.word("RustcIntrinsicConstStableIndirect")
                    }
                    Self::RustcLayout(f0) => {
                        __p.word("RustcLayout");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::RustcLayoutScalarValidRangeEnd(f0, f1) => {
                        __p.word("RustcLayoutScalarValidRangeEnd");
                        if true && !f0.should_render() && !f1.should_render() {
                            return;
                        }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        if f1.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f1.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::RustcLayoutScalarValidRangeStart(f0, f1) => {
                        __p.word("RustcLayoutScalarValidRangeStart");
                        if true && !f0.should_render() && !f1.should_render() {
                            return;
                        }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        if f1.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f1.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::RustcLegacyConstGenerics { fn_indexes, attr_span } =>
                        {
                        __p.word("RustcLegacyConstGenerics");
                        if true && !fn_indexes.should_render() &&
                                !attr_span.should_render() {
                            return;
                        }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if fn_indexes.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("fn_indexes");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        fn_indexes.print_attribute(__p);
                        if attr_span.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("attr_span");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        attr_span.print_attribute(__p);
                        __p.word("}");
                    }
                    Self::RustcLintOptDenyFieldAccess { lint_message } => {
                        __p.word("RustcLintOptDenyFieldAccess");
                        if true && !lint_message.should_render() { return; }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if lint_message.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("lint_message");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        lint_message.print_attribute(__p);
                        __p.word("}");
                    }
                    Self::RustcLintOptTy => { __p.word("RustcLintOptTy") }
                    Self::RustcLintQueryInstability => {
                        __p.word("RustcLintQueryInstability")
                    }
                    Self::RustcLintUntrackedQueryInformation => {
                        __p.word("RustcLintUntrackedQueryInformation")
                    }
                    Self::RustcMacroTransparency(f0) => {
                        __p.word("RustcMacroTransparency");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::RustcMain => { __p.word("RustcMain") }
                    Self::RustcMir(f0) => {
                        __p.word("RustcMir");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::RustcMustImplementOneOf { attr_span, fn_names } => {
                        __p.word("RustcMustImplementOneOf");
                        if true && !attr_span.should_render() &&
                                !fn_names.should_render() {
                            return;
                        }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if attr_span.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("attr_span");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        attr_span.print_attribute(__p);
                        if fn_names.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("fn_names");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        fn_names.print_attribute(__p);
                        __p.word("}");
                    }
                    Self::RustcNeverReturnsNullPtr => {
                        __p.word("RustcNeverReturnsNullPtr")
                    }
                    Self::RustcNeverTypeOptions {
                        fallback, diverging_block_default } => {
                        __p.word("RustcNeverTypeOptions");
                        if true && !fallback.should_render() &&
                                !diverging_block_default.should_render() {
                            return;
                        }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if fallback.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("fallback");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        fallback.print_attribute(__p);
                        if diverging_block_default.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("diverging_block_default");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        diverging_block_default.print_attribute(__p);
                        __p.word("}");
                    }
                    Self::RustcNoImplicitAutorefs => {
                        __p.word("RustcNoImplicitAutorefs")
                    }
                    Self::RustcNoImplicitBounds => {
                        __p.word("RustcNoImplicitBounds")
                    }
                    Self::RustcNoMirInline => { __p.word("RustcNoMirInline") }
                    Self::RustcNonConstTraitMethod => {
                        __p.word("RustcNonConstTraitMethod")
                    }
                    Self::RustcNonnullOptimizationGuaranteed => {
                        __p.word("RustcNonnullOptimizationGuaranteed")
                    }
                    Self::RustcNounwind => { __p.word("RustcNounwind") }
                    Self::RustcObjcClass { classname, span } => {
                        __p.word("RustcObjcClass");
                        if true && !classname.should_render() &&
                                !span.should_render() {
                            return;
                        }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if classname.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("classname");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        classname.print_attribute(__p);
                        if span.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("span");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        span.print_attribute(__p);
                        __p.word("}");
                    }
                    Self::RustcObjcSelector { methname, span } => {
                        __p.word("RustcObjcSelector");
                        if true && !methname.should_render() &&
                                !span.should_render() {
                            return;
                        }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if methname.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("methname");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        methname.print_attribute(__p);
                        if span.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("span");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        span.print_attribute(__p);
                        __p.word("}");
                    }
                    Self::RustcOffloadKernel => {
                        __p.word("RustcOffloadKernel")
                    }
                    Self::RustcParenSugar(f0) => {
                        __p.word("RustcParenSugar");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::RustcPassByValue(f0) => {
                        __p.word("RustcPassByValue");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::RustcPassIndirectlyInNonRusticAbis(f0) => {
                        __p.word("RustcPassIndirectlyInNonRusticAbis");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::RustcPreserveUbChecks => {
                        __p.word("RustcPreserveUbChecks")
                    }
                    Self::RustcProcMacroDecls => {
                        __p.word("RustcProcMacroDecls")
                    }
                    Self::RustcPubTransparent(f0) => {
                        __p.word("RustcPubTransparent");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::RustcReallocator => { __p.word("RustcReallocator") }
                    Self::RustcRegions => { __p.word("RustcRegions") }
                    Self::RustcReservationImpl(f0, f1) => {
                        __p.word("RustcReservationImpl");
                        if true && !f0.should_render() && !f1.should_render() {
                            return;
                        }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        if f1.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f1.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::RustcScalableVector { element_count, span } => {
                        __p.word("RustcScalableVector");
                        if true && !element_count.should_render() &&
                                !span.should_render() {
                            return;
                        }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if element_count.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("element_count");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        element_count.print_attribute(__p);
                        if span.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("span");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        span.print_attribute(__p);
                        __p.word("}");
                    }
                    Self::RustcShouldNotBeCalledOnConstItems(f0) => {
                        __p.word("RustcShouldNotBeCalledOnConstItems");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::RustcSimdMonomorphizeLaneLimit(f0) => {
                        __p.word("RustcSimdMonomorphizeLaneLimit");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::RustcSkipDuringMethodDispatch {
                        array, boxed_slice, span } => {
                        __p.word("RustcSkipDuringMethodDispatch");
                        if true && !array.should_render() &&
                                    !boxed_slice.should_render() && !span.should_render() {
                            return;
                        }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if array.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("array");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        array.print_attribute(__p);
                        if boxed_slice.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("boxed_slice");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        boxed_slice.print_attribute(__p);
                        if span.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("span");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        span.print_attribute(__p);
                        __p.word("}");
                    }
                    Self::RustcSpecializationTrait(f0) => {
                        __p.word("RustcSpecializationTrait");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::RustcStdInternalSymbol(f0) => {
                        __p.word("RustcStdInternalSymbol");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::RustcStrictCoherence(f0) => {
                        __p.word("RustcStrictCoherence");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::RustcSymbolName(f0) => {
                        __p.word("RustcSymbolName");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::RustcTestMarker(f0) => {
                        __p.word("RustcTestMarker");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::RustcThenThisWouldNeed(f0, f1) => {
                        __p.word("RustcThenThisWouldNeed");
                        if true && !f0.should_render() && !f1.should_render() {
                            return;
                        }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        if f1.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f1.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::RustcTrivialFieldReads => {
                        __p.word("RustcTrivialFieldReads")
                    }
                    Self::RustcUnsafeSpecializationMarker(f0) => {
                        __p.word("RustcUnsafeSpecializationMarker");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::Sanitize { on_set, off_set, rtsan, span } => {
                        __p.word("Sanitize");
                        if true && !on_set.should_render() &&
                                        !off_set.should_render() && !rtsan.should_render() &&
                                !span.should_render() {
                            return;
                        }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if on_set.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("on_set");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        on_set.print_attribute(__p);
                        if off_set.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("off_set");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        off_set.print_attribute(__p);
                        if rtsan.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("rtsan");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        rtsan.print_attribute(__p);
                        if span.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("span");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        span.print_attribute(__p);
                        __p.word("}");
                    }
                    Self::ShouldPanic { reason, span } => {
                        __p.word("ShouldPanic");
                        if true && !reason.should_render() && !span.should_render()
                            {
                            return;
                        }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if reason.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("reason");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        reason.print_attribute(__p);
                        if span.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("span");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        span.print_attribute(__p);
                        __p.word("}");
                    }
                    Self::Stability { stability, span } => {
                        __p.word("Stability");
                        if true && !stability.should_render() &&
                                !span.should_render() {
                            return;
                        }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if stability.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("stability");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        stability.print_attribute(__p);
                        if span.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("span");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        span.print_attribute(__p);
                        __p.word("}");
                    }
                    Self::TargetFeature { features, attr_span, was_forced } => {
                        __p.word("TargetFeature");
                        if true && !features.should_render() &&
                                    !attr_span.should_render() && !was_forced.should_render() {
                            return;
                        }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if features.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("features");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        features.print_attribute(__p);
                        if attr_span.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("attr_span");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        attr_span.print_attribute(__p);
                        if was_forced.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("was_forced");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        was_forced.print_attribute(__p);
                        __p.word("}");
                    }
                    Self::TestRunner(f0) => {
                        __p.word("TestRunner");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::ThreadLocal => { __p.word("ThreadLocal") }
                    Self::TrackCaller(f0) => {
                        __p.word("TrackCaller");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::TypeLengthLimit { attr_span, limit_span, limit } => {
                        __p.word("TypeLengthLimit");
                        if true && !attr_span.should_render() &&
                                    !limit_span.should_render() && !limit.should_render() {
                            return;
                        }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if attr_span.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("attr_span");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        attr_span.print_attribute(__p);
                        if limit_span.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("limit_span");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        limit_span.print_attribute(__p);
                        if limit.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("limit");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        limit.print_attribute(__p);
                        __p.word("}");
                    }
                    Self::UnstableFeatureBound(f0) => {
                        __p.word("UnstableFeatureBound");
                        if true && !f0.should_render() { return; }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        __p.pclose();
                    }
                    Self::Used { used_by, span } => {
                        __p.word("Used");
                        if true && !used_by.should_render() && !span.should_render()
                            {
                            return;
                        }
                        __p.nbsp();
                        __p.word("{");
                        let mut __printed_anything = false;
                        if used_by.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("used_by");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        used_by.print_attribute(__p);
                        if span.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __p.word("span");
                            __p.word(":");
                            __p.nbsp();
                            __printed_anything = true;
                        }
                        span.print_attribute(__p);
                        __p.word("}");
                    }
                    Self::WindowsSubsystem(f0, f1) => {
                        __p.word("WindowsSubsystem");
                        if true && !f0.should_render() && !f1.should_render() {
                            return;
                        }
                        __p.popen();
                        let mut __printed_anything = false;
                        if f0.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f0.print_attribute(__p);
                        if f1.should_render() {
                            if __printed_anything { __p.word_space(","); }
                            __printed_anything = true;
                        }
                        f1.print_attribute(__p);
                        __p.pclose();
                    }
                }
            }
        }
    };PrintAttribute)]
1086pub enum AttributeKind {
1087    // tidy-alphabetical-start
1088    /// Represents `#[allow_internal_unsafe]`.
1089    AllowInternalUnsafe(Span),
1090
1091    /// Represents `#[allow_internal_unstable]`.
1092    AllowInternalUnstable(ThinVec<(Symbol, Span)>, Span),
1093
1094    /// Represents `#[automatically_derived]`
1095    AutomaticallyDerived(Span),
1096
1097    /// Represents the trace attribute of `#[cfg_attr]`
1098    CfgAttrTrace,
1099
1100    /// Represents the trace attribute of `#[cfg]`
1101    CfgTrace(ThinVec<(CfgEntry, Span)>),
1102
1103    /// Represents `#[cfi_encoding]`
1104    CfiEncoding {
1105        encoding: Symbol,
1106    },
1107
1108    /// Represents `#[cold]`.
1109    Cold(Span),
1110
1111    /// Represents `#[collapse_debuginfo]`.
1112    CollapseDebugInfo(CollapseMacroDebuginfo),
1113
1114    /// Represents `#[compiler_builtins]`.
1115    CompilerBuiltins,
1116
1117    /// Represents `#[const_continue]`.
1118    ConstContinue(Span),
1119
1120    /// Represents `#[coroutine]`.
1121    Coroutine(Span),
1122
1123    /// Represents `#[coverage(..)]`.
1124    Coverage(Span, CoverageAttrKind),
1125
1126    /// Represents `#[crate_name = ...]`
1127    CrateName {
1128        name: Symbol,
1129        name_span: Span,
1130        attr_span: Span,
1131    },
1132
1133    /// Represents `#![crate_type = ...]`
1134    CrateType(ThinVec<CrateType>),
1135
1136    /// Represents `#[custom_mir]`.
1137    CustomMir(Option<(MirDialect, Span)>, Option<(MirPhase, Span)>, Span),
1138
1139    /// Represents `#[debugger_visualizer]`.
1140    DebuggerVisualizer(ThinVec<DebugVisualizer>),
1141
1142    /// Represents `#![default_lib_allocator]`
1143    DefaultLibAllocator,
1144
1145    /// Represents [`#[deprecated]`](https://doc.rust-lang.org/stable/reference/attributes/diagnostics.html#the-deprecated-attribute).
1146    Deprecated {
1147        deprecation: Deprecation,
1148        span: Span,
1149    },
1150
1151    /// Represents `#[diagnostic::do_not_recommend]`.
1152    DoNotRecommend {
1153        attr_span: Span,
1154    },
1155
1156    /// Represents [`#[doc]`](https://doc.rust-lang.org/stable/rustdoc/write-documentation/the-doc-attribute.html).
1157    /// Represents all other uses of the [`#[doc]`](https://doc.rust-lang.org/stable/rustdoc/write-documentation/the-doc-attribute.html)
1158    /// attribute.
1159    Doc(Box<DocAttribute>),
1160
1161    /// Represents specifically [`#[doc = "..."]`](https://doc.rust-lang.org/stable/rustdoc/write-documentation/the-doc-attribute.html).
1162    /// i.e. doc comments.
1163    DocComment {
1164        style: AttrStyle,
1165        kind: DocFragmentKind,
1166        span: Span,
1167        comment: Symbol,
1168    },
1169
1170    /// Implementation detail of `#[eii]`
1171    EiiDeclaration(EiiDecl),
1172
1173    /// Implementation detail of `#[eii]`
1174    EiiImpls(ThinVec<EiiImpl>),
1175
1176    /// Represents [`#[export_name]`](https://doc.rust-lang.org/reference/abi.html#the-export_name-attribute).
1177    ExportName {
1178        /// The name to export this item with.
1179        /// It may not contain \0 bytes as it will be converted to a null-terminated string.
1180        name: Symbol,
1181        span: Span,
1182    },
1183
1184    /// Represents `#[export_stable]`.
1185    ExportStable,
1186
1187    /// Represents `#[feature(...)]`
1188    Feature(ThinVec<Ident>, Span),
1189
1190    /// Represents `#[ffi_const]`.
1191    FfiConst(Span),
1192
1193    /// Represents `#[ffi_pure]`.
1194    FfiPure(Span),
1195
1196    /// Represents `#[fundamental]`.
1197    Fundamental,
1198
1199    /// Represents `#[ignore]`
1200    Ignore {
1201        span: Span,
1202        /// ignore can optionally have a reason: `#[ignore = "reason this is ignored"]`
1203        reason: Option<Symbol>,
1204    },
1205
1206    /// Represents `#[inline]` and `#[rustc_force_inline]`.
1207    Inline(InlineAttr, Span),
1208
1209    /// Represents `#[instruction_set]`
1210    InstructionSet(InstructionSetAttr),
1211
1212    /// Represents `#[lang]`
1213    Lang(LangItem, Span),
1214
1215    /// Represents `#[link]`.
1216    Link(ThinVec<LinkEntry>, Span),
1217
1218    /// Represents `#[link_name]`.
1219    LinkName {
1220        name: Symbol,
1221        span: Span,
1222    },
1223
1224    /// Represents `#[link_ordinal]`.
1225    LinkOrdinal {
1226        ordinal: u16,
1227        span: Span,
1228    },
1229
1230    /// Represents [`#[link_section]`](https://doc.rust-lang.org/reference/abi.html#the-link_section-attribute)
1231    LinkSection {
1232        name: Symbol,
1233        span: Span,
1234    },
1235
1236    /// Represents `#[linkage]`.
1237    Linkage(Linkage, Span),
1238
1239    /// Represents `#[allow]`, `#[expect]`, `#[warn]`, `#[deny]`, `#[forbid]`
1240    LintAttributes(ThinVec<LintAttribute>),
1241
1242    /// Represents `#[loop_match]`.
1243    LoopMatch(Span),
1244
1245    /// Represents `#[macro_escape]`.
1246    MacroEscape(Span),
1247
1248    /// Represents [`#[macro_export]`](https://doc.rust-lang.org/reference/macros-by-example.html#r-macro.decl.scope.path).
1249    MacroExport {
1250        span: Span,
1251        local_inner_macros: bool,
1252    },
1253
1254    /// Represents `#[macro_use]`.
1255    MacroUse {
1256        span: Span,
1257        arguments: MacroUseArgs,
1258    },
1259
1260    /// Represents `#[marker]`.
1261    Marker(Span),
1262
1263    /// Represents [`#[may_dangle]`](https://std-dev-guide.rust-lang.org/tricky/may-dangle.html).
1264    MayDangle(Span),
1265
1266    /// Represents `#[move_size_limit]`
1267    MoveSizeLimit {
1268        attr_span: Span,
1269        limit_span: Span,
1270        limit: Limit,
1271    },
1272
1273    /// Represents `#[must_not_suspend]`
1274    MustNotSupend {
1275        reason: Option<Symbol>,
1276    },
1277
1278    /// Represents `#[must_use]`.
1279    MustUse {
1280        span: Span,
1281        /// must_use can optionally have a reason: `#[must_use = "reason this must be used"]`
1282        reason: Option<Symbol>,
1283    },
1284
1285    /// Represents `#[naked]`
1286    Naked(Span),
1287
1288    /// Represents `#[needs_allocator]`
1289    NeedsAllocator,
1290
1291    /// Represents `#[needs_panic_runtime]`
1292    NeedsPanicRuntime,
1293
1294    /// Represents `#[no_builtins]`
1295    NoBuiltins,
1296
1297    /// Represents `#[no_core]`
1298    NoCore(Span),
1299
1300    /// Represents `#[no_implicit_prelude]`
1301    NoImplicitPrelude(Span),
1302
1303    /// Represents `#[no_link]`
1304    NoLink,
1305
1306    /// Represents `#[no_main]`
1307    NoMain,
1308
1309    /// Represents `#[no_mangle]`
1310    NoMangle(Span),
1311
1312    /// Represents `#[no_std]`
1313    NoStd(Span),
1314
1315    /// Represents `#[non_exhaustive]`
1316    NonExhaustive(Span),
1317
1318    /// Represents `#[diagnostic::on_const]`.
1319    OnConst {
1320        span: Span,
1321        /// None if the directive was malformed in some way.
1322        directive: Option<Box<Directive>>,
1323    },
1324
1325    /// Represents `#[diagnostic::on_move]`
1326    OnMove {
1327        span: Span,
1328        directive: Option<Box<Directive>>,
1329    },
1330
1331    /// Represents `#[rustc_on_unimplemented]` and `#[diagnostic::on_unimplemented]`.
1332    OnUnimplemented {
1333        span: Span,
1334        /// None if the directive was malformed in some way.
1335        directive: Option<Box<Directive>>,
1336    },
1337    /// Represents `#[optimize(size|speed)]`
1338    Optimize(OptimizeAttr, Span),
1339
1340    /// Represents `#[panic_runtime]`
1341    PanicRuntime,
1342
1343    /// Represents `#[patchable_function_entry]`
1344    PatchableFunctionEntry {
1345        prefix: u8,
1346        entry: u8,
1347    },
1348
1349    /// Represents `#[path]`
1350    Path(Symbol, Span),
1351
1352    /// Represents `#[pattern_complexity_limit]`
1353    PatternComplexityLimit {
1354        attr_span: Span,
1355        limit_span: Span,
1356        limit: Limit,
1357    },
1358
1359    /// Represents `#[pin_v2]`
1360    PinV2(Span),
1361
1362    /// Represents `#[pointee]`
1363    Pointee(Span),
1364
1365    /// Represents `#[prelude_import]`
1366    PreludeImport,
1367
1368    /// Represents `#[proc_macro]`
1369    ProcMacro(Span),
1370
1371    /// Represents `#[proc_macro_attribute]`
1372    ProcMacroAttribute(Span),
1373
1374    /// Represents `#[proc_macro_derive]`
1375    ProcMacroDerive {
1376        trait_name: Symbol,
1377        helper_attrs: ThinVec<Symbol>,
1378        span: Span,
1379    },
1380
1381    /// Represents `#[profiler_runtime]`
1382    ProfilerRuntime,
1383
1384    /// Represents [`#[recursion_limit]`](https://doc.rust-lang.org/reference/attributes/limits.html#the-recursion_limit-attribute)
1385    RecursionLimit {
1386        attr_span: Span,
1387        limit_span: Span,
1388        limit: Limit,
1389    },
1390
1391    /// Represents `#[reexport_test_harness_main]`
1392    ReexportTestHarnessMain(Symbol),
1393
1394    /// Represents `#[register_tool]`
1395    RegisterTool(ThinVec<Ident>, Span),
1396
1397    /// Represents [`#[repr]`](https://doc.rust-lang.org/stable/reference/type-layout.html#representations).
1398    Repr {
1399        reprs: ThinVec<(ReprAttr, Span)>,
1400        first_span: Span,
1401    },
1402
1403    /// Represents `#[rustc_abi(..)]`
1404    RustcAbi {
1405        attr_span: Span,
1406        kind: RustcAbiAttrKind,
1407    },
1408
1409    /// Represents `#[align(N)]`.
1410    // FIXME(#82232, #143834): temporarily renamed to mitigate `#[align]` nameres ambiguity
1411    RustcAlign {
1412        align: Align,
1413        span: Span,
1414    },
1415
1416    /// Represents `#[rustc_allocator]`
1417    RustcAllocator,
1418
1419    /// Represents `#[rustc_allocator_zeroed]`
1420    RustcAllocatorZeroed,
1421
1422    /// Represents `#[rustc_allocator_zeroed_variant]`
1423    RustcAllocatorZeroedVariant {
1424        name: Symbol,
1425    },
1426
1427    /// Represents `#[rustc_allow_const_fn_unstable]`.
1428    RustcAllowConstFnUnstable(ThinVec<Symbol>, Span),
1429
1430    /// Represents `#[rustc_allow_incoherent_impl]`.
1431    RustcAllowIncoherentImpl(Span),
1432
1433    /// Represents `#[rustc_as_ptr]` (used by the `dangling_pointers_from_temporaries` lint).
1434    RustcAsPtr(Span),
1435
1436    /// Represents `#[rustc_autodiff]`.
1437    RustcAutodiff(Option<Box<RustcAutodiff>>),
1438
1439    /// Represents `#[rustc_default_body_unstable]`.
1440    RustcBodyStability {
1441        stability: DefaultBodyStability,
1442        /// Span of the `#[rustc_default_body_unstable(...)]` attribute
1443        span: Span,
1444    },
1445    /// Represents `#[rustc_builtin_macro]`.
1446    RustcBuiltinMacro {
1447        builtin_name: Option<Symbol>,
1448        helper_attrs: ThinVec<Symbol>,
1449        span: Span,
1450    },
1451    /// Represents `#[rustc_capture_analysis]`
1452    RustcCaptureAnalysis,
1453
1454    /// Represents `#[rustc_expected_cgu_reuse]`, `#[rustc_partition_codegened]` and `#[rustc_partition_reused]`.
1455    RustcCguTestAttr(ThinVec<(Span, CguFields)>),
1456
1457    /// Represents `#[rustc_clean]`
1458    RustcClean(ThinVec<RustcCleanAttribute>),
1459
1460    /// Represents `#[rustc_coherence_is_core]`
1461    RustcCoherenceIsCore(Span),
1462
1463    /// Represents `#[rustc_coinductive]`.
1464    RustcCoinductive(Span),
1465
1466    /// Represents `#[rustc_confusables]`.
1467    RustcConfusables {
1468        symbols: ThinVec<Symbol>,
1469        // FIXME(jdonszelmann): remove when target validation code is moved
1470        first_span: Span,
1471    },
1472    /// Represents `#[rustc_const_stable]` and `#[rustc_const_unstable]`.
1473    RustcConstStability {
1474        stability: PartialConstStability,
1475        /// Span of the `#[rustc_const_stable(...)]` or `#[rustc_const_unstable(...)]` attribute
1476        span: Span,
1477    },
1478
1479    /// Represents `#[rustc_const_stable_indirect]`.
1480    RustcConstStableIndirect,
1481
1482    /// Represents `#[rustc_conversion_suggestion]`
1483    RustcConversionSuggestion,
1484
1485    /// Represents `#[rustc_deallocator]`
1486    RustcDeallocator,
1487
1488    /// Represents `#[rustc_def_path]`
1489    RustcDefPath(Span),
1490
1491    /// Represents `#[rustc_delayed_bug_from_inside_query]`
1492    RustcDelayedBugFromInsideQuery,
1493
1494    /// Represents `#[rustc_deny_explicit_impl]`.
1495    RustcDenyExplicitImpl(Span),
1496
1497    /// Represents `#[rustc_deprecated_safe_2024]`
1498    RustcDeprecatedSafe2024 {
1499        suggestion: Symbol,
1500    },
1501    /// Represents `#[rustc_diagnostic_item]`
1502    RustcDiagnosticItem(Symbol),
1503
1504    /// Represents `#[rustc_do_not_const_check]`
1505    RustcDoNotConstCheck,
1506
1507    /// Represents `#[rustc_doc_primitive = ...]`
1508    RustcDocPrimitive(Span, Symbol),
1509
1510    /// Represents `#[rustc_dummy]`.
1511    RustcDummy,
1512
1513    /// Represents `#[rustc_dump_def_parents]`
1514    RustcDumpDefParents,
1515
1516    /// Represents `#[rustc_dump_inferred_outlives]`
1517    RustcDumpInferredOutlives,
1518
1519    /// Represents `#[rustc_dump_item_bounds]`
1520    RustcDumpItemBounds,
1521
1522    /// Represents `#[rustc_dump_object_lifetime_defaults]`.
1523    RustcDumpObjectLifetimeDefaults,
1524
1525    /// Represents `#[rustc_dump_predicates]`
1526    RustcDumpPredicates,
1527
1528    /// Represents `#[rustc_dump_user_args]`
1529    RustcDumpUserArgs,
1530
1531    /// Represents `#[rustc_dump_variances]`
1532    RustcDumpVariances,
1533
1534    /// Represents `#[rustc_dump_variances_of_opaques]`
1535    RustcDumpVariancesOfOpaques,
1536
1537    /// Represents `#[rustc_dump_vtable]`
1538    RustcDumpVtable(Span),
1539
1540    /// Represents `#[rustc_dyn_incompatible_trait]`.
1541    RustcDynIncompatibleTrait(Span),
1542
1543    /// Represents `#[rustc_effective_visibility]`.
1544    RustcEffectiveVisibility,
1545
1546    /// Implementation detail of `#[eii]`
1547    RustcEiiForeignItem,
1548
1549    /// Represents `#[rustc_evaluate_where_clauses]`
1550    RustcEvaluateWhereClauses,
1551
1552    RustcHasIncoherentInherentImpls,
1553
1554    /// Represents `#[rustc_hidden_type_of_opaques]`
1555    RustcHiddenTypeOfOpaques,
1556
1557    /// Represents `#[rustc_if_this_changed]`
1558    RustcIfThisChanged(Span, Option<Symbol>),
1559
1560    /// Represents `#[rustc_inherit_overflow_checks]`
1561    RustcInheritOverflowChecks,
1562
1563    /// Represents `#[rustc_insignificant_dtor]`
1564    RustcInsignificantDtor,
1565
1566    /// Represents `#[rustc_intrinsic]`
1567    RustcIntrinsic,
1568
1569    /// Represents `#[rustc_intrinsic_const_stable_indirect]`
1570    RustcIntrinsicConstStableIndirect,
1571
1572    /// Represents `#[rustc_layout]`
1573    RustcLayout(ThinVec<RustcLayoutType>),
1574
1575    /// Represents `#[rustc_layout_scalar_valid_range_end]`.
1576    RustcLayoutScalarValidRangeEnd(Box<u128>, Span),
1577
1578    /// Represents `#[rustc_layout_scalar_valid_range_start]`.
1579    RustcLayoutScalarValidRangeStart(Box<u128>, Span),
1580
1581    /// Represents `#[rustc_legacy_const_generics]`
1582    RustcLegacyConstGenerics {
1583        fn_indexes: ThinVec<(usize, Span)>,
1584        attr_span: Span,
1585    },
1586
1587    /// Represents `#[rustc_lint_opt_deny_field_access]`
1588    RustcLintOptDenyFieldAccess {
1589        lint_message: Symbol,
1590    },
1591
1592    /// Represents `#[rustc_lint_opt_ty]`
1593    RustcLintOptTy,
1594
1595    /// Represents `#[rustc_lint_query_instability]`
1596    RustcLintQueryInstability,
1597
1598    /// Represents `#[rustc_lint_untracked_query_information]`
1599    RustcLintUntrackedQueryInformation,
1600
1601    /// Represents `#[rustc_macro_transparency]`.
1602    RustcMacroTransparency(Transparency),
1603
1604    /// Represents `#[rustc_main]`.
1605    RustcMain,
1606
1607    /// Represents `#[rustc_mir]`.
1608    RustcMir(ThinVec<RustcMirKind>),
1609
1610    /// Represents `#[rustc_must_implement_one_of]`
1611    RustcMustImplementOneOf {
1612        attr_span: Span,
1613        fn_names: ThinVec<Ident>,
1614    },
1615
1616    /// Represents `#[rustc_never_returns_null_ptr]`
1617    RustcNeverReturnsNullPtr,
1618
1619    /// Represents `#[rustc_never_type_options]`.
1620    RustcNeverTypeOptions {
1621        fallback: Option<DivergingFallbackBehavior>,
1622        diverging_block_default: Option<DivergingBlockBehavior>,
1623    },
1624
1625    /// Represents `#[rustc_no_implicit_autorefs]`
1626    RustcNoImplicitAutorefs,
1627
1628    /// Represents `#[rustc_no_implicit_bounds]`
1629    RustcNoImplicitBounds,
1630
1631    /// Represents `#[rustc_no_mir_inline]`
1632    RustcNoMirInline,
1633
1634    /// Represents `#[rustc_non_const_trait_method]`.
1635    RustcNonConstTraitMethod,
1636
1637    /// Represents `#[rustc_nonnull_optimization_guaranteed]`.
1638    RustcNonnullOptimizationGuaranteed,
1639
1640    /// Represents `#[rustc_nounwind]`
1641    RustcNounwind,
1642
1643    /// Represents `#[rustc_objc_class]`
1644    RustcObjcClass {
1645        classname: Symbol,
1646        span: Span,
1647    },
1648
1649    /// Represents `#[rustc_objc_selector]`
1650    RustcObjcSelector {
1651        methname: Symbol,
1652        span: Span,
1653    },
1654
1655    /// Represents `#[rustc_offload_kernel]`
1656    RustcOffloadKernel,
1657
1658    /// Represents `#[rustc_paren_sugar]`.
1659    RustcParenSugar(Span),
1660
1661    /// Represents `#[rustc_pass_by_value]` (used by the `rustc_pass_by_value` lint).
1662    RustcPassByValue(Span),
1663
1664    /// Represents `#[rustc_pass_indirectly_in_non_rustic_abis]`
1665    RustcPassIndirectlyInNonRusticAbis(Span),
1666
1667    /// Represents `#[rustc_preserve_ub_checks]`
1668    RustcPreserveUbChecks,
1669
1670    /// Represents `#[rustc_proc_macro_decls]`
1671    RustcProcMacroDecls,
1672
1673    /// Represents `#[rustc_pub_transparent]` (used by the `repr_transparent_external_private_fields` lint).
1674    RustcPubTransparent(Span),
1675
1676    /// Represents `#[rustc_reallocator]`
1677    RustcReallocator,
1678
1679    /// Represents `#[rustc_regions]`
1680    RustcRegions,
1681
1682    /// Represents `#[rustc_reservation_impl]`
1683    RustcReservationImpl(Span, Symbol),
1684
1685    /// Represents `#[rustc_scalable_vector(N)]`
1686    RustcScalableVector {
1687        /// The base multiple of lanes that are in a scalable vector, if provided. `element_count`
1688        /// is not provided for representing tuple types.
1689        element_count: Option<u16>,
1690        span: Span,
1691    },
1692
1693    /// Represents `#[rustc_should_not_be_called_on_const_items]`
1694    RustcShouldNotBeCalledOnConstItems(Span),
1695
1696    /// Represents `#[rustc_simd_monomorphize_lane_limit = "N"]`.
1697    RustcSimdMonomorphizeLaneLimit(Limit),
1698
1699    /// Represents `#[rustc_skip_during_method_dispatch]`.
1700    RustcSkipDuringMethodDispatch {
1701        array: bool,
1702        boxed_slice: bool,
1703        span: Span,
1704    },
1705
1706    /// Represents `#[rustc_specialization_trait]`.
1707    RustcSpecializationTrait(Span),
1708
1709    /// Represents `#[rustc_std_internal_symbol]`.
1710    RustcStdInternalSymbol(Span),
1711
1712    /// Represents `#[rustc_strict_coherence]`.
1713    RustcStrictCoherence(Span),
1714
1715    /// Represents `#[rustc_symbol_name]`
1716    RustcSymbolName(Span),
1717
1718    /// Represents `#[rustc_test_marker]`
1719    RustcTestMarker(Symbol),
1720
1721    /// Represents `#[rustc_then_this_would_need]`
1722    RustcThenThisWouldNeed(Span, ThinVec<Ident>),
1723
1724    /// Represents `#[rustc_trivial_field_reads]`
1725    RustcTrivialFieldReads,
1726
1727    /// Represents `#[rustc_unsafe_specialization_marker]`.
1728    RustcUnsafeSpecializationMarker(Span),
1729
1730    /// Represents `#[sanitize]`
1731    ///
1732    /// the on set and off set are distjoint since there's a third option: unset.
1733    /// a node may not set the sanitizer setting in which case it inherits from parents.
1734    /// rtsan is unset if None
1735    Sanitize {
1736        on_set: SanitizerSet,
1737        off_set: SanitizerSet,
1738        rtsan: Option<RtsanSetting>,
1739        span: Span,
1740    },
1741
1742    /// Represents `#[should_panic]`
1743    ShouldPanic {
1744        reason: Option<Symbol>,
1745        span: Span,
1746    },
1747
1748    /// Represents `#[stable]`, `#[unstable]` and `#[rustc_allowed_through_unstable_modules]`.
1749    Stability {
1750        stability: Stability,
1751        /// Span of the attribute.
1752        span: Span,
1753    },
1754
1755    /// Represents `#[target_feature(enable = "...")]` and
1756    /// `#[unsafe(force_target_feature(enable = "...")]`.
1757    TargetFeature {
1758        features: ThinVec<(Symbol, Span)>,
1759        attr_span: Span,
1760        was_forced: bool,
1761    },
1762
1763    /// Represents `#![test_runner(path)]`
1764    TestRunner(Path),
1765
1766    /// Represents `#[thread_local]`
1767    ThreadLocal,
1768
1769    /// Represents `#[track_caller]`
1770    TrackCaller(Span),
1771
1772    /// Represents `#[type_length_limit]`
1773    TypeLengthLimit {
1774        attr_span: Span,
1775        limit_span: Span,
1776        limit: Limit,
1777    },
1778
1779    /// Represents `#[unstable_feature_bound]`.
1780    UnstableFeatureBound(ThinVec<(Symbol, Span)>),
1781
1782    /// Represents `#[used]`
1783    Used {
1784        used_by: UsedBy,
1785        span: Span,
1786    },
1787
1788    /// Represents `#[windows_subsystem]`.
1789    WindowsSubsystem(WindowsSubsystemKind, Span),
1790    // tidy-alphabetical-end
1791}