Skip to main content

rustc_ast_passes/
diagnostics.rs

1//! Errors emitted by ast_passes.
2
3use rustc_abi::ExternAbi;
4use rustc_errors::codes::*;
5use rustc_errors::{Applicability, Diag, EmissionGuarantee, Subdiagnostic};
6use rustc_macros::{Diagnostic, Subdiagnostic};
7use rustc_span::{Ident, Span, Symbol};
8
9#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            VisibilityNotPermitted where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    VisibilityNotPermitted {
                        span: __binding_0,
                        note: __binding_1,
                        remove_qualifier_sugg: __binding_2 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("visibility qualifiers are not permitted here")));
                        let __code_0 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(""))
                                            })].into_iter();
                        diag.code(E0449);
                        ;
                        diag.span(__binding_0);
                        diag.subdiagnostic(__binding_1);
                        diag.span_suggestions_with_style(__binding_2,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("remove the qualifier")),
                            __code_0, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowCode);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
10#[diag("visibility qualifiers are not permitted here", code = E0449)]
11pub(crate) struct VisibilityNotPermitted {
12    #[primary_span]
13    pub span: Span,
14    #[subdiagnostic]
15    pub note: VisibilityNotPermittedNote,
16    #[suggestion("remove the qualifier", code = "", applicability = "machine-applicable")]
17    pub remove_qualifier_sugg: Span,
18}
19
20#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for VisibilityNotPermittedNote {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    VisibilityNotPermittedNote::EnumVariant => {
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("enum variants and their fields always share the visibility of the enum they are in")),
                                &sub_args);
                        diag.note(__message);
                    }
                    VisibilityNotPermittedNote::TraitImpl => {
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("trait items always share the visibility of their trait")),
                                &sub_args);
                        diag.note(__message);
                    }
                    VisibilityNotPermittedNote::IndividualImplItems => {
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("place qualifiers on individual impl items instead")),
                                &sub_args);
                        diag.note(__message);
                    }
                    VisibilityNotPermittedNote::IndividualForeignItems => {
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("place qualifiers on individual foreign items instead")),
                                &sub_args);
                        diag.note(__message);
                    }
                }
            }
        }
    };Subdiagnostic)]
21pub(crate) enum VisibilityNotPermittedNote {
22    #[note("enum variants and their fields always share the visibility of the enum they are in")]
23    EnumVariant,
24    #[note("trait items always share the visibility of their trait")]
25    TraitImpl,
26    #[note("place qualifiers on individual impl items instead")]
27    IndividualImplItems,
28    #[note("place qualifiers on individual foreign items instead")]
29    IndividualForeignItems,
30}
31#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for ImplFnConst
            where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    ImplFnConst {
                        span: __binding_0, parent_constness: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("redundant `const` fn marker in const impl")));
                        let __code_1 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(""))
                                            })].into_iter();
                        ;
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("remove the `const`")),
                            __code_1, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowCode);
                        diag.span_label(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("this declares all associated functions implicitly const")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
32#[diag("redundant `const` fn marker in const impl")]
33pub(crate) struct ImplFnConst {
34    #[primary_span]
35    #[suggestion("remove the `const`", code = "", applicability = "machine-applicable")]
36    pub span: Span,
37    #[label("this declares all associated functions implicitly const")]
38    pub parent_constness: Span,
39}
40
41#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for TraitFnConst
            where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    TraitFnConst {
                        span: __binding_0,
                        in_impl: __binding_1,
                        const_context_label: __binding_2,
                        remove_const_sugg: __binding_3,
                        requires_multiple_changes: __binding_4,
                        make_impl_const_sugg: __binding_5,
                        make_trait_const_sugg: __binding_6 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("functions in {$in_impl ->\n        [true] trait impls\n        *[false] traits\n    } cannot be declared const")));
                        let __code_2 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(""))
                                            })].into_iter();
                        let __code_3 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("const "))
                                            })].into_iter();
                        let __code_4 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("const "))
                                            })].into_iter();
                        diag.code(E0379);
                        ;
                        diag.arg("in_impl", __binding_1);
                        diag.arg("requires_multiple_changes", __binding_4);
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("functions in {$in_impl ->\n            [true] trait impls\n            *[false] traits\n        } cannot be const")));
                        if let Some(__binding_2) = __binding_2 {
                            diag.span_label(__binding_2,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("this declares all associated functions implicitly const")));
                        }
                        diag.span_suggestions_with_style(__binding_3.0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("remove the `const`{$requires_multiple_changes ->\n            [true] {\" ...\"}\n            *[false] {\"\"}\n        }")),
                            __code_2, __binding_3.1,
                            rustc_errors::SuggestionStyle::ShowCode);
                        if let Some(__binding_5) = __binding_5 {
                            diag.span_suggestions_with_style(__binding_5,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("... and declare the impl to be const instead")),
                                __code_3, rustc_errors::Applicability::MaybeIncorrect,
                                rustc_errors::SuggestionStyle::ShowCode);
                        }
                        if let Some(__binding_6) = __binding_6 {
                            diag.span_suggestions_with_style(__binding_6,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("... and declare the trait to be const instead")),
                                __code_4, rustc_errors::Applicability::MaybeIncorrect,
                                rustc_errors::SuggestionStyle::ShowCode);
                        }
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
42#[diag("functions in {$in_impl ->
43        [true] trait impls
44        *[false] traits
45    } cannot be declared const", code = E0379)]
46pub(crate) struct TraitFnConst {
47    #[primary_span]
48    #[label(
49        "functions in {$in_impl ->
50            [true] trait impls
51            *[false] traits
52        } cannot be const"
53    )]
54    pub span: Span,
55    pub in_impl: bool,
56    #[label("this declares all associated functions implicitly const")]
57    pub const_context_label: Option<Span>,
58    #[suggestion(
59        "remove the `const`{$requires_multiple_changes ->
60            [true] {\" ...\"}
61            *[false] {\"\"}
62        }",
63        code = ""
64    )]
65    pub remove_const_sugg: (Span, Applicability),
66    pub requires_multiple_changes: bool,
67    #[suggestion(
68        "... and declare the impl to be const instead",
69        code = "const ",
70        applicability = "maybe-incorrect"
71    )]
72    pub make_impl_const_sugg: Option<Span>,
73    #[suggestion(
74        "... and declare the trait to be const instead",
75        code = "const ",
76        applicability = "maybe-incorrect"
77    )]
78    pub make_trait_const_sugg: Option<Span>,
79}
80
81#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            AsyncFnInConstTraitOrTraitImpl where
            G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    AsyncFnInConstTraitOrTraitImpl {
                        async_keyword: __binding_0,
                        context: __binding_1,
                        const_keyword: __binding_2 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("async functions are not allowed in `const` {$context ->\n        [trait_impl] trait impls\n        [impl] impls\n        *[trait] traits\n    }")));
                        ;
                        diag.arg("context", __binding_1);
                        diag.span(__binding_0);
                        diag.span_label(__binding_2,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("associated functions of `const` cannot be declared `async`")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
82#[diag(
83    "async functions are not allowed in `const` {$context ->
84        [trait_impl] trait impls
85        [impl] impls
86        *[trait] traits
87    }"
88)]
89pub(crate) struct AsyncFnInConstTraitOrTraitImpl {
90    #[primary_span]
91    pub async_keyword: Span,
92    pub context: &'static str,
93    #[label("associated functions of `const` cannot be declared `async`")]
94    pub const_keyword: Span,
95}
96
97#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for ForbiddenBound
            where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    ForbiddenBound { spans: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("bounds cannot be used in this context")));
                        ;
                        diag.span(__binding_0.clone());
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
98#[diag("bounds cannot be used in this context")]
99pub(crate) struct ForbiddenBound {
100    #[primary_span]
101    pub spans: Vec<Span>,
102}
103
104#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            ForbiddenConstParam where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    ForbiddenConstParam { const_param_spans: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("late-bound const parameters cannot be used currently")));
                        ;
                        diag.span(__binding_0.clone());
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
105#[diag("late-bound const parameters cannot be used currently")]
106pub(crate) struct ForbiddenConstParam {
107    #[primary_span]
108    pub const_param_spans: Vec<Span>,
109}
110
111#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for FnParamTooMany
            where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    FnParamTooMany {
                        span: __binding_0, max_num_args: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("function can not have more than {$max_num_args} arguments")));
                        ;
                        diag.arg("max_num_args", __binding_1);
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
112#[diag("function can not have more than {$max_num_args} arguments")]
113pub(crate) struct FnParamTooMany {
114    #[primary_span]
115    pub span: Span,
116    pub max_num_args: usize,
117}
118
119#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            FnParamCVarArgsNotLast where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    FnParamCVarArgsNotLast { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`...` must be the last argument of a C-variadic function")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
120#[diag("`...` must be the last argument of a C-variadic function")]
121pub(crate) struct FnParamCVarArgsNotLast {
122    #[primary_span]
123    pub span: Span,
124}
125
126#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            InvalidSplattedArg where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    InvalidSplattedArg {
                        splatted_arg_index: __binding_0, span: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`#[splat]` is not supported on argument index {$splatted_arg_index}")));
                        diag.help(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("remove `#[splat]`, or use it on an argument closer to the start of the argument list")));
                        ;
                        diag.arg("splatted_arg_index", __binding_0);
                        diag.span(__binding_1);
                        diag.span_label(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`#[splat]` is not supported here")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
127#[diag("`#[splat]` is not supported on argument index {$splatted_arg_index}")]
128#[help("remove `#[splat]`, or use it on an argument closer to the start of the argument list")]
129pub(crate) struct InvalidSplattedArg {
130    pub splatted_arg_index: u16,
131
132    #[primary_span]
133    #[label("`#[splat]` is not supported here")]
134    pub span: Span,
135}
136
137#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            DuplicateSplattedArgs where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    DuplicateSplattedArgs { spans: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("multiple `#[splat]`s are not allowed in the same function")));
                        diag.help(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("remove `#[splat]` from all but one argument")));
                        ;
                        diag.span(__binding_0.clone());
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
138#[diag("multiple `#[splat]`s are not allowed in the same function")]
139#[help("remove `#[splat]` from all but one argument")]
140pub(crate) struct DuplicateSplattedArgs {
141    #[primary_span]
142    pub spans: Vec<Span>,
143}
144
145#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            CVarArgsAndSplat where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    CVarArgsAndSplat { spans: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`...` and `#[splat]` are not allowed in the same function")));
                        diag.help(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("remove `#[splat]` or remove `...`")));
                        ;
                        diag.span(__binding_0.clone());
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
146#[diag("`...` and `#[splat]` are not allowed in the same function")]
147#[help("remove `#[splat]` or remove `...`")]
148pub(crate) struct CVarArgsAndSplat {
149    #[primary_span]
150    pub spans: Vec<Span>,
151}
152
153#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            FnParamDocComment where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    FnParamDocComment { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("documentation comments cannot be applied to function parameters")));
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("doc comments are not allowed here")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
154#[diag("documentation comments cannot be applied to function parameters")]
155pub(crate) struct FnParamDocComment {
156    #[primary_span]
157    #[label("doc comments are not allowed here")]
158    pub span: Span,
159}
160
161// FIXME(splat): add splat to the allowed built-in attributes when it is complete/stabilized
162#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            FnParamForbiddenAttr where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    FnParamForbiddenAttr { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("allow, cfg, cfg_attr, deny, expect, forbid, and warn are the only allowed built-in attributes in function parameters")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
163#[diag(
164    "allow, cfg, cfg_attr, deny, expect, forbid, and warn are the only allowed built-in attributes in function parameters"
165)]
166pub(crate) struct FnParamForbiddenAttr {
167    #[primary_span]
168    pub span: Span,
169}
170
171#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            FnParamForbiddenSelf where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    FnParamForbiddenSelf { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`self` parameter is only allowed in associated functions")));
                        diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("associated functions are those in `impl` or `trait` definitions")));
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("not semantically valid as function parameter")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
172#[diag("`self` parameter is only allowed in associated functions")]
173#[note("associated functions are those in `impl` or `trait` definitions")]
174pub(crate) struct FnParamForbiddenSelf {
175    #[primary_span]
176    #[label("not semantically valid as function parameter")]
177    pub span: Span,
178}
179
180#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            ForbiddenDefault where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    ForbiddenDefault { span: __binding_0, def_span: __binding_1
                        } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`default` is only allowed on items in trait impls")));
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`default` because of this")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
181#[diag("`default` is only allowed on items in trait impls")]
182pub(crate) struct ForbiddenDefault {
183    #[primary_span]
184    pub span: Span,
185    #[label("`default` because of this")]
186    pub def_span: Span,
187}
188
189#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for ForbiddenFinal
            where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    ForbiddenFinal { span: __binding_0, def_span: __binding_1 }
                        => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`final` is only allowed on associated functions in traits")));
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`final` because of this")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
190#[diag("`final` is only allowed on associated functions in traits")]
191pub(crate) struct ForbiddenFinal {
192    #[primary_span]
193    pub span: Span,
194    #[label("`final` because of this")]
195    pub def_span: Span,
196}
197
198#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            ForbiddenFinalWithoutBody where G: rustc_errors::EmissionGuarantee
            {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    ForbiddenFinalWithoutBody {
                        span: __binding_0, def_span: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`final` is only allowed on associated functions if they have a body")));
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`final` because of this")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
199#[diag("`final` is only allowed on associated functions if they have a body")]
200pub(crate) struct ForbiddenFinalWithoutBody {
201    #[primary_span]
202    pub span: Span,
203    #[label("`final` because of this")]
204    pub def_span: Span,
205}
206
207#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            AssocConstWithoutBody where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    AssocConstWithoutBody {
                        span: __binding_0, replace_span: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("associated constant in `impl` without body")));
                        let __code_5 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(" = <expr>;"))
                                            })].into_iter();
                        ;
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("provide a definition for the constant")),
                            __code_5, rustc_errors::Applicability::HasPlaceholders,
                            rustc_errors::SuggestionStyle::ShowCode);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
