rustc_hir/attrs/
data_structures.rs

1use std::borrow::Cow;
2use std::path::PathBuf;
3
4pub use ReprAttr::*;
5use rustc_abi::Align;
6pub use rustc_ast::attr::data_structures::*;
7use rustc_ast::token::DocFragmentKind;
8use rustc_ast::{AttrStyle, ast};
9use rustc_data_structures::fx::FxIndexMap;
10use rustc_error_messages::{DiagArgValue, IntoDiagArg};
11use rustc_macros::{Decodable, Encodable, HashStable_Generic, PrintAttribute};
12use rustc_span::def_id::DefId;
13use rustc_span::hygiene::Transparency;
14use rustc_span::{ErrorGuaranteed, Ident, Span, Symbol};
15pub use rustc_target::spec::SanitizerSet;
16use thin_vec::ThinVec;
17
18use crate::attrs::pretty_printing::PrintAttribute;
19use crate::limit::Limit;
20use crate::{DefaultBodyStability, PartialConstStability, RustcVersion, Stability};
21
22#[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: crate::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)]
23pub enum EiiImplResolution {
24    /// Usually, finding the extern item that an EII implementation implements means finding
25    /// the defid of the associated attribute macro, and looking at *its* attributes to find
26    /// what foreign item its associated with.
27    Macro(DefId),
28    /// Sometimes though, we already know statically and can skip some name resolution.
29    /// Stored together with the eii's name for diagnostics.
30    Known(EiiDecl),
31    /// For when resolution failed, but we want to continue compilation
32    Error(ErrorGuaranteed),
33}
34
35#[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: crate::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)]
36pub struct EiiImpl {
37    pub resolution: EiiImplResolution,
38    pub impl_marked_unsafe: bool,
39    pub span: Span,
40    pub inner_span: Span,
41    pub is_default: bool,
42}
43
44#[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: crate::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)]
45pub struct EiiDecl {
46    pub foreign_item: DefId,
47    /// whether or not it is unsafe to implement this EII
48    pub impl_unsafe: bool,
49    pub name: Ident,
50}
51
52#[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: crate::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)]
53pub enum InlineAttr {
54    None,
55    Hint,
56    Always,
57    Never,
58    /// `#[rustc_force_inline]` forces inlining to happen in the MIR inliner - it reports an error
59    /// if the inlining cannot happen. It is limited to only free functions so that the calls
60    /// can always be resolved.
61    Force {
62        attr_span: Span,
63        reason: Option<Symbol>,
64    },
65}
66
67impl InlineAttr {
68    pub fn always(&self) -> bool {
69        match self {
70            InlineAttr::Always | InlineAttr::Force { .. } => true,
71            InlineAttr::None | InlineAttr::Hint | InlineAttr::Never => false,
72        }
73    }
74}
75
76#[derive(
77    #[automatically_derived]
impl ::core::marker::Copy for InstructionSetAttr { }Copy,
78    #[automatically_derived]
impl ::core::clone::Clone for InstructionSetAttr {
    #[inline]
    fn clone(&self) -> InstructionSetAttr { *self }
}Clone,
79    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,
80    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,
81    #[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,
82    #[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,
83    #[automatically_derived]
impl ::core::cmp::Eq for InstructionSetAttr {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_receiver_is_total_eq(&self) -> () {}
}Eq,
84    const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for InstructionSetAttr where __CTX: crate::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,
85    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
86)]
87pub enum InstructionSetAttr {
88    ArmA32,
89    ArmT32,
90}
91
92#[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_receiver_is_total_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)]
93#[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: crate::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)]
94pub enum OptimizeAttr {
95    /// No `#[optimize(..)]` attribute
96    #[default]
97    Default,
98    /// `#[optimize(none)]`
99    DoNotOptimize,
100    /// `#[optimize(speed)]`
101    Speed,
102    /// `#[optimize(size)]`
103    Size,
104}
105
106impl OptimizeAttr {
107    pub fn do_not_optimize(&self) -> bool {
108        #[allow(non_exhaustive_omitted_patterns)] match self {
    Self::DoNotOptimize => true,
    _ => false,
}matches!(self, Self::DoNotOptimize)
109    }
110}
111
112#[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: crate::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)]
113pub enum ReprAttr {
114    ReprInt(IntType),
115    ReprRust,
116    ReprC,
117    ReprPacked(Align),
118    ReprSimd,
119    ReprTransparent,
120    ReprAlign(Align),
121}
122
123pub enum TransparencyError {
124    UnknownTransparency(Symbol, Span),
125    MultipleTransparencyAttrs(Span, Span),
126}
127
128#[derive(#[automatically_derived]
impl ::core::cmp::Eq for IntType {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_receiver_is_total_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)]
129#[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: crate::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)]
130pub enum IntType {
131    SignedInt(ast::IntTy),
132    UnsignedInt(ast::UintTy),
133}
134
135#[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: crate::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)]
136pub struct Deprecation {
137    pub since: DeprecatedSince,
138    /// The note to issue a reason.
139    pub note: Option<Ident>,
140    /// A text snippet used to completely replace any use of the deprecated item in an expression.
141    ///
142    /// This is currently unstable.
143    pub suggestion: Option<Symbol>,
144}
145
146/// Release in which an API is deprecated.
147#[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: crate::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)]
148pub enum DeprecatedSince {
149    RustcVersion(RustcVersion),
150    /// Deprecated in the future ("to be determined").
151    Future,
152    /// `feature(staged_api)` is off. Deprecation versions outside the standard
153    /// library are allowed to be arbitrary strings, for better or worse.
154    NonStandard(Symbol),
155    /// Deprecation version is unspecified but optional.
156    Unspecified,
157    /// Failed to parse a deprecation version, or the deprecation version is
158    /// unspecified and required. An error has already been emitted.
159    Err,
160}
161
162/// Successfully-parsed value of a `#[coverage(..)]` attribute.
163#[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_receiver_is_total_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)]
164#[derive(const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for CoverageAttrKind where __CTX: crate::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)]
165pub enum CoverageAttrKind {
166    On,
167    Off,
168}
169
170impl Deprecation {
171    /// Whether an item marked with #[deprecated(since = "X")] is currently
172    /// deprecated (i.e., whether X is not greater than the current rustc
173    /// version).
174    pub fn is_in_effect(&self) -> bool {
175        match self.since {
176            DeprecatedSince::RustcVersion(since) => since <= RustcVersion::CURRENT,
177            DeprecatedSince::Future => false,
178            // The `since` field doesn't have semantic purpose without `#![staged_api]`.
179            DeprecatedSince::NonStandard(_) => true,
180            // Assume deprecation is in effect if "since" field is absent or invalid.
181            DeprecatedSince::Unspecified | DeprecatedSince::Err => true,
182        }
183    }
184
185    pub fn is_since_rustc_version(&self) -> bool {
186        #[allow(non_exhaustive_omitted_patterns)] match self.since {
    DeprecatedSince::RustcVersion(_) => true,
    _ => false,
}matches!(self.since, DeprecatedSince::RustcVersion(_))
187    }
188}
189
190/// There are three valid forms of the attribute:
191/// `#[used]`, which is equivalent to `#[used(linker)]` on targets that support it, but `#[used(compiler)]` if not.
192/// `#[used(compiler)]`
193/// `#[used(linker)]`
194#[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_receiver_is_total_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)]
195#[derive(const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for UsedBy where __CTX: crate::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)]
196pub enum UsedBy {
197    Default,
198    Compiler,
199    Linker,
200}
201
202#[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_receiver_is_total_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)]
203#[derive(const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for MacroUseArgs where __CTX: crate::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)]
204pub enum MacroUseArgs {
205    UseAll,
206    UseSpecific(ThinVec<Ident>),
207}
208
209impl Default for MacroUseArgs {
210    fn default() -> Self {
211        Self::UseSpecific(ThinVec::new())
212    }
213}
214
215#[derive(#[automatically_derived]
impl<ModId: ::core::fmt::Debug> ::core::fmt::Debug for StrippedCfgItem<ModId>
    {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field3_finish(f,
            "StrippedCfgItem", "parent_module", &self.parent_module, "ident",
            &self.ident, "cfg", &&self.cfg)
    }
}Debug, #[automatically_derived]
impl<ModId: ::core::clone::Clone> ::core::clone::Clone for
    StrippedCfgItem<ModId> {
    #[inline]
    fn clone(&self) -> StrippedCfgItem<ModId> {
        StrippedCfgItem {
            parent_module: ::core::clone::Clone::clone(&self.parent_module),
            ident: ::core::clone::Clone::clone(&self.ident),
            cfg: ::core::clone::Clone::clone(&self.cfg),
        }
    }
}Clone, const _: () =
    {
        impl<ModId, __E: ::rustc_span::SpanEncoder>
            ::rustc_serialize::Encodable<__E> for StrippedCfgItem<ModId> where
            ModId: ::rustc_serialize::Encodable<__E> {
            fn encode(&self, __encoder: &mut __E) {
                match *self {
                    StrippedCfgItem {
                        parent_module: 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<ModId, __D: ::rustc_span::SpanDecoder>
            ::rustc_serialize::Decodable<__D> for StrippedCfgItem<ModId> where
            ModId: ::rustc_serialize::Decodable<__D> {
            fn decode(__decoder: &mut __D) -> Self {
                StrippedCfgItem {
                    parent_module: ::rustc_serialize::Decodable::decode(__decoder),
                    ident: ::rustc_serialize::Decodable::decode(__decoder),
                    cfg: ::rustc_serialize::Decodable::decode(__decoder),
                }
            }
        }
    };Decodable, const _: () =
    {
        impl<ModId, __CTX>
            ::rustc_data_structures::stable_hasher::HashStable<__CTX> for
            StrippedCfgItem<ModId> where __CTX: crate::HashStableContext,
            ModId: ::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_module: 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)]
216pub struct StrippedCfgItem<ModId = DefId> {
217    pub parent_module: ModId,
218    pub ident: Ident,
219    pub cfg: (CfgEntry, Span),
220}
221
222impl<ModId> StrippedCfgItem<ModId> {
223    pub fn map_mod_id<New>(self, f: impl FnOnce(ModId) -> New) -> StrippedCfgItem<New> {
224        StrippedCfgItem { parent_module: f(self.parent_module), ident: self.ident, cfg: self.cfg }
225    }
226}
227
228/// Possible values for the `#[linkage]` attribute, allowing to specify the
229/// linkage type for a `MonoItem`.
230///
231/// See <https://llvm.org/docs/LangRef.html#linkage-types> for more details about these variants.
232#[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_receiver_is_total_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)]
233#[derive(const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for Linkage where __CTX: crate::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)]
234pub enum Linkage {
235    AvailableExternally,
236    Common,
237    ExternalWeak,
238    External,
239    Internal,
240    LinkOnceAny,
241    LinkOnceODR,
242    WeakAny,
243    WeakODR,
244}
245
246#[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)]
247#[derive(const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for MirDialect where __CTX: crate::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)]
248pub enum MirDialect {
249    Analysis,
250    Built,
251    Runtime,
252}
253
254impl IntoDiagArg for MirDialect {
255    fn into_diag_arg(self, _path: &mut Option<PathBuf>) -> DiagArgValue {
256        let arg = match self {
257            MirDialect::Analysis => "analysis",
258            MirDialect::Built => "built",
259            MirDialect::Runtime => "runtime",
260        };
261        DiagArgValue::Str(Cow::Borrowed(arg))
262    }
263}
264
265#[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)]
266#[derive(const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for MirPhase where __CTX: crate::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)]
267pub enum MirPhase {
268    Initial,
269    PostCleanup,
270    Optimized,
271}
272
273impl IntoDiagArg for MirPhase {
274    fn into_diag_arg(self, _path: &mut Option<PathBuf>) -> DiagArgValue {
275        let arg = match self {
276            MirPhase::Initial => "initial",
277            MirPhase::PostCleanup => "post-cleanup",
278            MirPhase::Optimized => "optimized",
279        };
280        DiagArgValue::Str(Cow::Borrowed(arg))
281    }
282}
283
284/// Different ways that the PE Format can decorate a symbol name.
285/// From <https://docs.microsoft.com/en-us/windows/win32/debug/pe-format#import-name-type>
286#[derive(
287    #[automatically_derived]
impl ::core::marker::Copy for PeImportNameType { }Copy,
288    #[automatically_derived]
impl ::core::clone::Clone for PeImportNameType {
    #[inline]
    fn clone(&self) -> PeImportNameType {
        let _: ::core::clone::AssertParamIsClone<u16>;
        *self
    }
}Clone,
289    #[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,
290    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,
291    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,
292    const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for PeImportNameType where __CTX: crate::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,
293    #[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,
294    #[automatically_derived]
impl ::core::cmp::Eq for PeImportNameType {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_receiver_is_total_eq(&self) -> () {
        let _: ::core::cmp::AssertParamIsEq<u16>;
    }
}Eq,
295    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
296)]
297pub enum PeImportNameType {
298    /// IMPORT_ORDINAL
299    /// Uses the ordinal (i.e., a number) rather than the name.
300    Ordinal(u16),
301    /// Same as IMPORT_NAME
302    /// Name is decorated with all prefixes and suffixes.
303    Decorated,
304    /// Same as IMPORT_NAME_NOPREFIX
305    /// Prefix (e.g., the leading `_` or `@`) is skipped, but suffix is kept.
306    NoPrefix,
307    /// Same as IMPORT_NAME_UNDECORATE
308    /// Prefix (e.g., the leading `_` or `@`) and suffix (the first `@` and all
309    /// trailing characters) are skipped.
310    Undecorated,
311}
312
313#[derive(
314    #[automatically_derived]
impl ::core::marker::Copy for NativeLibKind { }Copy,
315    #[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>>;
        *self
    }
}Clone,
316    #[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
                } =>
                ::core::fmt::Formatter::debug_struct_field2_finish(f,
                    "Static", "bundle", __self_0, "whole_archive", &__self_1),
            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,