208#[diag("associated constant in `impl` without body")]
209pub(crate) struct AssocConstWithoutBody {
210    #[primary_span]
211    pub span: Span,
212    #[suggestion(
213        "provide a definition for the constant",
214        code = " = <expr>;",
215        applicability = "has-placeholders"
216    )]
217    pub replace_span: Span,
218}
219
220#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            AssocFnWithoutBody where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    AssocFnWithoutBody {
                        span: __binding_0, replace_span: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("associated function in `impl` without body")));
                        let __code_6 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(" {{ <body> }}"))
                                            })].into_iter();
                        ;
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("provide a definition for the function")),
                            __code_6, rustc_errors::Applicability::HasPlaceholders,
                            rustc_errors::SuggestionStyle::ShowCode);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
221#[diag("associated function in `impl` without body")]
222pub(crate) struct AssocFnWithoutBody {
223    #[primary_span]
224    pub span: Span,
225    #[suggestion(
226        "provide a definition for the function",
227        code = " {{ <body> }}",
228        applicability = "has-placeholders"
229    )]
230    pub replace_span: Span,
231}
232
233#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            AssocTypeWithoutBody where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    AssocTypeWithoutBody {
                        span: __binding_0, replace_span: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("associated type in `impl` without body")));
                        let __code_7 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(" = <type>;"))
                                            })].into_iter();
                        ;
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("provide a definition for the type")),
                            __code_7, rustc_errors::Applicability::HasPlaceholders,
                            rustc_errors::SuggestionStyle::ShowCode);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
234#[diag("associated type in `impl` without body")]
235pub(crate) struct AssocTypeWithoutBody {
236    #[primary_span]
237    pub span: Span,
238    #[suggestion(
239        "provide a definition for the type",
240        code = " = <type>;",
241        applicability = "has-placeholders"
242    )]
243    pub replace_span: Span,
244}
245
246#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            ConstWithoutBody where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    ConstWithoutBody {
                        span: __binding_0, replace_span: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("free constant item without body")));
                        let __code_8 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(" = <expr>;"))
                                            })].into_iter();
                        ;
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("provide a definition for the constant")),
                            __code_8, rustc_errors::Applicability::HasPlaceholders,
                            rustc_errors::SuggestionStyle::ShowCode);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
247#[diag("free constant item without body")]
248pub(crate) struct ConstWithoutBody {
249    #[primary_span]
250    pub span: Span,
251    #[suggestion(
252        "provide a definition for the constant",
253        code = " = <expr>;",
254        applicability = "has-placeholders"
255    )]
256    pub replace_span: Span,
257}
258
259#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            StaticWithoutBody where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    StaticWithoutBody {
                        span: __binding_0, replace_span: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("free static item without body")));
                        let __code_9 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(" = <expr>;"))
                                            })].into_iter();
                        ;
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("provide a definition for the static")),
                            __code_9, rustc_errors::Applicability::HasPlaceholders,
                            rustc_errors::SuggestionStyle::ShowCode);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
260#[diag("free static item without body")]
261pub(crate) struct StaticWithoutBody {
262    #[primary_span]
263    pub span: Span,
264    #[suggestion(
265        "provide a definition for the static",
266        code = " = <expr>;",
267        applicability = "has-placeholders"
268    )]
269    pub replace_span: Span,
270}
271
272#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            TyAliasWithoutBody where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    TyAliasWithoutBody {
                        span: __binding_0, replace_span: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("free type alias without body")));
                        let __code_10 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(" = <type>;"))
                                            })].into_iter();
                        ;
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("provide a definition for the type")),
                            __code_10, rustc_errors::Applicability::HasPlaceholders,
                            rustc_errors::SuggestionStyle::ShowCode);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
273#[diag("free type alias without body")]
274pub(crate) struct TyAliasWithoutBody {
275    #[primary_span]
276    pub span: Span,
277    #[suggestion(
278        "provide a definition for the type",
279        code = " = <type>;",
280        applicability = "has-placeholders"
281    )]
282    pub replace_span: Span,
283}
284
285#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for FnWithoutBody
            where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    FnWithoutBody {
                        span: __binding_0,
                        replace_span: __binding_1,
                        extern_block_suggestion: __binding_2 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("free function without a body")));
                        let __code_11 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(" {{ <body> }}"))
                                            })].into_iter();
                        ;
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("provide a definition for the function")),
                            __code_11, rustc_errors::Applicability::HasPlaceholders,
                            rustc_errors::SuggestionStyle::ShowCode);
                        if let Some(__binding_2) = __binding_2 {
                            diag.subdiagnostic(__binding_2);
                        }
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
286#[diag("free function without a body")]
287pub(crate) struct FnWithoutBody {
288    #[primary_span]
289    pub span: Span,
290    #[suggestion(
291        "provide a definition for the function",
292        code = " {{ <body> }}",
293        applicability = "has-placeholders"
294    )]
295    pub replace_span: Span,
296    #[subdiagnostic]
297    pub extern_block_suggestion: Option<ExternBlockSuggestion>,
298}
299
300#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for ExternBlockSuggestion {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    ExternBlockSuggestion::Implicit {
                        start_span: __binding_0, end_span: __binding_1 } => {
                        let mut suggestions = Vec::new();
                        let __code_12 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!("extern {{"))
                                });
                        let __code_13 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!(" }}"))
                                });
                        suggestions.push((__binding_0, __code_12));
                        suggestions.push((__binding_1, __code_13));
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("if you meant to declare an externally defined function, use an `extern` block")),
                                &sub_args);
                        diag.multipart_suggestion_with_style(__message, suggestions,
                            rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowCode);
                    }
                    ExternBlockSuggestion::Explicit {
                        start_span: __binding_0,
                        end_span: __binding_1,
                        abi: __binding_2 } => {
                        let mut suggestions = Vec::new();
                        let __code_14 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!("extern \"{0}\" {{",
                                            __binding_2))
                                });
                        let __code_15 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!(" }}"))
                                });
                        suggestions.push((__binding_0, __code_14));
                        suggestions.push((__binding_1, __code_15));
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("if you meant to declare an externally defined function, use an `extern` block")),
                                &sub_args);
                        diag.multipart_suggestion_with_style(__message, suggestions,
                            rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowCode);
                    }
                }
            }
        }
    };Subdiagnostic)]
301pub(crate) enum ExternBlockSuggestion {
302    #[multipart_suggestion(
303        "if you meant to declare an externally defined function, use an `extern` block",
304        applicability = "maybe-incorrect"
305    )]
306    Implicit {
307        #[suggestion_part(code = "extern {{")]
308        start_span: Span,
309        #[suggestion_part(code = " }}")]
310        end_span: Span,
311    },
312    #[multipart_suggestion(
313        "if you meant to declare an externally defined function, use an `extern` block",
314        applicability = "maybe-incorrect"
315    )]
316    Explicit {
317        #[suggestion_part(code = "extern \"{abi}\" {{")]
318        start_span: Span,
319        #[suggestion_part(code = " }}")]
320        end_span: Span,
321        abi: Symbol,
322    },
323}
324
325#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            InvalidSafetyOnExtern where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    InvalidSafetyOnExtern {
                        item_span: __binding_0, block: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("items in `extern` blocks without an `unsafe` qualifier cannot have safety qualifiers")));
                        let __code_16 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("unsafe "))
                                            })].into_iter();
                        ;
                        diag.span(__binding_0);
                        if let Some(__binding_1) = __binding_1 {
                            diag.span_suggestions_with_style(__binding_1,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("add `unsafe` to this `extern` block")),
                                __code_16, rustc_errors::Applicability::MachineApplicable,
                                rustc_errors::SuggestionStyle::ShowAlways);
                        }
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
326#[diag("items in `extern` blocks without an `unsafe` qualifier cannot have safety qualifiers")]
327pub(crate) struct InvalidSafetyOnExtern {
328    #[primary_span]
329    pub item_span: Span,
330    #[suggestion(
331        "add `unsafe` to this `extern` block",
332        code = "unsafe ",
333        applicability = "machine-applicable",
334        style = "verbose"
335    )]
336    pub block: Option<Span>,
337}
338
339#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            InvalidSafetyOnItem where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    InvalidSafetyOnItem { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("items outside of `unsafe extern {\"{ }\"}` cannot be declared with `safe` safety qualifier")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
340#[diag(
341    "items outside of `unsafe extern {\"{ }\"}` cannot be declared with `safe` safety qualifier"
342)]
343pub(crate) struct InvalidSafetyOnItem {
344    #[primary_span]
345    pub span: Span,
346}
347
348#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            InvalidSafetyOnFnPtr where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    InvalidSafetyOnFnPtr { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("function pointers cannot be declared with `safe` safety qualifier")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
349#[diag("function pointers cannot be declared with `safe` safety qualifier")]
350pub(crate) struct InvalidSafetyOnFnPtr {
351    #[primary_span]
352    pub span: Span,
353}
354
355#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for UnsafeStatic
            where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    UnsafeStatic { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("static items cannot be declared with `unsafe` safety qualifier outside of `extern` block")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
356#[diag("static items cannot be declared with `unsafe` safety qualifier outside of `extern` block")]
357pub(crate) struct UnsafeStatic {
358    #[primary_span]
359    pub span: Span,
360}
361
362#[derive(const _: () =
    {
        impl<'_sess, 'a, G> rustc_errors::Diagnostic<'_sess, G> for
            BoundInContext<'a> where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    BoundInContext { span: __binding_0, ctx: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("bounds on `type`s in {$ctx} have no effect")));
                        ;
                        diag.arg("ctx", __binding_1);
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
363#[diag("bounds on `type`s in {$ctx} have no effect")]
364pub(crate) struct BoundInContext<'a> {
365    #[primary_span]
366    pub span: Span,
367    pub ctx: &'a str,
368}
369
370#[derive(const _: () =
    {
        impl<'_sess, 'a, G> rustc_errors::Diagnostic<'_sess, G> for
            ExternTypesCannotHave<'a> where G: rustc_errors::EmissionGuarantee
            {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    ExternTypesCannotHave {
                        span: __binding_0,
                        descr: __binding_1,
                        remove_descr: __binding_2,
                        block_span: __binding_3 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`type`s inside `extern` blocks cannot have {$descr}")));
                        let __code_17 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(""))
                                            })].into_iter();
                        diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("for more information, visit https://doc.rust-lang.org/std/keyword.extern.html")));
                        ;
                        diag.arg("descr", __binding_1);
                        diag.arg("remove_descr", __binding_2);
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("remove the {$remove_descr}")),
                            __code_17, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowCode);
                        diag.span_label(__binding_3,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`extern` block begins here")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
371#[diag("`type`s inside `extern` blocks cannot have {$descr}")]
372#[note("for more information, visit https://doc.rust-lang.org/std/keyword.extern.html")]
373pub(crate) struct ExternTypesCannotHave<'a> {
374    #[primary_span]
375    #[suggestion("remove the {$remove_descr}", code = "", applicability = "maybe-incorrect")]
376    pub span: Span,
377    pub descr: &'a str,
378    pub remove_descr: &'a str,
379    #[label("`extern` block begins here")]
380    pub block_span: Span,
381}
382
383#[derive(const _: () =
    {
        impl<'_sess, 'a, G> rustc_errors::Diagnostic<'_sess, G> for
            BodyInExtern<'a> where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    BodyInExtern {
                        span: __binding_0,
                        body: __binding_1,
                        block: __binding_2,
                        kind: __binding_3 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("incorrect `{$kind}` inside `extern` block")));
                        diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("for more information, visit https://doc.rust-lang.org/std/keyword.extern.html")));
                        ;
                        diag.arg("kind", __binding_3);
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("cannot have a body")));
                        diag.span_label(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("the invalid body")));
                        diag.span_label(__binding_2,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`extern` blocks define existing foreign {$kind}s and {$kind}s inside of them cannot have a body")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
384#[diag("incorrect `{$kind}` inside `extern` block")]
385#[note("for more information, visit https://doc.rust-lang.org/std/keyword.extern.html")]
386pub(crate) struct BodyInExtern<'a> {
387    #[primary_span]
388    #[label("cannot have a body")]
389    pub span: Span,
390    #[label("the invalid body")]
391    pub body: Span,
392    #[label(
393        "`extern` blocks define existing foreign {$kind}s and {$kind}s inside of them cannot have a body"
394    )]
395    pub block: Span,
396    pub kind: &'a str,
397}
398
399#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for FnBodyInExtern
            where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    FnBodyInExtern {
                        span: __binding_0, body: __binding_1, block: __binding_2 }
                        => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("incorrect function inside `extern` block")));
                        let __code_18 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(";"))
                                            })].into_iter();
                        diag.help(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("you might have meant to write a function accessible through FFI, which can be done by writing `extern fn` outside of the `extern` block")));
                        diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("for more information, visit https://doc.rust-lang.org/std/keyword.extern.html")));
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("cannot have a body")));
                        diag.span_suggestions_with_style(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("remove the invalid body")),
                            __code_18, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowCode);
                        diag.span_label(__binding_2,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`extern` blocks define existing foreign functions and functions inside of them cannot have a body")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
400#[diag("incorrect function inside `extern` block")]
401#[help(
402    "you might have meant to write a function accessible through FFI, which can be done by writing `extern fn` outside of the `extern` block"
403)]
404#[note("for more information, visit https://doc.rust-lang.org/std/keyword.extern.html")]
405pub(crate) struct FnBodyInExtern {
406    #[primary_span]
407    #[label("cannot have a body")]
408    pub span: Span,
409    #[suggestion("remove the invalid body", code = ";", applicability = "maybe-incorrect")]
410    pub body: Span,
411    #[label(
412        "`extern` blocks define existing foreign functions and functions inside of them cannot have a body"
413    )]
414    pub block: Span,
415}
416
417#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            FnQualifierInExtern where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    FnQualifierInExtern {
                        span: __binding_0, block: __binding_1, kw: __binding_2 } =>
                        {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("functions in `extern` blocks cannot have `{$kw}` qualifier")));
                        let __code_19 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(""))
                                            })].into_iter();
                        ;
                        diag.arg("kw", __binding_2);
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("remove the `{$kw}` qualifier")),
                            __code_19, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowCode);
                        diag.span_label(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("in this `extern` block")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
418#[diag("functions in `extern` blocks cannot have `{$kw}` qualifier")]
419pub(crate) struct FnQualifierInExtern {
420    #[primary_span]
421    #[suggestion("remove the `{$kw}` qualifier", code = "", applicability = "maybe-incorrect")]
422    pub span: Span,
423    #[label("in this `extern` block")]
424    pub block: Span,
425    pub kw: &'static str,
426}
427
428#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            ExternItemAscii where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    ExternItemAscii { span: __binding_0, block: __binding_1 } =>
                        {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("items in `extern` blocks cannot use non-ascii identifiers")));
                        diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("this limitation may be lifted in the future; see issue #83942 <https://github.com/rust-lang/rust/issues/83942> for more information")));
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("in this `extern` block")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
429#[diag("items in `extern` blocks cannot use non-ascii identifiers")]
430#[note(
431    "this limitation may be lifted in the future; see issue #83942 <https://github.com/rust-lang/rust/issues/83942> for more information"
432)]
433pub(crate) struct ExternItemAscii {
434    #[primary_span]
435    pub span: Span,
436    #[label("in this `extern` block")]
437    pub block: Span,
438}
439
440#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            CVariadicNoExtern where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    CVariadicNoExtern { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`...` is not supported for non-extern functions")));
                        diag.help(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("only `extern \"C\"` and `extern \"C-unwind\"` functions may have a C variable argument list")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
441#[diag("`...` is not supported for non-extern functions")]
442#[help(
443    "only `extern \"C\"` and `extern \"C-unwind\"` functions may have a C variable argument list"
444)]
445pub(crate) struct CVariadicNoExtern {
446    #[primary_span]
447    pub span: Span,
448}
449
450#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            CVariadicMustBeUnsafe where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    CVariadicMustBeUnsafe {
                        span: __binding_0, unsafe_span: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("functions with a C variable argument list must be unsafe")));
                        let __code_20 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("unsafe "))
                                            })].into_iter();
                        ;
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("add the `unsafe` keyword to this definition")),
                            __code_20, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