317    #[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 },
                    NativeLibKind::Static {
                    bundle: __arg1_0, whole_archive: __arg1_1 }) =>
                    __self_0 == __arg1_0 && __self_1 == __arg1_1,
                (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,
318    #[automatically_derived]
impl ::core::cmp::Eq for NativeLibKind {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_receiver_is_total_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>>;
    }
}Eq,
319    #[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
                }, NativeLibKind::Static {
                bundle: __arg1_0, whole_archive: __arg1_1 }) =>
                match ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0)
                    {
                    ::core::option::Option::Some(::core::cmp::Ordering::Equal)
                        => ::core::cmp::PartialOrd::partial_cmp(__self_1, __arg1_1),
                    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,
320    #[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 },
                        NativeLibKind::Static {
                        bundle: __arg1_0, whole_archive: __arg1_1 }) =>
                        match ::core::cmp::Ord::cmp(__self_0, __arg1_0) {
                            ::core::cmp::Ordering::Equal =>
                                ::core::cmp::Ord::cmp(__self_1, __arg1_1),
                            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,
321    #[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
                } => {
                ::core::hash::Hash::hash(__self_0, state);
                ::core::hash::Hash::hash(__self_1, 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,
322    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 } =>
                            {
                            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 } =>
                        {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __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,
323    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),
                        }
                    }
                    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,
324    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 } => {
                        __p.word("Static");
                        if true && !bundle.should_render() &&
                                !whole_archive.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);
                        __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
325)]
326#[derive(const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for NativeLibKind where __CTX: crate::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 } =>
                        {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.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)]