451#[diag("functions with a C variable argument list must be unsafe")]
452pub(crate) struct CVariadicMustBeUnsafe {
453    #[primary_span]
454    pub span: Span,
455
456    #[suggestion(
457        "add the `unsafe` keyword to this definition",
458        applicability = "maybe-incorrect",
459        code = "unsafe ",
460        style = "verbose"
461    )]
462    pub unsafe_span: Span,
463}
464
465#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            CVariadicBadExtern where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    CVariadicBadExtern {
                        span: __binding_0,
                        abi: __binding_1,
                        extern_span: __binding_2 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`...` is not supported for `extern \"{$abi}\"` functions")));
                        diag.help(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("only `extern \"C\"` and `extern \"C-unwind\"` functions may have a C variable argument list")));
                        ;
                        diag.arg("abi", __binding_1);
                        diag.span(__binding_0);
                        diag.span_label(__binding_2,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`extern \"{$abi}\"` because of this")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
466#[diag("`...` is not supported for `extern \"{$abi}\"` functions")]
467#[help(
468    "only `extern \"C\"` and `extern \"C-unwind\"` functions may have a C variable argument list"
469)]
470pub(crate) struct CVariadicBadExtern {
471    #[primary_span]
472    pub span: Span,
473    pub abi: &'static str,
474    #[label("`extern \"{$abi}\"` because of this")]
475    pub extern_span: Span,
476}
477
478#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            CVariadicBadNakedExtern where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    CVariadicBadNakedExtern {
                        span: __binding_0,
                        abi: __binding_1,
                        extern_span: __binding_2 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`...` is not supported for `extern \"{$abi}\"` naked functions")));
                        diag.help(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("C-variadic function must have a compatible calling convention")));
                        ;
                        diag.arg("abi", __binding_1);
                        diag.span(__binding_0);
                        diag.span_label(__binding_2,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`extern \"{$abi}\"` because of this")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
479#[diag("`...` is not supported for `extern \"{$abi}\"` naked functions")]
480#[help("C-variadic function must have a compatible calling convention")]
481pub(crate) struct CVariadicBadNakedExtern {
482    #[primary_span]
483    pub span: Span,
484    pub abi: &'static str,
485    #[label("`extern \"{$abi}\"` because of this")]
486    pub extern_span: Span,
487}
488
489#[derive(const _: () =
    {
        impl<'_sess, 'a, G> rustc_errors::Diagnostic<'_sess, G> for
            ItemUnderscore<'a> where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    ItemUnderscore { span: __binding_0, kind: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`{$kind}` items in this context need a name")));
                        ;
                        diag.arg("kind", __binding_1);
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`_` is not a valid name for this `{$kind}` item")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
490#[diag("`{$kind}` items in this context need a name")]
491pub(crate) struct ItemUnderscore<'a> {
492    #[primary_span]
493    #[label("`_` is not a valid name for this `{$kind}` item")]
494    pub span: Span,
495    pub kind: &'a str,
496}
497
498#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for NoMangleAscii
            where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    NoMangleAscii { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`#[no_mangle]` requires ASCII identifier")));
                        diag.code(E0754);
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
499#[diag("`#[no_mangle]` requires ASCII identifier", code = E0754)]
500pub(crate) struct NoMangleAscii {
501    #[primary_span]
502    pub span: Span,
503}
504
505#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for ModuleNonAscii
            where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    ModuleNonAscii { span: __binding_0, name: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("trying to load file for module `{$name}` with non-ascii identifier name")));
                        diag.code(E0754);
                        diag.help(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("consider using the `#[path]` attribute to specify filesystem path")));
                        ;
                        diag.arg("name", __binding_1);
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
506#[diag("trying to load file for module `{$name}` with non-ascii identifier name", code = E0754)]
507#[help("consider using the `#[path]` attribute to specify filesystem path")]
508pub(crate) struct ModuleNonAscii {
509    #[primary_span]
510    pub span: Span,
511    pub name: Symbol,
512}
513
514#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            AutoTraitGeneric where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    AutoTraitGeneric { span: __binding_0, ident: __binding_1 }
                        => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("auto traits cannot have generic parameters")));
                        let __code_21 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(""))
                                            })].into_iter();
                        diag.code(E0567);
                        ;
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("remove the parameters")),
                            __code_21, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::CompletelyHidden);
                        diag.span_label(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("auto trait cannot have generic parameters")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
515#[diag("auto traits cannot have generic parameters", code = E0567)]
516pub(crate) struct AutoTraitGeneric {
517    #[primary_span]
518    #[suggestion(
519        "remove the parameters",
520        code = "",
521        applicability = "machine-applicable",
522        style = "tool-only"
523    )]
524    pub span: Span,
525    #[label("auto trait cannot have generic parameters")]
526    pub ident: Span,
527}
528
529#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            AutoTraitBounds where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    AutoTraitBounds {
                        span: __binding_0, removal: __binding_1, ident: __binding_2
                        } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("auto traits cannot have super traits or lifetime bounds")));
                        let __code_22 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(""))
                                            })].into_iter();
                        diag.code(E0568);
                        ;
                        diag.span(__binding_0.clone());
                        diag.span_suggestions_with_style(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("remove the super traits or lifetime bounds")),
                            __code_22, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::CompletelyHidden);
                        diag.span_label(__binding_2,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("auto traits cannot have super traits or lifetime bounds")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
530#[diag("auto traits cannot have super traits or lifetime bounds", code = E0568)]
531pub(crate) struct AutoTraitBounds {
532    #[primary_span]
533    pub span: Vec<Span>,
534    #[suggestion(
535        "remove the super traits or lifetime bounds",
536        code = "",
537        applicability = "machine-applicable",
538        style = "tool-only"
539    )]
540    pub removal: Span,
541    #[label("auto traits cannot have super traits or lifetime bounds")]
542    pub ident: Span,
543}
544
545#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for AutoTraitItems
            where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    AutoTraitItems {
                        spans: __binding_0, total: __binding_1, ident: __binding_2 }
                        => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("auto traits cannot have associated items")));
                        let __code_23 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(""))
                                            })].into_iter();
                        diag.code(E0380);
                        ;
                        diag.span(__binding_0.clone());
                        diag.span_suggestions_with_style(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("remove the associated items")),
                            __code_23, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::CompletelyHidden);
                        diag.span_label(__binding_2,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("auto traits cannot have associated items")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
546#[diag("auto traits cannot have associated items", code = E0380)]
547pub(crate) struct AutoTraitItems {
548    #[primary_span]
549    pub spans: Vec<Span>,
550    #[suggestion(
551        "remove the associated items",
552        code = "",
553        applicability = "machine-applicable",
554        style = "tool-only"
555    )]
556    pub total: Span,
557    #[label("auto traits cannot have associated items")]
558    pub ident: Span,
559}
560
561#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for ConstAutoTrait
            where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    ConstAutoTrait { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("auto traits cannot be const")));
                        diag.help(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("remove the `const` keyword")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
562#[diag("auto traits cannot be const")]
563#[help("remove the `const` keyword")]
564pub(crate) struct ConstAutoTrait {
565    #[primary_span]
566    pub span: Span,
567}
568
569#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            ArgsBeforeConstraint where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    ArgsBeforeConstraint {
                        arg_spans: __binding_0,
                        constraints: __binding_1,
                        args: __binding_2,
                        data: __binding_3,
                        suggestion: __binding_4,
                        constraint_len: __binding_5,
                        args_len: __binding_6,
                        constraint_spans: __binding_7,
                        arg_spans2: __binding_8 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("generic arguments must come before the first constraint")));
                        let __code_24 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("{0}", __binding_4))
                                            })].into_iter();
                        ;
                        diag.arg("constraint_len", __binding_5);
                        diag.arg("args_len", __binding_6);
                        diag.span(__binding_0.clone());
                        diag.span_label(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("{$constraint_len ->\n            [one] constraint\n            *[other] constraints\n        }")));
                        diag.span_label(__binding_2,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("generic {$args_len ->\n            [one] argument\n            *[other] arguments\n        }")));
                        diag.span_suggestions_with_style(__binding_3,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("move the {$constraint_len ->\n            [one] constraint\n            *[other] constraints\n        } after the generic {$args_len ->\n            [one] argument\n            *[other] arguments\n        }")),
                            __code_24, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag.subdiagnostic(__binding_7);
                        diag.subdiagnostic(__binding_8);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
570#[diag("generic arguments must come before the first constraint")]
571pub(crate) struct ArgsBeforeConstraint {
572    #[primary_span]
573    pub arg_spans: Vec<Span>,
574    #[label(
575        "{$constraint_len ->
576            [one] constraint
577            *[other] constraints
578        }"
579    )]
580    pub constraints: Span,
581    #[label(
582        "generic {$args_len ->
583            [one] argument
584            *[other] arguments
585        }"
586    )]
587    pub args: Span,
588    #[suggestion(
589        "move the {$constraint_len ->
590            [one] constraint
591            *[other] constraints
592        } after the generic {$args_len ->
593            [one] argument
594            *[other] arguments
595        }",
596        code = "{suggestion}",
597        applicability = "machine-applicable",
598        style = "verbose"
599    )]
600    pub data: Span,
601    pub suggestion: String,
602    pub constraint_len: usize,
603    pub args_len: usize,
604    #[subdiagnostic]
605    pub constraint_spans: EmptyLabelManySpans,
606    #[subdiagnostic]
607    pub arg_spans2: EmptyLabelManySpans,
608}
609
610pub(crate) struct EmptyLabelManySpans(pub Vec<Span>);
611
612// The derive for `Vec<Span>` does multiple calls to `span_label`, adding commas between each
613impl Subdiagnostic for EmptyLabelManySpans {
614    fn add_to_diag<G: EmissionGuarantee>(self, diag: &mut Diag<'_, G>) {
615        diag.span_labels(self.0, "");
616    }
617}
618
619#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            PatternFnPointer where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    PatternFnPointer { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("patterns aren't allowed in function pointer types")));
                        diag.code(E0561);
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
620#[diag("patterns aren't allowed in function pointer types", code = E0561)]
621pub(crate) struct PatternFnPointer {
622    #[primary_span]
623    pub span: Span,
624}
625
626#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            TraitObjectBound where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    TraitObjectBound { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("only a single explicit lifetime bound is permitted")));
                        diag.code(E0226);
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
627#[diag("only a single explicit lifetime bound is permitted", code = E0226)]
628pub(crate) struct TraitObjectBound {
629    #[primary_span]
630    pub span: Span,
631}
632
633#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            NestedImplTrait where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    NestedImplTrait {
                        span: __binding_0, outer: __binding_1, inner: __binding_2 }
                        => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("nested `impl Trait` is not allowed")));
                        diag.code(E0666);
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("outer `impl Trait`")));
                        diag.span_label(__binding_2,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("nested `impl Trait` here")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
634#[diag("nested `impl Trait` is not allowed", code = E0666)]
635pub(crate) struct NestedImplTrait {
636    #[primary_span]
637    pub span: Span,
638    #[label("outer `impl Trait`")]
639    pub outer: Span,
640    #[label("nested `impl Trait` here")]
641    pub inner: Span,
642}
643
644#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            AtLeastOneTrait where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    AtLeastOneTrait { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("at least one trait must be specified")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
645#[diag("at least one trait must be specified")]
646pub(crate) struct AtLeastOneTrait {
647    #[primary_span]
648    pub span: Span,
649}
650
651#[derive(const _: () =
    {
        impl<'_sess, 'a, G> rustc_errors::Diagnostic<'_sess, G> for
            OutOfOrderParams<'a> where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    OutOfOrderParams {
                        spans: __binding_0,
                        sugg_span: __binding_1,
                        param_ord: __binding_2,
                        max_param: __binding_3,
                        ordered_params: __binding_4 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("{$param_ord} parameters must be declared prior to {$max_param} parameters")));
                        let __code_25 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("{0}", __binding_4))
                                            })].into_iter();
                        ;
                        diag.arg("param_ord", __binding_2);
                        diag.arg("max_param", __binding_3);
                        diag.span(__binding_0.clone());
                        diag.span_suggestions_with_style(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("reorder the parameters: lifetimes, then consts and types")),
                            __code_25, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowCode);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
652#[diag("{$param_ord} parameters must be declared prior to {$max_param} parameters")]
653pub(crate) struct OutOfOrderParams<'a> {
654    #[primary_span]
655    pub spans: Vec<Span>,
656    #[suggestion(
657        "reorder the parameters: lifetimes, then consts and types",
658        code = "{ordered_params}",
659        applicability = "machine-applicable"
660    )]
661    pub sugg_span: Span,
662    pub param_ord: String,
663    pub max_param: String,
664    pub ordered_params: &'a str,
665}
666
667#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for ObsoleteAuto
            where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    ObsoleteAuto { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`impl Trait for .. {\"{}\"}` is an obsolete syntax")));
                        diag.help(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("use `auto trait Trait {\"{}\"}` instead")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
668#[diag("`impl Trait for .. {\"{}\"}` is an obsolete syntax")]
669#[help("use `auto trait Trait {\"{}\"}` instead")]
670pub(crate) struct ObsoleteAuto {
671    #[primary_span]
672    pub span: Span,
673}
674
675#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            UnsafeNegativeImpl where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    UnsafeNegativeImpl {
                        span: __binding_0,
                        negative: __binding_1,
                        r#unsafe: __binding_2 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("negative impls cannot be unsafe")));
                        diag.code(E0198);
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("negative because of this")));
                        diag.span_label(__binding_2,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("unsafe because of this")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
676#[diag("negative impls cannot be unsafe", code = E0198)]
677pub(crate) struct UnsafeNegativeImpl {
678    #[primary_span]
679    pub span: Span,
680    #[label("negative because of this")]
681    pub negative: Span,
682    #[label("unsafe because of this")]
683    pub r#unsafe: Span,
684}
685
686#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for UnsafeItem
            where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    UnsafeItem { span: __binding_0, kind: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("{$kind} cannot be declared unsafe")));
                        ;
                        diag.arg("kind", __binding_1);
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
687#[diag("{$kind} cannot be declared unsafe")]
688pub(crate) struct UnsafeItem {
689    #[primary_span]
690    pub span: Span,
691    pub kind: &'static str,
692}
693
694#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            MissingUnsafeOnExtern where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    MissingUnsafeOnExtern { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("extern blocks must be unsafe")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
695#[diag("extern blocks must be unsafe")]
696pub(crate) struct MissingUnsafeOnExtern {
697    #[primary_span]
698    pub span: Span,
699}
700
701#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            MissingUnsafeOnExternLint where G: rustc_errors::EmissionGuarantee
            {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    MissingUnsafeOnExternLint { suggestion: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("extern blocks should be unsafe")));
                        let __code_26 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("unsafe "))
                                            })].into_iter();
                        ;
                        diag.span_suggestions_with_style(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("needs `unsafe` before the extern keyword")),
                            __code_26, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowCode);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
702#[diag("extern blocks should be unsafe")]
703pub(crate) struct MissingUnsafeOnExternLint {
704    #[suggestion(
705        "needs `unsafe` before the extern keyword",
706        code = "unsafe ",
707        applicability = "machine-applicable"
708    )]
709    pub suggestion: Span,
710}
711
712#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for FieldlessUnion
            where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    FieldlessUnion { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("unions cannot have zero fields")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
713#[diag("unions cannot have zero fields")]
714pub(crate) struct FieldlessUnion {
715    #[primary_span]
716    pub span: Span,
717}
718
719#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            WhereClauseAfterTypeAlias where G: rustc_errors::EmissionGuarantee
            {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    WhereClauseAfterTypeAlias {
                        span: __binding_0, help: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("where clauses are not allowed after the type for type aliases")));
                        diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("see issue #112792 <https://github.com/rust-lang/rust/issues/112792> for more information")));
                        ;
                        diag.span(__binding_0);
                        if __binding_1 {
                            diag.help(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("add `#![feature(lazy_type_alias)]` to the crate attributes to enable")));
                        }
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
720#[diag("where clauses are not allowed after the type for type aliases")]
721#[note("see issue #112792 <https://github.com/rust-lang/rust/issues/112792> for more information")]
722pub(crate) struct WhereClauseAfterTypeAlias {
723    #[primary_span]
724    pub span: Span,
725    #[help("add `#![feature(lazy_type_alias)]` to the crate attributes to enable")]
726    pub help: bool,
727}
728
729#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            WhereClauseBeforeTypeAlias where
            G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    WhereClauseBeforeTypeAlias {
                        span: __binding_0, sugg: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("where clauses are not allowed before the type for type aliases")));
                        diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("see issue #89122 <https://github.com/rust-lang/rust/issues/89122> for more information")));
                        ;
                        diag.span(__binding_0);
                        diag.subdiagnostic(__binding_1);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
730#[diag("where clauses are not allowed before the type for type aliases")]
731#[note("see issue #89122 <https://github.com/rust-lang/rust/issues/89122> for more information")]
732pub(crate) struct WhereClauseBeforeTypeAlias {
733    #[primary_span]
734    pub span: Span,
735    #[subdiagnostic]
736    pub sugg: WhereClauseBeforeTypeAliasSugg,
737}
738
739#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for WhereClauseBeforeTypeAliasSugg {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    WhereClauseBeforeTypeAliasSugg::Remove { span: __binding_0 }
                        => {
                        let __code_27 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(""))
                                            })].into_iter();
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("remove this `where`")),
                                &sub_args);
                        diag.span_suggestions_with_style(__binding_0, __message,
                            __code_27, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowCode);
                    }
                    WhereClauseBeforeTypeAliasSugg::Move {
                        left: __binding_0, snippet: __binding_1, right: __binding_2
                        } => {
                        let mut suggestions = Vec::new();
                        let __code_28 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!(""))
                                });
                        let __code_29 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!("{0}", __binding_1))
                                });
                        suggestions.push((__binding_0, __code_28));
                        suggestions.push((__binding_2, __code_29));
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("move it to the end of the type declaration")),
                                &sub_args);
                        diag.multipart_suggestion_with_style(__message, suggestions,
                            rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                    }
                }
            }
        }
    };Subdiagnostic)]
740pub(crate) enum WhereClauseBeforeTypeAliasSugg {
741    #[suggestion("remove this `where`", applicability = "machine-applicable", code = "")]
742    Remove {
743        #[primary_span]
744        span: Span,
745    },
746    #[multipart_suggestion(
747        "move it to the end of the type declaration",
748        applicability = "machine-applicable",
749        style = "verbose"
750    )]
751    Move {
752        #[suggestion_part(code = "")]
753        left: Span,
754        snippet: String,
755        #[suggestion_part(code = "{snippet}")]
756        right: Span,
757    },
758}
759
760#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            GenericDefaultTrailing where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    GenericDefaultTrailing { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("generic parameters with a default must be trailing")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
761#[diag("generic parameters with a default must be trailing")]
762pub(crate) struct GenericDefaultTrailing {
763    #[primary_span]
764    pub span: Span,
765}
766
767#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            NestedLifetimes where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    NestedLifetimes { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("nested quantification of lifetimes")));
                        diag.code(E0316);
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
768#[diag("nested quantification of lifetimes", code = E0316)]
769pub(crate) struct NestedLifetimes {
770    #[primary_span]
771    pub span: Span,
772}
773
774#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            ConstBoundTraitObject where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    ConstBoundTraitObject { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("const trait bounds are not allowed in trait object types")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
775#[diag("const trait bounds are not allowed in trait object types")]
776pub(crate) struct ConstBoundTraitObject {
777    #[primary_span]
778    pub span: Span,
779}
780
781// FIXME(const_trait_impl): Consider making the note/reason the message of the diagnostic.
782// FIXME(const_trait_impl): Provide structured suggestions (e.g., add `const` here).
783#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            TildeConstDisallowed where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    TildeConstDisallowed {
                        span: __binding_0, reason: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`[const]` is not allowed here")));
                        ;
                        diag.span(__binding_0);
                        diag.subdiagnostic(__binding_1);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