327pub enum NativeLibKind {
328    /// Static library (e.g. `libfoo.a` on Linux or `foo.lib` on Windows/MSVC)
329    Static {
330        /// Whether to bundle objects from static library into produced rlib
331        bundle: Option<bool>,
332        /// Whether to link static library without throwing any object files away
333        whole_archive: Option<bool>,
334    },
335    /// Dynamic library (e.g. `libfoo.so` on Linux)
336    /// or an import library corresponding to a dynamic library (e.g. `foo.lib` on Windows/MSVC).
337    Dylib {
338        /// Whether the dynamic library will be linked only if it satisfies some undefined symbols
339        as_needed: Option<bool>,
340    },
341    /// Dynamic library (e.g. `foo.dll` on Windows) without a corresponding import library.
342    /// On Linux, it refers to a generated shared library stub.
343    RawDylib {
344        /// Whether the dynamic library will be linked only if it satisfies some undefined symbols
345        as_needed: Option<bool>,
346    },
347    /// A macOS-specific kind of dynamic libraries.
348    Framework {
349        /// Whether the framework will be linked only if it satisfies some undefined symbols
350        as_needed: Option<bool>,
351    },
352    /// Argument which is passed to linker, relative order with libraries and other arguments
353    /// is preserved
354    LinkArg,
355
356    /// Module imported from WebAssembly
357    WasmImportModule,
358
359    /// The library kind wasn't specified, `Dylib` is currently used as a default.
360    Unspecified,
361}
362
363impl NativeLibKind {
364    pub fn has_modifiers(&self) -> bool {
365        match self {
366            NativeLibKind::Static { bundle, whole_archive } => {
367                bundle.is_some() || whole_archive.is_some()
368            }
369            NativeLibKind::Dylib { as_needed }
370            | NativeLibKind::Framework { as_needed }
371            | NativeLibKind::RawDylib { as_needed } => as_needed.is_some(),
372            NativeLibKind::Unspecified
373            | NativeLibKind::LinkArg
374            | NativeLibKind::WasmImportModule => false,
375        }
376    }
377
378    pub fn is_statically_included(&self) -> bool {
379        #[allow(non_exhaustive_omitted_patterns)] match self {
    NativeLibKind::Static { .. } => true,
    _ => false,
}matches!(self, NativeLibKind::Static { .. })
380    }
381
382    pub fn is_dllimport(&self) -> bool {
383        #[allow(non_exhaustive_omitted_patterns)] match self {
    NativeLibKind::Dylib { .. } | NativeLibKind::RawDylib { .. } |
        NativeLibKind::Unspecified => true,
    _ => false,
}matches!(
384            self,
385            NativeLibKind::Dylib { .. }
386                | NativeLibKind::RawDylib { .. }
387                | NativeLibKind::Unspecified
388        )
389    }
390}
391
392#[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: crate::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)]
393pub struct LinkEntry {
394    pub span: Span,
395    pub kind: NativeLibKind,
396    pub name: Symbol,
397    pub cfg: Option<CfgEntry>,
398    pub verbatim: Option<bool>,
399    pub import_name_type: Option<(PeImportNameType, Span)>,
400}
401
402#[derive(const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for DebuggerVisualizerType where __CTX: crate::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)]
403#[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_receiver_is_total_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)]
404pub enum DebuggerVisualizerType {
405    Natvis,
406    GdbPrettyPrinter,
407}
408
409#[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: crate::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)]
410pub struct DebugVisualizer {
411    pub span: Span,
412    pub visualizer_type: DebuggerVisualizerType,
413    pub path: Symbol,
414}
415
416#[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_receiver_is_total_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)]
417#[derive(const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for RtsanSetting where __CTX: crate::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)]
418#[derive_const(#[automatically_derived]
impl const ::core::default::Default for RtsanSetting {
    #[inline]
    fn default() -> RtsanSetting { Self::Caller }
}Default)]
419pub enum RtsanSetting {
420    Nonblocking,
421    Blocking,
422    #[default]
423    Caller,
424}
425
426#[derive(#[automatically_derived]
impl ::core::cmp::Eq for WindowsSubsystemKind {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_receiver_is_total_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)]
427#[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: crate::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)]
428pub enum WindowsSubsystemKind {
429    Console,
430    Windows,
431}
432
433impl WindowsSubsystemKind {
434    pub fn as_str(&self) -> &'static str {
435        match self {
436            WindowsSubsystemKind::Console => "console",
437            WindowsSubsystemKind::Windows => "windows",
438        }
439    }
440}
441
442#[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)]
443#[derive(const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for DocInline where __CTX: crate::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)]
444pub enum DocInline {
445    Inline,
446    NoInline,
447}
448
449#[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)]
450#[derive(const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for HideOrShow where __CTX: crate::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)]
451pub enum HideOrShow {
452    Hide,
453    Show,
454}
455
456#[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: crate::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)]
457pub struct CfgInfo {
458    pub name: Symbol,
459    pub name_span: Span,
460    pub value: Option<(Symbol, Span)>,
461}
462
463impl CfgInfo {
464    pub fn span_for_name_and_value(&self) -> Span {
465        if let Some((_, value_span)) = self.value {
466            self.name_span.with_hi(value_span.hi())
467        } else {
468            self.name_span
469        }
470    }
471}
472
473#[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: crate::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)]
474pub struct CfgHideShow {
475    pub kind: HideOrShow,
476    pub values: ThinVec<CfgInfo>,
477}
478
479#[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: crate::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)]
480pub struct DocAttribute {
481    pub aliases: FxIndexMap<Symbol, Span>,
482    pub hidden: Option<Span>,
483    // Because we need to emit the error if there is more than one `inline` attribute on an item
484    // at the same time as the other doc attributes, we store a list instead of using `Option`.
485    pub inline: ThinVec<(DocInline, Span)>,
486
487    // unstable
488    pub cfg: ThinVec<CfgEntry>,
489    pub auto_cfg: ThinVec<(CfgHideShow, Span)>,
490    /// This is for `#[doc(auto_cfg = false|true)]`/`#[doc(auto_cfg)]`.
491    pub auto_cfg_change: ThinVec<(bool, Span)>,
492
493    // builtin
494    pub fake_variadic: Option<Span>,
495    pub keyword: Option<(Symbol, Span)>,
496    pub attribute: Option<(Symbol, Span)>,
497    pub masked: Option<Span>,
498    pub notable_trait: Option<Span>,
499    pub search_unbox: Option<Span>,
500
501    // valid on crate
502    pub html_favicon_url: Option<(Symbol, Span)>,
503    pub html_logo_url: Option<(Symbol, Span)>,
504    pub html_playground_url: Option<(Symbol, Span)>,
505    pub html_root_url: Option<(Symbol, Span)>,
506    pub html_no_source: Option<Span>,
507    pub issue_tracker_base_url: Option<(Symbol, Span)>,
508    pub rust_logo: Option<Span>,
509
510    // #[doc(test(...))]
511    pub test_attrs: ThinVec<Span>,
512    pub no_crate_inject: Option<Span>,
513}
514
515impl<E: rustc_span::SpanEncoder> rustc_serialize::Encodable<E> for DocAttribute {
516    fn encode(&self, encoder: &mut E) {
517        let DocAttribute {
518            aliases,
519            hidden,
520            inline,
521            cfg,
522            auto_cfg,
523            auto_cfg_change,
524            fake_variadic,
525            keyword,
526            attribute,
527            masked,
528            notable_trait,
529            search_unbox,
530            html_favicon_url,
531            html_logo_url,
532            html_playground_url,
533            html_root_url,
534            html_no_source,
535            issue_tracker_base_url,
536            rust_logo,
537            test_attrs,
538            no_crate_inject,
539        } = self;
540        rustc_serialize::Encodable::<E>::encode(aliases, encoder);
541        rustc_serialize::Encodable::<E>::encode(hidden, encoder);
542
543        // FIXME: The `doc(inline)` attribute is never encoded, but is it actually the right thing
544        // to do? I suspect the condition was broken, should maybe instead not encode anything if we
545        // have `doc(no_inline)`.
546        let inline: ThinVec<_> =
547            inline.iter().filter(|(i, _)| *i != DocInline::Inline).cloned().collect();
548        rustc_serialize::Encodable::<E>::encode(&inline, encoder);
549
550        rustc_serialize::Encodable::<E>::encode(cfg, encoder);
551        rustc_serialize::Encodable::<E>::encode(auto_cfg, encoder);
552        rustc_serialize::Encodable::<E>::encode(auto_cfg_change, encoder);
553        rustc_serialize::Encodable::<E>::encode(fake_variadic, encoder);
554        rustc_serialize::Encodable::<E>::encode(keyword, encoder);
555        rustc_serialize::Encodable::<E>::encode(attribute, encoder);
556        rustc_serialize::Encodable::<E>::encode(masked, encoder);
557        rustc_serialize::Encodable::<E>::encode(notable_trait, encoder);
558        rustc_serialize::Encodable::<E>::encode(search_unbox, encoder);
559        rustc_serialize::Encodable::<E>::encode(html_favicon_url, encoder);
560        rustc_serialize::Encodable::<E>::encode(html_logo_url, encoder);
561        rustc_serialize::Encodable::<E>::encode(html_playground_url, encoder);
562        rustc_serialize::Encodable::<E>::encode(html_root_url, encoder);
563        rustc_serialize::Encodable::<E>::encode(html_no_source, encoder);
564        rustc_serialize::Encodable::<E>::encode(issue_tracker_base_url, encoder);
565        rustc_serialize::Encodable::<E>::encode(rust_logo, encoder);
566        rustc_serialize::Encodable::<E>::encode(test_attrs, encoder);
567        rustc_serialize::Encodable::<E>::encode(no_crate_inject, encoder);
568    }
569}
570
571/// How to perform collapse macros debug info
572/// if-ext - if macro from different crate (related to callsite code)
573/// | cmd \ attr    | no  | (unspecified) | external | yes |
574/// | no            | no  | no            | no       | no  |
575/// | (unspecified) | no  | no            | if-ext   | yes |
576/// | external      | no  | if-ext        | if-ext   | yes |
577/// | yes           | yes | yes           | yes      | yes |
578#[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)]
579#[derive(const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for CollapseMacroDebuginfo where __CTX: crate::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)]
580pub enum CollapseMacroDebuginfo {
581    /// Don't collapse debuginfo for the macro
582    No = 0,
583    /// Unspecified value
584    Unspecified = 1,
585    /// Collapse debuginfo if the macro comes from a different crate
586    External = 2,
587    /// Collapse debuginfo for the macro
588    Yes = 3,
589}
590
591/// Represents parsed *built-in* inert attributes.
592///
593/// ## Overview
594/// These attributes are markers that guide the compilation process and are never expanded into other code.
595/// They persist throughout the compilation phases, from AST to HIR and beyond.
596///
597/// ## Attribute Processing
598/// While attributes are initially parsed by [`rustc_parse`] into [`ast::Attribute`], they still contain raw token streams
599/// because different attributes have different internal structures. This enum represents the final,
600/// fully parsed form of these attributes, where each variant contains all the information and
601/// structure relevant for the specific attribute.
602///
603/// Some attributes can be applied multiple times to the same item, and they are "collapsed" into a single
604/// semantic attribute. For example:
605/// ```rust
606/// #[repr(C)]
607/// #[repr(packed)]
608/// struct S { }
609/// ```
610/// This is equivalent to `#[repr(C, packed)]` and results in a single [`AttributeKind::Repr`] containing
611/// both `C` and `packed` annotations. This collapsing happens during parsing and is reflected in the
612/// data structures defined in this enum.
613///
614/// ## Usage
615/// These parsed attributes are used throughout the compiler to:
616/// - Control code generation (e.g., `#[repr]`)
617/// - Mark API stability (`#[stable]`, `#[unstable]`)
618/// - Provide documentation (`#[doc]`)
619/// - Guide compiler behavior (e.g., `#[allow_internal_unstable]`)
620///
621/// ## Note on Attribute Organization
622/// Some attributes like `InlineAttr`, `OptimizeAttr`, and `InstructionSetAttr` are defined separately
623/// from this enum because they are used in specific compiler phases (like code generation) and don't
624/// need to persist throughout the entire compilation process. They are typically processed and
625/// converted into their final form earlier in the compilation pipeline.
626///
627/// For example:
628/// - `InlineAttr` is used during code generation to control function inlining
629/// - `OptimizeAttr` is used to control optimization levels
630/// - `InstructionSetAttr` is used for target-specific code generation
631///
632/// These attributes are handled by their respective compiler passes in the [`rustc_codegen_ssa`] crate
633/// and don't need to be preserved in the same way as the attributes in this enum.
634///
635/// For more details on attribute parsing, see the [`rustc_attr_parsing`] crate.
636///
637/// [`rustc_parse`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_parse/index.html
638/// [`rustc_codegen_ssa`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_codegen_ssa/index.html
639/// [`rustc_attr_parsing`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_attr_parsing/index.html
640#[derive(#[automatically_derived]
impl ::core::clone::Clone for AttributeKind {
    #[inline]
    fn clone(&self) -> AttributeKind {
        match self {
            AttributeKind::Align { align: __self_0, span: __self_1 } =>
                AttributeKind::Align {
                    align: ::core::clone::Clone::clone(__self_0),
                    span: ::core::clone::Clone::clone(__self_1),
                },
            AttributeKind::AllowConstFnUnstable(__self_0, __self_1) =>
                AttributeKind::AllowConstFnUnstable(::core::clone::Clone::clone(__self_0),
                    ::core::clone::Clone::clone(__self_1)),
            AttributeKind::AllowIncoherentImpl(__self_0) =>
                AttributeKind::AllowIncoherentImpl(::core::clone::Clone::clone(__self_0)),
            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::AsPtr(__self_0) =>
                AttributeKind::AsPtr(::core::clone::Clone::clone(__self_0)),
            AttributeKind::AutomaticallyDerived(__self_0) =>
                AttributeKind::AutomaticallyDerived(::core::clone::Clone::clone(__self_0)),
            AttributeKind::BodyStability { stability: __self_0, span: __self_1
                } =>
                AttributeKind::BodyStability {
                    stability: ::core::clone::Clone::clone(__self_0),
                    span: ::core::clone::Clone::clone(__self_1),
                },
            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::Coinductive(__self_0) =>
                AttributeKind::Coinductive(::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::Confusables {
                symbols: __self_0, first_span: __self_1 } =>
                AttributeKind::Confusables {
                    symbols: ::core::clone::Clone::clone(__self_0),
                    first_span: ::core::clone::Clone::clone(__self_1),
                },
            AttributeKind::ConstContinue(__self_0) =>
                AttributeKind::ConstContinue(::core::clone::Clone::clone(__self_0)),
            AttributeKind::ConstStability {
                stability: __self_0, span: __self_1 } =>
                AttributeKind::ConstStability {
                    stability: ::core::clone::Clone::clone(__self_0),
                    span: ::core::clone::Clone::clone(__self_1),
                },
            AttributeKind::ConstStabilityIndirect =>
                AttributeKind::ConstStabilityIndirect,
            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::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::DenyExplicitImpl(__self_0) =>
                AttributeKind::DenyExplicitImpl(::core::clone::Clone::clone(__self_0)),
            AttributeKind::Deprecation { deprecation: __self_0, span: __self_1
                } =>
                AttributeKind::Deprecation {
                    deprecation: ::core::clone::Clone::clone(__self_0),
                    span: ::core::clone::Clone::clone(__self_1),
                },
            AttributeKind::DoNotImplementViaObject(__self_0) =>
                AttributeKind::DoNotImplementViaObject(::core::clone::Clone::clone(__self_0)),
            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::Dummy => AttributeKind::Dummy,
            AttributeKind::EiiDeclaration(__self_0) =>
                AttributeKind::EiiDeclaration(::core::clone::Clone::clone(__self_0)),
            AttributeKind::EiiForeignItem => AttributeKind::EiiForeignItem,
            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::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::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::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::MacroTransparency(__self_0) =>
                AttributeKind::MacroTransparency(::core::clone::Clone::clone(__self_0)),
            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::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::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::ObjcClass { classname: __self_0, span: __self_1 }
                =>
                AttributeKind::ObjcClass {
                    classname: ::core::clone::Clone::clone(__self_0),
                    span: ::core::clone::Clone::clone(__self_1),
                },
            AttributeKind::ObjcSelector { methname: __self_0, span: __self_1 }
                =>
                AttributeKind::ObjcSelector {
                    methname: ::core::clone::Clone::clone(__self_0),
                    span: ::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::ParenSugar(__self_0) =>
                AttributeKind::ParenSugar(::core::clone::Clone::clone(__self_0)),
            AttributeKind::PassByValue(__self_0) =>
                AttributeKind::PassByValue(::core::clone::Clone::clone(__self_0)),
            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::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::PubTransparent(__self_0) =>
                AttributeKind::PubTransparent(::core::clone::Clone::clone(__self_0)),
            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::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::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::RustcCoherenceIsCore(__self_0) =>
                AttributeKind::RustcCoherenceIsCore(::core::clone::Clone::clone(__self_0)),
            AttributeKind::RustcDumpDefParents =>
                AttributeKind::RustcDumpDefParents,
            AttributeKind::RustcDumpItemBounds =>
                AttributeKind::RustcDumpItemBounds,
            AttributeKind::RustcDumpPredicates =>
                AttributeKind::RustcDumpPredicates,
            AttributeKind::RustcDumpUserArgs =>
                AttributeKind::RustcDumpUserArgs,
            AttributeKind::RustcDumpVtable(__self_0) =>
                AttributeKind::RustcDumpVtable(::core::clone::Clone::clone(__self_0)),
            AttributeKind::RustcHasIncoherentInherentImpls =>
                AttributeKind::RustcHasIncoherentInherentImpls,
            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::RustcLintDiagnostics =>
                AttributeKind::RustcLintDiagnostics,
            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::RustcMain => AttributeKind::RustcMain,
            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::RustcNeverReturnsNullPointer =>
                AttributeKind::RustcNeverReturnsNullPointer,
            AttributeKind::RustcNoImplicitAutorefs =>
                AttributeKind::RustcNoImplicitAutorefs,
            AttributeKind::RustcObjectLifetimeDefault =>
                AttributeKind::RustcObjectLifetimeDefault,
            AttributeKind::RustcPassIndirectlyInNonRusticAbis(__self_0) =>
                AttributeKind::RustcPassIndirectlyInNonRusticAbis(::core::clone::Clone::clone(__self_0)),
            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::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::SkipDuringMethodDispatch {
                array: __self_0, boxed_slice: __self_1, span: __self_2 } =>
                AttributeKind::SkipDuringMethodDispatch {
                    array: ::core::clone::Clone::clone(__self_0),
                    boxed_slice: ::core::clone::Clone::clone(__self_1),
                    span: ::core::clone::Clone::clone(__self_2),
                },
            AttributeKind::SpecializationTrait(__self_0) =>
                AttributeKind::SpecializationTrait(::core::clone::Clone::clone(__self_0)),
            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::StdInternalSymbol(__self_0) =>
                AttributeKind::StdInternalSymbol(::core::clone::Clone::clone(__self_0)),
            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::ThreadLocal => AttributeKind::ThreadLocal,
            AttributeKind::TrackCaller(__self_0) =>
                AttributeKind::TrackCaller(::core::clone::Clone::clone(__self_0)),
            AttributeKind::TypeConst(__self_0) =>
                AttributeKind::TypeConst(::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::UnsafeSpecializationMarker(__self_0) =>
                AttributeKind::UnsafeSpecializationMarker(::core::clone::Clone::clone(__self_0)),
            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::Align { align: __self_0, span: __self_1 } =>
                ::core::fmt::Formatter::debug_struct_field2_finish(f, "Align",
                    "align", __self_0, "span", &__self_1),
            AttributeKind::AllowConstFnUnstable(__self_0, __self_1) =>
                ::core::fmt::Formatter::debug_tuple_field2_finish(f,
                    "AllowConstFnUnstable", __self_0, &__self_1),
            AttributeKind::AllowIncoherentImpl(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "AllowIncoherentImpl", &__self_0),
            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::AsPtr(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f, "AsPtr",
                    &__self_0),
            AttributeKind::AutomaticallyDerived(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "AutomaticallyDerived", &__self_0),
            AttributeKind::BodyStability { stability: __self_0, span: __self_1
                } =>
                ::core::fmt::Formatter::debug_struct_field2_finish(f,
                    "BodyStability", "stability", __self_0, "span", &__self_1),
            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::Coinductive(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "Coinductive", &__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::Confusables {
                symbols: __self_0, first_span: __self_1 } =>
                ::core::fmt::Formatter::debug_struct_field2_finish(f,
                    "Confusables", "symbols", __self_0, "first_span",
                    &__self_1),
            AttributeKind::ConstContinue(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "ConstContinue", &__self_0),
            AttributeKind::ConstStability {
                stability: __self_0, span: __self_1 } =>
                ::core::fmt::Formatter::debug_struct_field2_finish(f,
                    "ConstStability", "stability", __self_0, "span", &__self_1),
            AttributeKind::ConstStabilityIndirect =>
                ::core::fmt::Formatter::write_str(f,
                    "ConstStabilityIndirect"),
            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::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::DenyExplicitImpl(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "DenyExplicitImpl", &__self_0),
            AttributeKind::Deprecation { deprecation: __self_0, span: __self_1
                } =>
                ::core::fmt::Formatter::debug_struct_field2_finish(f,
                    "Deprecation", "deprecation", __self_0, "span", &__self_1),
            AttributeKind::DoNotImplementViaObject(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "DoNotImplementViaObject", &__self_0),
            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::Dummy =>
                ::core::fmt::Formatter::write_str(f, "Dummy"),
            AttributeKind::EiiDeclaration(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "EiiDeclaration", &__self_0),
            AttributeKind::EiiForeignItem =>
                ::core::fmt::Formatter::write_str(f, "EiiForeignItem"),
            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::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::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::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::MacroTransparency(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "MacroTransparency", &__self_0),
            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::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::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::ObjcClass { classname: __self_0, span: __self_1 }
                =>
                ::core::fmt::Formatter::debug_struct_field2_finish(f,
                    "ObjcClass", "classname", __self_0, "span", &__self_1),
            AttributeKind::ObjcSelector { methname: __self_0, span: __self_1 }
                =>
                ::core::fmt::Formatter::debug_struct_field2_finish(f,
                    "ObjcSelector", "methname", __self_0, "span", &__self_1),
            AttributeKind::Optimize(__self_0, __self_1) =>
                ::core::fmt::Formatter::debug_tuple_field2_finish(f,
                    "Optimize", __self_0, &__self_1),
            AttributeKind::ParenSugar(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "ParenSugar", &__self_0),
            AttributeKind::PassByValue(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "PassByValue", &__self_0),
            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::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::PubTransparent(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "PubTransparent", &__self_0),
            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::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::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::RustcCoherenceIsCore(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "RustcCoherenceIsCore", &__self_0),
            AttributeKind::RustcDumpDefParents =>
                ::core::fmt::Formatter::write_str(f, "RustcDumpDefParents"),
            AttributeKind::RustcDumpItemBounds =>
                ::core::fmt::Formatter::write_str(f, "RustcDumpItemBounds"),
            AttributeKind::RustcDumpPredicates =>
                ::core::fmt::Formatter::write_str(f, "RustcDumpPredicates"),
            AttributeKind::RustcDumpUserArgs =>
                ::core::fmt::Formatter::write_str(f, "RustcDumpUserArgs"),
            AttributeKind::RustcDumpVtable(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "RustcDumpVtable", &__self_0),
            AttributeKind::RustcHasIncoherentInherentImpls =>
                ::core::fmt::Formatter::write_str(f,
                    "RustcHasIncoherentInherentImpls"),
            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::RustcLintDiagnostics =>
                ::core::fmt::Formatter::write_str(f, "RustcLintDiagnostics"),
            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::RustcMain =>
                ::core::fmt::Formatter::write_str(f, "RustcMain"),
            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::RustcNeverReturnsNullPointer =>
                ::core::fmt::Formatter::write_str(f,
                    "RustcNeverReturnsNullPointer"),
            AttributeKind::RustcNoImplicitAutorefs =>
                ::core::fmt::Formatter::write_str(f,
                    "RustcNoImplicitAutorefs"),
            AttributeKind::RustcObjectLifetimeDefault =>
                ::core::fmt::Formatter::write_str(f,
                    "RustcObjectLifetimeDefault"),
            AttributeKind::RustcPassIndirectlyInNonRusticAbis(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "RustcPassIndirectlyInNonRusticAbis", &__self_0),
            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::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::SkipDuringMethodDispatch {
                array: __self_0, boxed_slice: __self_1, span: __self_2 } =>
                ::core::fmt::Formatter::debug_struct_field3_finish(f,
                    "SkipDuringMethodDispatch", "array", __self_0,
                    "boxed_slice", __self_1, "span", &__self_2),
            AttributeKind::SpecializationTrait(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "SpecializationTrait", &__self_0),
            AttributeKind::Stability { stability: __self_0, span: __self_1 }
                =>
                ::core::fmt::Formatter::debug_struct_field2_finish(f,
                    "Stability", "stability", __self_0, "span", &__self_1),
            AttributeKind::StdInternalSymbol(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "StdInternalSymbol", &__self_0),
            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::ThreadLocal =>
                ::core::fmt::Formatter::write_str(f, "ThreadLocal"),
            AttributeKind::TrackCaller(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "TrackCaller", &__self_0),
            AttributeKind::TypeConst(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "TypeConst", &__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::UnsafeSpecializationMarker(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "UnsafeSpecializationMarker", &__self_0),
            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: crate::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::Align {
                        align: ref __binding_0, span: ref __binding_1 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::AllowConstFnUnstable(ref __binding_0,
                        ref __binding_1) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::AllowIncoherentImpl(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    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::AsPtr(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::AutomaticallyDerived(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::BodyStability {
                        stability: ref __binding_0, span: ref __binding_1 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.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::Coinductive(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::Confusables {
                        symbols: ref __binding_0, first_span: ref __binding_1 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::ConstContinue(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::ConstStability {
                        stability: ref __binding_0, span: ref __binding_1 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::ConstStabilityIndirect => {}
                    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::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::DenyExplicitImpl(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::Deprecation {
                        deprecation: ref __binding_0, span: ref __binding_1 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::DoNotImplementViaObject(ref __binding_0) => {
                        { __binding_0.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::Dummy => {}
                    AttributeKind::EiiDeclaration(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::EiiForeignItem => {}
                    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::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::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::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::MacroTransparency(ref __binding_0) => {
                        { __binding_0.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::NoCore(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::NoImplicitPrelude(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::NoLink => {}
                    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::ObjcClass {
                        classname: ref __binding_0, span: ref __binding_1 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                        { __binding_1.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::ObjcSelector {
                        methname: ref __binding_0, span: 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::ParenSugar(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::PassByValue(ref __binding_0) => {
                        { __binding_0.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::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::PubTransparent(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    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::Repr {
                        reprs: ref __binding_0, first_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::RustcCoherenceIsCore(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::RustcDumpDefParents => {}
                    AttributeKind::RustcDumpItemBounds => {}
                    AttributeKind::RustcDumpPredicates => {}
                    AttributeKind::RustcDumpUserArgs => {}
                    AttributeKind::RustcDumpVtable(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::RustcHasIncoherentInherentImpls => {}
                    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::RustcLintDiagnostics => {}
                    AttributeKind::RustcLintOptDenyFieldAccess {
                        lint_message: ref __binding_0 } => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::RustcLintOptTy => {}
                    AttributeKind::RustcLintQueryInstability => {}
                    AttributeKind::RustcLintUntrackedQueryInformation => {}
                    AttributeKind::RustcMain => {}
                    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::RustcNeverReturnsNullPointer => {}
                    AttributeKind::RustcNoImplicitAutorefs => {}
                    AttributeKind::RustcObjectLifetimeDefault => {}
                    AttributeKind::RustcPassIndirectlyInNonRusticAbis(ref __binding_0)
                        => {
                        { __binding_0.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::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::SkipDuringMethodDispatch {
                        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::SpecializationTrait(ref __binding_0) => {
                        { __binding_0.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::StdInternalSymbol(ref __binding_0) => {
                        { __binding_0.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::ThreadLocal => {}
                    AttributeKind::TrackCaller(ref __binding_0) => {
                        { __binding_0.hash_stable(__hcx, __hasher); }
                    }
                    AttributeKind::TypeConst(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::UnsafeSpecializationMarker(ref __binding_0)
                        => {
                        { __binding_0.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::Align {
                            align: ref __binding_0, span: ref __binding_1 } => {
                            0usize
                        }
                        AttributeKind::AllowConstFnUnstable(ref __binding_0,
                            ref __binding_1) => {
                            1usize
                        }
                        AttributeKind::AllowIncoherentImpl(ref __binding_0) => {
                            2usize
                        }
                        AttributeKind::AllowInternalUnsafe(ref __binding_0) => {
                            3usize
                        }
                        AttributeKind::AllowInternalUnstable(ref __binding_0,
                            ref __binding_1) => {
                            4usize
                        }
                        AttributeKind::AsPtr(ref __binding_0) => { 5usize }
                        AttributeKind::AutomaticallyDerived(ref __binding_0) => {
                            6usize
                        }
                        AttributeKind::BodyStability {
                            stability: ref __binding_0, span: ref __binding_1 } => {
                            7usize
                        }
                        AttributeKind::CfgAttrTrace => { 8usize }
                        AttributeKind::CfgTrace(ref __binding_0) => { 9usize }
                        AttributeKind::CfiEncoding { encoding: ref __binding_0 } =>
                            {
                            10usize
                        }
                        AttributeKind::Coinductive(ref __binding_0) => { 11usize }
                        AttributeKind::Cold(ref __binding_0) => { 12usize }
                        AttributeKind::CollapseDebugInfo(ref __binding_0) => {
                            13usize
                        }
                        AttributeKind::Confusables {
                            symbols: ref __binding_0, first_span: ref __binding_1 } => {
                            14usize
                        }
                        AttributeKind::ConstContinue(ref __binding_0) => { 15usize }
                        AttributeKind::ConstStability {
                            stability: ref __binding_0, span: ref __binding_1 } => {
                            16usize
                        }
                        AttributeKind::ConstStabilityIndirect => { 17usize }
                        AttributeKind::Coroutine(ref __binding_0) => { 18usize }
                        AttributeKind::Coverage(ref __binding_0, ref __binding_1) =>
                            {
                            19usize
                        }
                        AttributeKind::CrateName {
                            name: ref __binding_0,
                            name_span: ref __binding_1,
                            attr_span: ref __binding_2 } => {
                            20usize
                        }
                        AttributeKind::CustomMir(ref __binding_0, ref __binding_1,
                            ref __binding_2) => {
                            21usize
                        }
                        AttributeKind::DebuggerVisualizer(ref __binding_0) => {
                            22usize
                        }
                        AttributeKind::DenyExplicitImpl(ref __binding_0) => {
                            23usize
                        }
                        AttributeKind::Deprecation {
                            deprecation: ref __binding_0, span: ref __binding_1 } => {
                            24usize
                        }
                        AttributeKind::DoNotImplementViaObject(ref __binding_0) => {
                            25usize
                        }
                        AttributeKind::DoNotRecommend { attr_span: ref __binding_0 }
                            => {
                            26usize
                        }
                        AttributeKind::Doc(ref __binding_0) => { 27usize }
                        AttributeKind::DocComment {
                            style: ref __binding_0,
                            kind: ref __binding_1,
                            span: ref __binding_2,
                            comment: ref __binding_3 } => {
                            28usize
                        }
                        AttributeKind::Dummy => { 29usize }
                        AttributeKind::EiiDeclaration(ref __binding_0) => {
                            30usize
                        }
                        AttributeKind::EiiForeignItem => { 31usize }
                        AttributeKind::EiiImpls(ref __binding_0) => { 32usize }
                        AttributeKind::ExportName {
                            name: ref __binding_0, span: ref __binding_1 } => {
                            33usize
                        }
                        AttributeKind::ExportStable => { 34usize }
                        AttributeKind::FfiConst(ref __binding_0) => { 35usize }
                        AttributeKind::FfiPure(ref __binding_0) => { 36usize }
                        AttributeKind::Fundamental => { 37usize }
                        AttributeKind::Ignore {
                            span: ref __binding_0, reason: ref __binding_1 } => {
                            38usize
                        }
                        AttributeKind::Inline(ref __binding_0, ref __binding_1) => {
                            39usize
                        }
                        AttributeKind::InstructionSet(ref __binding_0) => {
                            40usize
                        }
                        AttributeKind::Link(ref __binding_0, ref __binding_1) => {
                            41usize
                        }
                        AttributeKind::LinkName {
                            name: ref __binding_0, span: ref __binding_1 } => {
                            42usize
                        }
                        AttributeKind::LinkOrdinal {
                            ordinal: ref __binding_0, span: ref __binding_1 } => {
                            43usize
                        }
                        AttributeKind::LinkSection {
                            name: ref __binding_0, span: ref __binding_1 } => {
                            44usize
                        }
                        AttributeKind::Linkage(ref __binding_0, ref __binding_1) =>
                            {
                            45usize
                        }
                        AttributeKind::LoopMatch(ref __binding_0) => { 46usize }
                        AttributeKind::MacroEscape(ref __binding_0) => { 47usize }
                        AttributeKind::MacroExport {
                            span: ref __binding_0, local_inner_macros: ref __binding_1 }
                            => {
                            48usize
                        }
                        AttributeKind::MacroTransparency(ref __binding_0) => {
                            49usize
                        }
                        AttributeKind::MacroUse {
                            span: ref __binding_0, arguments: ref __binding_1 } => {
                            50usize
                        }
                        AttributeKind::Marker(ref __binding_0) => { 51usize }
                        AttributeKind::MayDangle(ref __binding_0) => { 52usize }
                        AttributeKind::MoveSizeLimit {
                            attr_span: ref __binding_0,
                            limit_span: ref __binding_1,
                            limit: ref __binding_2 } => {
                            53usize
                        }
                        AttributeKind::MustNotSupend { reason: ref __binding_0 } =>
                            {
                            54usize
                        }
                        AttributeKind::MustUse {
                            span: ref __binding_0, reason: ref __binding_1 } => {
                            55usize
                        }
                        AttributeKind::Naked(ref __binding_0) => { 56usize }
                        AttributeKind::NoCore(ref __binding_0) => { 57usize }
                        AttributeKind::NoImplicitPrelude(ref __binding_0) => {
                            58usize
                        }
                        AttributeKind::NoLink => { 59usize }
                        AttributeKind::NoMangle(ref __binding_0) => { 60usize }
                        AttributeKind::NoStd(ref __binding_0) => { 61usize }
                        AttributeKind::NonExhaustive(ref __binding_0) => { 62usize }
                        AttributeKind::ObjcClass {
                            classname: ref __binding_0, span: ref __binding_1 } => {
                            63usize
                        }
                        AttributeKind::ObjcSelector {
                            methname: ref __binding_0, span: ref __binding_1 } => {
                            64usize
                        }
                        AttributeKind::Optimize(ref __binding_0, ref __binding_1) =>
                            {
                            65usize
                        }
                        AttributeKind::ParenSugar(ref __binding_0) => { 66usize }
                        AttributeKind::PassByValue(ref __binding_0) => { 67usize }
                        AttributeKind::Path(ref __binding_0, ref __binding_1) => {
                            68usize
                        }
                        AttributeKind::PatternComplexityLimit {
                            attr_span: ref __binding_0,
                            limit_span: ref __binding_1,
                            limit: ref __binding_2 } => {
                            69usize
                        }
                        AttributeKind::PinV2(ref __binding_0) => { 70usize }
                        AttributeKind::Pointee(ref __binding_0) => { 71usize }
                        AttributeKind::ProcMacro(ref __binding_0) => { 72usize }
                        AttributeKind::ProcMacroAttribute(ref __binding_0) => {
                            73usize
                        }
                        AttributeKind::ProcMacroDerive {
                            trait_name: ref __binding_0,
                            helper_attrs: ref __binding_1,
                            span: ref __binding_2 } => {
                            74usize
                        }
                        AttributeKind::PubTransparent(ref __binding_0) => {
                            75usize
                        }
                        AttributeKind::RecursionLimit {
                            attr_span: ref __binding_0,
                            limit_span: ref __binding_1,
                            limit: ref __binding_2 } => {
                            76usize
                        }
                        AttributeKind::Repr {
                            reprs: ref __binding_0, first_span: ref __binding_1 } => {
                            77usize
                        }
                        AttributeKind::RustcBuiltinMacro {
                            builtin_name: ref __binding_0,
                            helper_attrs: ref __binding_1,
                            span: ref __binding_2 } => {
                            78usize
                        }
                        AttributeKind::RustcCoherenceIsCore(ref __binding_0) => {
                            79usize
                        }
                        AttributeKind::RustcDumpDefParents => { 80usize }
                        AttributeKind::RustcDumpItemBounds => { 81usize }
                        AttributeKind::RustcDumpPredicates => { 82usize }
                        AttributeKind::RustcDumpUserArgs => { 83usize }
                        AttributeKind::RustcDumpVtable(ref __binding_0) => {
                            84usize
                        }
                        AttributeKind::RustcHasIncoherentInherentImpls => {
                            85usize
                        }
                        AttributeKind::RustcLayoutScalarValidRangeEnd(ref __binding_0,
                            ref __binding_1) => {
                            86usize
                        }
                        AttributeKind::RustcLayoutScalarValidRangeStart(ref __binding_0,
                            ref __binding_1) => {
                            87usize
                        }
                        AttributeKind::RustcLegacyConstGenerics {
                            fn_indexes: ref __binding_0, attr_span: ref __binding_1 } =>
                            {
                            88usize
                        }
                        AttributeKind::RustcLintDiagnostics => { 89usize }
                        AttributeKind::RustcLintOptDenyFieldAccess {
                            lint_message: ref __binding_0 } => {
                            90usize
                        }
                        AttributeKind::RustcLintOptTy => { 91usize }
                        AttributeKind::RustcLintQueryInstability => { 92usize }
                        AttributeKind::RustcLintUntrackedQueryInformation => {
                            93usize
                        }
                        AttributeKind::RustcMain => { 94usize }
                        AttributeKind::RustcMustImplementOneOf {
                            attr_span: ref __binding_0, fn_names: ref __binding_1 } => {
                            95usize
                        }
                        AttributeKind::RustcNeverReturnsNullPointer => { 96usize }
                        AttributeKind::RustcNoImplicitAutorefs => { 97usize }
                        AttributeKind::RustcObjectLifetimeDefault => { 98usize }
                        AttributeKind::RustcPassIndirectlyInNonRusticAbis(ref __binding_0)
                            => {
                            99usize
                        }
                        AttributeKind::RustcScalableVector {
                            element_count: ref __binding_0, span: ref __binding_1 } => {
                            100usize
                        }
                        AttributeKind::RustcShouldNotBeCalledOnConstItems(ref __binding_0)
                            => {
                            101usize
                        }
                        AttributeKind::RustcSimdMonomorphizeLaneLimit(ref __binding_0)
                            => {
                            102usize
                        }
                        AttributeKind::Sanitize {
                            on_set: ref __binding_0,
                            off_set: ref __binding_1,
                            rtsan: ref __binding_2,
                            span: ref __binding_3 } => {
                            103usize
                        }
                        AttributeKind::ShouldPanic {
                            reason: ref __binding_0, span: ref __binding_1 } => {
                            104usize
                        }
                        AttributeKind::SkipDuringMethodDispatch {
                            array: ref __binding_0,
                            boxed_slice: ref __binding_1,
                            span: ref __binding_2 } => {
                            105usize
                        }
                        AttributeKind::SpecializationTrait(ref __binding_0) => {
                            106usize
                        }
                        AttributeKind::Stability {
                            stability: ref __binding_0, span: ref __binding_1 } => {
                            107usize
                        }
                        AttributeKind::StdInternalSymbol(ref __binding_0) => {
                            108usize
                        }
                        AttributeKind::TargetFeature {
                            features: ref __binding_0,
                            attr_span: ref __binding_1,
                            was_forced: ref __binding_2 } => {
                            109usize
                        }
                        AttributeKind::ThreadLocal => { 110usize }
                        AttributeKind::TrackCaller(ref __binding_0) => { 111usize }
                        AttributeKind::TypeConst(ref __binding_0) => { 112usize }
                        AttributeKind::TypeLengthLimit {
                            attr_span: ref __binding_0,
                            limit_span: ref __binding_1,
                            limit: ref __binding_2 } => {
                            113usize
                        }
                        AttributeKind::UnsafeSpecializationMarker(ref __binding_0)
                            => {
                            114usize
                        }
                        AttributeKind::UnstableFeatureBound(ref __binding_0) => {
                            115usize
                        }
                        AttributeKind::Used {
                            used_by: ref __binding_0, span: ref __binding_1 } => {
                            116usize
                        }
                        AttributeKind::WindowsSubsystem(ref __binding_0,
                            ref __binding_1) => {
                            117usize
                        }
                    };
                ::rustc_serialize::Encoder::emit_u8(__encoder, disc as u8);
                match *self {
                    AttributeKind::Align {
                        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::AllowConstFnUnstable(ref __binding_0,
                        ref __binding_1) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                    }
                    AttributeKind::AllowIncoherentImpl(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    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::AsPtr(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::AutomaticallyDerived(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::BodyStability {
                        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::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::Coinductive(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::Confusables {
                        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::ConstContinue(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::ConstStability {
                        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::ConstStabilityIndirect => {}
                    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::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::DenyExplicitImpl(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::Deprecation {
                        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::DoNotImplementViaObject(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __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::Dummy => {}
                    AttributeKind::EiiDeclaration(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::EiiForeignItem => {}
                    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::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::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::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::MacroTransparency(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __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::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::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::ObjcClass {
                        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::ObjcSelector {
                        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::Optimize(ref __binding_0, ref __binding_1) =>
                        {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_1,
                            __encoder);
                    }
                    AttributeKind::ParenSugar(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::PassByValue(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __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::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::PubTransparent(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    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::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::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::RustcCoherenceIsCore(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::RustcDumpDefParents => {}
                    AttributeKind::RustcDumpItemBounds => {}
                    AttributeKind::RustcDumpPredicates => {}
                    AttributeKind::RustcDumpUserArgs => {}
                    AttributeKind::RustcDumpVtable(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::RustcHasIncoherentInherentImpls => {}
                    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::RustcLintDiagnostics => {}
                    AttributeKind::RustcLintOptDenyFieldAccess {
                        lint_message: ref __binding_0 } => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::RustcLintOptTy => {}
                    AttributeKind::RustcLintQueryInstability => {}
                    AttributeKind::RustcLintUntrackedQueryInformation => {}
                    AttributeKind::RustcMain => {}
                    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::RustcNeverReturnsNullPointer => {}
                    AttributeKind::RustcNoImplicitAutorefs => {}
                    AttributeKind::RustcObjectLifetimeDefault => {}
                    AttributeKind::RustcPassIndirectlyInNonRusticAbis(ref __binding_0)
                        => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __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::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::SkipDuringMethodDispatch {
                        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::SpecializationTrait(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __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::StdInternalSymbol(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __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::ThreadLocal => {}
                    AttributeKind::TrackCaller(ref __binding_0) => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __encoder);
                    }
                    AttributeKind::TypeConst(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::UnsafeSpecializationMarker(ref __binding_0)
                        => {
                        ::rustc_serialize::Encodable::<__E>::encode(__binding_0,
                            __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::Align {
                            align: ::rustc_serialize::Decodable::decode(__decoder),
                            span: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    1usize => {
                        AttributeKind::AllowConstFnUnstable(::rustc_serialize::Decodable::decode(__decoder),
                            ::rustc_serialize::Decodable::decode(__decoder))
                    }
                    2usize => {
                        AttributeKind::AllowIncoherentImpl(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    3usize => {
                        AttributeKind::AllowInternalUnsafe(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    4usize => {
                        AttributeKind::AllowInternalUnstable(::rustc_serialize::Decodable::decode(__decoder),
                            ::rustc_serialize::Decodable::decode(__decoder))
                    }
                    5usize => {
                        AttributeKind::AsPtr(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    6usize => {
                        AttributeKind::AutomaticallyDerived(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    7usize => {
                        AttributeKind::BodyStability {
                            stability: ::rustc_serialize::Decodable::decode(__decoder),
                            span: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    8usize => { AttributeKind::CfgAttrTrace }
                    9usize => {
                        AttributeKind::CfgTrace(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    10usize => {
                        AttributeKind::CfiEncoding {
                            encoding: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    11usize => {
                        AttributeKind::Coinductive(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    12usize => {
                        AttributeKind::Cold(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    13usize => {
                        AttributeKind::CollapseDebugInfo(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    14usize => {
                        AttributeKind::Confusables {
                            symbols: ::rustc_serialize::Decodable::decode(__decoder),
                            first_span: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    15usize => {
                        AttributeKind::ConstContinue(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    16usize => {
                        AttributeKind::ConstStability {
                            stability: ::rustc_serialize::Decodable::decode(__decoder),
                            span: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    17usize => { AttributeKind::ConstStabilityIndirect }
                    18usize => {
                        AttributeKind::Coroutine(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    19usize => {
                        AttributeKind::Coverage(::rustc_serialize::Decodable::decode(__decoder),
                            ::rustc_serialize::Decodable::decode(__decoder))
                    }
                    20usize => {
                        AttributeKind::CrateName {
                            name: ::rustc_serialize::Decodable::decode(__decoder),
                            name_span: ::rustc_serialize::Decodable::decode(__decoder),
                            attr_span: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    21usize => {
                        AttributeKind::CustomMir(::rustc_serialize::Decodable::decode(__decoder),
                            ::rustc_serialize::Decodable::decode(__decoder),
                            ::rustc_serialize::Decodable::decode(__decoder))
                    }
                    22usize => {
                        AttributeKind::DebuggerVisualizer(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    23usize => {
                        AttributeKind::DenyExplicitImpl(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    24usize => {
                        AttributeKind::Deprecation {
                            deprecation: ::rustc_serialize::Decodable::decode(__decoder),
                            span: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    25usize => {
                        AttributeKind::DoNotImplementViaObject(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    26usize => {
                        AttributeKind::DoNotRecommend {
                            attr_span: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    27usize => {
                        AttributeKind::Doc(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    28usize => {
                        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),
                        }
                    }
                    29usize => { AttributeKind::Dummy }
                    30usize => {
                        AttributeKind::EiiDeclaration(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    31usize => { AttributeKind::EiiForeignItem }
                    32usize => {
                        AttributeKind::EiiImpls(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    33usize => {
                        AttributeKind::ExportName {
                            name: ::rustc_serialize::Decodable::decode(__decoder),
                            span: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    34usize => { AttributeKind::ExportStable }
                    35usize => {
                        AttributeKind::FfiConst(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    36usize => {
                        AttributeKind::FfiPure(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    37usize => { AttributeKind::Fundamental }
                    38usize => {
                        AttributeKind::Ignore {
                            span: ::rustc_serialize::Decodable::decode(__decoder),
                            reason: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    39usize => {
                        AttributeKind::Inline(::rustc_serialize::Decodable::decode(__decoder),
                            ::rustc_serialize::Decodable::decode(__decoder))
                    }
                    40usize => {
                        AttributeKind::InstructionSet(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    41usize => {
                        AttributeKind::Link(::rustc_serialize::Decodable::decode(__decoder),
                            ::rustc_serialize::Decodable::decode(__decoder))
                    }
                    42usize => {
                        AttributeKind::LinkName {
                            name: ::rustc_serialize::Decodable::decode(__decoder),
                            span: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    43usize => {
                        AttributeKind::LinkOrdinal {
                            ordinal: ::rustc_serialize::Decodable::decode(__decoder),
                            span: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    44usize => {
                        AttributeKind::LinkSection {
                            name: ::rustc_serialize::Decodable::decode(__decoder),
                            span: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    45usize => {
                        AttributeKind::Linkage(::rustc_serialize::Decodable::decode(__decoder),
                            ::rustc_serialize::Decodable::decode(__decoder))
                    }
                    46usize => {
                        AttributeKind::LoopMatch(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    47usize => {
                        AttributeKind::MacroEscape(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    48usize => {
                        AttributeKind::MacroExport {
                            span: ::rustc_serialize::Decodable::decode(__decoder),
                            local_inner_macros: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    49usize => {
                        AttributeKind::MacroTransparency(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    50usize => {
                        AttributeKind::MacroUse {
                            span: ::rustc_serialize::Decodable::decode(__decoder),
                            arguments: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    51usize => {
                        AttributeKind::Marker(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    52usize => {
                        AttributeKind::MayDangle(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    53usize => {
                        AttributeKind::MoveSizeLimit {
                            attr_span: ::rustc_serialize::Decodable::decode(__decoder),
                            limit_span: ::rustc_serialize::Decodable::decode(__decoder),
                            limit: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    54usize => {
                        AttributeKind::MustNotSupend {
                            reason: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    55usize => {
                        AttributeKind::MustUse {
                            span: ::rustc_serialize::Decodable::decode(__decoder),
                            reason: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    56usize => {
                        AttributeKind::Naked(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    57usize => {
                        AttributeKind::NoCore(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    58usize => {
                        AttributeKind::NoImplicitPrelude(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    59usize => { AttributeKind::NoLink }
                    60usize => {
                        AttributeKind::NoMangle(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    61usize => {
                        AttributeKind::NoStd(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    62usize => {
                        AttributeKind::NonExhaustive(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    63usize => {
                        AttributeKind::ObjcClass {
                            classname: ::rustc_serialize::Decodable::decode(__decoder),
                            span: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    64usize => {
                        AttributeKind::ObjcSelector {
                            methname: ::rustc_serialize::Decodable::decode(__decoder),
                            span: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    65usize => {
                        AttributeKind::Optimize(::rustc_serialize::Decodable::decode(__decoder),
                            ::rustc_serialize::Decodable::decode(__decoder))
                    }
                    66usize => {
                        AttributeKind::ParenSugar(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    67usize => {
                        AttributeKind::PassByValue(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    68usize => {
                        AttributeKind::Path(::rustc_serialize::Decodable::decode(__decoder),
                            ::rustc_serialize::Decodable::decode(__decoder))
                    }
                    69usize => {
                        AttributeKind::PatternComplexityLimit {
                            attr_span: ::rustc_serialize::Decodable::decode(__decoder),
                            limit_span: ::rustc_serialize::Decodable::decode(__decoder),
                            limit: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    70usize => {
                        AttributeKind::PinV2(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    71usize => {
                        AttributeKind::Pointee(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    72usize => {
                        AttributeKind::ProcMacro(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    73usize => {
                        AttributeKind::ProcMacroAttribute(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    74usize => {
                        AttributeKind::ProcMacroDerive {
                            trait_name: ::rustc_serialize::Decodable::decode(__decoder),
                            helper_attrs: ::rustc_serialize::Decodable::decode(__decoder),
                            span: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    75usize => {
                        AttributeKind::PubTransparent(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    76usize => {
                        AttributeKind::RecursionLimit {
                            attr_span: ::rustc_serialize::Decodable::decode(__decoder),
                            limit_span: ::rustc_serialize::Decodable::decode(__decoder),
                            limit: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    77usize => {
                        AttributeKind::Repr {
                            reprs: ::rustc_serialize::Decodable::decode(__decoder),
                            first_span: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    78usize => {
                        AttributeKind::RustcBuiltinMacro {
                            builtin_name: ::rustc_serialize::Decodable::decode(__decoder),
                            helper_attrs: ::rustc_serialize::Decodable::decode(__decoder),
                            span: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    79usize => {
                        AttributeKind::RustcCoherenceIsCore(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    80usize => { AttributeKind::RustcDumpDefParents }
                    81usize => { AttributeKind::RustcDumpItemBounds }
                    82usize => { AttributeKind::RustcDumpPredicates }
                    83usize => { AttributeKind::RustcDumpUserArgs }
                    84usize => {
                        AttributeKind::RustcDumpVtable(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    85usize => {
                        AttributeKind::RustcHasIncoherentInherentImpls
                    }
                    86usize => {
                        AttributeKind::RustcLayoutScalarValidRangeEnd(::rustc_serialize::Decodable::decode(__decoder),
                            ::rustc_serialize::Decodable::decode(__decoder))
                    }
                    87usize => {
                        AttributeKind::RustcLayoutScalarValidRangeStart(::rustc_serialize::Decodable::decode(__decoder),
                            ::rustc_serialize::Decodable::decode(__decoder))
                    }
                    88usize => {
                        AttributeKind::RustcLegacyConstGenerics {
                            fn_indexes: ::rustc_serialize::Decodable::decode(__decoder),
                            attr_span: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    89usize => { AttributeKind::RustcLintDiagnostics }
                    90usize => {
                        AttributeKind::RustcLintOptDenyFieldAccess {
                            lint_message: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    91usize => { AttributeKind::RustcLintOptTy }
                    92usize => { AttributeKind::RustcLintQueryInstability }
                    93usize => {
                        AttributeKind::RustcLintUntrackedQueryInformation
                    }
                    94usize => { AttributeKind::RustcMain }
                    95usize => {
                        AttributeKind::RustcMustImplementOneOf {
                            attr_span: ::rustc_serialize::Decodable::decode(__decoder),
                            fn_names: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    96usize => { AttributeKind::RustcNeverReturnsNullPointer }
                    97usize => { AttributeKind::RustcNoImplicitAutorefs }
                    98usize => { AttributeKind::RustcObjectLifetimeDefault }
                    99usize => {
                        AttributeKind::RustcPassIndirectlyInNonRusticAbis(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    100usize => {
                        AttributeKind::RustcScalableVector {
                            element_count: ::rustc_serialize::Decodable::decode(__decoder),
                            span: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    101usize => {
                        AttributeKind::RustcShouldNotBeCalledOnConstItems(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    102usize => {
                        AttributeKind::RustcSimdMonomorphizeLaneLimit(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    103usize => {
                        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),
                        }
                    }
                    104usize => {
                        AttributeKind::ShouldPanic {
                            reason: ::rustc_serialize::Decodable::decode(__decoder),
                            span: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    105usize => {
                        AttributeKind::SkipDuringMethodDispatch {
                            array: ::rustc_serialize::Decodable::decode(__decoder),
                            boxed_slice: ::rustc_serialize::Decodable::decode(__decoder),
                            span: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    106usize => {
                        AttributeKind::SpecializationTrait(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    107usize => {
                        AttributeKind::Stability {
                            stability: ::rustc_serialize::Decodable::decode(__decoder),
                            span: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    108usize => {
                        AttributeKind::StdInternalSymbol(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    109usize => {
                        AttributeKind::TargetFeature {
                            features: ::rustc_serialize::Decodable::decode(__decoder),
                            attr_span: ::rustc_serialize::Decodable::decode(__decoder),
                            was_forced: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    110usize => { AttributeKind::ThreadLocal }
                    111usize => {
                        AttributeKind::TrackCaller(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    112usize => {
                        AttributeKind::TypeConst(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    113usize => {
                        AttributeKind::TypeLengthLimit {
                            attr_span: ::rustc_serialize::Decodable::decode(__decoder),
                            limit_span: ::rustc_serialize::Decodable::decode(__decoder),
                            limit: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    114usize => {
                        AttributeKind::UnsafeSpecializationMarker(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    115usize => {
                        AttributeKind::UnstableFeatureBound(::rustc_serialize::Decodable::decode(__decoder))
                    }
                    116usize => {
                        AttributeKind::Used {
                            used_by: ::rustc_serialize::Decodable::decode(__decoder),
                            span: ::rustc_serialize::Decodable::decode(__decoder),
                        }
                    }
                    117usize => {
                        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..118, 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::Align { align, span } => {
                        __p.word("Align");
                        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::AllowConstFnUnstable(f0, f1) => {
                        __p.word("AllowConstFnUnstable");
                        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::AllowIncoherentImpl(f0) => {
                        __p.word("AllowIncoherentImpl");
                        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::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::AsPtr(f0) => {
                        __p.word("AsPtr");
                        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::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::BodyStability { stability, span } => {
                        __p.word("BodyStability");
                        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::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::Coinductive(f0) => {
                        __p.word("Coinductive");
                        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::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::Confusables { symbols, first_span } => {
                        __p.word("Confusables");
                        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::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::ConstStability { stability, span } => {
                        __p.word("ConstStability");
                        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::ConstStabilityIndirect => {
                        __p.word("ConstStabilityIndirect")
                    }
                    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::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::DenyExplicitImpl(f0) => {
                        __p.word("DenyExplicitImpl");
                        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::Deprecation { deprecation, span } => {
                        __p.word("Deprecation");
                        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::DoNotImplementViaObject(f0) => {
                        __p.word("DoNotImplementViaObject");
                        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::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::Dummy => { __p.word("Dummy") }
                    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::EiiForeignItem => { __p.word("EiiForeignItem") }
                    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::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::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::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::MacroTransparency(f0) => {
                        __p.word("MacroTransparency");
                        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::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::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::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::ObjcClass { classname, span } => {
                        __p.word("ObjcClass");
                        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::ObjcSelector { methname, span } => {
                        __p.word("ObjcSelector");
                        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::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::ParenSugar(f0) => {
                        __p.word("ParenSugar");
                        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::PassByValue(f0) => {
                        __p.word("PassByValue");
                        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::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::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::PubTransparent(f0) => {
                        __p.word("PubTransparent");
                        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::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::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::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::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::RustcDumpDefParents => {
                        __p.word("RustcDumpDefParents")
                    }
                    Self::RustcDumpItemBounds => {
                        __p.word("RustcDumpItemBounds")
                    }
                    Self::RustcDumpPredicates => {
                        __p.word("RustcDumpPredicates")
                    }
                    Self::RustcDumpUserArgs => { __p.word("RustcDumpUserArgs") }
                    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::RustcHasIncoherentInherentImpls => {
                        __p.word("RustcHasIncoherentInherentImpls")
                    }
                    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::RustcLintDiagnostics => {
                        __p.word("RustcLintDiagnostics")
                    }
                    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::RustcMain => { __p.word("RustcMain") }
                    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::RustcNeverReturnsNullPointer => {
                        __p.word("RustcNeverReturnsNullPointer")
                    }
                    Self::RustcNoImplicitAutorefs => {
                        __p.word("RustcNoImplicitAutorefs")
                    }
                    Self::RustcObjectLifetimeDefault => {
                        __p.word("RustcObjectLifetimeDefault")
                    }
                    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::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::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::SkipDuringMethodDispatch { array, boxed_slice, span }
                        => {
                        __p.word("SkipDuringMethodDispatch");
                        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::SpecializationTrait(f0) => {
                        __p.word("SpecializationTrait");
                        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::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::StdInternalSymbol(f0) => {
                        __p.word("StdInternalSymbol");
                        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::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::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::TypeConst(f0) => {
                        __p.word("TypeConst");
                        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::UnsafeSpecializationMarker(f0) => {
                        __p.word("UnsafeSpecializationMarker");
                        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::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)]
641pub enum AttributeKind {
642    // tidy-alphabetical-start
643    /// Represents `#[align(N)]`.
644    // FIXME(#82232, #143834): temporarily renamed to mitigate `#[align]` nameres ambiguity
645    Align { align: Align, span: Span },
646
647    /// Represents `#[rustc_allow_const_fn_unstable]`.
648    AllowConstFnUnstable(ThinVec<Symbol>, Span),
649
650    /// Represents `#[rustc_allow_incoherent_impl]`.
651    AllowIncoherentImpl(Span),
652
653    /// Represents `#[allow_internal_unsafe]`.
654    AllowInternalUnsafe(Span),
655
656    /// Represents `#[allow_internal_unstable]`.
657    AllowInternalUnstable(ThinVec<(Symbol, Span)>, Span),
658
659    /// Represents `#[rustc_as_ptr]` (used by the `dangling_pointers_from_temporaries` lint).
660    AsPtr(Span),
661
662    /// Represents `#[automatically_derived]`
663    AutomaticallyDerived(Span),
664
665    /// Represents `#[rustc_default_body_unstable]`.
666    BodyStability {
667        stability: DefaultBodyStability,
668        /// Span of the `#[rustc_default_body_unstable(...)]` attribute
669        span: Span,
670    },
671
672    /// Represents the trace attribute of `#[cfg_attr]`
673    CfgAttrTrace,
674
675    /// Represents the trace attribute of `#[cfg]`
676    CfgTrace(ThinVec<(CfgEntry, Span)>),
677
678    /// Represents `#[cfi_encoding]`
679    CfiEncoding { encoding: Symbol },
680
681    /// Represents `#[rustc_coinductive]`.
682    Coinductive(Span),
683
684    /// Represents `#[cold]`.
685    Cold(Span),
686
687    /// Represents `#[collapse_debuginfo]`.
688    CollapseDebugInfo(CollapseMacroDebuginfo),
689
690    /// Represents `#[rustc_confusables]`.
691    Confusables {
692        symbols: ThinVec<Symbol>,
693        // FIXME(jdonszelmann): remove when target validation code is moved
694        first_span: Span,
695    },
696
697    /// Represents `#[const_continue]`.
698    ConstContinue(Span),
699
700    /// Represents `#[rustc_const_stable]` and `#[rustc_const_unstable]`.
701    ConstStability {
702        stability: PartialConstStability,
703        /// Span of the `#[rustc_const_stable(...)]` or `#[rustc_const_unstable(...)]` attribute
704        span: Span,
705    },
706
707    /// Represents `#[rustc_const_stable_indirect]`.
708    ConstStabilityIndirect,
709
710    /// Represents `#[coroutine]`.
711    Coroutine(Span),
712
713    /// Represents `#[coverage(..)]`.
714    Coverage(Span, CoverageAttrKind),
715
716    /// Represents `#[crate_name = ...]`
717    CrateName { name: Symbol, name_span: Span, attr_span: Span },
718
719    /// Represents `#[custom_mir]`.
720    CustomMir(Option<(MirDialect, Span)>, Option<(MirPhase, Span)>, Span),
721
722    /// Represents `#[debugger_visualizer]`.
723    DebuggerVisualizer(ThinVec<DebugVisualizer>),
724
725    /// Represents `#[rustc_deny_explicit_impl]`.
726    DenyExplicitImpl(Span),
727
728    /// Represents [`#[deprecated]`](https://doc.rust-lang.org/stable/reference/attributes/diagnostics.html#the-deprecated-attribute).
729    Deprecation { deprecation: Deprecation, span: Span },
730
731    /// Represents `#[rustc_do_not_implement_via_object]`.
732    DoNotImplementViaObject(Span),
733
734    /// Represents `#[diagnostic::do_not_recommend]`.
735    DoNotRecommend { attr_span: Span },
736
737    /// Represents [`#[doc]`](https://doc.rust-lang.org/stable/rustdoc/write-documentation/the-doc-attribute.html).
738    /// Represents all other uses of the [`#[doc]`](https://doc.rust-lang.org/stable/rustdoc/write-documentation/the-doc-attribute.html)
739    /// attribute.
740    Doc(Box<DocAttribute>),
741
742    /// Represents specifically [`#[doc = "..."]`](https://doc.rust-lang.org/stable/rustdoc/write-documentation/the-doc-attribute.html).
743    /// i.e. doc comments.
744    DocComment { style: AttrStyle, kind: DocFragmentKind, span: Span, comment: Symbol },
745
746    /// Represents `#[rustc_dummy]`.
747    Dummy,
748
749    /// Implementation detail of `#[eii]`
750    EiiDeclaration(EiiDecl),
751
752    /// Implementation detail of `#[eii]`
753    EiiForeignItem,
754
755    /// Implementation detail of `#[eii]`
756    EiiImpls(ThinVec<EiiImpl>),
757
758    /// Represents [`#[export_name]`](https://doc.rust-lang.org/reference/abi.html#the-export_name-attribute).
759    ExportName {
760        /// The name to export this item with.
761        /// It may not contain \0 bytes as it will be converted to a null-terminated string.
762        name: Symbol,
763        span: Span,
764    },
765
766    /// Represents `#[export_stable]`.
767    ExportStable,
768
769    /// Represents `#[ffi_const]`.
770    FfiConst(Span),
771
772    /// Represents `#[ffi_pure]`.
773    FfiPure(Span),
774
775    /// Represents `#[fundamental]`.
776    Fundamental,
777
778    /// Represents `#[ignore]`
779    Ignore {
780        span: Span,
781        /// ignore can optionally have a reason: `#[ignore = "reason this is ignored"]`
782        reason: Option<Symbol>,
783    },
784
785    /// Represents `#[inline]` and `#[rustc_force_inline]`.
786    Inline(InlineAttr, Span),
787
788    /// Represents `#[instruction_set]`
789    InstructionSet(InstructionSetAttr),
790
791    /// Represents `#[link]`.
792    Link(ThinVec<LinkEntry>, Span),
793
794    /// Represents `#[link_name]`.
795    LinkName { name: Symbol, span: Span },
796
797    /// Represents `#[link_ordinal]`.
798    LinkOrdinal { ordinal: u16, span: Span },
799
800    /// Represents [`#[link_section]`](https://doc.rust-lang.org/reference/abi.html#the-link_section-attribute)
801    LinkSection { name: Symbol, span: Span },
802
803    /// Represents `#[linkage]`.
804    Linkage(Linkage, Span),
805
806    /// Represents `#[loop_match]`.
807    LoopMatch(Span),
808
809    /// Represents `#[macro_escape]`.
810    MacroEscape(Span),
811
812    /// Represents [`#[macro_export]`](https://doc.rust-lang.org/reference/macros-by-example.html#r-macro.decl.scope.path).
813    MacroExport { span: Span, local_inner_macros: bool },
814
815    /// Represents `#[rustc_macro_transparency]`.
816    MacroTransparency(Transparency),
817
818    /// Represents `#[macro_use]`.
819    MacroUse { span: Span, arguments: MacroUseArgs },
820
821    /// Represents `#[marker]`.
822    Marker(Span),
823
824    /// Represents [`#[may_dangle]`](https://std-dev-guide.rust-lang.org/tricky/may-dangle.html).
825    MayDangle(Span),
826
827    /// Represents `#[move_size_limit]`
828    MoveSizeLimit { attr_span: Span, limit_span: Span, limit: Limit },
829
830    /// Represents `#[must_not_suspend]`
831    MustNotSupend { reason: Option<Symbol> },
832
833    /// Represents `#[must_use]`.
834    MustUse {
835        span: Span,
836        /// must_use can optionally have a reason: `#[must_use = "reason this must be used"]`
837        reason: Option<Symbol>,
838    },
839
840    /// Represents `#[naked]`
841    Naked(Span),
842
843    /// Represents `#[no_core]`
844    NoCore(Span),
845
846    /// Represents `#[no_implicit_prelude]`
847    NoImplicitPrelude(Span),
848
849    /// Represents `#[no_link]`
850    NoLink,
851
852    /// Represents `#[no_mangle]`
853    NoMangle(Span),
854
855    /// Represents `#[no_std]`
856    NoStd(Span),
857
858    /// Represents `#[non_exhaustive]`
859    NonExhaustive(Span),
860
861    /// Represents `#[rustc_objc_class]`
862    ObjcClass { classname: Symbol, span: Span },
863
864    /// Represents `#[rustc_objc_selector]`
865    ObjcSelector { methname: Symbol, span: Span },
866
867    /// Represents `#[optimize(size|speed)]`
868    Optimize(OptimizeAttr, Span),
869
870    /// Represents `#[rustc_paren_sugar]`.
871    ParenSugar(Span),
872
873    /// Represents `#[rustc_pass_by_value]` (used by the `rustc_pass_by_value` lint).
874    PassByValue(Span),
875
876    /// Represents `#[path]`
877    Path(Symbol, Span),
878
879    /// Represents `#[pattern_complexity_limit]`
880    PatternComplexityLimit { attr_span: Span, limit_span: Span, limit: Limit },
881
882    /// Represents `#[pin_v2]`
883    PinV2(Span),
884
885    /// Represents `#[pointee]`
886    Pointee(Span),
887
888    /// Represents `#[proc_macro]`
889    ProcMacro(Span),
890
891    /// Represents `#[proc_macro_attribute]`
892    ProcMacroAttribute(Span),
893
894    /// Represents `#[proc_macro_derive]`
895    ProcMacroDerive { trait_name: Symbol, helper_attrs: ThinVec<Symbol>, span: Span },
896
897    /// Represents `#[rustc_pub_transparent]` (used by the `repr_transparent_external_private_fields` lint).
898    PubTransparent(Span),
899
900    /// Represents [`#[recursion_limit]`](https://doc.rust-lang.org/reference/attributes/limits.html#the-recursion_limit-attribute)
901    RecursionLimit { attr_span: Span, limit_span: Span, limit: Limit },
902
903    /// Represents [`#[repr]`](https://doc.rust-lang.org/stable/reference/type-layout.html#representations).
904    Repr { reprs: ThinVec<(ReprAttr, Span)>, first_span: Span },
905
906    /// Represents `#[rustc_builtin_macro]`.
907    RustcBuiltinMacro { builtin_name: Option<Symbol>, helper_attrs: ThinVec<Symbol>, span: Span },
908
909    /// Represents `#[rustc_coherence_is_core]`
910    RustcCoherenceIsCore(Span),
911
912    /// Represents `#[rustc_dump_def_parents]`
913    RustcDumpDefParents,
914
915    /// Represents `#[rustc_dump_item_bounds]`
916    RustcDumpItemBounds,
917
918    /// Represents `#[rustc_dump_predicates]`
919    RustcDumpPredicates,
920
921    /// Represents `#[rustc_dump_user_args]`
922    RustcDumpUserArgs,
923
924    /// Represents `#[rustc_dump_vtable]`
925    RustcDumpVtable(Span),
926
927    /// Represents `#[rustc_has_incoherent_inherent_impls]`
928    RustcHasIncoherentInherentImpls,
929
930    /// Represents `#[rustc_layout_scalar_valid_range_end]`.
931    RustcLayoutScalarValidRangeEnd(Box<u128>, Span),
932
933    /// Represents `#[rustc_layout_scalar_valid_range_start]`.
934    RustcLayoutScalarValidRangeStart(Box<u128>, Span),
935
936    /// Represents `#[rustc_legacy_const_generics]`
937    RustcLegacyConstGenerics { fn_indexes: ThinVec<(usize, Span)>, attr_span: Span },
938
939    /// Represents `#[rustc_lint_diagnostics]`
940    RustcLintDiagnostics,
941
942    /// Represents `#[rustc_lint_opt_deny_field_access]`
943    RustcLintOptDenyFieldAccess { lint_message: Symbol },
944
945    /// Represents `#[rustc_lint_opt_ty]`
946    RustcLintOptTy,
947
948    /// Represents `#[rustc_lint_query_instability]`
949    RustcLintQueryInstability,
950
951    /// Represents `#[rustc_lint_untracked_query_information]`
952    RustcLintUntrackedQueryInformation,
953
954    /// Represents `#[rustc_main]`.
955    RustcMain,
956
957    /// Represents `#[rustc_must_implement_one_of]`
958    RustcMustImplementOneOf { attr_span: Span, fn_names: ThinVec<Ident> },
959
960    /// Represents `#[rustc_never_returns_null_ptr]`
961    RustcNeverReturnsNullPointer,
962
963    /// Represents `#[rustc_no_implicit_autorefs]`
964    RustcNoImplicitAutorefs,
965
966    /// Represents `#[rustc_object_lifetime_default]`.
967    RustcObjectLifetimeDefault,
968
969    /// Represents `#[rustc_pass_indirectly_in_non_rustic_abis]`
970    RustcPassIndirectlyInNonRusticAbis(Span),
971
972    /// Represents `#[rustc_scalable_vector(N)]`
973    RustcScalableVector {
974        /// The base multiple of lanes that are in a scalable vector, if provided. `element_count`
975        /// is not provided for representing tuple types.
976        element_count: Option<u16>,
977        span: Span,
978    },
979
980    /// Represents `#[rustc_should_not_be_called_on_const_items]`
981    RustcShouldNotBeCalledOnConstItems(Span),
982
983    /// Represents `#[rustc_simd_monomorphize_lane_limit = "N"]`.
984    RustcSimdMonomorphizeLaneLimit(Limit),
985
986    /// Represents `#[sanitize]`
987    ///
988    /// the on set and off set are distjoint since there's a third option: unset.
989    /// a node may not set the sanitizer setting in which case it inherits from parents.
990    /// rtsan is unset if None
991    Sanitize {
992        on_set: SanitizerSet,
993        off_set: SanitizerSet,
994        rtsan: Option<RtsanSetting>,
995        span: Span,
996    },
997
998    /// Represents `#[should_panic]`
999    ShouldPanic { reason: Option<Symbol>, span: Span },
1000
1001    /// Represents `#[rustc_skip_during_method_dispatch]`.
1002    SkipDuringMethodDispatch { array: bool, boxed_slice: bool, span: Span },
1003
1004    /// Represents `#[rustc_specialization_trait]`.
1005    SpecializationTrait(Span),
1006
1007    /// Represents `#[stable]`, `#[unstable]` and `#[rustc_allowed_through_unstable_modules]`.
1008    Stability {
1009        stability: Stability,
1010        /// Span of the attribute.
1011        span: Span,
1012    },
1013
1014    /// Represents `#[rustc_std_internal_symbol]`.
1015    StdInternalSymbol(Span),
1016
1017    /// Represents `#[target_feature(enable = "...")]` and
1018    /// `#[unsafe(force_target_feature(enable = "...")]`.
1019    TargetFeature { features: ThinVec<(Symbol, Span)>, attr_span: Span, was_forced: bool },
1020
1021    /// Represents `#[thread_local]`
1022    ThreadLocal,
1023
1024    /// Represents `#[track_caller]`
1025    TrackCaller(Span),
1026
1027    /// Represents `#[type_const]`.
1028    TypeConst(Span),
1029
1030    /// Represents `#[type_length_limit]`
1031    TypeLengthLimit { attr_span: Span, limit_span: Span, limit: Limit },
1032
1033    /// Represents `#[rustc_unsafe_specialization_marker]`.
1034    UnsafeSpecializationMarker(Span),
1035
1036    /// Represents `#[unstable_feature_bound]`.
1037    UnstableFeatureBound(ThinVec<(Symbol, Span)>),
1038
1039    /// Represents `#[used]`
1040    Used { used_by: UsedBy, span: Span },
1041
1042    /// Represents `#[windows_subsystem]`.
1043    WindowsSubsystem(WindowsSubsystemKind, Span),
1044    // tidy-alphabetical-end
1045}