784#[diag("`[const]` is not allowed here")]
785pub(crate) struct TildeConstDisallowed {
786    #[primary_span]
787    pub span: Span,
788    #[subdiagnostic]
789    pub reason: TildeConstReason,
790}
791
792#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for TildeConstReason {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    TildeConstReason::Closure => {
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("closures cannot have `[const]` trait bounds")),
                                &sub_args);
                        diag.note(__message);
                    }
                    TildeConstReason::Function { ident: __binding_0 } => {
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("this function is not `const`, so it cannot have `[const]` trait bounds")),
                                &sub_args);
                        diag.span_note(__binding_0, __message);
                    }
                    TildeConstReason::Trait { span: __binding_0 } => {
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("this trait is not `const`, so it cannot have `[const]` trait bounds")),
                                &sub_args);
                        diag.span_note(__binding_0, __message);
                    }
                    TildeConstReason::TraitImpl { span: __binding_0 } => {
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("this impl is not `const`, so it cannot have `[const]` trait bounds")),
                                &sub_args);
                        diag.span_note(__binding_0, __message);
                    }
                    TildeConstReason::Impl { span: __binding_0 } => {
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("inherent impls cannot have `[const]` trait bounds")),
                                &sub_args);
                        diag.span_note(__binding_0, __message);
                    }
                    TildeConstReason::TraitAssocTy { span: __binding_0 } => {
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("associated types in non-`const` traits cannot have `[const]` trait bounds")),
                                &sub_args);
                        diag.span_note(__binding_0, __message);
                    }
                    TildeConstReason::TraitImplAssocTy { span: __binding_0 } =>
                        {
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("associated types in non-const impls cannot have `[const]` trait bounds")),
                                &sub_args);
                        diag.span_note(__binding_0, __message);
                    }
                    TildeConstReason::InherentAssocTy { span: __binding_0 } => {
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("inherent associated types cannot have `[const]` trait bounds")),
                                &sub_args);
                        diag.span_note(__binding_0, __message);
                    }
                    TildeConstReason::Struct { span: __binding_0 } => {
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("structs cannot have `[const]` trait bounds")),
                                &sub_args);
                        diag.span_note(__binding_0, __message);
                    }
                    TildeConstReason::Enum { span: __binding_0 } => {
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("enums cannot have `[const]` trait bounds")),
                                &sub_args);
                        diag.span_note(__binding_0, __message);
                    }
                    TildeConstReason::Union { span: __binding_0 } => {
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("unions cannot have `[const]` trait bounds")),
                                &sub_args);
                        diag.span_note(__binding_0, __message);
                    }
                    TildeConstReason::AnonConst { span: __binding_0 } => {
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("anonymous constants cannot have `[const]` trait bounds")),
                                &sub_args);
                        diag.span_note(__binding_0, __message);
                    }
                    TildeConstReason::TraitObject => {
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("trait objects cannot have `[const]` trait bounds")),
                                &sub_args);
                        diag.note(__message);
                    }
                    TildeConstReason::Item => {
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("this item cannot have `[const]` trait bounds")),
                                &sub_args);
                        diag.note(__message);
                    }
                }
            }
        }
    };Subdiagnostic, #[automatically_derived]
impl ::core::marker::Copy for TildeConstReason { }Copy, #[automatically_derived]
impl ::core::clone::Clone for TildeConstReason {
    #[inline]
    fn clone(&self) -> TildeConstReason {
        let _: ::core::clone::AssertParamIsClone<Span>;
        *self
    }
}Clone)]
793pub(crate) enum TildeConstReason {
794    #[note("closures cannot have `[const]` trait bounds")]
795    Closure,
796    #[note("this function is not `const`, so it cannot have `[const]` trait bounds")]
797    Function {
798        #[primary_span]
799        ident: Span,
800    },
801    #[note("this trait is not `const`, so it cannot have `[const]` trait bounds")]
802    Trait {
803        #[primary_span]
804        span: Span,
805    },
806    #[note("this impl is not `const`, so it cannot have `[const]` trait bounds")]
807    TraitImpl {
808        #[primary_span]
809        span: Span,
810    },
811    #[note("inherent impls cannot have `[const]` trait bounds")]
812    Impl {
813        #[primary_span]
814        span: Span,
815    },
816    #[note("associated types in non-`const` traits cannot have `[const]` trait bounds")]
817    TraitAssocTy {
818        #[primary_span]
819        span: Span,
820    },
821    #[note("associated types in non-const impls cannot have `[const]` trait bounds")]
822    TraitImplAssocTy {
823        #[primary_span]
824        span: Span,
825    },
826    #[note("inherent associated types cannot have `[const]` trait bounds")]
827    InherentAssocTy {
828        #[primary_span]
829        span: Span,
830    },
831    #[note("structs cannot have `[const]` trait bounds")]
832    Struct {
833        #[primary_span]
834        span: Span,
835    },
836    #[note("enums cannot have `[const]` trait bounds")]
837    Enum {
838        #[primary_span]
839        span: Span,
840    },
841    #[note("unions cannot have `[const]` trait bounds")]
842    Union {
843        #[primary_span]
844        span: Span,
845    },
846    #[note("anonymous constants cannot have `[const]` trait bounds")]
847    AnonConst {
848        #[primary_span]
849        span: Span,
850    },
851    #[note("trait objects cannot have `[const]` trait bounds")]
852    TraitObject,
853    #[note("this item cannot have `[const]` trait bounds")]
854    Item,
855}
856
857#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            ConstAndCoroutine where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    ConstAndCoroutine {
                        spans: __binding_0,
                        const_span: __binding_1,
                        coroutine_span: __binding_2,
                        span: __binding_3,
                        coroutine_kind: __binding_4 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("functions cannot be both `const` and `{$coroutine_kind}`")));
                        ;
                        diag.arg("coroutine_kind", __binding_4);
                        diag.span(__binding_0.clone());
                        diag.span_label(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`const` because of this")));
                        diag.span_label(__binding_2,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`{$coroutine_kind}` because of this")));
                        diag.span_label(__binding_3,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("{\"\"}")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
858#[diag("functions cannot be both `const` and `{$coroutine_kind}`")]
859pub(crate) struct ConstAndCoroutine {
860    #[primary_span]
861    pub spans: Vec<Span>,
862    #[label("`const` because of this")]
863    pub const_span: Span,
864    #[label("`{$coroutine_kind}` because of this")]
865    pub coroutine_span: Span,
866    #[label("{\"\"}")]
867    pub span: Span,
868    pub coroutine_kind: &'static str,
869}
870
871#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            CoroutineAndCVariadic where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    CoroutineAndCVariadic {
                        spans: __binding_0,
                        coroutine_kind: __binding_1,
                        coroutine_span: __binding_2,
                        variadic_span: __binding_3 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("functions cannot be both `{$coroutine_kind}` and C-variadic")));
                        ;
                        diag.arg("coroutine_kind", __binding_1);
                        diag.span(__binding_0.clone());
                        diag.span_label(__binding_2,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`{$coroutine_kind}` because of this")));
                        diag.span_label(__binding_3,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("C-variadic because of this")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
872#[diag("functions cannot be both `{$coroutine_kind}` and C-variadic")]
873pub(crate) struct CoroutineAndCVariadic {
874    #[primary_span]
875    pub spans: Vec<Span>,
876    pub coroutine_kind: &'static str,
877    #[label("`{$coroutine_kind}` because of this")]
878    pub coroutine_span: Span,
879    #[label("C-variadic because of this")]
880    pub variadic_span: Span,
881}
882
883#[derive(const _: () =
    {
        impl<'_sess, 'a, G> rustc_errors::Diagnostic<'_sess, G> for
            CVariadicNotSupported<'a> where G: rustc_errors::EmissionGuarantee
            {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    CVariadicNotSupported {
                        variadic_span: __binding_0, target: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("the `{$target}` target does not support c-variadic functions")));
                        ;
                        diag.arg("target", __binding_1);
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
884#[diag("the `{$target}` target does not support c-variadic functions")]
885pub(crate) struct CVariadicNotSupported<'a> {
886    #[primary_span]
887    pub variadic_span: Span,
888    pub target: &'a str,
889}
890
891#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            PatternInForeign where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    PatternInForeign { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("patterns aren't allowed in foreign function declarations")));
                        diag.code(E0130);
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("pattern not allowed in foreign function")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
892#[diag("patterns aren't allowed in foreign function declarations", code = E0130)]
893// FIXME: deduplicate with rustc_lint (`BuiltinLintDiag::PatternsInFnsWithoutBody`)
894pub(crate) struct PatternInForeign {
895    #[primary_span]
896    #[label("pattern not allowed in foreign function")]
897    pub span: Span,
898}
899
900#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            PatternInBodiless where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    PatternInBodiless { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("patterns aren't allowed in functions without bodies")));
                        diag.code(E0642);
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("pattern not allowed in function without body")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
901#[diag("patterns aren't allowed in functions without bodies", code = E0642)]
902// FIXME: deduplicate with rustc_lint (`BuiltinLintDiag::PatternsInFnsWithoutBody`)
903pub(crate) struct PatternInBodiless {
904    #[primary_span]
905    #[label("pattern not allowed in function without body")]
906    pub span: Span,
907}
908
909#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            FeatureOnNonNightly where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    FeatureOnNonNightly {
                        span: __binding_0,
                        channel: __binding_1,
                        stable_features: __binding_2,
                        sugg: __binding_3 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`#![feature]` may not be used on the {$channel} release channel")));
                        let __code_30 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(""))
                                            })].into_iter();
                        diag.code(E0554);
                        ;
                        diag.arg("channel", __binding_1);
                        diag.span(__binding_0);
                        for __binding_2 in __binding_2 {
                            diag.subdiagnostic(__binding_2);
                        }
                        if let Some(__binding_3) = __binding_3 {
                            diag.span_suggestions_with_style(__binding_3,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("remove the attribute")),
                                __code_30, rustc_errors::Applicability::MachineApplicable,
                                rustc_errors::SuggestionStyle::ShowCode);
                        }
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
910#[diag("`#![feature]` may not be used on the {$channel} release channel", code = E0554)]
911pub(crate) struct FeatureOnNonNightly {
912    #[primary_span]
913    pub span: Span,
914    pub channel: &'static str,
915    #[subdiagnostic]
916    pub stable_features: Vec<StableFeature>,
917    #[suggestion("remove the attribute", code = "", applicability = "machine-applicable")]
918    pub sugg: Option<Span>,
919}
920
921#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for StableFeature {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    StableFeature { name: __binding_0, since: __binding_1 } => {
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        sub_args.insert("name".into(),
                            rustc_errors::IntoDiagArg::into_diag_arg(__binding_0,
                                &mut diag.long_ty_path));
                        sub_args.insert("since".into(),
                            rustc_errors::IntoDiagArg::into_diag_arg(__binding_1,
                                &mut diag.long_ty_path));
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("the feature `{$name}` has been stable since `{$since}` and no longer requires an attribute to enable")),
                                &sub_args);
                        diag.help(__message);
                    }
                }
            }
        }
    };Subdiagnostic)]
922#[help(
923    "the feature `{$name}` has been stable since `{$since}` and no longer requires an attribute to enable"
924)]
925pub(crate) struct StableFeature {
926    pub name: Symbol,
927    pub since: Symbol,
928}
929
930#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            IncompatibleFeatures where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    IncompatibleFeatures {
                        spans: __binding_0, f1: __binding_1, f2: __binding_2 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`{$f1}` and `{$f2}` are incompatible, using them at the same time is not allowed")));
                        diag.help(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("remove one of these features")));
                        ;
                        diag.arg("f1", __binding_1);
                        diag.arg("f2", __binding_2);
                        diag.span(__binding_0.clone());
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
931#[diag("`{$f1}` and `{$f2}` are incompatible, using them at the same time is not allowed")]
932#[help("remove one of these features")]
933pub(crate) struct IncompatibleFeatures {
934    #[primary_span]
935    pub spans: Vec<Span>,
936    pub f1: Symbol,
937    pub f2: Symbol,
938}
939
940#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            MissingDependentFeatures where G: rustc_errors::EmissionGuarantee
            {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    MissingDependentFeatures {
                        parent_span: __binding_0,
                        parent: __binding_1,
                        missing: __binding_2 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`{$parent}` requires {$missing} to be enabled")));
                        diag.help(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("enable all of these features")));
                        ;
                        diag.arg("parent", __binding_1);
                        diag.arg("missing", __binding_2);
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
941#[diag("`{$parent}` requires {$missing} to be enabled")]
942#[help("enable all of these features")]
943pub(crate) struct MissingDependentFeatures {
944    #[primary_span]
945    pub parent_span: Span,
946    pub parent: Symbol,
947    pub missing: String,
948}
949
950#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            NegativeBoundUnsupported where G: rustc_errors::EmissionGuarantee
            {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    NegativeBoundUnsupported { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("negative bounds are not supported")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
951#[diag("negative bounds are not supported")]
952pub(crate) struct NegativeBoundUnsupported {
953    #[primary_span]
954    pub span: Span,
955}
956
957#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            ConstraintOnNegativeBound where G: rustc_errors::EmissionGuarantee
            {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    ConstraintOnNegativeBound { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("associated type constraints not allowed on negative bounds")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
958#[diag("associated type constraints not allowed on negative bounds")]
959pub(crate) struct ConstraintOnNegativeBound {
960    #[primary_span]
961    pub span: Span,
962}
963
964#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            NegativeBoundWithParentheticalNotation where
            G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    NegativeBoundWithParentheticalNotation { span: __binding_0 }
                        => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("parenthetical notation may not be used for negative bounds")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
965#[diag("parenthetical notation may not be used for negative bounds")]
966pub(crate) struct NegativeBoundWithParentheticalNotation {
967    #[primary_span]
968    pub span: Span,
969}
970
971#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            MatchArmWithNoBody where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    MatchArmWithNoBody {
                        span: __binding_0, suggestion: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`match` arm with no body")));
                        let __code_31 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(" => {{ todo!() }}"))
                                            })].into_iter();
                        ;
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("add a body after the pattern")),
                            __code_31, rustc_errors::Applicability::HasPlaceholders,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
972#[diag("`match` arm with no body")]
973pub(crate) struct MatchArmWithNoBody {
974    #[primary_span]
975    pub span: Span,
976    // We include the braces around `todo!()` so that a comma is optional, and we don't have to have
977    // any logic looking at the arm being replaced if there was a comma already or not for the
978    // resulting code to be correct.
979    #[suggestion(
980        "add a body after the pattern",
981        code = " => {{ todo!() }}",
982        applicability = "has-placeholders",
983        style = "verbose"
984    )]
985    pub suggestion: Span,
986}
987
988#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            PreciseCapturingNotAllowedHere where
            G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    PreciseCapturingNotAllowedHere {
                        span: __binding_0, loc: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`use<...>` precise capturing syntax not allowed in {$loc}")));
                        ;
                        diag.arg("loc", __binding_1);
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
989#[diag("`use<...>` precise capturing syntax not allowed in {$loc}")]
990pub(crate) struct PreciseCapturingNotAllowedHere {
991    #[primary_span]
992    pub span: Span,
993    pub loc: &'static str,
994}
995
996#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            DuplicatePreciseCapturing where G: rustc_errors::EmissionGuarantee
            {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    DuplicatePreciseCapturing {
                        bound1: __binding_0, bound2: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("duplicate `use<...>` precise capturing syntax")));
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("second `use<...>` here")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
997#[diag("duplicate `use<...>` precise capturing syntax")]
998pub(crate) struct DuplicatePreciseCapturing {
999    #[primary_span]
1000    pub bound1: Span,
1001    #[label("second `use<...>` here")]
1002    pub bound2: Span,
1003}
1004
1005#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for MissingAbi
            where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    MissingAbi { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`extern` declarations without an explicit ABI are disallowed")));
                        let __code_32 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("extern \"<abi>\""))
                                            })].into_iter();
                        diag.help(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("prior to Rust 2024, a default ABI was inferred")));
                        ;
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("specify an ABI")),
                            __code_32, rustc_errors::Applicability::HasPlaceholders,
                            rustc_errors::SuggestionStyle::ShowCode);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1006#[diag("`extern` declarations without an explicit ABI are disallowed")]
1007#[help("prior to Rust 2024, a default ABI was inferred")]
1008pub(crate) struct MissingAbi {
1009    #[primary_span]
1010    #[suggestion("specify an ABI", code = "extern \"<abi>\"", applicability = "has-placeholders")]
1011    pub span: Span,
1012}
1013
1014#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for MissingAbiSugg
            where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    MissingAbiSugg { span: __binding_0, default_abi: __binding_1
                        } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`extern` declarations without an explicit ABI are deprecated")));
                        let __code_33 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("extern {0}",
                                                        __binding_1))
                                            })].into_iter();
                        ;
                        diag.arg("default_abi", __binding_1);
                        diag.span_suggestions_with_style(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("explicitly specify the {$default_abi} ABI")),
                            __code_33, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowCode);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1015#[diag("`extern` declarations without an explicit ABI are deprecated")]
1016pub(crate) struct MissingAbiSugg {
1017    #[suggestion(
1018        "explicitly specify the {$default_abi} ABI",
1019        code = "extern {default_abi}",
1020        applicability = "machine-applicable"
1021    )]
1022    pub span: Span,
1023    pub default_abi: ExternAbi,
1024}
1025
1026#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            AbiCustomSafeForeignFunction where
            G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    AbiCustomSafeForeignFunction {
                        span: __binding_0, safe_span: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("foreign functions with the \"custom\" ABI cannot be safe")));
                        let __code_34 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(""))
                                            })].into_iter();
                        ;
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("remove the `safe` keyword from this definition")),
                            __code_34, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1027#[diag("foreign functions with the \"custom\" ABI cannot be safe")]
1028pub(crate) struct AbiCustomSafeForeignFunction {
1029    #[primary_span]
1030    pub span: Span,
1031
1032    #[suggestion(
1033        "remove the `safe` keyword from this definition",
1034        applicability = "maybe-incorrect",
1035        code = "",
1036        style = "verbose"
1037    )]
1038    pub safe_span: Span,
1039}
1040
1041#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            AbiCustomSafeFunction where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    AbiCustomSafeFunction {
                        span: __binding_0,
                        abi: __binding_1,
                        unsafe_span: __binding_2 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("functions with the \"custom\" ABI must be unsafe")));
                        let __code_35 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("unsafe "))
                                            })].into_iter();
                        ;
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_2,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("add the `unsafe` keyword to this definition")),
                            __code_35, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1042#[diag("functions with the \"custom\" ABI must be unsafe")]
1043pub(crate) struct AbiCustomSafeFunction {
1044    #[primary_span]
1045    pub span: Span,
1046    pub abi: ExternAbi,
1047
1048    #[suggestion(
1049        "add the `unsafe` keyword to this definition",
1050        applicability = "maybe-incorrect",
1051        code = "unsafe ",
1052        style = "verbose"
1053    )]
1054    pub unsafe_span: Span,
1055}
1056
1057#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            AbiCannotBeCoroutine where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    AbiCannotBeCoroutine {
                        span: __binding_0,
                        abi: __binding_1,
                        coroutine_kind_span: __binding_2,
                        coroutine_kind_str: __binding_3 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("functions with the {$abi} ABI cannot be `{$coroutine_kind_str}`")));
                        let __code_36 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(""))
                                            })].into_iter();
                        ;
                        diag.arg("abi", __binding_1);
                        diag.arg("coroutine_kind_str", __binding_3);
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_2,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("remove the `{$coroutine_kind_str}` keyword from this definition")),
                            __code_36, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1058#[diag("functions with the {$abi} ABI cannot be `{$coroutine_kind_str}`")]
1059pub(crate) struct AbiCannotBeCoroutine {
1060    #[primary_span]
1061    pub span: Span,
1062    pub abi: ExternAbi,
1063
1064    #[suggestion(
1065        "remove the `{$coroutine_kind_str}` keyword from this definition",
1066        applicability = "maybe-incorrect",
1067        code = "",
1068        style = "verbose"
1069    )]
1070    pub coroutine_kind_span: Span,
1071    pub coroutine_kind_str: &'static str,
1072}
1073
1074#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            AbiMustNotHaveParametersOrReturnType where
            G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    AbiMustNotHaveParametersOrReturnType {
                        spans: __binding_0,
                        abi: __binding_1,
                        suggestion_span: __binding_2,
                        symbol: __binding_3,
                        padding: __binding_4 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("invalid signature for `extern {$abi}` function")));
                        let __code_37 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("{0}fn {1}()",
                                                        __binding_4, __binding_3))
                                            })].into_iter();
                        diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("functions with the {$abi} ABI cannot have any parameters or return type")));
                        ;
                        diag.arg("abi", __binding_1);
                        diag.span(__binding_0.clone());
                        diag.span_suggestions_with_style(__binding_2,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("remove the parameters and return type")),
                            __code_37, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1075#[diag("invalid signature for `extern {$abi}` function")]
1076#[note("functions with the {$abi} ABI cannot have any parameters or return type")]
1077pub(crate) struct AbiMustNotHaveParametersOrReturnType {
1078    #[primary_span]
1079    pub spans: Vec<Span>,
1080    pub abi: ExternAbi,
1081
1082    #[suggestion(
1083        "remove the parameters and return type",
1084        applicability = "maybe-incorrect",
1085        code = "{padding}fn {symbol}()",
1086        style = "verbose"
1087    )]
1088    pub suggestion_span: Span,
1089    pub symbol: Symbol,
1090    pub padding: &'static str,
1091}
1092
1093#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            AbiMustNotHaveReturnType where G: rustc_errors::EmissionGuarantee
            {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    AbiMustNotHaveReturnType {
                        span: __binding_0, abi: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("invalid signature for `extern {$abi}` function")));
                        diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("functions with the {$abi} ABI cannot have a return type")));
                        ;
                        diag.arg("abi", __binding_1);
                        diag.span(__binding_0);
                        diag.span_help(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("remove the return type")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1094#[diag("invalid signature for `extern {$abi}` function")]
1095#[note("functions with the {$abi} ABI cannot have a return type")]
1096pub(crate) struct AbiMustNotHaveReturnType {
1097    #[primary_span]
1098    #[help("remove the return type")]
1099    pub span: Span,
1100    pub abi: ExternAbi,
1101}
1102
1103#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            AbiX86Interrupt where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    AbiX86Interrupt {
                        spans: __binding_0, param_count: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("invalid signature for `extern \"x86-interrupt\"` function")));
                        diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("functions with the \"x86-interrupt\" ABI must be have either 1 or 2 parameters (but found {$param_count})")));
                        ;
                        diag.arg("param_count", __binding_1);
                        diag.span(__binding_0.clone());
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1104#[diag("invalid signature for `extern \"x86-interrupt\"` function")]
1105#[note(
1106    "functions with the \"x86-interrupt\" ABI must be have either 1 or 2 parameters (but found {$param_count})"
1107)]
1108pub(crate) struct AbiX86Interrupt {
1109    #[primary_span]
1110    pub spans: Vec<Span>,
1111    pub param_count: usize,
1112}
1113
1114#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            ScalableVectorNotTupleStruct where
            G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    ScalableVectorNotTupleStruct { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("scalable vectors must be tuple structs")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1115#[diag("scalable vectors must be tuple structs")]
1116pub(crate) struct ScalableVectorNotTupleStruct {
1117    #[primary_span]
1118    pub span: Span,
1119}
1120
1121#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            ScalableVectorBadArch where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    ScalableVectorBadArch { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("scalable vectors are not supported on this architecture")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1122#[diag("scalable vectors are not supported on this architecture")]
1123pub(crate) struct ScalableVectorBadArch {
1124    #[primary_span]
1125    pub span: Span,
1126}
1127
1128#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            RequiresRustAbi where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    RequiresRustAbi {
                        track_caller_span: __binding_0, extern_abi_span: __binding_1
                        } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`#[track_caller]` can only be used with the Rust ABI")));
                        diag.code(E0737);
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("using `#[track_caller]` here")));
                        diag.span_label(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("not using the Rust ABI because of this")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1129#[diag("`#[track_caller]` can only be used with the Rust ABI", code = E0737)]
1130pub(crate) struct RequiresRustAbi {
1131    #[primary_span]
1132    #[label("using `#[track_caller]` here")]
1133    pub track_caller_span: Span,
1134    #[label("not using the Rust ABI because of this")]
1135    pub extern_abi_span: Span,
1136}
1137
1138#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            UnusedVisibility where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    UnusedVisibility { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("visibility qualifiers have no effect on `const _` declarations")));
                        let __code_38 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(""))
                                            })].into_iter();
                        diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`const _` does not declare a name, so there is nothing for the qualifier to apply to")));
                        ;
                        diag.span_suggestions_with_style(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("remove the qualifier")),
                            __code_38, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::HideCodeInline);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1139#[diag("visibility qualifiers have no effect on `const _` declarations")]
1140#[note("`const _` does not declare a name, so there is nothing for the qualifier to apply to")]
1141pub(crate) struct UnusedVisibility {
1142    #[suggestion(
1143        "remove the qualifier",
1144        style = "short",
1145        code = "",
1146        applicability = "machine-applicable"
1147    )]
1148    pub span: Span,
1149}
1150
1151#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for PatternsInFnsWithoutBodySub {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    PatternsInFnsWithoutBodySub {
                        span: __binding_0, ident: __binding_1 } => {
                        let __code_39 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("{0}", __binding_1))
                                            })].into_iter();
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("remove `mut` from the parameter")),
                                &sub_args);
                        diag.span_suggestions_with_style(__binding_0, __message,
                            __code_39, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowCode);
                    }
                }
            }
        }
    };Subdiagnostic)]
1152#[suggestion(
1153    "remove `mut` from the parameter",
1154    code = "{ident}",
1155    applicability = "machine-applicable"
1156)]
1157pub(crate) struct PatternsInFnsWithoutBodySub {
1158    #[primary_span]
1159    pub span: Span,
1160
1161    pub ident: Ident,
1162}
1163
1164#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            PatternsInFnsWithoutBody where G: rustc_errors::EmissionGuarantee
            {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    PatternsInFnsWithoutBody::Foreign { sub: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("patterns aren't allowed in foreign function declarations")));
                        ;
                        diag.subdiagnostic(__binding_0);
                        diag
                    }
                    PatternsInFnsWithoutBody::Bodiless { sub: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("patterns aren't allowed in functions without bodies")));
                        ;
                        diag.subdiagnostic(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1165pub(crate) enum PatternsInFnsWithoutBody {
1166    #[diag("patterns aren't allowed in foreign function declarations")]
1167    Foreign {
1168        #[subdiagnostic]
1169        sub: PatternsInFnsWithoutBodySub,
1170    },
1171    #[diag("patterns aren't allowed in functions without bodies")]
1172    Bodiless {
1173        #[subdiagnostic]
1174        sub: PatternsInFnsWithoutBodySub,
1175    },
1176}
1177
1178#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            DeprecatedWhereClauseLocation where
            G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    DeprecatedWhereClauseLocation { suggestion: __binding_0 } =>
                        {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("where clause not allowed here")));
                        diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("see issue #89122 <https://github.com/rust-lang/rust/issues/89122> for more information")));
                        ;
                        diag.subdiagnostic(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1179#[diag("where clause not allowed here")]
1180#[note("see issue #89122 <https://github.com/rust-lang/rust/issues/89122> for more information")]
1181pub(crate) struct DeprecatedWhereClauseLocation {
1182    #[subdiagnostic]
1183    pub suggestion: DeprecatedWhereClauseLocationSugg,
1184}
1185
1186#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for DeprecatedWhereClauseLocationSugg
            {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    DeprecatedWhereClauseLocationSugg::MoveToEnd {
                        left: __binding_0, right: __binding_1, sugg: __binding_2 }
                        => {
                        let mut suggestions = Vec::new();
                        let __code_40 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!(""))
                                });
                        let __code_41 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!("{0}", __binding_2))
                                });
                        suggestions.push((__binding_0, __code_40));
                        suggestions.push((__binding_1, __code_41));
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("move it to the end of the type declaration")),
                                &sub_args);
                        diag.multipart_suggestion_with_style(__message, suggestions,
                            rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowCode);
                    }
                    DeprecatedWhereClauseLocationSugg::RemoveWhere {
                        span: __binding_0 } => {
                        let __code_42 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(""))
                                            })].into_iter();
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("remove this `where`")),
                                &sub_args);
                        diag.span_suggestions_with_style(__binding_0, __message,
                            __code_42, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowCode);
                    }
                }
            }
        }
    };Subdiagnostic)]
1187pub(crate) enum DeprecatedWhereClauseLocationSugg {
1188    #[multipart_suggestion(
1189        "move it to the end of the type declaration",
1190        applicability = "machine-applicable"
1191    )]
1192    MoveToEnd {
1193        #[suggestion_part(code = "")]
1194        left: Span,
1195        #[suggestion_part(code = "{sugg}")]
1196        right: Span,
1197
1198        sugg: String,
1199    },
1200    #[suggestion("remove this `where`", code = "", applicability = "machine-applicable")]
1201    RemoveWhere {
1202        #[primary_span]
1203        span: Span,
1204    },
1205}