Skip to main content

rustc_parse/
errors.rs

1// ignore-tidy-filelength
2
3use std::borrow::Cow;
4use std::path::PathBuf;
5
6use rustc_ast::token::{self, InvisibleOrigin, MetaVarKind, Token};
7use rustc_ast::util::parser::ExprPrecedence;
8use rustc_ast::{Path, Visibility};
9use rustc_errors::codes::*;
10use rustc_errors::{
11    Applicability, Diag, DiagArgValue, DiagCtxtHandle, Diagnostic, EmissionGuarantee, IntoDiagArg,
12    Level, Subdiagnostic, SuggestionStyle, msg,
13};
14use rustc_macros::{Diagnostic, Subdiagnostic};
15use rustc_session::errors::ExprParenthesesNeeded;
16use rustc_span::edition::{Edition, LATEST_STABLE_EDITION};
17use rustc_span::{Ident, Span, Symbol};
18
19#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for AmbiguousPlus
            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 {
                    AmbiguousPlus { span: __binding_0, suggestion: __binding_1 }
                        => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("ambiguous `+` in a type")));
                        ;
                        diag.span(__binding_0);
                        diag.subdiagnostic(__binding_1);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
20#[diag("ambiguous `+` in a type")]
21pub(crate) struct AmbiguousPlus {
22    #[primary_span]
23    pub span: Span,
24    #[subdiagnostic]
25    pub suggestion: AddParen,
26}
27
28#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for BadTypePlus
            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 {
                    BadTypePlus { span: __binding_0, sub: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected a path on the left-hand side of `+`")));
                        diag.code(E0178);
                        ;
                        diag.span(__binding_0);
                        diag.subdiagnostic(__binding_1);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
29#[diag("expected a path on the left-hand side of `+`", code = E0178)]
30pub(crate) struct BadTypePlus {
31    #[primary_span]
32    pub span: Span,
33    #[subdiagnostic]
34    pub sub: BadTypePlusSub,
35}
36
37#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for AddParen {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    AddParen { lo: __binding_0, hi: __binding_1 } => {
                        let mut suggestions = Vec::new();
                        let __code_0 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!("("))
                                });
                        let __code_1 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!(")"))
                                });
                        suggestions.push((__binding_0, __code_0));
                        suggestions.push((__binding_1, __code_1));
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("try adding parentheses")),
                                &sub_args);
                        diag.multipart_suggestion_with_style(__message, suggestions,
                            rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowCode);
                    }
                }
            }
        }
    };Subdiagnostic)]
38#[multipart_suggestion("try adding parentheses", applicability = "machine-applicable")]
39pub(crate) struct AddParen {
40    #[suggestion_part(code = "(")]
41    pub lo: Span,
42    #[suggestion_part(code = ")")]
43    pub hi: Span,
44}
45
46#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for BadTypePlusSub {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    BadTypePlusSub::AddParen { suggestion: __binding_0 } => {
                        __binding_0.add_to_diag(diag);
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                    }
                    BadTypePlusSub::ForgotParen { 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("perhaps you forgot parentheses?")),
                                &sub_args);
                        diag.span_label(__binding_0, __message);
                    }
                    BadTypePlusSub::ExpectPath { 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("expected a path")),
                                &sub_args);
                        diag.span_label(__binding_0, __message);
                    }
                }
            }
        }
    };Subdiagnostic)]
47pub(crate) enum BadTypePlusSub {
48    AddParen {
49        #[subdiagnostic]
50        suggestion: AddParen,
51    },
52    #[label("perhaps you forgot parentheses?")]
53    ForgotParen {
54        #[primary_span]
55        span: Span,
56    },
57    #[label("expected a path")]
58    ExpectPath {
59        #[primary_span]
60        span: Span,
61    },
62}
63
64#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for BadQPathStage2
            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 {
                    BadQPathStage2 { span: __binding_0, wrap: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("missing angle brackets in associated item path")));
                        ;
                        diag.span(__binding_0);
                        diag.subdiagnostic(__binding_1);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
65#[diag("missing angle brackets in associated item path")]
66pub(crate) struct BadQPathStage2 {
67    #[primary_span]
68    pub span: Span,
69    #[subdiagnostic]
70    pub wrap: WrapType,
71}
72
73#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            TraitImplModifierInInherentImpl 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 {
                    TraitImplModifierInInherentImpl {
                        span: __binding_0,
                        modifier: __binding_1,
                        modifier_name: __binding_2,
                        modifier_span: __binding_3,
                        self_ty: __binding_4 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("inherent impls cannot be {$modifier_name}")));
                        diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("only trait implementations may be annotated with `{$modifier}`")));
                        ;
                        diag.arg("modifier", __binding_1);
                        diag.arg("modifier_name", __binding_2);
                        diag.span(__binding_0);
                        diag.span_label(__binding_3,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("{$modifier_name} because of this")));
                        diag.span_label(__binding_4,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("inherent impl for this type")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
74#[diag("inherent impls cannot be {$modifier_name}")]
75#[note("only trait implementations may be annotated with `{$modifier}`")]
76pub(crate) struct TraitImplModifierInInherentImpl {
77    #[primary_span]
78    pub span: Span,
79    pub modifier: &'static str,
80    pub modifier_name: &'static str,
81    #[label("{$modifier_name} because of this")]
82    pub modifier_span: Span,
83    #[label("inherent impl for this type")]
84    pub self_ty: Span,
85}
86
87#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for WrapType {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    WrapType { lo: __binding_0, hi: __binding_1 } => {
                        let mut suggestions = Vec::new();
                        let __code_2 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!("<"))
                                });
                        let __code_3 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!(">"))
                                });
                        suggestions.push((__binding_0, __code_2));
                        suggestions.push((__binding_1, __code_3));
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("types that don't start with an identifier need to be surrounded with angle brackets in qualified paths")),
                                &sub_args);
                        diag.multipart_suggestion_with_style(__message, suggestions,
                            rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowCode);
                    }
                }
            }
        }
    };Subdiagnostic)]
88#[multipart_suggestion(
89    "types that don't start with an identifier need to be surrounded with angle brackets in qualified paths",
90    applicability = "machine-applicable"
91)]
92pub(crate) struct WrapType {
93    #[suggestion_part(code = "<")]
94    pub lo: Span,
95    #[suggestion_part(code = ">")]
96    pub hi: Span,
97}
98
99#[derive(const _: () =
    {
        impl<'_sess, 'a, G> rustc_errors::Diagnostic<'_sess, G> for
            IncorrectSemicolon<'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 {
                    IncorrectSemicolon {
                        span: __binding_0, show_help: __binding_1, name: __binding_2
                        } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected item, found `;`")));
                        let __code_4 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(""))
                                            })].into_iter();
                        ;
                        diag.arg("name", __binding_2);
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("remove this semicolon")),
                            __code_4, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        if __binding_1 {
                            diag.help(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("{$name} declarations are not followed by a semicolon")));
                        }
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
100#[diag("expected item, found `;`")]
101pub(crate) struct IncorrectSemicolon<'a> {
102    #[primary_span]
103    #[suggestion(
104        "remove this semicolon",
105        style = "verbose",
106        code = "",
107        applicability = "machine-applicable"
108    )]
109    pub span: Span,
110    #[help("{$name} declarations are not followed by a semicolon")]
111    pub show_help: bool,
112    pub name: &'a str,
113}
114
115#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            IncorrectUseOfAwait 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 {
                    IncorrectUseOfAwait { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("incorrect use of `await`")));
                        let __code_5 =
                            [::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("`await` is not a method call, remove the parentheses")),
                            __code_5, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
116#[diag("incorrect use of `await`")]
117pub(crate) struct IncorrectUseOfAwait {
118    #[primary_span]
119    #[suggestion(
120        "`await` is not a method call, remove the parentheses",
121        style = "verbose",
122        code = "",
123        applicability = "machine-applicable"
124    )]
125    pub span: Span,
126}
127
128#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            IncorrectUseOfUse 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 {
                    IncorrectUseOfUse { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("incorrect use of `use`")));
                        let __code_6 =
                            [::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("`use` is not a method call, try removing the parentheses")),
                            __code_6, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
129#[diag("incorrect use of `use`")]
130pub(crate) struct IncorrectUseOfUse {
131    #[primary_span]
132    #[suggestion(
133        "`use` is not a method call, try removing the parentheses",
134        style = "verbose",
135        code = "",
136        applicability = "machine-applicable"
137    )]
138    pub span: Span,
139}
140
141#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for AwaitSuggestion {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    AwaitSuggestion {
                        removal: __binding_0,
                        dot_await: __binding_1,
                        question_mark: __binding_2 } => {
                        let mut suggestions = Vec::new();
                        let __code_7 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!(""))
                                });
                        let __code_8 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!(".await{0}", __binding_2))
                                });
                        suggestions.push((__binding_0, __code_7));
                        suggestions.push((__binding_1, __code_8));
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        sub_args.insert("question_mark".into(),
                            rustc_errors::IntoDiagArg::into_diag_arg(__binding_2,
                                &mut diag.long_ty_path));
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`await` is a postfix operation")),
                                &sub_args);
                        diag.multipart_suggestion_with_style(__message, suggestions,
                            rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowCode);
                    }
                }
            }
        }
    };Subdiagnostic)]
142#[multipart_suggestion("`await` is a postfix operation", applicability = "machine-applicable")]
143pub(crate) struct AwaitSuggestion {
144    #[suggestion_part(code = "")]
145    pub removal: Span,
146    #[suggestion_part(code = ".await{question_mark}")]
147    pub dot_await: Span,
148    pub question_mark: &'static str,
149}
150
151#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for IncorrectAwait
            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 {
                    IncorrectAwait { span: __binding_0, suggestion: __binding_1
                        } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("incorrect use of `await`")));
                        ;
                        diag.span(__binding_0);
                        diag.subdiagnostic(__binding_1);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
152#[diag("incorrect use of `await`")]
153pub(crate) struct IncorrectAwait {
154    #[primary_span]
155    pub span: Span,
156    #[subdiagnostic]
157    pub suggestion: AwaitSuggestion,
158}
159
160#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for InInTypo 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 {
                    InInTypo { span: __binding_0, sugg_span: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected iterable, found keyword `in`")));
                        let __code_9 =
                            [::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 duplicated `in`")),
                            __code_9, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
161#[diag("expected iterable, found keyword `in`")]
162pub(crate) struct InInTypo {
163    #[primary_span]
164    pub span: Span,
165    #[suggestion(
166        "remove the duplicated `in`",
167        code = "",
168        style = "verbose",
169        applicability = "machine-applicable"
170    )]
171    pub sugg_span: Span,
172}
173
174#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            InvalidVariableDeclaration 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 {
                    InvalidVariableDeclaration {
                        span: __binding_0, sub: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("invalid variable declaration")));
                        ;
                        diag.span(__binding_0);
                        diag.subdiagnostic(__binding_1);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
175#[diag("invalid variable declaration")]
176pub(crate) struct InvalidVariableDeclaration {
177    #[primary_span]
178    pub span: Span,
179    #[subdiagnostic]
180    pub sub: InvalidVariableDeclarationSub,
181}
182
183#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for InvalidVariableDeclarationSub {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    InvalidVariableDeclarationSub::SwitchMutLetOrder(__binding_0)
                        => {
                        let __code_10 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("let mut"))
                                            })].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("switch the order of `mut` and `let`")),
                                &sub_args);
                        diag.span_suggestions_with_style(__binding_0, __message,
                            __code_10, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                    }
                    InvalidVariableDeclarationSub::MissingLet(__binding_0) => {
                        let __code_11 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("let mut"))
                                            })].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("missing keyword")),
                                &sub_args);
                        diag.span_suggestions_with_style(__binding_0, __message,
                            __code_11, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                    }
                    InvalidVariableDeclarationSub::UseLetNotAuto(__binding_0) =>
                        {
                        let __code_12 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("let"))
                                            })].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("write `let` instead of `auto` to introduce a new variable")),
                                &sub_args);
                        diag.span_suggestions_with_style(__binding_0, __message,
                            __code_12, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                    }
                    InvalidVariableDeclarationSub::UseLetNotVar(__binding_0) =>
                        {
                        let __code_13 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("let"))
                                            })].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("write `let` instead of `var` to introduce a new variable")),
                                &sub_args);
                        diag.span_suggestions_with_style(__binding_0, __message,
                            __code_13, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                    }
                }
            }
        }
    };Subdiagnostic)]
184pub(crate) enum InvalidVariableDeclarationSub {
185    #[suggestion(
186        "switch the order of `mut` and `let`",
187        style = "verbose",
188        applicability = "maybe-incorrect",
189        code = "let mut"
190    )]
191    SwitchMutLetOrder(#[primary_span] Span),
192    #[suggestion(
193        "missing keyword",
194        applicability = "machine-applicable",
195        style = "verbose",
196        code = "let mut"
197    )]
198    MissingLet(#[primary_span] Span),
199    #[suggestion(
200        "write `let` instead of `auto` to introduce a new variable",
201        style = "verbose",
202        applicability = "machine-applicable",
203        code = "let"
204    )]
205    UseLetNotAuto(#[primary_span] Span),
206    #[suggestion(
207        "write `let` instead of `var` to introduce a new variable",
208        style = "verbose",
209        applicability = "machine-applicable",
210        code = "let"
211    )]
212    UseLetNotVar(#[primary_span] Span),
213}
214
215#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            SwitchRefBoxOrder 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 {
                    SwitchRefBoxOrder { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("switch the order of `ref` and `box`")));
                        let __code_14 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("box ref"))
                                            })].into_iter();
                        ;
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("swap them")),
                            __code_14, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
216#[diag("switch the order of `ref` and `box`")]
217pub(crate) struct SwitchRefBoxOrder {
218    #[primary_span]
219    #[suggestion(
220        "swap them",
221        applicability = "machine-applicable",
222        style = "verbose",
223        code = "box ref"
224    )]
225    pub span: Span,
226}
227
228#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            InvalidComparisonOperator 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 {
                    InvalidComparisonOperator {
                        span: __binding_0, invalid: __binding_1, sub: __binding_2 }
                        => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("invalid comparison operator `{$invalid}`")));
                        ;
                        diag.arg("invalid", __binding_1);
                        diag.span(__binding_0);
                        diag.subdiagnostic(__binding_2);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
229#[diag("invalid comparison operator `{$invalid}`")]
230pub(crate) struct InvalidComparisonOperator {
231    #[primary_span]
232    pub span: Span,
233    pub invalid: String,
234    #[subdiagnostic]
235    pub sub: InvalidComparisonOperatorSub,
236}
237
238#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for InvalidComparisonOperatorSub {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    InvalidComparisonOperatorSub::Correctable {
                        span: __binding_0,
                        invalid: __binding_1,
                        correct: __binding_2 } => {
                        let __code_15 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("{0}", __binding_2))
                                            })].into_iter();
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        sub_args.insert("invalid".into(),
                            rustc_errors::IntoDiagArg::into_diag_arg(__binding_1,
                                &mut diag.long_ty_path));
                        sub_args.insert("correct".into(),
                            rustc_errors::IntoDiagArg::into_diag_arg(__binding_2,
                                &mut diag.long_ty_path));
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`{$invalid}` is not a valid comparison operator, use `{$correct}`")),
                                &sub_args);
                        diag.span_suggestions_with_style(__binding_0, __message,
                            __code_15, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                    }
                    InvalidComparisonOperatorSub::Spaceship(__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("`<=>` is not a valid comparison operator, use `std::cmp::Ordering`")),
                                &sub_args);
                        diag.span_label(__binding_0, __message);
                    }
                }
            }
        }
    };Subdiagnostic)]
239pub(crate) enum InvalidComparisonOperatorSub {
240    #[suggestion(
241        "`{$invalid}` is not a valid comparison operator, use `{$correct}`",
242        style = "verbose",
243        applicability = "machine-applicable",
244        code = "{correct}"
245    )]
246    Correctable {
247        #[primary_span]
248        span: Span,
249        invalid: String,
250        correct: String,
251    },
252    #[label("`<=>` is not a valid comparison operator, use `std::cmp::Ordering`")]
253    Spaceship(#[primary_span] Span),
254}
255
256#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            InvalidLogicalOperator 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 {
                    InvalidLogicalOperator {
                        span: __binding_0, incorrect: __binding_1, sub: __binding_2
                        } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`{$incorrect}` is not a logical operator")));
                        diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("unlike in e.g., Python and PHP, `&&` and `||` are used for logical operators")));
                        ;
                        diag.arg("incorrect", __binding_1);
                        diag.span(__binding_0);
                        diag.subdiagnostic(__binding_2);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
257#[diag("`{$incorrect}` is not a logical operator")]
258#[note("unlike in e.g., Python and PHP, `&&` and `||` are used for logical operators")]
259pub(crate) struct InvalidLogicalOperator {
260    #[primary_span]
261    pub span: Span,
262    pub incorrect: String,
263    #[subdiagnostic]
264    pub sub: InvalidLogicalOperatorSub,
265}
266
267#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for InvalidLogicalOperatorSub {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    InvalidLogicalOperatorSub::Conjunction(__binding_0) => {
                        let __code_16 =
                            [::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("use `&&` to perform logical conjunction")),
                                &sub_args);
                        diag.span_suggestions_with_style(__binding_0, __message,
                            __code_16, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                    }
                    InvalidLogicalOperatorSub::Disjunction(__binding_0) => {
                        let __code_17 =
                            [::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("use `||` to perform logical disjunction")),
                                &sub_args);
                        diag.span_suggestions_with_style(__binding_0, __message,
                            __code_17, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                    }
                }
            }
        }
    };Subdiagnostic)]
268pub(crate) enum InvalidLogicalOperatorSub {
269    #[suggestion(
270        "use `&&` to perform logical conjunction",
271        style = "verbose",
272        applicability = "machine-applicable",
273        code = "&&"
274    )]
275    Conjunction(#[primary_span] Span),
276    #[suggestion(
277        "use `||` to perform logical disjunction",
278        style = "verbose",
279        applicability = "machine-applicable",
280        code = "||"
281    )]
282    Disjunction(#[primary_span] Span),
283}
284
285#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            TildeAsUnaryOperator 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 {
                    TildeAsUnaryOperator(__binding_0) => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`~` cannot be used as a unary operator")));
                        let __code_18 =
                            [::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("use `!` to perform bitwise not")),
                            __code_18, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
286#[diag("`~` cannot be used as a unary operator")]
287pub(crate) struct TildeAsUnaryOperator(
288    #[primary_span]
289    #[suggestion(
290        "use `!` to perform bitwise not",
291        style = "verbose",
292        applicability = "machine-applicable",
293        code = "!"
294    )]
295    pub Span,
296);
297
298#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            NotAsNegationOperator 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 {
                    NotAsNegationOperator {
                        negated: __binding_0,
                        negated_desc: __binding_1,
                        sub: __binding_2 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("unexpected {$negated_desc} after identifier")));
                        ;
                        diag.arg("negated_desc", __binding_1);
                        diag.span(__binding_0);
                        diag.subdiagnostic(__binding_2);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
299#[diag("unexpected {$negated_desc} after identifier")]
300pub(crate) struct NotAsNegationOperator {
301    #[primary_span]
302    pub negated: Span,
303    pub negated_desc: String,
304    #[subdiagnostic]
305    pub sub: NotAsNegationOperatorSub,
306}
307
308#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for NotAsNegationOperatorSub {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    NotAsNegationOperatorSub::SuggestNotDefault(__binding_0) =>
                        {
                        let __code_19 =
                            [::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("use `!` to perform logical negation or bitwise not")),
                                &sub_args);
                        diag.span_suggestions_with_style(__binding_0, __message,
                            __code_19, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                    }
                    NotAsNegationOperatorSub::SuggestNotBitwise(__binding_0) =>
                        {
                        let __code_20 =
                            [::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("use `!` to perform bitwise not")),
                                &sub_args);
                        diag.span_suggestions_with_style(__binding_0, __message,
                            __code_20, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                    }
                    NotAsNegationOperatorSub::SuggestNotLogical(__binding_0) =>
                        {
                        let __code_21 =
                            [::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("use `!` to perform logical negation")),
                                &sub_args);
                        diag.span_suggestions_with_style(__binding_0, __message,
                            __code_21, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                    }
                }
            }
        }
    };Subdiagnostic)]
309pub(crate) enum NotAsNegationOperatorSub {
310    #[suggestion(
311        "use `!` to perform logical negation or bitwise not",
312        style = "verbose",
313        applicability = "machine-applicable",
314        code = "!"
315    )]
316    SuggestNotDefault(#[primary_span] Span),
317
318    #[suggestion(
319        "use `!` to perform bitwise not",
320        style = "verbose",
321        applicability = "machine-applicable",
322        code = "!"
323    )]
324    SuggestNotBitwise(#[primary_span] Span),
325
326    #[suggestion(
327        "use `!` to perform logical negation",
328        style = "verbose",
329        applicability = "machine-applicable",
330        code = "!"
331    )]
332    SuggestNotLogical(#[primary_span] Span),
333}
334
335#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            MalformedLoopLabel 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 {
                    MalformedLoopLabel {
                        span: __binding_0, suggestion: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("malformed loop label")));
                        let __code_22 =
                            [::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("use the correct loop label format")),
                            __code_22, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
336#[diag("malformed loop label")]
337pub(crate) struct MalformedLoopLabel {
338    #[primary_span]
339    pub span: Span,
340    #[suggestion(
341        "use the correct loop label format",
342        applicability = "machine-applicable",
343        code = "'",
344        style = "verbose"
345    )]
346    pub suggestion: Span,
347}
348
349#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            LifetimeInBorrowExpression 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 {
                    LifetimeInBorrowExpression {
                        span: __binding_0, lifetime_span: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("borrow expressions cannot be annotated with lifetimes")));
                        let __code_23 =
                            [::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 lifetime annotation")),
                            __code_23, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag.span_label(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("annotated with lifetime here")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
350#[diag("borrow expressions cannot be annotated with lifetimes")]
351pub(crate) struct LifetimeInBorrowExpression {
352    #[primary_span]
353    pub span: Span,
354    #[suggestion(
355        "remove the lifetime annotation",
356        applicability = "machine-applicable",
357        code = "",
358        style = "verbose"
359    )]
360    #[label("annotated with lifetime here")]
361    pub lifetime_span: Span,
362}
363
364#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            FieldExpressionWithGeneric 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 {
                    FieldExpressionWithGeneric(__binding_0) => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("field expressions cannot have generic arguments")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
365#[diag("field expressions cannot have generic arguments")]
366pub(crate) struct FieldExpressionWithGeneric(#[primary_span] pub Span);
367
368#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            MacroInvocationWithQualifiedPath 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 {
                    MacroInvocationWithQualifiedPath(__binding_0) => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("macros cannot use qualified paths")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
369#[diag("macros cannot use qualified paths")]
370pub(crate) struct MacroInvocationWithQualifiedPath(#[primary_span] pub Span);
371
372#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            UnexpectedTokenAfterLabel 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 {
                    UnexpectedTokenAfterLabel {
                        span: __binding_0,
                        remove_label: __binding_1,
                        enclose_in_block: __binding_2 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected `while`, `for`, `loop` or `{\"{\"}` after a label")));
                        let __code_24 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(""))
                                            })].into_iter();
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected `while`, `for`, `loop` or `{\"{\"}` after a label")));
                        if let Some(__binding_1) = __binding_1 {
                            diag.span_suggestions_with_style(__binding_1,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("consider removing the label")),
                                __code_24, rustc_errors::Applicability::Unspecified,
                                rustc_errors::SuggestionStyle::ShowAlways);
                        }
                        if let Some(__binding_2) = __binding_2 {
                            diag.subdiagnostic(__binding_2);
                        }
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
373#[diag("expected `while`, `for`, `loop` or `{\"{\"}` after a label")]
374pub(crate) struct UnexpectedTokenAfterLabel {
375    #[primary_span]
376    #[label("expected `while`, `for`, `loop` or `{\"{\"}` after a label")]
377    pub span: Span,
378    #[suggestion("consider removing the label", style = "verbose", code = "")]
379    pub remove_label: Option<Span>,
380    #[subdiagnostic]
381    pub enclose_in_block: Option<UnexpectedTokenAfterLabelSugg>,
382}
383
384#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for UnexpectedTokenAfterLabelSugg {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    UnexpectedTokenAfterLabelSugg {
                        left: __binding_0, right: __binding_1 } => {
                        let mut suggestions = Vec::new();
                        let __code_25 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!("{{ "))
                                });
                        let __code_26 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!(" }}"))
                                });
                        suggestions.push((__binding_0, __code_25));
                        suggestions.push((__binding_1, __code_26));
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("consider enclosing expression in a block")),
                                &sub_args);
                        diag.multipart_suggestion_with_style(__message, suggestions,
                            rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowCode);
                    }
                }
            }
        }
    };Subdiagnostic)]
385#[multipart_suggestion(
386    "consider enclosing expression in a block",
387    applicability = "machine-applicable"
388)]
389pub(crate) struct UnexpectedTokenAfterLabelSugg {
390    #[suggestion_part(code = "{{ ")]
391    pub left: Span,
392    #[suggestion_part(code = " }}")]
393    pub right: Span,
394}
395
396#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            RequireColonAfterLabeledExpression 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 {
                    RequireColonAfterLabeledExpression {
                        span: __binding_0,
                        label: __binding_1,
                        label_end: __binding_2 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("labeled expression must be followed by `:`")));
                        let __code_27 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(": "))
                                            })].into_iter();
                        diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("labels are used before loops and blocks, allowing e.g., `break 'label` to them")));
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("the label")));
                        diag.span_suggestions_with_style(__binding_2,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("add `:` after the label")),
                            __code_27, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
397#[diag("labeled expression must be followed by `:`")]
398#[note("labels are used before loops and blocks, allowing e.g., `break 'label` to them")]
399pub(crate) struct RequireColonAfterLabeledExpression {
400    #[primary_span]
401    pub span: Span,
402    #[label("the label")]
403    pub label: Span,
404    #[suggestion(
405        "add `:` after the label",
406        style = "verbose",
407        applicability = "machine-applicable",
408        code = ": "
409    )]
410    pub label_end: Span,
411}
412
413#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            DoCatchSyntaxRemoved 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 {
                    DoCatchSyntaxRemoved { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("found removed `do catch` syntax")));
                        let __code_28 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("try"))
                                            })].into_iter();
                        diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("following RFC #2388, the new non-placeholder syntax is `try`")));
                        ;
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("replace with the new syntax")),
                            __code_28, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
414#[diag("found removed `do catch` syntax")]
415#[note("following RFC #2388, the new non-placeholder syntax is `try`")]
416pub(crate) struct DoCatchSyntaxRemoved {
417    #[primary_span]
418    #[suggestion(
419        "replace with the new syntax",
420        applicability = "machine-applicable",
421        code = "try",
422        style = "verbose"
423    )]
424    pub span: Span,
425}
426
427#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            FloatLiteralRequiresIntegerPart 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 {
                    FloatLiteralRequiresIntegerPart {
                        span: __binding_0, suggestion: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("float literals must have an integer part")));
                        let __code_29 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("0"))
                                            })].into_iter();
                        ;
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("must have an integer part")),
                            __code_29, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
428#[diag("float literals must have an integer part")]
429pub(crate) struct FloatLiteralRequiresIntegerPart {
430    #[primary_span]
431    pub span: Span,
432    #[suggestion(
433        "must have an integer part",
434        applicability = "machine-applicable",
435        code = "0",
436        style = "verbose"
437    )]
438    pub suggestion: Span,
439}
440
441#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            MissingSemicolonBeforeArray 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 {
                    MissingSemicolonBeforeArray {
                        open_delim: __binding_0, semicolon: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected `;`, found `[`")));
                        let __code_30 =
                            [::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("consider adding `;` here")),
                            __code_30, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
442#[diag("expected `;`, found `[`")]
443pub(crate) struct MissingSemicolonBeforeArray {
444    #[primary_span]
445    pub open_delim: Span,
446    #[suggestion(
447        "consider adding `;` here",
448        style = "verbose",
449        applicability = "maybe-incorrect",
450        code = ";"
451    )]
452    pub semicolon: Span,
453}
454
455#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for MissingDotDot
            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 {
                    MissingDotDot {
                        token_span: __binding_0, sugg_span: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected `..`, found `...`")));
                        let __code_31 =
                            [::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("use `..` to fill in the rest of the fields")),
                            __code_31, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
456#[diag("expected `..`, found `...`")]
457pub(crate) struct MissingDotDot {
458    #[primary_span]
459    pub token_span: Span,
460    #[suggestion(
461        "use `..` to fill in the rest of the fields",
462        applicability = "maybe-incorrect",
463        code = "..",
464        style = "verbose"
465    )]
466    pub sugg_span: Span,
467}
468
469#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            InvalidBlockMacroSegment 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 {
                    InvalidBlockMacroSegment {
                        span: __binding_0, context: __binding_1, wrap: __binding_2 }
                        => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("cannot use a `block` macro fragment here")));
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("the `block` fragment is within this context")));
                        diag.subdiagnostic(__binding_2);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
470#[diag("cannot use a `block` macro fragment here")]
471pub(crate) struct InvalidBlockMacroSegment {
472    #[primary_span]
473    pub span: Span,
474    #[label("the `block` fragment is within this context")]
475    pub context: Span,
476    #[subdiagnostic]
477    pub wrap: WrapInExplicitBlock,
478}
479
480#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for WrapInExplicitBlock {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    WrapInExplicitBlock { lo: __binding_0, hi: __binding_1 } =>
                        {
                        let mut suggestions = Vec::new();
                        let __code_32 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!("{{ "))
                                });
                        let __code_33 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!(" }}"))
                                });
                        suggestions.push((__binding_0, __code_32));
                        suggestions.push((__binding_1, __code_33));
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("wrap this in another block")),
                                &sub_args);
                        diag.multipart_suggestion_with_style(__message, suggestions,
                            rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowCode);
                    }
                }
            }
        }
    };Subdiagnostic)]
481#[multipart_suggestion("wrap this in another block", applicability = "machine-applicable")]
482pub(crate) struct WrapInExplicitBlock {
483    #[suggestion_part(code = "{{ ")]
484    pub lo: Span,
485    #[suggestion_part(code = " }}")]
486    pub hi: Span,
487}
488
489#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            IfExpressionMissingThenBlock 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 {
                    IfExpressionMissingThenBlock {
                        if_span: __binding_0,
                        missing_then_block_sub: __binding_1,
                        let_else_sub: __binding_2 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("this `if` expression is missing a block after the condition")));
                        ;
                        diag.span(__binding_0);
                        diag.subdiagnostic(__binding_1);
                        if let Some(__binding_2) = __binding_2 {
                            diag.subdiagnostic(__binding_2);
                        }
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
490#[diag("this `if` expression is missing a block after the condition")]
491pub(crate) struct IfExpressionMissingThenBlock {
492    #[primary_span]
493    pub if_span: Span,
494    #[subdiagnostic]
495    pub missing_then_block_sub: IfExpressionMissingThenBlockSub,
496    #[subdiagnostic]
497    pub let_else_sub: Option<IfExpressionLetSomeSub>,
498}
499
500#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for IfExpressionMissingThenBlockSub {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    IfExpressionMissingThenBlockSub::UnfinishedCondition(__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 binary operation is possibly unfinished")),
                                &sub_args);
                        diag.span_help(__binding_0, __message);
                    }
                    IfExpressionMissingThenBlockSub::AddThenBlock(__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("add a block here")),
                                &sub_args);
                        diag.span_help(__binding_0, __message);
                    }
                }
            }
        }
    };Subdiagnostic)]
501pub(crate) enum IfExpressionMissingThenBlockSub {
502    #[help("this binary operation is possibly unfinished")]
503    UnfinishedCondition(#[primary_span] Span),
504    #[help("add a block here")]
505    AddThenBlock(#[primary_span] Span),
506}
507
508#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            TernaryOperator 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 {
                    TernaryOperator {
                        span: __binding_0, sugg: __binding_1, no_sugg: __binding_2 }
                        => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("Rust has no ternary operator")));
                        ;
                        diag.span(__binding_0);
                        if let Some(__binding_1) = __binding_1 {
                            diag.subdiagnostic(__binding_1);
                        }
                        if __binding_2 {
                            diag.help(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("use an `if-else` expression instead")));
                        }
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
509#[diag("Rust has no ternary operator")]
510pub(crate) struct TernaryOperator {
511    #[primary_span]
512    pub span: Span,
513    /// If we have a span for the condition expression, suggest the if/else
514    #[subdiagnostic]
515    pub sugg: Option<TernaryOperatorSuggestion>,
516    /// Otherwise, just print the suggestion message
517    #[help("use an `if-else` expression instead")]
518    pub no_sugg: bool,
519}
520
521#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for TernaryOperatorSuggestion {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    TernaryOperatorSuggestion {
                        before_cond: __binding_0,
                        question: __binding_1,
                        colon: __binding_2,
                        end: __binding_3 } => {
                        let mut suggestions = Vec::new();
                        let __code_34 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!("if "))
                                });
                        let __code_35 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!("{{"))
                                });
                        let __code_36 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!("}} else {{"))
                                });
                        let __code_37 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!(" }}"))
                                });
                        suggestions.push((__binding_0, __code_34));
                        suggestions.push((__binding_1, __code_35));
                        suggestions.push((__binding_2, __code_36));
                        suggestions.push((__binding_3, __code_37));
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("use an `if-else` expression instead")),
                                &sub_args);
                        diag.multipart_suggestion_with_style(__message, suggestions,
                            rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                    }
                }
            }
        }
    };Subdiagnostic, #[automatically_derived]
impl ::core::marker::Copy for TernaryOperatorSuggestion { }Copy, #[automatically_derived]
impl ::core::clone::Clone for TernaryOperatorSuggestion {
    #[inline]
    fn clone(&self) -> TernaryOperatorSuggestion {
        let _: ::core::clone::AssertParamIsClone<Span>;
        *self
    }
}Clone)]
522#[multipart_suggestion(
523    "use an `if-else` expression instead",
524    applicability = "maybe-incorrect",
525    style = "verbose"
526)]
527pub(crate) struct TernaryOperatorSuggestion {
528    #[suggestion_part(code = "if ")]
529    pub before_cond: Span,
530    #[suggestion_part(code = "{{")]
531    pub question: Span,
532    #[suggestion_part(code = "}} else {{")]
533    pub colon: Span,
534    #[suggestion_part(code = " }}")]
535    pub end: Span,
536}
537
538#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for IfExpressionLetSomeSub {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    IfExpressionLetSomeSub { if_span: __binding_0 } => {
                        let __code_38 =
                            [::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 the `if` if you meant to write a `let...else` statement")),
                                &sub_args);
                        diag.span_suggestions_with_style(__binding_0, __message,
                            __code_38, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                    }
                }
            }
        }
    };Subdiagnostic)]
539#[suggestion(
540    "remove the `if` if you meant to write a `let...else` statement",
541    applicability = "maybe-incorrect",
542    code = "",
543    style = "verbose"
544)]
545pub(crate) struct IfExpressionLetSomeSub {
546    #[primary_span]
547    pub if_span: Span,
548}
549
550#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            IfExpressionMissingCondition 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 {
                    IfExpressionMissingCondition {
                        if_span: __binding_0, block_span: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("missing condition for `if` expression")));
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected condition here")));
                        diag.span_label(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("if this block is the condition of the `if` expression, then it must be followed by another block")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
551#[diag("missing condition for `if` expression")]
552pub(crate) struct IfExpressionMissingCondition {
553    #[primary_span]
554    #[label("expected condition here")]
555    pub if_span: Span,
556    #[label(
557        "if this block is the condition of the `if` expression, then it must be followed by another block"
558    )]
559    pub block_span: Span,
560}
561
562#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            ExpectedExpressionFoundLet 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 {
                    ExpectedExpressionFoundLet {
                        span: __binding_0,
                        reason: __binding_1,
                        missing_let: __binding_2,
                        comparison: __binding_3 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected expression, found `let` statement")));
                        diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("only supported directly in conditions of `if` and `while` expressions")));
                        ;
                        diag.span(__binding_0);
                        diag.subdiagnostic(__binding_1);
                        if let Some(__binding_2) = __binding_2 {
                            diag.subdiagnostic(__binding_2);
                        }
                        if let Some(__binding_3) = __binding_3 {
                            diag.subdiagnostic(__binding_3);
                        }
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
563#[diag("expected expression, found `let` statement")]
564#[note("only supported directly in conditions of `if` and `while` expressions")]
565pub(crate) struct ExpectedExpressionFoundLet {
566    #[primary_span]
567    pub span: Span,
568    #[subdiagnostic]
569    pub reason: ForbiddenLetReason,
570    #[subdiagnostic]
571    pub missing_let: Option<MaybeMissingLet>,
572    #[subdiagnostic]
573    pub comparison: Option<MaybeComparison>,
574}
575
576#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            LetChainMissingLet 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 {
                    LetChainMissingLet {
                        span: __binding_0,
                        label_span: __binding_1,
                        rhs_span: __binding_2,
                        sug_span: __binding_3 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("let-chain with missing `let`")));
                        let __code_39 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("let "))
                                            })].into_iter();
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected `let` expression, found assignment")));
                        diag.span_label(__binding_2,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("let expression later in the condition")));
                        diag.span_suggestions_with_style(__binding_3,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("add `let` before the expression")),
                            __code_39, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
577#[diag("let-chain with missing `let`")]
578pub(crate) struct LetChainMissingLet {
579    #[primary_span]
580    pub span: Span,
581    #[label("expected `let` expression, found assignment")]
582    pub label_span: Span,
583    #[label("let expression later in the condition")]
584    pub rhs_span: Span,
585    #[suggestion(
586        "add `let` before the expression",
587        applicability = "maybe-incorrect",
588        code = "let ",
589        style = "verbose"
590    )]
591    pub sug_span: Span,
592}
593
594#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for OrInLetChain
            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 {
                    OrInLetChain { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`||` operators are not supported in let chain conditions")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
595#[diag("`||` operators are not supported in let chain conditions")]
596pub(crate) struct OrInLetChain {
597    #[primary_span]
598    pub span: Span,
599}
600
601#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for MaybeMissingLet {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    MaybeMissingLet { span: __binding_0 } => {
                        let mut suggestions = Vec::new();
                        let __code_40 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!("let "))
                                });
                        suggestions.push((__binding_0, __code_40));
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("you might have meant to continue the let-chain")),
                                &sub_args);
                        diag.multipart_suggestion_with_style(__message, suggestions,
                            rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                    }
                }
            }
        }
    };Subdiagnostic, #[automatically_derived]
impl ::core::clone::Clone for MaybeMissingLet {
    #[inline]
    fn clone(&self) -> MaybeMissingLet {
        let _: ::core::clone::AssertParamIsClone<Span>;
        *self
    }
}Clone, #[automatically_derived]
impl ::core::marker::Copy for MaybeMissingLet { }Copy)]
602#[multipart_suggestion(
603    "you might have meant to continue the let-chain",
604    applicability = "maybe-incorrect",
605    style = "verbose"
606)]
607pub(crate) struct MaybeMissingLet {
608    #[suggestion_part(code = "let ")]
609    pub span: Span,
610}
611
612#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for MaybeComparison {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    MaybeComparison { span: __binding_0 } => {
                        let mut suggestions = Vec::new();
                        let __code_41 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!("="))
                                });
                        suggestions.push((__binding_0, __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("you might have meant to compare for equality")),
                                &sub_args);
                        diag.multipart_suggestion_with_style(__message, suggestions,
                            rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                    }
                }
            }
        }
    };Subdiagnostic, #[automatically_derived]
impl ::core::clone::Clone for MaybeComparison {
    #[inline]
    fn clone(&self) -> MaybeComparison {
        let _: ::core::clone::AssertParamIsClone<Span>;
        *self
    }
}Clone, #[automatically_derived]
impl ::core::marker::Copy for MaybeComparison { }Copy)]
613#[multipart_suggestion(
614    "you might have meant to compare for equality",
615    applicability = "maybe-incorrect",
616    style = "verbose"
617)]
618pub(crate) struct MaybeComparison {
619    #[suggestion_part(code = "=")]
620    pub span: Span,
621}
622
623#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            ExpectedEqForLetExpr 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 {
                    ExpectedEqForLetExpr {
                        span: __binding_0, sugg_span: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected `=`, found `==`")));
                        let __code_42 =
                            [::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("consider using `=` here")),
                            __code_42, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
624#[diag("expected `=`, found `==`")]
625pub(crate) struct ExpectedEqForLetExpr {
626    #[primary_span]
627    pub span: Span,
628    #[suggestion(
629        "consider using `=` here",
630        applicability = "maybe-incorrect",
631        code = "=",
632        style = "verbose"
633    )]
634    pub sugg_span: Span,
635}
636
637#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            ExpectedElseBlock 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 {
                    ExpectedElseBlock {
                        first_tok_span: __binding_0,
                        first_tok: __binding_1,
                        else_span: __binding_2,
                        condition_start: __binding_3 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected `{\"{\"}`, found {$first_tok}")));
                        let __code_43 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("if "))
                                            })].into_iter();
                        ;
                        diag.arg("first_tok", __binding_1);
                        diag.span(__binding_0);
                        diag.span_label(__binding_2,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected an `if` or a block after this `else`")));
                        diag.span_suggestions_with_style(__binding_3,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("add an `if` if this is the condition of a chained `else if` statement")),
                            __code_43, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
638#[diag("expected `{\"{\"}`, found {$first_tok}")]
639pub(crate) struct ExpectedElseBlock {
640    #[primary_span]
641    pub first_tok_span: Span,
642    pub first_tok: String,
643    #[label("expected an `if` or a block after this `else`")]
644    pub else_span: Span,
645    #[suggestion(
646        "add an `if` if this is the condition of a chained `else if` statement",
647        applicability = "maybe-incorrect",
648        code = "if ",
649        style = "verbose"
650    )]
651    pub condition_start: Span,
652}
653
654#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            ExpectedStructField 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 {
                    ExpectedStructField {
                        span: __binding_0,
                        token: __binding_1,
                        ident_span: __binding_2 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected one of `,`, `:`, or `{\"}\"}`, found `{$token}`")));
                        ;
                        diag.arg("token", __binding_1);
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected one of `,`, `:`, or `{\"}\"}`")));
                        diag.span_label(__binding_2,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("while parsing this struct field")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
655#[diag("expected one of `,`, `:`, or `{\"}\"}`, found `{$token}`")]
656pub(crate) struct ExpectedStructField {
657    #[primary_span]
658    #[label("expected one of `,`, `:`, or `{\"}\"}`")]
659    pub span: Span,
660    pub token: Token,
661    #[label("while parsing this struct field")]
662    pub ident_span: Span,
663}
664
665#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            OuterAttributeNotAllowedOnIfElse 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 {
                    OuterAttributeNotAllowedOnIfElse {
                        last: __binding_0,
                        branch_span: __binding_1,
                        ctx_span: __binding_2,
                        ctx: __binding_3,
                        attributes: __binding_4 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("outer attributes are not allowed on `if` and `else` branches")));
                        let __code_44 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(""))
                                            })].into_iter();
                        ;
                        diag.arg("ctx", __binding_3);
                        diag.span(__binding_0);
                        diag.span_label(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("the attributes are attached to this branch")));
                        diag.span_label(__binding_2,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("the branch belongs to this `{$ctx}`")));
                        diag.span_suggestions_with_style(__binding_4,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("remove the attributes")),
                            __code_44, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
666#[diag("outer attributes are not allowed on `if` and `else` branches")]
667pub(crate) struct OuterAttributeNotAllowedOnIfElse {
668    #[primary_span]
669    pub last: Span,
670
671    #[label("the attributes are attached to this branch")]
672    pub branch_span: Span,
673
674    #[label("the branch belongs to this `{$ctx}`")]
675    pub ctx_span: Span,
676    pub ctx: String,
677
678    #[suggestion(
679        "remove the attributes",
680        applicability = "machine-applicable",
681        code = "",
682        style = "verbose"
683    )]
684    pub attributes: Span,
685}
686
687#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            MissingInInForLoop 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 {
                    MissingInInForLoop { span: __binding_0, sub: __binding_1 }
                        => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("missing `in` in `for` loop")));
                        ;
                        diag.span(__binding_0);
                        diag.subdiagnostic(__binding_1);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
688#[diag("missing `in` in `for` loop")]
689pub(crate) struct MissingInInForLoop {
690    #[primary_span]
691    pub span: Span,
692    #[subdiagnostic]
693    pub sub: MissingInInForLoopSub,
694}
695
696#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for MissingInInForLoopSub {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    MissingInInForLoopSub::InNotOf(__binding_0) => {
                        let __code_45 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("in"))
                                            })].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("try using `in` here instead")),
                                &sub_args);
                        diag.span_suggestions_with_style(__binding_0, __message,
                            __code_45, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                    }
                    MissingInInForLoopSub::InNotEq(__binding_0) => {
                        let __code_46 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("in"))
                                            })].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("try using `in` here instead")),
                                &sub_args);
                        diag.span_suggestions_with_style(__binding_0, __message,
                            __code_46, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                    }
                    MissingInInForLoopSub::AddIn(__binding_0) => {
                        let __code_47 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(" in "))
                                            })].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("try adding `in` here")),
                                &sub_args);
                        diag.span_suggestions_with_style(__binding_0, __message,
                            __code_47, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                    }
                }
            }
        }
    };Subdiagnostic)]
697pub(crate) enum MissingInInForLoopSub {
698    // User wrote `for pat of expr {}`
699    // Has been misleading, at least in the past (closed Issue #48492), thus maybe-incorrect
700    #[suggestion(
701        "try using `in` here instead",
702        style = "verbose",
703        applicability = "maybe-incorrect",
704        code = "in"
705    )]
706    InNotOf(#[primary_span] Span),
707    // User wrote `for pat = expr {}`
708    #[suggestion(
709        "try using `in` here instead",
710        style = "verbose",
711        applicability = "maybe-incorrect",
712        code = "in"
713    )]
714    InNotEq(#[primary_span] Span),
715    #[suggestion(
716        "try adding `in` here",
717        style = "verbose",
718        applicability = "maybe-incorrect",
719        code = " in "
720    )]
721    AddIn(#[primary_span] Span),
722}
723
724#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            MissingExpressionInForLoop 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 {
                    MissingExpressionInForLoop { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("missing expression to iterate on in `for` loop")));
                        let __code_48 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("/* expression */ "))
                                            })].into_iter();
                        ;
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("try adding an expression to the `for` loop")),
                            __code_48, rustc_errors::Applicability::HasPlaceholders,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
725#[diag("missing expression to iterate on in `for` loop")]
726pub(crate) struct MissingExpressionInForLoop {
727    #[primary_span]
728    #[suggestion(
729        "try adding an expression to the `for` loop",
730        code = "/* expression */ ",
731        applicability = "has-placeholders",
732        style = "verbose"
733    )]
734    pub span: Span,
735}
736
737#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            LoopElseNotSupported 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 {
                    LoopElseNotSupported {
                        span: __binding_0,
                        loop_kind: __binding_1,
                        loop_kw: __binding_2 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`{$loop_kind}...else` loops are not supported")));
                        diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("consider moving this `else` clause to a separate `if` statement and use a `bool` variable to control if it should run")));
                        ;
                        diag.arg("loop_kind", __binding_1);
                        diag.span(__binding_0);
                        diag.span_label(__binding_2,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`else` is attached to this loop")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
738#[diag("`{$loop_kind}...else` loops are not supported")]
739#[note(
740    "consider moving this `else` clause to a separate `if` statement and use a `bool` variable to control if it should run"
741)]
742pub(crate) struct LoopElseNotSupported {
743    #[primary_span]
744    pub span: Span,
745    pub loop_kind: &'static str,
746    #[label("`else` is attached to this loop")]
747    pub loop_kw: Span,
748}
749
750#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            MissingCommaAfterMatchArm 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 {
                    MissingCommaAfterMatchArm { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected `,` following `match` arm")));
                        let __code_49 =
                            [::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("missing a comma here to end this `match` arm")),
                            __code_49, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
751#[diag("expected `,` following `match` arm")]
752pub(crate) struct MissingCommaAfterMatchArm {
753    #[primary_span]
754    #[suggestion(
755        "missing a comma here to end this `match` arm",
756        applicability = "machine-applicable",
757        code = ",",
758        style = "verbose"
759    )]
760    pub span: Span,
761}
762
763#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for CatchAfterTry
            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 {
                    CatchAfterTry { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("keyword `catch` cannot follow a `try` block")));
                        diag.help(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("try using `match` on the result of the `try` block instead")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
764#[diag("keyword `catch` cannot follow a `try` block")]
765#[help("try using `match` on the result of the `try` block instead")]
766pub(crate) struct CatchAfterTry {
767    #[primary_span]
768    pub span: Span,
769}
770
771#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            CommaAfterBaseStruct 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 {
                    CommaAfterBaseStruct { span: __binding_0, comma: __binding_1
                        } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("cannot use a comma after the base struct")));
                        let __code_50 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(""))
                                            })].into_iter();
                        diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("the base struct must always be the last field")));
                        ;
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("remove this comma")),
                            __code_50, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
772#[diag("cannot use a comma after the base struct")]
773#[note("the base struct must always be the last field")]
774pub(crate) struct CommaAfterBaseStruct {
775    #[primary_span]
776    pub span: Span,
777    #[suggestion(
778        "remove this comma",
779        style = "verbose",
780        applicability = "machine-applicable",
781        code = ""
782    )]
783    pub comma: Span,
784}
785
786#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for EqFieldInit
            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 {
                    EqFieldInit { span: __binding_0, eq: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected `:`, found `=`")));
                        let __code_51 =
                            [::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("replace equals symbol with a colon")),
                            __code_51, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
787#[diag("expected `:`, found `=`")]
788pub(crate) struct EqFieldInit {
789    #[primary_span]
790    pub span: Span,
791    #[suggestion(
792        "replace equals symbol with a colon",
793        applicability = "machine-applicable",
794        code = ":",
795        style = "verbose"
796    )]
797    pub eq: Span,
798}
799
800#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for DotDotDot
            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 {
                    DotDotDot { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("unexpected token: `...`")));
                        let __code_52 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(".."))
                                            })].into_iter();
                        let __code_53 =
                            [::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("use `..` for an exclusive range")),
                            __code_52, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag.span_suggestions_with_style(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("or `..=` for an inclusive range")),
                            __code_53, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
801#[diag("unexpected token: `...`")]
802pub(crate) struct DotDotDot {
803    #[primary_span]
804    #[suggestion(
805        "use `..` for an exclusive range",
806        applicability = "maybe-incorrect",
807        code = "..",
808        style = "verbose"
809    )]
810    #[suggestion(
811        "or `..=` for an inclusive range",
812        applicability = "maybe-incorrect",
813        code = "..=",
814        style = "verbose"
815    )]
816    pub span: Span,
817}
818
819#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            LeftArrowOperator 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 {
                    LeftArrowOperator { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("unexpected token: `<-`")));
                        let __code_54 =
                            [::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("if you meant to write a comparison against a negative value, add a space in between `<` and `-`")),
                            __code_54, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
820#[diag("unexpected token: `<-`")]
821pub(crate) struct LeftArrowOperator {
822    #[primary_span]
823    #[suggestion(
824        "if you meant to write a comparison against a negative value, add a space in between `<` and `-`",
825        applicability = "maybe-incorrect",
826        code = "< -",
827        style = "verbose"
828    )]
829    pub span: Span,
830}
831
832#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for RemoveLet
            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 {
                    RemoveLet { span: __binding_0, suggestion: __binding_1 } =>
                        {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected pattern, found `let`")));
                        let __code_55 =
                            [::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 unnecessary `let` keyword")),
                            __code_55, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
833#[diag("expected pattern, found `let`")]
834pub(crate) struct RemoveLet {
835    #[primary_span]
836    pub span: Span,
837    #[suggestion(
838        "remove the unnecessary `let` keyword",
839        applicability = "machine-applicable",
840        code = "",
841        style = "verbose"
842    )]
843    pub suggestion: Span,
844}
845
846#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for UseEqInstead
            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 {
                    UseEqInstead { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("unexpected `==`")));
                        let __code_56 =
                            [::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("try using `=` instead")),
                            __code_56, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
847#[diag("unexpected `==`")]
848pub(crate) struct UseEqInstead {
849    #[primary_span]
850    #[suggestion(
851        "try using `=` instead",
852        style = "verbose",
853        applicability = "machine-applicable",
854        code = "="
855    )]
856    pub span: Span,
857}
858
859#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            UseEmptyBlockNotSemi 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 {
                    UseEmptyBlockNotSemi { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected { \"`{}`\" }, found `;`")));
                        let __code_57 =
                            [::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("try using { \"`{}`\" } instead")),
                            __code_57, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::HideCodeAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
860#[diag("expected { \"`{}`\" }, found `;`")]
861pub(crate) struct UseEmptyBlockNotSemi {
862    #[primary_span]
863    #[suggestion(
864        r#"try using { "`{}`" } instead"#,
865        style = "hidden",
866        applicability = "machine-applicable",
867        code = "{{}}"
868    )]
869    pub span: Span,
870}
871
872#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            ComparisonInterpretedAsGeneric 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 {
                    ComparisonInterpretedAsGeneric {
                        comparison: __binding_0,
                        r#type: __binding_1,
                        args: __binding_2,
                        suggestion: __binding_3 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`<` is interpreted as a start of generic arguments for `{$type}`, not a comparison")));
                        ;
                        diag.arg("type", __binding_1);
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("not interpreted as comparison")));
                        diag.span_label(__binding_2,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("interpreted as generic arguments")));
                        diag.subdiagnostic(__binding_3);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
873#[diag("`<` is interpreted as a start of generic arguments for `{$type}`, not a comparison")]
874pub(crate) struct ComparisonInterpretedAsGeneric {
875    #[primary_span]
876    #[label("not interpreted as comparison")]
877    pub comparison: Span,
878    pub r#type: Path,
879    #[label("interpreted as generic arguments")]
880    pub args: Span,
881    #[subdiagnostic]
882    pub suggestion: ComparisonInterpretedAsGenericSugg,
883}
884
885#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for
            ComparisonInterpretedAsGenericSugg {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    ComparisonInterpretedAsGenericSugg {
                        left: __binding_0, right: __binding_1 } => {
                        let mut suggestions = Vec::new();
                        let __code_58 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!("("))
                                });
                        let __code_59 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!(")"))
                                });
                        suggestions.push((__binding_0, __code_58));
                        suggestions.push((__binding_1, __code_59));
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("try comparing the cast value")),
                                &sub_args);
                        diag.multipart_suggestion_with_style(__message, suggestions,
                            rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowCode);
                    }
                }
            }
        }
    };Subdiagnostic)]
886#[multipart_suggestion("try comparing the cast value", applicability = "machine-applicable")]
887pub(crate) struct ComparisonInterpretedAsGenericSugg {
888    #[suggestion_part(code = "(")]
889    pub left: Span,
890    #[suggestion_part(code = ")")]
891    pub right: Span,
892}
893
894#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            ShiftInterpretedAsGeneric 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 {
                    ShiftInterpretedAsGeneric {
                        shift: __binding_0,
                        r#type: __binding_1,
                        args: __binding_2,
                        suggestion: __binding_3 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`<<` is interpreted as a start of generic arguments for `{$type}`, not a shift")));
                        ;
                        diag.arg("type", __binding_1);
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("not interpreted as shift")));
                        diag.span_label(__binding_2,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("interpreted as generic arguments")));
                        diag.subdiagnostic(__binding_3);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
895#[diag("`<<` is interpreted as a start of generic arguments for `{$type}`, not a shift")]
896pub(crate) struct ShiftInterpretedAsGeneric {
897    #[primary_span]
898    #[label("not interpreted as shift")]
899    pub shift: Span,
900    pub r#type: Path,
901    #[label("interpreted as generic arguments")]
902    pub args: Span,
903    #[subdiagnostic]
904    pub suggestion: ShiftInterpretedAsGenericSugg,
905}
906
907#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for ShiftInterpretedAsGenericSugg {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    ShiftInterpretedAsGenericSugg {
                        left: __binding_0, right: __binding_1 } => {
                        let mut suggestions = Vec::new();
                        let __code_60 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!("("))
                                });
                        let __code_61 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!(")"))
                                });
                        suggestions.push((__binding_0, __code_60));
                        suggestions.push((__binding_1, __code_61));
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("try shifting the cast value")),
                                &sub_args);
                        diag.multipart_suggestion_with_style(__message, suggestions,
                            rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowCode);
                    }
                }
            }
        }
    };Subdiagnostic)]
908#[multipart_suggestion("try shifting the cast value", applicability = "machine-applicable")]
909pub(crate) struct ShiftInterpretedAsGenericSugg {
910    #[suggestion_part(code = "(")]
911    pub left: Span,
912    #[suggestion_part(code = ")")]
913    pub right: Span,
914}
915
916#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            FoundExprWouldBeStmt 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 {
                    FoundExprWouldBeStmt {
                        span: __binding_0,
                        token: __binding_1,
                        suggestion: __binding_2 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected expression, found `{$token}`")));
                        ;
                        diag.arg("token", __binding_1);
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected expression")));
                        diag.subdiagnostic(__binding_2);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
917#[diag("expected expression, found `{$token}`")]
918pub(crate) struct FoundExprWouldBeStmt {
919    #[primary_span]
920    #[label("expected expression")]
921    pub span: Span,
922    pub token: Token,
923    #[subdiagnostic]
924    pub suggestion: ExprParenthesesNeeded,
925}
926
927#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            FrontmatterExtraCharactersAfterClose 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 {
                    FrontmatterExtraCharactersAfterClose { span: __binding_0 }
                        => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("extra characters after frontmatter close are not allowed")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
928#[diag("extra characters after frontmatter close are not allowed")]
929pub(crate) struct FrontmatterExtraCharactersAfterClose {
930    #[primary_span]
931    pub span: Span,
932}
933
934#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            FrontmatterInvalidInfostring 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 {
                    FrontmatterInvalidInfostring { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("invalid infostring for frontmatter")));
                        diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("frontmatter infostrings must be a single identifier immediately following the opening")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
935#[diag("invalid infostring for frontmatter")]
936#[note("frontmatter infostrings must be a single identifier immediately following the opening")]
937pub(crate) struct FrontmatterInvalidInfostring {
938    #[primary_span]
939    pub span: Span,
940}
941
942#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            FrontmatterInvalidOpeningPrecedingWhitespace 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 {
                    FrontmatterInvalidOpeningPrecedingWhitespace {
                        span: __binding_0, note_span: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("invalid preceding whitespace for frontmatter opening")));
                        ;
                        diag.span(__binding_0);
                        diag.span_note(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("frontmatter opening should not be preceded by whitespace")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
943#[diag("invalid preceding whitespace for frontmatter opening")]
944pub(crate) struct FrontmatterInvalidOpeningPrecedingWhitespace {
945    #[primary_span]
946    pub span: Span,
947    #[note("frontmatter opening should not be preceded by whitespace")]
948    pub note_span: Span,
949}
950
951#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            FrontmatterUnclosed 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 {
                    FrontmatterUnclosed {
                        span: __binding_0, note_span: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("unclosed frontmatter")));
                        ;
                        diag.span(__binding_0);
                        diag.span_note(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("frontmatter opening here was not closed")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
952#[diag("unclosed frontmatter")]
953pub(crate) struct FrontmatterUnclosed {
954    #[primary_span]
955    pub span: Span,
956    #[note("frontmatter opening here was not closed")]
957    pub note_span: Span,
958}
959
960#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            FrontmatterInvalidClosingPrecedingWhitespace 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 {
                    FrontmatterInvalidClosingPrecedingWhitespace {
                        span: __binding_0, note_span: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("invalid preceding whitespace for frontmatter close")));
                        ;
                        diag.span(__binding_0);
                        diag.span_note(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("frontmatter close should not be preceded by whitespace")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
961#[diag("invalid preceding whitespace for frontmatter close")]
962pub(crate) struct FrontmatterInvalidClosingPrecedingWhitespace {
963    #[primary_span]
964    pub span: Span,
965    #[note("frontmatter close should not be preceded by whitespace")]
966    pub note_span: Span,
967}
968
969#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            FrontmatterLengthMismatch 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 {
                    FrontmatterLengthMismatch {
                        span: __binding_0,
                        opening: __binding_1,
                        close: __binding_2,
                        len_opening: __binding_3,
                        len_close: __binding_4 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("frontmatter close does not match the opening")));
                        ;
                        diag.arg("len_opening", __binding_3);
                        diag.arg("len_close", __binding_4);
                        diag.span(__binding_0);
                        diag.span_label(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("the opening here has {$len_opening} dashes...")));
                        diag.span_label(__binding_2,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("...while the close has {$len_close} dashes")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
970#[diag("frontmatter close does not match the opening")]
971pub(crate) struct FrontmatterLengthMismatch {
972    #[primary_span]
973    pub span: Span,
974    #[label("the opening here has {$len_opening} dashes...")]
975    pub opening: Span,
976    #[label("...while the close has {$len_close} dashes")]
977    pub close: Span,
978    pub len_opening: usize,
979    pub len_close: usize,
980}
981
982#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            FrontmatterTooManyDashes 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 {
                    FrontmatterTooManyDashes { len_opening: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("too many `-` symbols: frontmatter openings may be delimited by up to 255 `-` symbols, but found {$len_opening}")));
                        ;
                        diag.arg("len_opening", __binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
983#[diag(
984    "too many `-` symbols: frontmatter openings may be delimited by up to 255 `-` symbols, but found {$len_opening}"
985)]
986pub(crate) struct FrontmatterTooManyDashes {
987    pub len_opening: usize,
988}
989
990#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            BareCrFrontmatter 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 {
                    BareCrFrontmatter { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("bare CR not allowed in frontmatter")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
991#[diag("bare CR not allowed in frontmatter")]
992pub(crate) struct BareCrFrontmatter {
993    #[primary_span]
994    pub span: Span,
995}
996
997#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            LeadingPlusNotSupported 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 {
                    LeadingPlusNotSupported {
                        span: __binding_0,
                        remove_plus: __binding_1,
                        add_parentheses: __binding_2 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("leading `+` is not supported")));
                        let __code_62 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(""))
                                            })].into_iter();
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("unexpected `+`")));
                        if let Some(__binding_1) = __binding_1 {
                            diag.span_suggestions_with_style(__binding_1,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("try removing the `+`")),
                                __code_62, rustc_errors::Applicability::MachineApplicable,
                                rustc_errors::SuggestionStyle::ShowAlways);
                        }
                        if let Some(__binding_2) = __binding_2 {
                            diag.subdiagnostic(__binding_2);
                        }
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
998#[diag("leading `+` is not supported")]
999pub(crate) struct LeadingPlusNotSupported {
1000    #[primary_span]
1001    #[label("unexpected `+`")]
1002    pub span: Span,
1003    #[suggestion(
1004        "try removing the `+`",
1005        style = "verbose",
1006        code = "",
1007        applicability = "machine-applicable"
1008    )]
1009    pub remove_plus: Option<Span>,
1010    #[subdiagnostic]
1011    pub add_parentheses: Option<ExprParenthesesNeeded>,
1012}
1013
1014#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            ParenthesesWithStructFields 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 {
                    ParenthesesWithStructFields {
                        span: __binding_0,
                        braces_for_struct: __binding_1,
                        no_fields_for_fn: __binding_2 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("invalid `struct` delimiters or `fn` call arguments")));
                        ;
                        diag.span(__binding_0);
                        diag.subdiagnostic(__binding_1);
                        diag.subdiagnostic(__binding_2);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1015#[diag("invalid `struct` delimiters or `fn` call arguments")]
1016pub(crate) struct ParenthesesWithStructFields {
1017    #[primary_span]
1018    pub span: Span,
1019    #[subdiagnostic]
1020    pub braces_for_struct: BracesForStructLiteral,
1021    #[subdiagnostic]
1022    pub no_fields_for_fn: NoFieldsForFnCall,
1023}
1024
1025#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for BracesForStructLiteral {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    BracesForStructLiteral {
                        r#type: __binding_0, first: __binding_1, second: __binding_2
                        } => {
                        let mut suggestions = Vec::new();
                        let __code_63 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!(" {{ "))
                                });
                        let __code_64 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!(" }}"))
                                });
                        suggestions.push((__binding_1, __code_63));
                        suggestions.push((__binding_2, __code_64));
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        sub_args.insert("type".into(),
                            rustc_errors::IntoDiagArg::into_diag_arg(__binding_0,
                                &mut diag.long_ty_path));
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("if `{$type}` is a struct, use braces as delimiters")),
                                &sub_args);
                        diag.multipart_suggestion_with_style(__message, suggestions,
                            rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowCode);
                    }
                }
            }
        }
    };Subdiagnostic)]
1026#[multipart_suggestion(
1027    "if `{$type}` is a struct, use braces as delimiters",
1028    applicability = "maybe-incorrect"
1029)]
1030pub(crate) struct BracesForStructLiteral {
1031    pub r#type: Path,
1032    #[suggestion_part(code = " {{ ")]
1033    pub first: Span,
1034    #[suggestion_part(code = " }}")]
1035    pub second: Span,
1036}
1037
1038#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for NoFieldsForFnCall {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    NoFieldsForFnCall { r#type: __binding_0, fields: __binding_1
                        } => {
                        let mut suggestions = Vec::new();
                        let __code_65 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!(""))
                                });
                        for __binding_1 in __binding_1 {
                            suggestions.push((__binding_1, __code_65.clone()));
                        }
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        sub_args.insert("type".into(),
                            rustc_errors::IntoDiagArg::into_diag_arg(__binding_0,
                                &mut diag.long_ty_path));
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("if `{$type}` is a function, use the arguments directly")),
                                &sub_args);
                        diag.multipart_suggestion_with_style(__message, suggestions,
                            rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowCode);
                    }
                }
            }
        }
    };Subdiagnostic)]
1039#[multipart_suggestion(
1040    "if `{$type}` is a function, use the arguments directly",
1041    applicability = "maybe-incorrect"
1042)]
1043pub(crate) struct NoFieldsForFnCall {
1044    pub r#type: Path,
1045    #[suggestion_part(code = "")]
1046    pub fields: Vec<Span>,
1047}
1048
1049#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            LabeledLoopInBreak 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 {
                    LabeledLoopInBreak { span: __binding_0, sub: __binding_1 }
                        => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("parentheses are required around this expression to avoid confusion with a labeled break expression")));
                        ;
                        diag.span(__binding_0);
                        diag.subdiagnostic(__binding_1);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1050#[diag(
1051    "parentheses are required around this expression to avoid confusion with a labeled break expression"
1052)]
1053pub(crate) struct LabeledLoopInBreak {
1054    #[primary_span]
1055    pub span: Span,
1056    #[subdiagnostic]
1057    pub sub: WrapInParentheses,
1058}
1059
1060#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for WrapInParentheses {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    WrapInParentheses::Expression {
                        left: __binding_0, right: __binding_1 } => {
                        let mut suggestions = Vec::new();
                        let __code_66 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!("("))
                                });
                        let __code_67 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!(")"))
                                });
                        suggestions.push((__binding_0, __code_66));
                        suggestions.push((__binding_1, __code_67));
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("wrap the expression in parentheses")),
                                &sub_args);
                        diag.multipart_suggestion_with_style(__message, suggestions,
                            rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowCode);
                    }
                    WrapInParentheses::MacroArgs {
                        left: __binding_0, right: __binding_1 } => {
                        let mut suggestions = Vec::new();
                        let __code_68 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!("("))
                                });
                        let __code_69 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!(")"))
                                });
                        suggestions.push((__binding_0, __code_68));
                        suggestions.push((__binding_1, __code_69));
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("use parentheses instead of braces for this macro")),
                                &sub_args);
                        diag.multipart_suggestion_with_style(__message, suggestions,
                            rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowCode);
                    }
                }
            }
        }
    };Subdiagnostic)]
1061pub(crate) enum WrapInParentheses {
1062    #[multipart_suggestion(
1063        "wrap the expression in parentheses",
1064        applicability = "machine-applicable"
1065    )]
1066    Expression {
1067        #[suggestion_part(code = "(")]
1068        left: Span,
1069        #[suggestion_part(code = ")")]
1070        right: Span,
1071    },
1072    #[multipart_suggestion(
1073        "use parentheses instead of braces for this macro",
1074        applicability = "machine-applicable"
1075    )]
1076    MacroArgs {
1077        #[suggestion_part(code = "(")]
1078        left: Span,
1079        #[suggestion_part(code = ")")]
1080        right: Span,
1081    },
1082}
1083
1084#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            ArrayBracketsInsteadOfBraces 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 {
                    ArrayBracketsInsteadOfBraces {
                        span: __binding_0, sub: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("this is a block expression, not an array")));
                        ;
                        diag.span(__binding_0);
                        diag.subdiagnostic(__binding_1);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1085#[diag("this is a block expression, not an array")]
1086pub(crate) struct ArrayBracketsInsteadOfBraces {
1087    #[primary_span]
1088    pub span: Span,
1089    #[subdiagnostic]
1090    pub sub: ArrayBracketsInsteadOfBracesSugg,
1091}
1092
1093#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for ArrayBracketsInsteadOfBracesSugg
            {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    ArrayBracketsInsteadOfBracesSugg {
                        left: __binding_0, right: __binding_1 } => {
                        let mut suggestions = Vec::new();
                        let __code_70 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!("["))
                                });
                        let __code_71 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!("]"))
                                });
                        suggestions.push((__binding_0, __code_70));
                        suggestions.push((__binding_1, __code_71));
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("to make an array, use square brackets instead of curly braces")),
                                &sub_args);
                        diag.multipart_suggestion_with_style(__message, suggestions,
                            rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowCode);
                    }
                }
            }
        }
    };Subdiagnostic)]
1094#[multipart_suggestion(
1095    "to make an array, use square brackets instead of curly braces",
1096    applicability = "maybe-incorrect"
1097)]
1098pub(crate) struct ArrayBracketsInsteadOfBracesSugg {
1099    #[suggestion_part(code = "[")]
1100    pub left: Span,
1101    #[suggestion_part(code = "]")]
1102    pub right: Span,
1103}
1104
1105#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            MatchArmBodyWithoutBraces 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 {
                    MatchArmBodyWithoutBraces {
                        statements: __binding_0,
                        arrow: __binding_1,
                        num_statements: __binding_2,
                        sub: __binding_3 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`match` arm body without braces")));
                        ;
                        diag.arg("num_statements", __binding_2);
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("{$num_statements ->\n            [one] this statement is not surrounded by a body\n            *[other] these statements are not surrounded by a body\n        }")));
                        diag.span_label(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("while parsing the `match` arm starting here")));
                        diag.subdiagnostic(__binding_3);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1106#[diag("`match` arm body without braces")]
1107pub(crate) struct MatchArmBodyWithoutBraces {
1108    #[primary_span]
1109    #[label(
1110        "{$num_statements ->
1111            [one] this statement is not surrounded by a body
1112            *[other] these statements are not surrounded by a body
1113        }"
1114    )]
1115    pub statements: Span,
1116    #[label("while parsing the `match` arm starting here")]
1117    pub arrow: Span,
1118    pub num_statements: usize,
1119    #[subdiagnostic]
1120    pub sub: MatchArmBodyWithoutBracesSugg,
1121}
1122
1123#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            InclusiveRangeExtraEquals 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 {
                    InclusiveRangeExtraEquals { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("unexpected `=` after inclusive range")));
                        let __code_72 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("..="))
                                            })].into_iter();
                        diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("inclusive ranges end with a single equals sign (`..=`)")));
                        ;
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("use `..=` instead")),
                            __code_72, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1124#[diag("unexpected `=` after inclusive range")]
1125#[note("inclusive ranges end with a single equals sign (`..=`)")]
1126pub(crate) struct InclusiveRangeExtraEquals {
1127    #[primary_span]
1128    #[suggestion(
1129        "use `..=` instead",
1130        style = "verbose",
1131        code = "..=",
1132        applicability = "maybe-incorrect"
1133    )]
1134    pub span: Span,
1135}
1136
1137#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            InclusiveRangeMatchArrow 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 {
                    InclusiveRangeMatchArrow {
                        arrow: __binding_0, span: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("unexpected `>` after inclusive range")));
                        let __code_73 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(".. ="))
                                            })].into_iter();
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("this is parsed as an inclusive range `..=`")));
                        diag.span_suggestions_with_style(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("add a space between the pattern and `=>`")),
                            __code_73, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1138#[diag("unexpected `>` after inclusive range")]
1139pub(crate) struct InclusiveRangeMatchArrow {
1140    #[primary_span]
1141    pub arrow: Span,
1142    #[label("this is parsed as an inclusive range `..=`")]
1143    #[suggestion(
1144        "add a space between the pattern and `=>`",
1145        style = "verbose",
1146        code = ".. =",
1147        applicability = "machine-applicable"
1148    )]
1149    pub span: Span,
1150}
1151
1152#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            InclusiveRangeNoEnd 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 {
                    InclusiveRangeNoEnd { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("inclusive range with no end")));
                        let __code_74 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(".."))
                                            })].into_iter();
                        diag.code(E0586);
                        diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("inclusive ranges must be bounded at the end (`..=b` or `a..=b`)")));
                        ;
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("use `..` instead")),
                            __code_74, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1153#[diag("inclusive range with no end", code = E0586)]
1154#[note("inclusive ranges must be bounded at the end (`..=b` or `a..=b`)")]
1155pub(crate) struct InclusiveRangeNoEnd {
1156    #[primary_span]
1157    #[suggestion(
1158        "use `..` instead",
1159        code = "..",
1160        applicability = "machine-applicable",
1161        style = "verbose"
1162    )]
1163    pub span: Span,
1164}
1165
1166#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for MatchArmBodyWithoutBracesSugg {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    MatchArmBodyWithoutBracesSugg::AddBraces {
                        left: __binding_0,
                        right: __binding_1,
                        num_statements: __binding_2 } => {
                        let mut suggestions = Vec::new();
                        let __code_75 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!("{{ "))
                                });
                        let __code_76 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!(" }}"))
                                });
                        suggestions.push((__binding_0, __code_75));
                        suggestions.push((__binding_1, __code_76));
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        sub_args.insert("num_statements".into(),
                            rustc_errors::IntoDiagArg::into_diag_arg(__binding_2,
                                &mut diag.long_ty_path));
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("surround the {$num_statements ->\n            [one] statement\n            *[other] statements\n        } with a body")),
                                &sub_args);
                        diag.multipart_suggestion_with_style(__message, suggestions,
                            rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowCode);
                    }
                    MatchArmBodyWithoutBracesSugg::UseComma {
                        semicolon: __binding_0 } => {
                        let __code_77 =
                            [::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("replace `;` with `,` to end a `match` arm expression")),
                                &sub_args);
                        diag.span_suggestions_with_style(__binding_0, __message,
                            __code_77, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                    }
                }
            }
        }
    };Subdiagnostic)]
1167pub(crate) enum MatchArmBodyWithoutBracesSugg {
1168    #[multipart_suggestion(
1169        "surround the {$num_statements ->
1170            [one] statement
1171            *[other] statements
1172        } with a body",
1173        applicability = "machine-applicable"
1174    )]
1175    AddBraces {
1176        #[suggestion_part(code = "{{ ")]
1177        left: Span,
1178        #[suggestion_part(code = " }}")]
1179        right: Span,
1180        num_statements: usize,
1181    },
1182    #[suggestion(
1183        "replace `;` with `,` to end a `match` arm expression",
1184        code = ",",
1185        applicability = "machine-applicable",
1186        style = "verbose"
1187    )]
1188    UseComma {
1189        #[primary_span]
1190        semicolon: Span,
1191    },
1192}
1193
1194#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            StructLiteralNotAllowedHere 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 {
                    StructLiteralNotAllowedHere {
                        span: __binding_0, sub: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("struct literals are not allowed here")));
                        ;
                        diag.span(__binding_0);
                        diag.subdiagnostic(__binding_1);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1195#[diag("struct literals are not allowed here")]
1196pub(crate) struct StructLiteralNotAllowedHere {
1197    #[primary_span]
1198    pub span: Span,
1199    #[subdiagnostic]
1200    pub sub: StructLiteralNotAllowedHereSugg,
1201}
1202
1203#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for StructLiteralNotAllowedHereSugg {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    StructLiteralNotAllowedHereSugg {
                        left: __binding_0, right: __binding_1 } => {
                        let mut suggestions = Vec::new();
                        let __code_78 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!("("))
                                });
                        let __code_79 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!(")"))
                                });
                        suggestions.push((__binding_0, __code_78));
                        suggestions.push((__binding_1, __code_79));
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("surround the struct literal with parentheses")),
                                &sub_args);
                        diag.multipart_suggestion_with_style(__message, suggestions,
                            rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowCode);
                    }
                }
            }
        }
    };Subdiagnostic)]
1204#[multipart_suggestion(
1205    "surround the struct literal with parentheses",
1206    applicability = "machine-applicable"
1207)]
1208pub(crate) struct StructLiteralNotAllowedHereSugg {
1209    #[suggestion_part(code = "(")]
1210    pub left: Span,
1211    #[suggestion_part(code = ")")]
1212    pub right: Span,
1213}
1214
1215#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            InvalidLiteralSuffixOnTupleIndex 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 {
                    InvalidLiteralSuffixOnTupleIndex {
                        span: __binding_0, suffix: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("suffixes on a tuple index are invalid")));
                        ;
                        diag.arg("suffix", __binding_1);
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("invalid suffix `{$suffix}`")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1216#[diag("suffixes on a tuple index are invalid")]
1217pub(crate) struct InvalidLiteralSuffixOnTupleIndex {
1218    #[primary_span]
1219    #[label("invalid suffix `{$suffix}`")]
1220    pub span: Span,
1221    pub suffix: Symbol,
1222}
1223
1224#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            NonStringAbiLiteral 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 {
                    NonStringAbiLiteral { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("non-string ABI literal")));
                        let __code_80 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("\"C\""))
                                            })].into_iter();
                        ;
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("specify the ABI with a string literal")),
                            __code_80, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1225#[diag("non-string ABI literal")]
1226pub(crate) struct NonStringAbiLiteral {
1227    #[primary_span]
1228    #[suggestion(
1229        "specify the ABI with a string literal",
1230        code = "\"C\"",
1231        applicability = "maybe-incorrect",
1232        style = "verbose"
1233    )]
1234    pub span: Span,
1235}
1236
1237#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            MismatchedClosingDelimiter 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 {
                    MismatchedClosingDelimiter {
                        spans: __binding_0,
                        delimiter: __binding_1,
                        unmatched: __binding_2,
                        opening_candidate: __binding_3,
                        unclosed: __binding_4 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("mismatched closing delimiter: `{$delimiter}`")));
                        ;
                        diag.arg("delimiter", __binding_1);
                        diag.span(__binding_0.clone());
                        diag.span_label(__binding_2,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("mismatched closing delimiter")));
                        if let Some(__binding_3) = __binding_3 {
                            diag.span_label(__binding_3,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("closing delimiter possibly meant for this")));
                        }
                        if let Some(__binding_4) = __binding_4 {
                            diag.span_label(__binding_4,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("unclosed delimiter")));
                        }
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1238#[diag("mismatched closing delimiter: `{$delimiter}`")]
1239pub(crate) struct MismatchedClosingDelimiter {
1240    #[primary_span]
1241    pub spans: Vec<Span>,
1242    pub delimiter: String,
1243    #[label("mismatched closing delimiter")]
1244    pub unmatched: Span,
1245    #[label("closing delimiter possibly meant for this")]
1246    pub opening_candidate: Option<Span>,
1247    #[label("unclosed delimiter")]
1248    pub unclosed: Option<Span>,
1249}
1250
1251#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            IncorrectVisibilityRestriction 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 {
                    IncorrectVisibilityRestriction {
                        span: __binding_0, inner_str: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("incorrect visibility restriction")));
                        let __code_81 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("in {0}", __binding_1))
                                            })].into_iter();
                        diag.code(E0704);
                        diag.help(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("some possible visibility restrictions are:\n    `pub(crate)`: visible only on the current crate\n    `pub(super)`: visible only in the current module's parent\n    `pub(in path::to::module)`: visible only on the specified path")));
                        ;
                        diag.arg("inner_str", __binding_1);
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("make this visible only to module `{$inner_str}` with `in`")),
                            __code_81, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1252#[diag("incorrect visibility restriction", code = E0704)]
1253#[help(
1254    "some possible visibility restrictions are:
1255    `pub(crate)`: visible only on the current crate
1256    `pub(super)`: visible only in the current module's parent
1257    `pub(in path::to::module)`: visible only on the specified path"
1258)]
1259pub(crate) struct IncorrectVisibilityRestriction {
1260    #[primary_span]
1261    #[suggestion(
1262        "make this visible only to module `{$inner_str}` with `in`",
1263        code = "in {inner_str}",
1264        applicability = "machine-applicable",
1265        style = "verbose"
1266    )]
1267    pub span: Span,
1268    pub inner_str: String,
1269}
1270
1271#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            IncorrectImplRestriction 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 {
                    IncorrectImplRestriction {
                        span: __binding_0, inner_str: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("incorrect `impl` restriction")));
                        let __code_82 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("in {0}", __binding_1))
                                            })].into_iter();
                        diag.help(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("some possible `impl` restrictions are:\n    `impl(crate)`: can only be implemented in the current crate\n    `impl(super)`: can only be implemented in the parent module\n    `impl(self)`: can only be implemented in current module\n    `impl(in path::to::module)`: can only be implemented in the specified path")));
                        ;
                        diag.arg("inner_str", __binding_1);
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("help: use `in` to restrict implementations to the path `{$inner_str}`")),
                            __code_82, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowCode);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1272#[diag("incorrect `impl` restriction")]
1273#[help(
1274    "some possible `impl` restrictions are:
1275    `impl(crate)`: can only be implemented in the current crate
1276    `impl(super)`: can only be implemented in the parent module
1277    `impl(self)`: can only be implemented in current module
1278    `impl(in path::to::module)`: can only be implemented in the specified path"
1279)]
1280pub(crate) struct IncorrectImplRestriction {
1281    #[primary_span]
1282    #[suggestion(
1283        "help: use `in` to restrict implementations to the path `{$inner_str}`",
1284        code = "in {inner_str}",
1285        applicability = "machine-applicable"
1286    )]
1287    pub span: Span,
1288    pub inner_str: String,
1289}
1290
1291#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            AssignmentElseNotAllowed 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 {
                    AssignmentElseNotAllowed { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("<assignment> ... else {\"{\"} ... {\"}\"} is not allowed")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1292#[diag("<assignment> ... else {\"{\"} ... {\"}\"} is not allowed")]
1293pub(crate) struct AssignmentElseNotAllowed {
1294    #[primary_span]
1295    pub span: Span,
1296}
1297
1298#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            ExpectedStatementAfterOuterAttr 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 {
                    ExpectedStatementAfterOuterAttr { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected statement after outer attribute")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1299#[diag("expected statement after outer attribute")]
1300pub(crate) struct ExpectedStatementAfterOuterAttr {
1301    #[primary_span]
1302    pub span: Span,
1303}
1304
1305#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            AttrWithoutWherePredicates 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 {
                    AttrWithoutWherePredicates { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("attribute without where predicates")));
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("attributes are only permitted when preceding predicates")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1306#[diag("attribute without where predicates")]
1307pub(crate) struct AttrWithoutWherePredicates {
1308    #[primary_span]
1309    #[label("attributes are only permitted when preceding predicates")]
1310    pub span: Span,
1311}
1312
1313#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            DocCommentDoesNotDocumentAnything 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 {
                    DocCommentDoesNotDocumentAnything {
                        span: __binding_0, missing_comma: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("found a documentation comment that doesn't document anything")));
                        let __code_83 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(","))
                                            })].into_iter();
                        diag.code(E0585);
                        diag.help(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("doc comments must come before what they document, if a comment was intended use `//`")));
                        ;
                        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("missing comma here")),
                                __code_83, rustc_errors::Applicability::MachineApplicable,
                                rustc_errors::SuggestionStyle::ShowAlways);
                        }
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1314#[diag("found a documentation comment that doesn't document anything", code = E0585)]
1315#[help("doc comments must come before what they document, if a comment was intended use `//`")]
1316pub(crate) struct DocCommentDoesNotDocumentAnything {
1317    #[primary_span]
1318    pub span: Span,
1319    #[suggestion(
1320        "missing comma here",
1321        code = ",",
1322        applicability = "machine-applicable",
1323        style = "verbose"
1324    )]
1325    pub missing_comma: Option<Span>,
1326}
1327
1328#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            ConstLetMutuallyExclusive 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 {
                    ConstLetMutuallyExclusive { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`const` and `let` are mutually exclusive")));
                        let __code_84 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("const"))
                                            })].into_iter();
                        ;
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("remove `let`")),
                            __code_84, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1329#[diag("`const` and `let` are mutually exclusive")]
1330pub(crate) struct ConstLetMutuallyExclusive {
1331    #[primary_span]
1332    #[suggestion(
1333        "remove `let`",
1334        code = "const",
1335        applicability = "maybe-incorrect",
1336        style = "verbose"
1337    )]
1338    pub span: Span,
1339}
1340
1341#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            InvalidExpressionInLetElse 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 {
                    InvalidExpressionInLetElse {
                        span: __binding_0, operator: __binding_1, sugg: __binding_2
                        } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("a `{$operator}` expression cannot be directly assigned in `let...else`")));
                        ;
                        diag.arg("operator", __binding_1);
                        diag.span(__binding_0);
                        diag.subdiagnostic(__binding_2);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1342#[diag("a `{$operator}` expression cannot be directly assigned in `let...else`")]
1343pub(crate) struct InvalidExpressionInLetElse {
1344    #[primary_span]
1345    pub span: Span,
1346    pub operator: &'static str,
1347    #[subdiagnostic]
1348    pub sugg: WrapInParentheses,
1349}
1350
1351#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            InvalidCurlyInLetElse 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 {
                    InvalidCurlyInLetElse { span: __binding_0, sugg: __binding_1
                        } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("right curly brace `{\"}\"}` before `else` in a `let...else` statement not allowed")));
                        ;
                        diag.span(__binding_0);
                        diag.subdiagnostic(__binding_1);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1352#[diag("right curly brace `{\"}\"}` before `else` in a `let...else` statement not allowed")]
1353pub(crate) struct InvalidCurlyInLetElse {
1354    #[primary_span]
1355    pub span: Span,
1356    #[subdiagnostic]
1357    pub sugg: WrapInParentheses,
1358}
1359
1360#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            CompoundAssignmentExpressionInLet 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 {
                    CompoundAssignmentExpressionInLet {
                        span: __binding_0, suggestion: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("can't reassign to an uninitialized variable")));
                        let __code_85 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(""))
                                            })].into_iter();
                        diag.help(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("if you meant to overwrite, remove the `let` binding")));
                        ;
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("initialize the variable")),
                            __code_85, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1361#[diag("can't reassign to an uninitialized variable")]
1362#[help("if you meant to overwrite, remove the `let` binding")]
1363pub(crate) struct CompoundAssignmentExpressionInLet {
1364    #[primary_span]
1365    pub span: Span,
1366    #[suggestion(
1367        "initialize the variable",
1368        style = "verbose",
1369        code = "",
1370        applicability = "maybe-incorrect"
1371    )]
1372    pub suggestion: Span,
1373}
1374
1375#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            SuffixedLiteralInAttribute 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 {
                    SuffixedLiteralInAttribute { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("suffixed literals are not allowed in attributes")));
                        diag.help(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("instead of using a suffixed literal (`1u8`, `1.0f32`, etc.), use an unsuffixed version (`1`, `1.0`, etc.)")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1376#[diag("suffixed literals are not allowed in attributes")]
1377#[help(
1378    "instead of using a suffixed literal (`1u8`, `1.0f32`, etc.), use an unsuffixed version (`1`, `1.0`, etc.)"
1379)]
1380pub(crate) struct SuffixedLiteralInAttribute {
1381    #[primary_span]
1382    pub span: Span,
1383}
1384
1385#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            InvalidMetaItem 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 {
                    InvalidMetaItem {
                        span: __binding_0,
                        descr: __binding_1,
                        quote_ident_sugg: __binding_2 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected unsuffixed literal, found {$descr}")));
                        ;
                        diag.arg("descr", __binding_1);
                        diag.span(__binding_0);
                        if let Some(__binding_2) = __binding_2 {
                            diag.subdiagnostic(__binding_2);
                        }
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1386#[diag("expected unsuffixed literal, found {$descr}")]
1387pub(crate) struct InvalidMetaItem {
1388    #[primary_span]
1389    pub span: Span,
1390    pub descr: String,
1391    #[subdiagnostic]
1392    pub quote_ident_sugg: Option<InvalidMetaItemQuoteIdentSugg>,
1393}
1394
1395#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for InvalidMetaItemQuoteIdentSugg {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    InvalidMetaItemQuoteIdentSugg {
                        before: __binding_0, after: __binding_1 } => {
                        let mut suggestions = Vec::new();
                        let __code_86 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!("\""))
                                });
                        let __code_87 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!("\""))
                                });
                        suggestions.push((__binding_0, __code_86));
                        suggestions.push((__binding_1, __code_87));
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("surround the identifier with quotation marks to make it into a string literal")),
                                &sub_args);
                        diag.multipart_suggestion_with_style(__message, suggestions,
                            rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowCode);
                    }
                }
            }
        }
    };Subdiagnostic)]
1396#[multipart_suggestion(
1397    "surround the identifier with quotation marks to make it into a string literal",
1398    applicability = "machine-applicable"
1399)]
1400pub(crate) struct InvalidMetaItemQuoteIdentSugg {
1401    #[suggestion_part(code = "\"")]
1402    pub before: Span,
1403    #[suggestion_part(code = "\"")]
1404    pub after: Span,
1405}
1406
1407#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for SuggEscapeIdentifier {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    SuggEscapeIdentifier {
                        span: __binding_0, ident_name: __binding_1 } => {
                        let __code_88 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("r#"))
                                            })].into_iter();
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        sub_args.insert("ident_name".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("escape `{$ident_name}` to use it as an identifier")),
                                &sub_args);
                        diag.span_suggestions_with_style(__binding_0, __message,
                            __code_88, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                    }
                }
            }
        }
    };Subdiagnostic)]
1408#[suggestion(
1409    "escape `{$ident_name}` to use it as an identifier",
1410    style = "verbose",
1411    applicability = "maybe-incorrect",
1412    code = "r#"
1413)]
1414pub(crate) struct SuggEscapeIdentifier {
1415    #[primary_span]
1416    pub span: Span,
1417    pub ident_name: String,
1418}
1419
1420#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for SuggRemoveComma {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    SuggRemoveComma { span: __binding_0 } => {
                        let __code_89 =
                            [::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 comma")),
                                &sub_args);
                        diag.span_suggestions_with_style(__binding_0, __message,
                            __code_89, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                    }
                }
            }
        }
    };Subdiagnostic)]
1421#[suggestion(
1422    "remove this comma",
1423    applicability = "machine-applicable",
1424    code = "",
1425    style = "verbose"
1426)]
1427pub(crate) struct SuggRemoveComma {
1428    #[primary_span]
1429    pub span: Span,
1430}
1431
1432#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for SuggAddMissingLetStmt {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    SuggAddMissingLetStmt { span: __binding_0 } => {
                        let __code_90 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("let "))
                                            })].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("you might have meant to introduce a new binding")),
                                &sub_args);
                        diag.span_suggestions_with_style(__binding_0, __message,
                            __code_90, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                    }
                }
            }
        }
    };Subdiagnostic)]
1433#[suggestion(
1434    "you might have meant to introduce a new binding",
1435    style = "verbose",
1436    applicability = "maybe-incorrect",
1437    code = "let "
1438)]
1439pub(crate) struct SuggAddMissingLetStmt {
1440    #[primary_span]
1441    pub span: Span,
1442}
1443
1444#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for ExpectedIdentifierFound {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    ExpectedIdentifierFound::ReservedIdentifier(__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("expected identifier, found reserved identifier")),
                                &sub_args);
                        diag.span_label(__binding_0, __message);
                    }
                    ExpectedIdentifierFound::Keyword(__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("expected identifier, found keyword")),
                                &sub_args);
                        diag.span_label(__binding_0, __message);
                    }
                    ExpectedIdentifierFound::ReservedKeyword(__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("expected identifier, found reserved keyword")),
                                &sub_args);
                        diag.span_label(__binding_0, __message);
                    }
                    ExpectedIdentifierFound::DocComment(__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("expected identifier, found doc comment")),
                                &sub_args);
                        diag.span_label(__binding_0, __message);
                    }
                    ExpectedIdentifierFound::MetaVar(__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("expected identifier, found metavariable")),
                                &sub_args);
                        diag.span_label(__binding_0, __message);
                    }
                    ExpectedIdentifierFound::Other(__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("expected identifier")),
                                &sub_args);
                        diag.span_label(__binding_0, __message);
                    }
                }
            }
        }
    };Subdiagnostic)]
1445pub(crate) enum ExpectedIdentifierFound {
1446    #[label("expected identifier, found reserved identifier")]
1447    ReservedIdentifier(#[primary_span] Span),
1448    #[label("expected identifier, found keyword")]
1449    Keyword(#[primary_span] Span),
1450    #[label("expected identifier, found reserved keyword")]
1451    ReservedKeyword(#[primary_span] Span),
1452    #[label("expected identifier, found doc comment")]
1453    DocComment(#[primary_span] Span),
1454    #[label("expected identifier, found metavariable")]
1455    MetaVar(#[primary_span] Span),
1456    #[label("expected identifier")]
1457    Other(#[primary_span] Span),
1458}
1459
1460impl ExpectedIdentifierFound {
1461    pub(crate) fn new(token_descr: Option<TokenDescription>, span: Span) -> Self {
1462        (match token_descr {
1463            Some(TokenDescription::ReservedIdentifier) => {
1464                ExpectedIdentifierFound::ReservedIdentifier
1465            }
1466            Some(TokenDescription::Keyword) => ExpectedIdentifierFound::Keyword,
1467            Some(TokenDescription::ReservedKeyword) => ExpectedIdentifierFound::ReservedKeyword,
1468            Some(TokenDescription::DocComment) => ExpectedIdentifierFound::DocComment,
1469            Some(TokenDescription::MetaVar(_)) => ExpectedIdentifierFound::MetaVar,
1470            None => ExpectedIdentifierFound::Other,
1471        })(span)
1472    }
1473}
1474
1475pub(crate) struct ExpectedIdentifier {
1476    pub span: Span,
1477    pub token: Token,
1478    pub suggest_raw: Option<SuggEscapeIdentifier>,
1479    pub suggest_remove_comma: Option<SuggRemoveComma>,
1480    pub help_cannot_start_number: Option<HelpIdentifierStartsWithNumber>,
1481}
1482
1483impl<'a, G: EmissionGuarantee> Diagnostic<'a, G> for ExpectedIdentifier {
1484    #[track_caller]
1485    fn into_diag(self, dcx: DiagCtxtHandle<'a>, level: Level) -> Diag<'a, G> {
1486        let token_descr = TokenDescription::from_token(&self.token);
1487
1488        let mut add_token = true;
1489        let mut diag = Diag::new(
1490            dcx,
1491            level,
1492            match token_descr {
1493                Some(TokenDescription::ReservedIdentifier) => {
1494                    rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected identifier, found reserved identifier `{$token}`"))msg!("expected identifier, found reserved identifier `{$token}`")
1495                }
1496                Some(TokenDescription::Keyword) => {
1497                    rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected identifier, found keyword `{$token}`"))msg!("expected identifier, found keyword `{$token}`")
1498                }
1499                Some(TokenDescription::ReservedKeyword) => {
1500                    rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected identifier, found reserved keyword `{$token}`"))msg!("expected identifier, found reserved keyword `{$token}`")
1501                }
1502                Some(TokenDescription::DocComment) => {
1503                    rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected identifier, found doc comment `{$token}`"))msg!("expected identifier, found doc comment `{$token}`")
1504                }
1505                Some(TokenDescription::MetaVar(_)) => {
1506                    add_token = false;
1507                    rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected identifier, found metavariable"))msg!("expected identifier, found metavariable")
1508                }
1509                None => rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected identifier, found `{$token}`"))msg!("expected identifier, found `{$token}`"),
1510            },
1511        );
1512        diag.span(self.span);
1513        if add_token {
1514            diag.arg("token", self.token);
1515        }
1516
1517        if let Some(sugg) = self.suggest_raw {
1518            sugg.add_to_diag(&mut diag);
1519        }
1520
1521        ExpectedIdentifierFound::new(token_descr, self.span).add_to_diag(&mut diag);
1522
1523        if let Some(sugg) = self.suggest_remove_comma {
1524            sugg.add_to_diag(&mut diag);
1525        }
1526
1527        if let Some(help) = self.help_cannot_start_number {
1528            help.add_to_diag(&mut diag);
1529        }
1530
1531        diag
1532    }
1533}
1534
1535#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for HelpIdentifierStartsWithNumber {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    HelpIdentifierStartsWithNumber { num_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("identifiers cannot start with a number")),
                                &sub_args);
                        diag.span_help(__binding_0, __message);
                    }
                }
            }
        }
    };Subdiagnostic)]
1536#[help("identifiers cannot start with a number")]
1537pub(crate) struct HelpIdentifierStartsWithNumber {
1538    #[primary_span]
1539    pub num_span: Span,
1540}
1541
1542pub(crate) struct ExpectedSemi {
1543    pub span: Span,
1544    pub token: Token,
1545    pub unexpected_token_label: Option<Span>,
1546    pub sugg: ExpectedSemiSugg,
1547}
1548
1549impl<'a, G: EmissionGuarantee> Diagnostic<'a, G> for ExpectedSemi {
1550    #[track_caller]
1551    fn into_diag(self, dcx: DiagCtxtHandle<'a>, level: Level) -> Diag<'a, G> {
1552        let token_descr = TokenDescription::from_token(&self.token);
1553
1554        let mut add_token = true;
1555        let mut diag = Diag::new(
1556            dcx,
1557            level,
1558            match token_descr {
1559                Some(TokenDescription::ReservedIdentifier) => {
1560                    rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected `;`, found reserved identifier `{$token}`"))msg!("expected `;`, found reserved identifier `{$token}`")
1561                }
1562                Some(TokenDescription::Keyword) => {
1563                    rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected `;`, found keyword `{$token}`"))msg!("expected `;`, found keyword `{$token}`")
1564                }
1565                Some(TokenDescription::ReservedKeyword) => {
1566                    rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected `;`, found reserved keyword `{$token}`"))msg!("expected `;`, found reserved keyword `{$token}`")
1567                }
1568                Some(TokenDescription::DocComment) => {
1569                    rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected `;`, found doc comment `{$token}`"))msg!("expected `;`, found doc comment `{$token}`")
1570                }
1571                Some(TokenDescription::MetaVar(_)) => {
1572                    add_token = false;
1573                    rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected `;`, found metavariable"))msg!("expected `;`, found metavariable")
1574                }
1575                None => rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected `;`, found `{$token}`"))msg!("expected `;`, found `{$token}`"),
1576            },
1577        );
1578        diag.span(self.span);
1579        if add_token {
1580            diag.arg("token", self.token);
1581        }
1582
1583        if let Some(unexpected_token_label) = self.unexpected_token_label {
1584            diag.span_label(unexpected_token_label, rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("unexpected token"))msg!("unexpected token"));
1585        }
1586
1587        self.sugg.add_to_diag(&mut diag);
1588
1589        diag
1590    }
1591}
1592
1593#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for ExpectedSemiSugg {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    ExpectedSemiSugg::ChangeToSemi(__binding_0) => {
                        let __code_91 =
                            [::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("change this to `;`")),
                                &sub_args);
                        diag.span_suggestions_with_style(__binding_0, __message,
                            __code_91, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::HideCodeInline);
                    }
                    ExpectedSemiSugg::AddSemi(__binding_0) => {
                        let __code_92 =
                            [::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("add `;` here")),
                                &sub_args);
                        diag.span_suggestions_with_style(__binding_0, __message,
                            __code_92, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::HideCodeInline);
                    }
                }
            }
        }
    };Subdiagnostic)]
1594pub(crate) enum ExpectedSemiSugg {
1595    #[suggestion(
1596        "change this to `;`",
1597        code = ";",
1598        applicability = "machine-applicable",
1599        style = "short"
1600    )]
1601    ChangeToSemi(#[primary_span] Span),
1602    #[suggestion("add `;` here", code = ";", applicability = "machine-applicable", style = "short")]
1603    AddSemi(#[primary_span] Span),
1604}
1605
1606#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            StructLiteralBodyWithoutPath 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 {
                    StructLiteralBodyWithoutPath {
                        span: __binding_0, sugg: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("struct literal body without path")));
                        ;
                        diag.span(__binding_0);
                        diag.subdiagnostic(__binding_1);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1607#[diag("struct literal body without path")]
1608pub(crate) struct StructLiteralBodyWithoutPath {
1609    #[primary_span]
1610    pub span: Span,
1611    #[subdiagnostic]
1612    pub sugg: StructLiteralBodyWithoutPathSugg,
1613}
1614
1615#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for StructLiteralBodyWithoutPathSugg
            {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    StructLiteralBodyWithoutPathSugg {
                        before: __binding_0, after: __binding_1 } => {
                        let mut suggestions = Vec::new();
                        let __code_93 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!("{{ SomeStruct "))
                                });
                        let __code_94 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!(" }}"))
                                });
                        suggestions.push((__binding_0, __code_93));
                        suggestions.push((__binding_1, __code_94));
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("you might have forgotten to add the struct literal inside the block")),
                                &sub_args);
                        diag.multipart_suggestion_with_style(__message, suggestions,
                            rustc_errors::Applicability::HasPlaceholders,
                            rustc_errors::SuggestionStyle::ShowCode);
                    }
                }
            }
        }
    };Subdiagnostic)]
1616#[multipart_suggestion(
1617    "you might have forgotten to add the struct literal inside the block",
1618    applicability = "has-placeholders"
1619)]
1620pub(crate) struct StructLiteralBodyWithoutPathSugg {
1621    #[suggestion_part(code = "{{ SomeStruct ")]
1622    pub before: Span,
1623    #[suggestion_part(code = " }}")]
1624    pub after: Span,
1625}
1626
1627#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            UnmatchedAngleBrackets 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 {
                    UnmatchedAngleBrackets {
                        span: __binding_0, num_extra_brackets: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("{$num_extra_brackets ->\n        [one] unmatched angle bracket\n        *[other] unmatched angle brackets\n    }")));
                        let __code_95 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(""))
                                            })].into_iter();
                        ;
                        diag.arg("num_extra_brackets", __binding_1);
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("{$num_extra_brackets ->\n            [one] remove extra angle bracket\n            *[other] remove extra angle brackets\n        }")),
                            __code_95, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1628#[diag(
1629    "{$num_extra_brackets ->
1630        [one] unmatched angle bracket
1631        *[other] unmatched angle brackets
1632    }"
1633)]
1634pub(crate) struct UnmatchedAngleBrackets {
1635    #[primary_span]
1636    #[suggestion(
1637        "{$num_extra_brackets ->
1638            [one] remove extra angle bracket
1639            *[other] remove extra angle brackets
1640        }",
1641        code = "",
1642        applicability = "machine-applicable",
1643        style = "verbose"
1644    )]
1645    pub span: Span,
1646    pub num_extra_brackets: usize,
1647}
1648
1649#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            GenericParamsWithoutAngleBrackets 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 {
                    GenericParamsWithoutAngleBrackets {
                        span: __binding_0, sugg: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("generic parameters without surrounding angle brackets")));
                        ;
                        diag.span(__binding_0);
                        diag.subdiagnostic(__binding_1);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1650#[diag("generic parameters without surrounding angle brackets")]
1651pub(crate) struct GenericParamsWithoutAngleBrackets {
1652    #[primary_span]
1653    pub span: Span,
1654    #[subdiagnostic]
1655    pub sugg: GenericParamsWithoutAngleBracketsSugg,
1656}
1657
1658#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for
            GenericParamsWithoutAngleBracketsSugg {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    GenericParamsWithoutAngleBracketsSugg {
                        left: __binding_0, right: __binding_1 } => {
                        let mut suggestions = Vec::new();
                        let __code_96 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!("<"))
                                });
                        let __code_97 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!(">"))
                                });
                        suggestions.push((__binding_0, __code_96));
                        suggestions.push((__binding_1, __code_97));
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("surround the type parameters with angle brackets")),
                                &sub_args);
                        diag.multipart_suggestion_with_style(__message, suggestions,
                            rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowCode);
                    }
                }
            }
        }
    };Subdiagnostic)]
1659#[multipart_suggestion(
1660    "surround the type parameters with angle brackets",
1661    applicability = "machine-applicable"
1662)]
1663pub(crate) struct GenericParamsWithoutAngleBracketsSugg {
1664    #[suggestion_part(code = "<")]
1665    pub left: Span,
1666    #[suggestion_part(code = ">")]
1667    pub right: Span,
1668}
1669
1670#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            ComparisonOperatorsCannotBeChained 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 {
                    ComparisonOperatorsCannotBeChained {
                        span: __binding_0,
                        suggest_turbofish: __binding_1,
                        help_turbofish: __binding_2,
                        chaining_sugg: __binding_3 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("comparison operators cannot be chained")));
                        let __code_98 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("::"))
                                            })].into_iter();
                        ;
                        diag.span(__binding_0.clone());
                        if let Some(__binding_1) = __binding_1 {
                            diag.span_suggestions_with_style(__binding_1,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("use `::<...>` instead of `<...>` to specify lifetime, type, or const arguments")),
                                __code_98, rustc_errors::Applicability::MaybeIncorrect,
                                rustc_errors::SuggestionStyle::ShowAlways);
                        }
                        if __binding_2 {
                            diag.help(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("use `::<...>` instead of `<...>` to specify lifetime, type, or const arguments")));
                        }
                        if __binding_2 {
                            diag.help(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("or use `(...)` if you meant to specify fn arguments")));
                        }
                        if let Some(__binding_3) = __binding_3 {
                            diag.subdiagnostic(__binding_3);
                        }
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1671#[diag("comparison operators cannot be chained")]
1672pub(crate) struct ComparisonOperatorsCannotBeChained {
1673    #[primary_span]
1674    pub span: Vec<Span>,
1675    #[suggestion(
1676        "use `::<...>` instead of `<...>` to specify lifetime, type, or const arguments",
1677        style = "verbose",
1678        code = "::",
1679        applicability = "maybe-incorrect"
1680    )]
1681    pub suggest_turbofish: Option<Span>,
1682    #[help("use `::<...>` instead of `<...>` to specify lifetime, type, or const arguments")]
1683    #[help("or use `(...)` if you meant to specify fn arguments")]
1684    pub help_turbofish: bool,
1685    #[subdiagnostic]
1686    pub chaining_sugg: Option<ComparisonOperatorsCannotBeChainedSugg>,
1687}
1688
1689#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for
            ComparisonOperatorsCannotBeChainedSugg {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    ComparisonOperatorsCannotBeChainedSugg::SplitComparison {
                        span: __binding_0, middle_term: __binding_1 } => {
                        let __code_99 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(" && {0}", __binding_1))
                                            })].into_iter();
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        sub_args.insert("middle_term".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("split the comparison into two")),
                                &sub_args);
                        diag.span_suggestions_with_style(__binding_0, __message,
                            __code_99, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                    }
                    ComparisonOperatorsCannotBeChainedSugg::Parenthesize {
                        left: __binding_0, right: __binding_1 } => {
                        let mut suggestions = Vec::new();
                        let __code_100 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!("("))
                                });
                        let __code_101 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!(")"))
                                });
                        suggestions.push((__binding_0, __code_100));
                        suggestions.push((__binding_1, __code_101));
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("parenthesize the comparison")),
                                &sub_args);
                        diag.multipart_suggestion_with_style(__message, suggestions,
                            rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowCode);
                    }
                }
            }
        }
    };Subdiagnostic)]
1690pub(crate) enum ComparisonOperatorsCannotBeChainedSugg {
1691    #[suggestion(
1692        "split the comparison into two",
1693        style = "verbose",
1694        code = " && {middle_term}",
1695        applicability = "maybe-incorrect"
1696    )]
1697    SplitComparison {
1698        #[primary_span]
1699        span: Span,
1700        middle_term: String,
1701    },
1702    #[multipart_suggestion("parenthesize the comparison", applicability = "maybe-incorrect")]
1703    Parenthesize {
1704        #[suggestion_part(code = "(")]
1705        left: Span,
1706        #[suggestion_part(code = ")")]
1707        right: Span,
1708    },
1709}
1710
1711#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            QuestionMarkInType 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 {
                    QuestionMarkInType { span: __binding_0, sugg: __binding_1 }
                        => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("invalid `?` in type")));
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`?` is only allowed on expressions, not types")));
                        diag.subdiagnostic(__binding_1);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1712#[diag("invalid `?` in type")]
1713pub(crate) struct QuestionMarkInType {
1714    #[primary_span]
1715    #[label("`?` is only allowed on expressions, not types")]
1716    pub span: Span,
1717    #[subdiagnostic]
1718    pub sugg: QuestionMarkInTypeSugg,
1719}
1720
1721#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for QuestionMarkInTypeSugg {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    QuestionMarkInTypeSugg {
                        left: __binding_0, right: __binding_1 } => {
                        let mut suggestions = Vec::new();
                        let __code_102 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!("Option<"))
                                });
                        let __code_103 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!(">"))
                                });
                        suggestions.push((__binding_0, __code_102));
                        suggestions.push((__binding_1, __code_103));
                        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 express that the type might not contain a value, use the `Option` wrapper type")),
                                &sub_args);
                        diag.multipart_suggestion_with_style(__message, suggestions,
                            rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowCode);
                    }
                }
            }
        }
    };Subdiagnostic)]
1722#[multipart_suggestion(
1723    "if you meant to express that the type might not contain a value, use the `Option` wrapper type",
1724    applicability = "machine-applicable"
1725)]
1726pub(crate) struct QuestionMarkInTypeSugg {
1727    #[suggestion_part(code = "Option<")]
1728    pub left: Span,
1729    #[suggestion_part(code = ">")]
1730    pub right: Span,
1731}
1732
1733#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            ParenthesesInForHead 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 {
                    ParenthesesInForHead { span: __binding_0, sugg: __binding_1
                        } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("unexpected parentheses surrounding `for` loop head")));
                        ;
                        diag.span(__binding_0.clone());
                        diag.subdiagnostic(__binding_1);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1734#[diag("unexpected parentheses surrounding `for` loop head")]
1735pub(crate) struct ParenthesesInForHead {
1736    #[primary_span]
1737    pub span: Vec<Span>,
1738    #[subdiagnostic]
1739    pub sugg: ParenthesesInForHeadSugg,
1740}
1741
1742#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for ParenthesesInForHeadSugg {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    ParenthesesInForHeadSugg {
                        left: __binding_0, right: __binding_1 } => {
                        let mut suggestions = Vec::new();
                        let __code_104 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!(" "))
                                });
                        let __code_105 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!(" "))
                                });
                        suggestions.push((__binding_0, __code_104));
                        suggestions.push((__binding_1, __code_105));
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("remove parentheses in `for` loop")),
                                &sub_args);
                        diag.multipart_suggestion_with_style(__message, suggestions,
                            rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowCode);
                    }
                }
            }
        }
    };Subdiagnostic)]
1743#[multipart_suggestion("remove parentheses in `for` loop", applicability = "machine-applicable")]
1744pub(crate) struct ParenthesesInForHeadSugg {
1745    #[suggestion_part(code = " ")]
1746    pub left: Span,
1747    #[suggestion_part(code = " ")]
1748    pub right: Span,
1749}
1750
1751#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            ParenthesesInMatchPat 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 {
                    ParenthesesInMatchPat { span: __binding_0, sugg: __binding_1
                        } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("unexpected parentheses surrounding `match` arm pattern")));
                        ;
                        diag.span(__binding_0.clone());
                        diag.subdiagnostic(__binding_1);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1752#[diag("unexpected parentheses surrounding `match` arm pattern")]
1753pub(crate) struct ParenthesesInMatchPat {
1754    #[primary_span]
1755    pub span: Vec<Span>,
1756    #[subdiagnostic]
1757    pub sugg: ParenthesesInMatchPatSugg,
1758}
1759
1760#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for ParenthesesInMatchPatSugg {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    ParenthesesInMatchPatSugg {
                        left: __binding_0, right: __binding_1 } => {
                        let mut suggestions = Vec::new();
                        let __code_106 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!(""))
                                });
                        let __code_107 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!(""))
                                });
                        suggestions.push((__binding_0, __code_106));
                        suggestions.push((__binding_1, __code_107));
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("remove parentheses surrounding the pattern")),
                                &sub_args);
                        diag.multipart_suggestion_with_style(__message, suggestions,
                            rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowCode);
                    }
                }
            }
        }
    };Subdiagnostic)]
1761#[multipart_suggestion(
1762    "remove parentheses surrounding the pattern",
1763    applicability = "machine-applicable"
1764)]
1765pub(crate) struct ParenthesesInMatchPatSugg {
1766    #[suggestion_part(code = "")]
1767    pub left: Span,
1768    #[suggestion_part(code = "")]
1769    pub right: Span,
1770}
1771
1772#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            DocCommentOnParamType 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 {
                    DocCommentOnParamType { 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 a function parameter's type")));
                        ;
                        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)]
1773#[diag("documentation comments cannot be applied to a function parameter's type")]
1774pub(crate) struct DocCommentOnParamType {
1775    #[primary_span]
1776    #[label("doc comments are not allowed here")]
1777    pub span: Span,
1778}
1779
1780#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            AttributeOnParamType 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 {
                    AttributeOnParamType { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("attributes cannot be applied to a function parameter's type")));
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("attributes are not allowed here")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1781#[diag("attributes cannot be applied to a function parameter's type")]
1782pub(crate) struct AttributeOnParamType {
1783    #[primary_span]
1784    #[label("attributes are not allowed here")]
1785    pub span: Span,
1786}
1787
1788#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            AttributeOnType 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 {
                    AttributeOnType { span: __binding_0, fix_span: __binding_1 }
                        => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("attributes cannot be applied to types")));
                        let __code_108 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(""))
                                            })].into_iter();
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("attributes are not allowed here")));
                        diag.span_suggestions_with_style(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("remove attribute from here")),
                            __code_108, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::CompletelyHidden);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1789#[diag("attributes cannot be applied to types")]
1790pub(crate) struct AttributeOnType {
1791    #[primary_span]
1792    #[label("attributes are not allowed here")]
1793    pub span: Span,
1794    #[suggestion(
1795        "remove attribute from here",
1796        code = "",
1797        applicability = "machine-applicable",
1798        style = "tool-only"
1799    )]
1800    pub fix_span: Span,
1801}
1802
1803#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            AttributeOnGenericArg 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 {
                    AttributeOnGenericArg {
                        span: __binding_0, fix_span: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("attributes cannot be applied to generic arguments")));
                        let __code_109 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(""))
                                            })].into_iter();
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("attributes are not allowed here")));
                        diag.span_suggestions_with_style(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("remove attribute from here")),
                            __code_109, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::CompletelyHidden);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1804#[diag("attributes cannot be applied to generic arguments")]
1805pub(crate) struct AttributeOnGenericArg {
1806    #[primary_span]
1807    #[label("attributes are not allowed here")]
1808    pub span: Span,
1809    #[suggestion(
1810        "remove attribute from here",
1811        code = "",
1812        applicability = "machine-applicable",
1813        style = "tool-only"
1814    )]
1815    pub fix_span: Span,
1816}
1817
1818#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            AttributeOnEmptyType 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 {
                    AttributeOnEmptyType { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("attributes cannot be applied here")));
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("attributes are not allowed here")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1819#[diag("attributes cannot be applied here")]
1820pub(crate) struct AttributeOnEmptyType {
1821    #[primary_span]
1822    #[label("attributes are not allowed here")]
1823    pub span: Span,
1824}
1825
1826#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            PatternMethodParamWithoutBody 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 {
                    PatternMethodParamWithoutBody { 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 methods without bodies")));
                        let __code_110 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("_"))
                                            })].into_iter();
                        diag.code(E0642);
                        ;
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("give this argument a name or use an underscore to ignore it")),
                            __code_110, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1827#[diag("patterns aren't allowed in methods without bodies", code = E0642)]
1828pub(crate) struct PatternMethodParamWithoutBody {
1829    #[primary_span]
1830    #[suggestion(
1831        "give this argument a name or use an underscore to ignore it",
1832        code = "_",
1833        applicability = "machine-applicable",
1834        style = "verbose"
1835    )]
1836    pub span: Span,
1837}
1838
1839#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            SelfParamNotFirst 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 {
                    SelfParamNotFirst { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("unexpected `self` parameter in function")));
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("must be the first parameter of an associated function")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1840#[diag("unexpected `self` parameter in function")]
1841pub(crate) struct SelfParamNotFirst {
1842    #[primary_span]
1843    #[label("must be the first parameter of an associated function")]
1844    pub span: Span,
1845}
1846
1847#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            ConstGenericWithoutBraces 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 {
                    ConstGenericWithoutBraces {
                        span: __binding_0, sugg: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expressions must be enclosed in braces to be used as const generic arguments")));
                        ;
                        diag.span(__binding_0);
                        diag.subdiagnostic(__binding_1);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1848#[diag("expressions must be enclosed in braces to be used as const generic arguments")]
1849pub(crate) struct ConstGenericWithoutBraces {
1850    #[primary_span]
1851    pub span: Span,
1852    #[subdiagnostic]
1853    pub sugg: ConstGenericWithoutBracesSugg,
1854}
1855
1856#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for ConstGenericWithoutBracesSugg {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    ConstGenericWithoutBracesSugg {
                        left: __binding_0, right: __binding_1 } => {
                        let mut suggestions = Vec::new();
                        let __code_111 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!("{{ "))
                                });
                        let __code_112 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!(" }}"))
                                });
                        suggestions.push((__binding_0, __code_111));
                        suggestions.push((__binding_1, __code_112));
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("enclose the `const` expression in braces")),
                                &sub_args);
                        diag.multipart_suggestion_with_style(__message, suggestions,
                            rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowCode);
                    }
                }
            }
        }
    };Subdiagnostic)]
1857#[multipart_suggestion(
1858    "enclose the `const` expression in braces",
1859    applicability = "machine-applicable"
1860)]
1861pub(crate) struct ConstGenericWithoutBracesSugg {
1862    #[suggestion_part(code = "{{ ")]
1863    pub left: Span,
1864    #[suggestion_part(code = " }}")]
1865    pub right: Span,
1866}
1867
1868#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            UnexpectedConstParamDeclaration 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 {
                    UnexpectedConstParamDeclaration {
                        span: __binding_0, sugg: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("unexpected `const` parameter declaration")));
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected a `const` expression, not a parameter declaration")));
                        if let Some(__binding_1) = __binding_1 {
                            diag.subdiagnostic(__binding_1);
                        }
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1869#[diag("unexpected `const` parameter declaration")]
1870pub(crate) struct UnexpectedConstParamDeclaration {
1871    #[primary_span]
1872    #[label("expected a `const` expression, not a parameter declaration")]
1873    pub span: Span,
1874    #[subdiagnostic]
1875    pub sugg: Option<UnexpectedConstParamDeclarationSugg>,
1876}
1877
1878#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for
            UnexpectedConstParamDeclarationSugg {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    UnexpectedConstParamDeclarationSugg::AddParam {
                        impl_generics: __binding_0,
                        incorrect_decl: __binding_1,
                        snippet: __binding_2,
                        ident: __binding_3 } => {
                        let mut suggestions = Vec::new();
                        let __code_113 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!("<{0}>", __binding_2))
                                });
                        let __code_114 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!("{0}", __binding_3))
                                });
                        suggestions.push((__binding_0, __code_113));
                        suggestions.push((__binding_1, __code_114));
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        sub_args.insert("snippet".into(),
                            rustc_errors::IntoDiagArg::into_diag_arg(__binding_2,
                                &mut diag.long_ty_path));
                        sub_args.insert("ident".into(),
                            rustc_errors::IntoDiagArg::into_diag_arg(__binding_3,
                                &mut diag.long_ty_path));
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`const` parameters must be declared for the `impl`")),
                                &sub_args);
                        diag.multipart_suggestion_with_style(__message, suggestions,
                            rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowCode);
                    }
                    UnexpectedConstParamDeclarationSugg::AppendParam {
                        impl_generics_end: __binding_0,
                        incorrect_decl: __binding_1,
                        snippet: __binding_2,
                        ident: __binding_3 } => {
                        let mut suggestions = Vec::new();
                        let __code_115 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!(", {0}", __binding_2))
                                });
                        let __code_116 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!("{0}", __binding_3))
                                });
                        suggestions.push((__binding_0, __code_115));
                        suggestions.push((__binding_1, __code_116));
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        sub_args.insert("snippet".into(),
                            rustc_errors::IntoDiagArg::into_diag_arg(__binding_2,
                                &mut diag.long_ty_path));
                        sub_args.insert("ident".into(),
                            rustc_errors::IntoDiagArg::into_diag_arg(__binding_3,
                                &mut diag.long_ty_path));
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`const` parameters must be declared for the `impl`")),
                                &sub_args);
                        diag.multipart_suggestion_with_style(__message, suggestions,
                            rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowCode);
                    }
                }
            }
        }
    };Subdiagnostic)]
1879pub(crate) enum UnexpectedConstParamDeclarationSugg {
1880    #[multipart_suggestion(
1881        "`const` parameters must be declared for the `impl`",
1882        applicability = "machine-applicable"
1883    )]
1884    AddParam {
1885        #[suggestion_part(code = "<{snippet}>")]
1886        impl_generics: Span,
1887        #[suggestion_part(code = "{ident}")]
1888        incorrect_decl: Span,
1889        snippet: String,
1890        ident: String,
1891    },
1892    #[multipart_suggestion(
1893        "`const` parameters must be declared for the `impl`",
1894        applicability = "machine-applicable"
1895    )]
1896    AppendParam {
1897        #[suggestion_part(code = ", {snippet}")]
1898        impl_generics_end: Span,
1899        #[suggestion_part(code = "{ident}")]
1900        incorrect_decl: Span,
1901        snippet: String,
1902        ident: String,
1903    },
1904}
1905
1906#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            UnexpectedConstInGenericParam 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 {
                    UnexpectedConstInGenericParam {
                        span: __binding_0, to_remove: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected lifetime, type, or constant, found keyword `const`")));
                        let __code_117 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(""))
                                            })].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("the `const` keyword is only needed in the definition of the type")),
                                __code_117, rustc_errors::Applicability::MaybeIncorrect,
                                rustc_errors::SuggestionStyle::ShowAlways);
                        }
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1907#[diag("expected lifetime, type, or constant, found keyword `const`")]
1908pub(crate) struct UnexpectedConstInGenericParam {
1909    #[primary_span]
1910    pub span: Span,
1911    #[suggestion(
1912        "the `const` keyword is only needed in the definition of the type",
1913        style = "verbose",
1914        code = "",
1915        applicability = "maybe-incorrect"
1916    )]
1917    pub to_remove: Option<Span>,
1918}
1919
1920#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            AsyncMoveOrderIncorrect 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 {
                    AsyncMoveOrderIncorrect { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("the order of `move` and `async` is incorrect")));
                        let __code_118 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("async move"))
                                            })].into_iter();
                        ;
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("try switching the order")),
                            __code_118, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1921#[diag("the order of `move` and `async` is incorrect")]
1922pub(crate) struct AsyncMoveOrderIncorrect {
1923    #[primary_span]
1924    #[suggestion(
1925        "try switching the order",
1926        style = "verbose",
1927        code = "async move",
1928        applicability = "maybe-incorrect"
1929    )]
1930    pub span: Span,
1931}
1932
1933#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            AsyncUseOrderIncorrect 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 {
                    AsyncUseOrderIncorrect { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("the order of `use` and `async` is incorrect")));
                        let __code_119 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("async use"))
                                            })].into_iter();
                        ;
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("try switching the order")),
                            __code_119, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1934#[diag("the order of `use` and `async` is incorrect")]
1935pub(crate) struct AsyncUseOrderIncorrect {
1936    #[primary_span]
1937    #[suggestion(
1938        "try switching the order",
1939        style = "verbose",
1940        code = "async use",
1941        applicability = "maybe-incorrect"
1942    )]
1943    pub span: Span,
1944}
1945
1946#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            DoubleColonInBound 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 {
                    DoubleColonInBound { span: __binding_0, between: __binding_1
                        } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected `:` followed by trait or lifetime")));
                        let __code_120 =
                            [::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("use single colon")),
                            __code_120, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1947#[diag("expected `:` followed by trait or lifetime")]
1948pub(crate) struct DoubleColonInBound {
1949    #[primary_span]
1950    pub span: Span,
1951    #[suggestion(
1952        "use single colon",
1953        code = ": ",
1954        applicability = "machine-applicable",
1955        style = "verbose"
1956    )]
1957    pub between: Span,
1958}
1959
1960#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            FnPtrWithGenerics 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 {
                    FnPtrWithGenerics { span: __binding_0, sugg: __binding_1 }
                        => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("function pointer types may not have generic parameters")));
                        ;
                        diag.span(__binding_0);
                        if let Some(__binding_1) = __binding_1 {
                            diag.subdiagnostic(__binding_1);
                        }
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
1961#[diag("function pointer types may not have generic parameters")]
1962pub(crate) struct FnPtrWithGenerics {
1963    #[primary_span]
1964    pub span: Span,
1965    #[subdiagnostic]
1966    pub sugg: Option<FnPtrWithGenericsSugg>,
1967}
1968
1969#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for MisplacedReturnType {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    MisplacedReturnType {
                        fn_params_end: __binding_0,
                        snippet: __binding_1,
                        ret_ty_span: __binding_2 } => {
                        let mut suggestions = Vec::new();
                        let __code_121 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!(" {0}", __binding_1))
                                });
                        let __code_122 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!(""))
                                });
                        suggestions.push((__binding_0, __code_121));
                        suggestions.push((__binding_2, __code_122));
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        sub_args.insert("snippet".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("place the return type after the function parameters")),
                                &sub_args);
                        diag.multipart_suggestion_with_style(__message, suggestions,
                            rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                    }
                }
            }
        }
    };Subdiagnostic)]
1970#[multipart_suggestion(
1971    "place the return type after the function parameters",
1972    style = "verbose",
1973    applicability = "maybe-incorrect"
1974)]
1975pub(crate) struct MisplacedReturnType {
1976    #[suggestion_part(code = " {snippet}")]
1977    pub fn_params_end: Span,
1978    pub snippet: String,
1979    #[suggestion_part(code = "")]
1980    pub ret_ty_span: Span,
1981}
1982
1983#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for FnPtrWithGenericsSugg {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    FnPtrWithGenericsSugg {
                        left: __binding_0,
                        snippet: __binding_1,
                        right: __binding_2,
                        arity: __binding_3,
                        for_param_list_exists: __binding_4 } => {
                        let mut suggestions = Vec::new();
                        let __code_123 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!("{0}", __binding_1))
                                });
                        let __code_124 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!(""))
                                });
                        suggestions.push((__binding_0, __code_123));
                        suggestions.push((__binding_2, __code_124));
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        sub_args.insert("snippet".into(),
                            rustc_errors::IntoDiagArg::into_diag_arg(__binding_1,
                                &mut diag.long_ty_path));
                        sub_args.insert("arity".into(),
                            rustc_errors::IntoDiagArg::into_diag_arg(__binding_3,
                                &mut diag.long_ty_path));
                        sub_args.insert("for_param_list_exists".into(),
                            rustc_errors::IntoDiagArg::into_diag_arg(__binding_4,
                                &mut diag.long_ty_path));
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("consider moving the lifetime {$arity ->\n        [one] parameter\n        *[other] parameters\n    } to {$for_param_list_exists ->\n        [true] the\n        *[false] a\n    } `for` parameter list")),
                                &sub_args);
                        diag.multipart_suggestion_with_style(__message, suggestions,
                            rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowCode);
                    }
                }
            }
        }
    };Subdiagnostic)]
1984#[multipart_suggestion(
1985    "consider moving the lifetime {$arity ->
1986        [one] parameter
1987        *[other] parameters
1988    } to {$for_param_list_exists ->
1989        [true] the
1990        *[false] a
1991    } `for` parameter list",
1992    applicability = "maybe-incorrect"
1993)]
1994pub(crate) struct FnPtrWithGenericsSugg {
1995    #[suggestion_part(code = "{snippet}")]
1996    pub left: Span,
1997    pub snippet: String,
1998    #[suggestion_part(code = "")]
1999    pub right: Span,
2000    pub arity: usize,
2001    pub for_param_list_exists: bool,
2002}
2003
2004pub(crate) struct FnTraitMissingParen {
2005    pub span: Span,
2006}
2007
2008impl Subdiagnostic for FnTraitMissingParen {
2009    fn add_to_diag<G: EmissionGuarantee>(self, diag: &mut Diag<'_, G>) {
2010        diag.span_label(self.span, rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`Fn` bounds require arguments in parentheses"))msg!("`Fn` bounds require arguments in parentheses"));
2011        diag.span_suggestion_short(
2012            self.span.shrink_to_hi(),
2013            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("try adding parentheses"))msg!("try adding parentheses"),
2014            "()",
2015            Applicability::MachineApplicable,
2016        );
2017    }
2018}
2019
2020#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            UnexpectedIfWithIf 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 {
                    UnexpectedIfWithIf(__binding_0) => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("unexpected `if` in the condition expression")));
                        let __code_125 =
                            [::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 `if`")),
                            __code_125, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2021#[diag("unexpected `if` in the condition expression")]
2022pub(crate) struct UnexpectedIfWithIf(
2023    #[primary_span]
2024    #[suggestion(
2025        "remove the `if`",
2026        applicability = "machine-applicable",
2027        code = " ",
2028        style = "verbose"
2029    )]
2030    pub Span,
2031);
2032
2033#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for FnTypoWithImpl
            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 {
                    FnTypoWithImpl { fn_span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("you might have meant to write `impl` instead of `fn`")));
                        let __code_126 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("impl"))
                                            })].into_iter();
                        ;
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("replace `fn` with `impl` here")),
                            __code_126, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2034#[diag("you might have meant to write `impl` instead of `fn`")]
2035pub(crate) struct FnTypoWithImpl {
2036    #[primary_span]
2037    #[suggestion(
2038        "replace `fn` with `impl` here",
2039        applicability = "maybe-incorrect",
2040        code = "impl",
2041        style = "verbose"
2042    )]
2043    pub fn_span: Span,
2044}
2045
2046#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            ExpectedFnPathFoundFnKeyword 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 {
                    ExpectedFnPathFoundFnKeyword { fn_token_span: __binding_0 }
                        => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected identifier, found keyword `fn`")));
                        let __code_127 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("Fn"))
                                            })].into_iter();
                        ;
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("use `Fn` to refer to the trait")),
                            __code_127, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2047#[diag("expected identifier, found keyword `fn`")]
2048pub(crate) struct ExpectedFnPathFoundFnKeyword {
2049    #[primary_span]
2050    #[suggestion(
2051        "use `Fn` to refer to the trait",
2052        applicability = "machine-applicable",
2053        code = "Fn",
2054        style = "verbose"
2055    )]
2056    pub fn_token_span: Span,
2057}
2058
2059#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            FnPathFoundNamedParams 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 {
                    FnPathFoundNamedParams { named_param_span: __binding_0 } =>
                        {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`Trait(...)` syntax does not support named parameters")));
                        let __code_128 =
                            [::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 parameter name")),
                            __code_128, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowCode);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2060#[diag("`Trait(...)` syntax does not support named parameters")]
2061pub(crate) struct FnPathFoundNamedParams {
2062    #[primary_span]
2063    #[suggestion("remove the parameter name", applicability = "machine-applicable", code = "")]
2064    pub named_param_span: Span,
2065}
2066
2067#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            PathFoundCVariadicParams 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 {
                    PathFoundCVariadicParams { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`Trait(...)` syntax does not support c_variadic parameters")));
                        let __code_129 =
                            [::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 `...`")),
                            __code_129, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowCode);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2068#[diag("`Trait(...)` syntax does not support c_variadic parameters")]
2069pub(crate) struct PathFoundCVariadicParams {
2070    #[primary_span]
2071    #[suggestion("remove the `...`", applicability = "machine-applicable", code = "")]
2072    pub span: Span,
2073}
2074
2075#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            PathFoundAttributeInParams 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 {
                    PathFoundAttributeInParams { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`Trait(...)` syntax does not support attributes in parameters")));
                        let __code_130 =
                            [::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 attributes")),
                            __code_130, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowCode);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2076#[diag("`Trait(...)` syntax does not support attributes in parameters")]
2077pub(crate) struct PathFoundAttributeInParams {
2078    #[primary_span]
2079    #[suggestion("remove the attributes", applicability = "machine-applicable", code = "")]
2080    pub span: Span,
2081}
2082
2083#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            PathSingleColon 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 {
                    PathSingleColon { span: __binding_0, suggestion: __binding_1
                        } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("path separator must be a double colon")));
                        let __code_131 =
                            [::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("use a double colon instead")),
                            __code_131, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2084#[diag("path separator must be a double colon")]
2085pub(crate) struct PathSingleColon {
2086    #[primary_span]
2087    pub span: Span,
2088
2089    #[suggestion(
2090        "use a double colon instead",
2091        applicability = "machine-applicable",
2092        code = ":",
2093        style = "verbose"
2094    )]
2095    pub suggestion: Span,
2096}
2097
2098#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            PathTripleColon 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 {
                    PathTripleColon { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("path separator must be a double colon")));
                        let __code_132 =
                            [::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("use a double colon instead")),
                            __code_132, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2099#[diag("path separator must be a double colon")]
2100pub(crate) struct PathTripleColon {
2101    #[primary_span]
2102    #[suggestion(
2103        "use a double colon instead",
2104        applicability = "maybe-incorrect",
2105        code = "",
2106        style = "verbose"
2107    )]
2108    pub span: Span,
2109}
2110
2111#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for ColonAsSemi
            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 {
                    ColonAsSemi { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("statements are terminated with a semicolon")));
                        let __code_133 =
                            [::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("use a semicolon instead")),
                            __code_133, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2112#[diag("statements are terminated with a semicolon")]
2113pub(crate) struct ColonAsSemi {
2114    #[primary_span]
2115    #[suggestion(
2116        "use a semicolon instead",
2117        applicability = "machine-applicable",
2118        code = ";",
2119        style = "verbose"
2120    )]
2121    pub span: Span,
2122}
2123
2124#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            WhereClauseBeforeTupleStructBody 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 {
                    WhereClauseBeforeTupleStructBody {
                        span: __binding_0,
                        name: __binding_1,
                        body: __binding_2,
                        sugg: __binding_3 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("where clauses are not allowed before tuple struct bodies")));
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("unexpected where clause")));
                        diag.span_label(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("while parsing this tuple struct")));
                        diag.span_label(__binding_2,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("the struct body")));
                        if let Some(__binding_3) = __binding_3 {
                            diag.subdiagnostic(__binding_3);
                        }
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2125#[diag("where clauses are not allowed before tuple struct bodies")]
2126pub(crate) struct WhereClauseBeforeTupleStructBody {
2127    #[primary_span]
2128    #[label("unexpected where clause")]
2129    pub span: Span,
2130    #[label("while parsing this tuple struct")]
2131    pub name: Span,
2132    #[label("the struct body")]
2133    pub body: Span,
2134    #[subdiagnostic]
2135    pub sugg: Option<WhereClauseBeforeTupleStructBodySugg>,
2136}
2137
2138#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for
            WhereClauseBeforeTupleStructBodySugg {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    WhereClauseBeforeTupleStructBodySugg {
                        left: __binding_0, snippet: __binding_1, right: __binding_2
                        } => {
                        let mut suggestions = Vec::new();
                        let __code_134 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!("{0}", __binding_1))
                                });
                        let __code_135 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!(""))
                                });
                        suggestions.push((__binding_0, __code_134));
                        suggestions.push((__binding_2, __code_135));
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        sub_args.insert("snippet".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("move the body before the where clause")),
                                &sub_args);
                        diag.multipart_suggestion_with_style(__message, suggestions,
                            rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowCode);
                    }
                }
            }
        }
    };Subdiagnostic)]
2139#[multipart_suggestion(
2140    "move the body before the where clause",
2141    applicability = "machine-applicable"
2142)]
2143pub(crate) struct WhereClauseBeforeTupleStructBodySugg {
2144    #[suggestion_part(code = "{snippet}")]
2145    pub left: Span,
2146    pub snippet: String,
2147    #[suggestion_part(code = "")]
2148    pub right: Span,
2149}
2150
2151#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for AsyncFnIn2015
            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 {
                    AsyncFnIn2015 { span: __binding_0, help: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`async fn` is not permitted in Rust 2015")));
                        diag.code(E0670);
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("to use `async fn`, switch to Rust 2018 or later")));
                        diag.subdiagnostic(__binding_1);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2152#[diag("`async fn` is not permitted in Rust 2015", code = E0670)]
2153pub(crate) struct AsyncFnIn2015 {
2154    #[primary_span]
2155    #[label("to use `async fn`, switch to Rust 2018 or later")]
2156    pub span: Span,
2157    #[subdiagnostic]
2158    pub help: HelpUseLatestEdition,
2159}
2160
2161#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for AsyncBlockIn2015 {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    AsyncBlockIn2015 { 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("`async` blocks are only allowed in Rust 2018 or later")),
                                &sub_args);
                        diag.span_label(__binding_0, __message);
                    }
                }
            }
        }
    };Subdiagnostic)]
2162#[label("`async` blocks are only allowed in Rust 2018 or later")]
2163pub(crate) struct AsyncBlockIn2015 {
2164    #[primary_span]
2165    pub span: Span,
2166}
2167
2168#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            AsyncMoveBlockIn2015 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 {
                    AsyncMoveBlockIn2015 { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`async move` blocks are only allowed in Rust 2018 or later")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2169#[diag("`async move` blocks are only allowed in Rust 2018 or later")]
2170pub(crate) struct AsyncMoveBlockIn2015 {
2171    #[primary_span]
2172    pub span: Span,
2173}
2174
2175#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            AsyncUseBlockIn2015 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 {
                    AsyncUseBlockIn2015 { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`async use` blocks are only allowed in Rust 2018 or later")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2176#[diag("`async use` blocks are only allowed in Rust 2018 or later")]
2177pub(crate) struct AsyncUseBlockIn2015 {
2178    #[primary_span]
2179    pub span: Span,
2180}
2181
2182#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            AsyncBoundModifierIn2015 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 {
                    AsyncBoundModifierIn2015 {
                        span: __binding_0, help: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`async` trait bounds are only allowed in Rust 2018 or later")));
                        ;
                        diag.span(__binding_0);
                        diag.subdiagnostic(__binding_1);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2183#[diag("`async` trait bounds are only allowed in Rust 2018 or later")]
2184pub(crate) struct AsyncBoundModifierIn2015 {
2185    #[primary_span]
2186    pub span: Span,
2187    #[subdiagnostic]
2188    pub help: HelpUseLatestEdition,
2189}
2190
2191#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            LetChainPre2024 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 {
                    LetChainPre2024 { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("let chains are only allowed in Rust 2024 or later")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2192#[diag("let chains are only allowed in Rust 2024 or later")]
2193pub(crate) struct LetChainPre2024 {
2194    #[primary_span]
2195    pub span: Span,
2196}
2197
2198#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            SelfArgumentPointer 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 {
                    SelfArgumentPointer { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("cannot pass `self` by raw pointer")));
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("cannot pass `self` by raw pointer")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2199#[diag("cannot pass `self` by raw pointer")]
2200pub(crate) struct SelfArgumentPointer {
2201    #[primary_span]
2202    #[label("cannot pass `self` by raw pointer")]
2203    pub span: Span,
2204}
2205
2206#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            UnexpectedTokenAfterDot 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 {
                    UnexpectedTokenAfterDot {
                        span: __binding_0, actual: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("unexpected token: {$actual}")));
                        ;
                        diag.arg("actual", __binding_1);
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2207#[diag("unexpected token: {$actual}")]
2208pub(crate) struct UnexpectedTokenAfterDot {
2209    #[primary_span]
2210    pub span: Span,
2211    pub actual: String,
2212}
2213
2214#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            VisibilityNotFollowedByItem 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 {
                    VisibilityNotFollowedByItem {
                        span: __binding_0, vis: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("visibility `{$vis}` is not followed by an item")));
                        diag.help(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("you likely meant to define an item, e.g., `{$vis} fn foo() {\"{}\"}`")));
                        ;
                        diag.arg("vis", __binding_1);
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("the visibility")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2215#[diag("visibility `{$vis}` is not followed by an item")]
2216#[help("you likely meant to define an item, e.g., `{$vis} fn foo() {\"{}\"}`")]
2217pub(crate) struct VisibilityNotFollowedByItem {
2218    #[primary_span]
2219    #[label("the visibility")]
2220    pub span: Span,
2221    pub vis: Visibility,
2222}
2223
2224#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            DefaultNotFollowedByItem 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 {
                    DefaultNotFollowedByItem { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`default` is not followed by an item")));
                        diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("only `fn`, `const`, `type`, or `impl` items may be prefixed by `default`")));
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("the `default` qualifier")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2225#[diag("`default` is not followed by an item")]
2226#[note("only `fn`, `const`, `type`, or `impl` items may be prefixed by `default`")]
2227pub(crate) struct DefaultNotFollowedByItem {
2228    #[primary_span]
2229    #[label("the `default` qualifier")]
2230    pub span: Span,
2231}
2232
2233#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            FinalNotFollowedByItem 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 {
                    FinalNotFollowedByItem { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`final` is not followed by an item")));
                        diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("only associated functions in traits may be prefixed by `final`")));
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("the `final` qualifier")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2234#[diag("`final` is not followed by an item")]
2235#[note("only associated functions in traits may be prefixed by `final`")]
2236pub(crate) struct FinalNotFollowedByItem {
2237    #[primary_span]
2238    #[label("the `final` qualifier")]
2239    pub span: Span,
2240}
2241
2242#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            MissingKeywordForItemDefinition 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 {
                    MissingKeywordForItemDefinition::Enum {
                        span: __binding_0,
                        insert_span: __binding_1,
                        ident: __binding_2 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("missing `enum` for enum definition")));
                        let __code_136 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("enum "))
                                            })].into_iter();
                        ;
                        diag.arg("ident", __binding_2);
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("add `enum` here to parse `{$ident}` as an enum")),
                            __code_136, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                    MissingKeywordForItemDefinition::EnumOrStruct {
                        span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("missing `enum` or `struct` for enum or struct definition")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                    MissingKeywordForItemDefinition::Struct {
                        span: __binding_0,
                        insert_span: __binding_1,
                        ident: __binding_2 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("missing `struct` for struct definition")));
                        let __code_137 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("struct "))
                                            })].into_iter();
                        ;
                        diag.arg("ident", __binding_2);
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("add `struct` here to parse `{$ident}` as a struct")),
                            __code_137, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                    MissingKeywordForItemDefinition::Function {
                        span: __binding_0,
                        insert_span: __binding_1,
                        ident: __binding_2 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("missing `fn` for function definition")));
                        let __code_138 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("fn "))
                                            })].into_iter();
                        ;
                        diag.arg("ident", __binding_2);
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("add `fn` here to parse `{$ident}` as a function")),
                            __code_138, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                    MissingKeywordForItemDefinition::Method {
                        span: __binding_0,
                        insert_span: __binding_1,
                        ident: __binding_2 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("missing `fn` for method definition")));
                        let __code_139 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("fn "))
                                            })].into_iter();
                        ;
                        diag.arg("ident", __binding_2);
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("add `fn` here to parse `{$ident}` as a method")),
                            __code_139, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                    MissingKeywordForItemDefinition::Ambiguous {
                        span: __binding_0, subdiag: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("missing `fn` or `struct` for function or struct definition")));
                        ;
                        diag.span(__binding_0);
                        if let Some(__binding_1) = __binding_1 {
                            diag.subdiagnostic(__binding_1);
                        }
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2243pub(crate) enum MissingKeywordForItemDefinition {
2244    #[diag("missing `enum` for enum definition")]
2245    Enum {
2246        #[primary_span]
2247        span: Span,
2248        #[suggestion(
2249            "add `enum` here to parse `{$ident}` as an enum",
2250            style = "verbose",
2251            applicability = "maybe-incorrect",
2252            code = "enum "
2253        )]
2254        insert_span: Span,
2255        ident: Ident,
2256    },
2257    #[diag("missing `enum` or `struct` for enum or struct definition")]
2258    EnumOrStruct {
2259        #[primary_span]
2260        span: Span,
2261    },
2262    #[diag("missing `struct` for struct definition")]
2263    Struct {
2264        #[primary_span]
2265        span: Span,
2266        #[suggestion(
2267            "add `struct` here to parse `{$ident}` as a struct",
2268            style = "verbose",
2269            applicability = "maybe-incorrect",
2270            code = "struct "
2271        )]
2272        insert_span: Span,
2273        ident: Ident,
2274    },
2275    #[diag("missing `fn` for function definition")]
2276    Function {
2277        #[primary_span]
2278        span: Span,
2279        #[suggestion(
2280            "add `fn` here to parse `{$ident}` as a function",
2281            style = "verbose",
2282            applicability = "maybe-incorrect",
2283            code = "fn "
2284        )]
2285        insert_span: Span,
2286        ident: Ident,
2287    },
2288    #[diag("missing `fn` for method definition")]
2289    Method {
2290        #[primary_span]
2291        span: Span,
2292        #[suggestion(
2293            "add `fn` here to parse `{$ident}` as a method",
2294            style = "verbose",
2295            applicability = "maybe-incorrect",
2296            code = "fn "
2297        )]
2298        insert_span: Span,
2299        ident: Ident,
2300    },
2301    #[diag("missing `fn` or `struct` for function or struct definition")]
2302    Ambiguous {
2303        #[primary_span]
2304        span: Span,
2305        #[subdiagnostic]
2306        subdiag: Option<AmbiguousMissingKwForItemSub>,
2307    },
2308}
2309
2310#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for AmbiguousMissingKwForItemSub {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    AmbiguousMissingKwForItemSub::SuggestMacro {
                        span: __binding_0, snippet: __binding_1 } => {
                        let __code_140 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("{0}!", __binding_1))
                                            })].into_iter();
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        sub_args.insert("snippet".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("if you meant to call a macro, try")),
                                &sub_args);
                        diag.span_suggestions_with_style(__binding_0, __message,
                            __code_140, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                    }
                    AmbiguousMissingKwForItemSub::HelpMacro => {
                        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 call a macro, remove the `pub` and add a trailing `!` after the identifier")),
                                &sub_args);
                        diag.help(__message);
                    }
                }
            }
        }
    };Subdiagnostic)]
2311pub(crate) enum AmbiguousMissingKwForItemSub {
2312    #[suggestion(
2313        "if you meant to call a macro, try",
2314        applicability = "maybe-incorrect",
2315        code = "{snippet}!",
2316        style = "verbose"
2317    )]
2318    SuggestMacro {
2319        #[primary_span]
2320        span: Span,
2321        snippet: String,
2322    },
2323    #[help(
2324        "if you meant to call a macro, remove the `pub` and add a trailing `!` after the identifier"
2325    )]
2326    HelpMacro,
2327}
2328
2329#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            MissingFnParams 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 {
                    MissingFnParams { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("missing parameters for function definition")));
                        let __code_141 =
                            [::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("add a parameter list")),
                            __code_141, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2330#[diag("missing parameters for function definition")]
2331pub(crate) struct MissingFnParams {
2332    #[primary_span]
2333    #[suggestion(
2334        "add a parameter list",
2335        code = "()",
2336        applicability = "machine-applicable",
2337        style = "verbose"
2338    )]
2339    pub span: Span,
2340}
2341
2342#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            InvalidPathSepInFnDefinition 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 {
                    InvalidPathSepInFnDefinition { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("invalid path separator in function definition")));
                        let __code_142 =
                            [::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 invalid path separator")),
                            __code_142, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2343#[diag("invalid path separator in function definition")]
2344pub(crate) struct InvalidPathSepInFnDefinition {
2345    #[primary_span]
2346    #[suggestion(
2347        "remove invalid path separator",
2348        code = "",
2349        applicability = "machine-applicable",
2350        style = "verbose"
2351    )]
2352    pub span: Span,
2353}
2354
2355#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            MissingTraitInTraitImpl 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 {
                    MissingTraitInTraitImpl {
                        span: __binding_0, for_span: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("missing trait in a trait impl")));
                        let __code_143 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(" Trait "))
                                            })].into_iter();
                        let __code_144 =
                            [::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("add a trait here")),
                            __code_143, rustc_errors::Applicability::HasPlaceholders,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag.span_suggestions_with_style(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("for an inherent impl, drop this `for`")),
                            __code_144, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2356#[diag("missing trait in a trait impl")]
2357pub(crate) struct MissingTraitInTraitImpl {
2358    #[primary_span]
2359    #[suggestion(
2360        "add a trait here",
2361        code = " Trait ",
2362        applicability = "has-placeholders",
2363        style = "verbose"
2364    )]
2365    pub span: Span,
2366    #[suggestion(
2367        "for an inherent impl, drop this `for`",
2368        code = "",
2369        applicability = "maybe-incorrect",
2370        style = "verbose"
2371    )]
2372    pub for_span: Span,
2373}
2374
2375#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            MissingForInTraitImpl 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 {
                    MissingForInTraitImpl { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("missing `for` in a trait impl")));
                        let __code_145 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(" for "))
                                            })].into_iter();
                        ;
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("add `for` here")),
                            __code_145, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2376#[diag("missing `for` in a trait impl")]
2377pub(crate) struct MissingForInTraitImpl {
2378    #[primary_span]
2379    #[suggestion(
2380        "add `for` here",
2381        style = "verbose",
2382        code = " for ",
2383        applicability = "machine-applicable"
2384    )]
2385    pub span: Span,
2386}
2387
2388#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            ExpectedTraitInTraitImplFoundType 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 {
                    ExpectedTraitInTraitImplFoundType { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected a trait, found type")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2389#[diag("expected a trait, found type")]
2390pub(crate) struct ExpectedTraitInTraitImplFoundType {
2391    #[primary_span]
2392    pub span: Span,
2393}
2394
2395#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            ExtraImplKeywordInTraitImpl 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 {
                    ExtraImplKeywordInTraitImpl {
                        extra_impl_kw: __binding_0, impl_trait_span: __binding_1 }
                        => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("unexpected `impl` keyword")));
                        let __code_146 =
                            [::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 extra `impl`")),
                            __code_146, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::HideCodeInline);
                        diag.span_note(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("this is parsed as an `impl Trait` type, but a trait is expected at this position")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2396#[diag("unexpected `impl` keyword")]
2397pub(crate) struct ExtraImplKeywordInTraitImpl {
2398    #[primary_span]
2399    #[suggestion(
2400        "remove the extra `impl`",
2401        code = "",
2402        applicability = "maybe-incorrect",
2403        style = "short"
2404    )]
2405    pub extra_impl_kw: Span,
2406    #[note("this is parsed as an `impl Trait` type, but a trait is expected at this position")]
2407    pub impl_trait_span: Span,
2408}
2409
2410#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            BoundsNotAllowedOnTraitAliases 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 {
                    BoundsNotAllowedOnTraitAliases { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("bounds are not allowed on trait aliases")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2411#[diag("bounds are not allowed on trait aliases")]
2412pub(crate) struct BoundsNotAllowedOnTraitAliases {
2413    #[primary_span]
2414    pub span: Span,
2415}
2416
2417#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            TraitAliasCannotBeAuto 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 {
                    TraitAliasCannotBeAuto { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("trait aliases cannot be `auto`")));
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("trait aliases cannot be `auto`")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2418#[diag("trait aliases cannot be `auto`")]
2419pub(crate) struct TraitAliasCannotBeAuto {
2420    #[primary_span]
2421    #[label("trait aliases cannot be `auto`")]
2422    pub span: Span,
2423}
2424
2425#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            TraitAliasCannotBeUnsafe 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 {
                    TraitAliasCannotBeUnsafe { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("trait aliases cannot be `unsafe`")));
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("trait aliases cannot be `unsafe`")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2426#[diag("trait aliases cannot be `unsafe`")]
2427pub(crate) struct TraitAliasCannotBeUnsafe {
2428    #[primary_span]
2429    #[label("trait aliases cannot be `unsafe`")]
2430    pub span: Span,
2431}
2432
2433#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            TraitAliasCannotBeImplRestricted 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 {
                    TraitAliasCannotBeImplRestricted { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("trait aliases cannot be `impl`-restricted")));
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("trait aliases cannot be `impl`-restricted")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2434#[diag("trait aliases cannot be `impl`-restricted")]
2435pub(crate) struct TraitAliasCannotBeImplRestricted {
2436    #[primary_span]
2437    #[label("trait aliases cannot be `impl`-restricted")]
2438    pub span: Span,
2439}
2440
2441#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            AssociatedStaticItemNotAllowed 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 {
                    AssociatedStaticItemNotAllowed { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("associated `static` items are not allowed")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2442#[diag("associated `static` items are not allowed")]
2443pub(crate) struct AssociatedStaticItemNotAllowed {
2444    #[primary_span]
2445    pub span: Span,
2446}
2447
2448#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            ExternCrateNameWithDashes 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 {
                    ExternCrateNameWithDashes {
                        span: __binding_0, sugg: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("crate name using dashes are not valid in `extern crate` statements")));
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("dash-separated idents are not valid")));
                        diag.subdiagnostic(__binding_1);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2449#[diag("crate name using dashes are not valid in `extern crate` statements")]
2450pub(crate) struct ExternCrateNameWithDashes {
2451    #[primary_span]
2452    #[label("dash-separated idents are not valid")]
2453    pub span: Span,
2454    #[subdiagnostic]
2455    pub sugg: ExternCrateNameWithDashesSugg,
2456}
2457
2458#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for ExternCrateNameWithDashesSugg {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    ExternCrateNameWithDashesSugg { dashes: __binding_0 } => {
                        let mut suggestions = Vec::new();
                        let __code_147 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!("_"))
                                });
                        for __binding_0 in __binding_0 {
                            suggestions.push((__binding_0, __code_147.clone()));
                        }
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("if the original crate name uses dashes you need to use underscores in the code")),
                                &sub_args);
                        diag.multipart_suggestion_with_style(__message, suggestions,
                            rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowCode);
                    }
                }
            }
        }
    };Subdiagnostic)]
2459#[multipart_suggestion(
2460    "if the original crate name uses dashes you need to use underscores in the code",
2461    applicability = "machine-applicable"
2462)]
2463pub(crate) struct ExternCrateNameWithDashesSugg {
2464    #[suggestion_part(code = "_")]
2465    pub dashes: Vec<Span>,
2466}
2467
2468#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            ExternItemCannotBeConst 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 {
                    ExternItemCannotBeConst {
                        ident_span: __binding_0, const_span: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("extern items cannot be `const`")));
                        let __code_148 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("static "))
                                            })].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.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("try using a static value")),
                                __code_148, rustc_errors::Applicability::MachineApplicable,
                                rustc_errors::SuggestionStyle::ShowAlways);
                        }
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2469#[diag("extern items cannot be `const`")]
2470#[note("for more information, visit https://doc.rust-lang.org/std/keyword.extern.html")]
2471pub(crate) struct ExternItemCannotBeConst {
2472    #[primary_span]
2473    pub ident_span: Span,
2474    #[suggestion(
2475        "try using a static value",
2476        code = "static ",
2477        applicability = "machine-applicable",
2478        style = "verbose"
2479    )]
2480    pub const_span: Option<Span>,
2481}
2482
2483#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            ConstGlobalCannotBeMutable 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 {
                    ConstGlobalCannotBeMutable {
                        ident_span: __binding_0, const_span: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("const globals cannot be mutable")));
                        let __code_149 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("static"))
                                            })].into_iter();
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("cannot be mutable")));
                        diag.span_suggestions_with_style(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("you might want to declare a static instead")),
                            __code_149, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2484#[diag("const globals cannot be mutable")]
2485pub(crate) struct ConstGlobalCannotBeMutable {
2486    #[primary_span]
2487    #[label("cannot be mutable")]
2488    pub ident_span: Span,
2489    #[suggestion(
2490        "you might want to declare a static instead",
2491        code = "static",
2492        style = "verbose",
2493        applicability = "maybe-incorrect"
2494    )]
2495    pub const_span: Span,
2496}
2497
2498#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            MissingConstType 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 {
                    MissingConstType {
                        span: __binding_0, kind: __binding_1, colon: __binding_2 }
                        => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("missing type for `{$kind}` item")));
                        let __code_150 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("{0} <type>",
                                                        __binding_2))
                                            })].into_iter();
                        ;
                        diag.arg("kind", __binding_1);
                        diag.arg("colon", __binding_2);
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("provide a type for the item")),
                            __code_150, rustc_errors::Applicability::HasPlaceholders,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2499#[diag("missing type for `{$kind}` item")]
2500pub(crate) struct MissingConstType {
2501    #[primary_span]
2502    #[suggestion(
2503        "provide a type for the item",
2504        code = "{colon} <type>",
2505        style = "verbose",
2506        applicability = "has-placeholders"
2507    )]
2508    pub span: Span,
2509
2510    pub kind: &'static str,
2511    pub colon: &'static str,
2512}
2513
2514#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            EnumStructMutuallyExclusive 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 {
                    EnumStructMutuallyExclusive { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`enum` and `struct` are mutually exclusive")));
                        let __code_151 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("enum"))
                                            })].into_iter();
                        ;
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("replace `enum struct` with")),
                            __code_151, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2515#[diag("`enum` and `struct` are mutually exclusive")]
2516pub(crate) struct EnumStructMutuallyExclusive {
2517    #[primary_span]
2518    #[suggestion(
2519        "replace `enum struct` with",
2520        code = "enum",
2521        style = "verbose",
2522        applicability = "machine-applicable"
2523    )]
2524    pub span: Span,
2525}
2526
2527#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            UnexpectedTokenAfterStructName 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 {
                    UnexpectedTokenAfterStructName::ReservedIdentifier {
                        span: __binding_0, token: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected `where`, `{\"{\"}`, `(`, or `;` after struct name, found reserved identifier `{$token}`")));
                        ;
                        diag.arg("token", __binding_1);
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected `where`, `{\"{\"}`, `(`, or `;` after struct name")));
                        diag
                    }
                    UnexpectedTokenAfterStructName::Keyword {
                        span: __binding_0, token: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected `where`, `{\"{\"}`, `(`, or `;` after struct name, found keyword `{$token}`")));
                        ;
                        diag.arg("token", __binding_1);
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected `where`, `{\"{\"}`, `(`, or `;` after struct name")));
                        diag
                    }
                    UnexpectedTokenAfterStructName::ReservedKeyword {
                        span: __binding_0, token: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected `where`, `{\"{\"}`, `(`, or `;` after struct name, found reserved keyword `{$token}`")));
                        ;
                        diag.arg("token", __binding_1);
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected `where`, `{\"{\"}`, `(`, or `;` after struct name")));
                        diag
                    }
                    UnexpectedTokenAfterStructName::DocComment {
                        span: __binding_0, token: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected `where`, `{\"{\"}`, `(`, or `;` after struct name, found doc comment `{$token}`")));
                        ;
                        diag.arg("token", __binding_1);
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected `where`, `{\"{\"}`, `(`, or `;` after struct name")));
                        diag
                    }
                    UnexpectedTokenAfterStructName::MetaVar { span: __binding_0
                        } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected `where`, `{\"{\"}`, `(`, or `;` after struct name, found metavar")));
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected `where`, `{\"{\"}`, `(`, or `;` after struct name")));
                        diag
                    }
                    UnexpectedTokenAfterStructName::Other {
                        span: __binding_0, token: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected `where`, `{\"{\"}`, `(`, or `;` after struct name, found `{$token}`")));
                        ;
                        diag.arg("token", __binding_1);
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected `where`, `{\"{\"}`, `(`, or `;` after struct name")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2528pub(crate) enum UnexpectedTokenAfterStructName {
2529    #[diag(
2530        "expected `where`, `{\"{\"}`, `(`, or `;` after struct name, found reserved identifier `{$token}`"
2531    )]
2532    ReservedIdentifier {
2533        #[primary_span]
2534        #[label("expected `where`, `{\"{\"}`, `(`, or `;` after struct name")]
2535        span: Span,
2536        token: Token,
2537    },
2538    #[diag("expected `where`, `{\"{\"}`, `(`, or `;` after struct name, found keyword `{$token}`")]
2539    Keyword {
2540        #[primary_span]
2541        #[label("expected `where`, `{\"{\"}`, `(`, or `;` after struct name")]
2542        span: Span,
2543        token: Token,
2544    },
2545    #[diag(
2546        "expected `where`, `{\"{\"}`, `(`, or `;` after struct name, found reserved keyword `{$token}`"
2547    )]
2548    ReservedKeyword {
2549        #[primary_span]
2550        #[label("expected `where`, `{\"{\"}`, `(`, or `;` after struct name")]
2551        span: Span,
2552        token: Token,
2553    },
2554    #[diag(
2555        "expected `where`, `{\"{\"}`, `(`, or `;` after struct name, found doc comment `{$token}`"
2556    )]
2557    DocComment {
2558        #[primary_span]
2559        #[label("expected `where`, `{\"{\"}`, `(`, or `;` after struct name")]
2560        span: Span,
2561        token: Token,
2562    },
2563    #[diag("expected `where`, `{\"{\"}`, `(`, or `;` after struct name, found metavar")]
2564    MetaVar {
2565        #[primary_span]
2566        #[label("expected `where`, `{\"{\"}`, `(`, or `;` after struct name")]
2567        span: Span,
2568    },
2569    #[diag("expected `where`, `{\"{\"}`, `(`, or `;` after struct name, found `{$token}`")]
2570    Other {
2571        #[primary_span]
2572        #[label("expected `where`, `{\"{\"}`, `(`, or `;` after struct name")]
2573        span: Span,
2574        token: Token,
2575    },
2576}
2577
2578impl UnexpectedTokenAfterStructName {
2579    pub(crate) fn new(span: Span, token: Token) -> Self {
2580        match TokenDescription::from_token(&token) {
2581            Some(TokenDescription::ReservedIdentifier) => Self::ReservedIdentifier { span, token },
2582            Some(TokenDescription::Keyword) => Self::Keyword { span, token },
2583            Some(TokenDescription::ReservedKeyword) => Self::ReservedKeyword { span, token },
2584            Some(TokenDescription::DocComment) => Self::DocComment { span, token },
2585            Some(TokenDescription::MetaVar(_)) => Self::MetaVar { span },
2586            None => Self::Other { span, token },
2587        }
2588    }
2589}
2590
2591#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            UnexpectedSelfInGenericParameters 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 {
                    UnexpectedSelfInGenericParameters { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("unexpected keyword `Self` in generic parameters")));
                        diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("you cannot use `Self` as a generic parameter because it is reserved for associated items")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2592#[diag("unexpected keyword `Self` in generic parameters")]
2593#[note("you cannot use `Self` as a generic parameter because it is reserved for associated items")]
2594pub(crate) struct UnexpectedSelfInGenericParameters {
2595    #[primary_span]
2596    pub span: Span,
2597}
2598
2599#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            UnexpectedDefaultValueForLifetimeInGenericParameters 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 {
                    UnexpectedDefaultValueForLifetimeInGenericParameters {
                        span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("unexpected default lifetime parameter")));
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("lifetime parameters cannot have default values")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2600#[diag("unexpected default lifetime parameter")]
2601pub(crate) struct UnexpectedDefaultValueForLifetimeInGenericParameters {
2602    #[primary_span]
2603    #[label("lifetime parameters cannot have default values")]
2604    pub span: Span,
2605}
2606
2607#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            MultipleWhereClauses 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 {
                    MultipleWhereClauses {
                        span: __binding_0,
                        previous: __binding_1,
                        between: __binding_2 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("cannot define duplicate `where` clauses on an item")));
                        let __code_152 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(","))
                                            })].into_iter();
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("previous `where` clause starts here")));
                        diag.span_suggestions_with_style(__binding_2,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("consider joining the two `where` clauses into one")),
                            __code_152, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2608#[diag("cannot define duplicate `where` clauses on an item")]
2609pub(crate) struct MultipleWhereClauses {
2610    #[primary_span]
2611    pub span: Span,
2612    #[label("previous `where` clause starts here")]
2613    pub previous: Span,
2614    #[suggestion(
2615        "consider joining the two `where` clauses into one",
2616        style = "verbose",
2617        code = ",",
2618        applicability = "maybe-incorrect"
2619    )]
2620    pub between: Span,
2621}
2622
2623#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            UnexpectedNonterminal 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 {
                    UnexpectedNonterminal::Item(__binding_0) => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected an item keyword")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                    UnexpectedNonterminal::Statement(__binding_0) => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected a statement")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                    UnexpectedNonterminal::Ident {
                        span: __binding_0, token: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected ident, found `{$token}`")));
                        ;
                        diag.arg("token", __binding_1);
                        diag.span(__binding_0);
                        diag
                    }
                    UnexpectedNonterminal::Lifetime {
                        span: __binding_0, token: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected a lifetime, found `{$token}`")));
                        ;
                        diag.arg("token", __binding_1);
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2624pub(crate) enum UnexpectedNonterminal {
2625    #[diag("expected an item keyword")]
2626    Item(#[primary_span] Span),
2627    #[diag("expected a statement")]
2628    Statement(#[primary_span] Span),
2629    #[diag("expected ident, found `{$token}`")]
2630    Ident {
2631        #[primary_span]
2632        span: Span,
2633        token: Token,
2634    },
2635    #[diag("expected a lifetime, found `{$token}`")]
2636    Lifetime {
2637        #[primary_span]
2638        span: Span,
2639        token: Token,
2640    },
2641}
2642
2643#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            TopLevelOrPatternNotAllowed 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 {
                    TopLevelOrPatternNotAllowed::LetBinding {
                        span: __binding_0, sub: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`let` bindings require top-level or-patterns in parentheses")));
                        ;
                        diag.span(__binding_0);
                        if let Some(__binding_1) = __binding_1 {
                            diag.subdiagnostic(__binding_1);
                        }
                        diag
                    }
                    TopLevelOrPatternNotAllowed::FunctionParameter {
                        span: __binding_0, sub: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("function parameters require top-level or-patterns in parentheses")));
                        ;
                        diag.span(__binding_0);
                        if let Some(__binding_1) = __binding_1 {
                            diag.subdiagnostic(__binding_1);
                        }
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2644pub(crate) enum TopLevelOrPatternNotAllowed {
2645    #[diag("`let` bindings require top-level or-patterns in parentheses")]
2646    LetBinding {
2647        #[primary_span]
2648        span: Span,
2649        #[subdiagnostic]
2650        sub: Option<TopLevelOrPatternNotAllowedSugg>,
2651    },
2652    #[diag("function parameters require top-level or-patterns in parentheses")]
2653    FunctionParameter {
2654        #[primary_span]
2655        span: Span,
2656        #[subdiagnostic]
2657        sub: Option<TopLevelOrPatternNotAllowedSugg>,
2658    },
2659}
2660
2661#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            CannotBeRawIdent 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 {
                    CannotBeRawIdent { span: __binding_0, ident: __binding_1 }
                        => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`{$ident}` cannot be a raw identifier")));
                        ;
                        diag.arg("ident", __binding_1);
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2662#[diag("`{$ident}` cannot be a raw identifier")]
2663pub(crate) struct CannotBeRawIdent {
2664    #[primary_span]
2665    pub span: Span,
2666    pub ident: Symbol,
2667}
2668
2669#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            CannotBeRawLifetime 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 {
                    CannotBeRawLifetime { span: __binding_0, ident: __binding_1
                        } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`{$ident}` cannot be a raw lifetime")));
                        ;
                        diag.arg("ident", __binding_1);
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2670#[diag("`{$ident}` cannot be a raw lifetime")]
2671pub(crate) struct CannotBeRawLifetime {
2672    #[primary_span]
2673    pub span: Span,
2674    pub ident: Symbol,
2675}
2676
2677#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            KeywordLifetime 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 {
                    KeywordLifetime { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("lifetimes cannot use keyword names")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2678#[diag("lifetimes cannot use keyword names")]
2679pub(crate) struct KeywordLifetime {
2680    #[primary_span]
2681    pub span: Span,
2682}
2683
2684#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for KeywordLabel
            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 {
                    KeywordLabel { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("labels cannot use keyword names")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2685#[diag("labels cannot use keyword names")]
2686pub(crate) struct KeywordLabel {
2687    #[primary_span]
2688    pub span: Span,
2689}
2690
2691#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for CrDocComment
            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 {
                    CrDocComment { span: __binding_0, block: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("bare CR not allowed in {$block ->\n        [true] block doc-comment\n        *[false] doc-comment\n    }")));
                        ;
                        diag.arg("block", __binding_1);
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2692#[diag(
2693    "bare CR not allowed in {$block ->
2694        [true] block doc-comment
2695        *[false] doc-comment
2696    }"
2697)]
2698pub(crate) struct CrDocComment {
2699    #[primary_span]
2700    pub span: Span,
2701    pub block: bool,
2702}
2703
2704#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            NoDigitsLiteral 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 {
                    NoDigitsLiteral { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("no valid digits found for number")));
                        diag.code(E0768);
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2705#[diag("no valid digits found for number", code = E0768)]
2706pub(crate) struct NoDigitsLiteral {
2707    #[primary_span]
2708    pub span: Span,
2709}
2710
2711#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            InvalidDigitLiteral 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 {
                    InvalidDigitLiteral { span: __binding_0, base: __binding_1 }
                        => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("invalid digit for a base {$base} literal")));
                        ;
                        diag.arg("base", __binding_1);
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2712#[diag("invalid digit for a base {$base} literal")]
2713pub(crate) struct InvalidDigitLiteral {
2714    #[primary_span]
2715    pub span: Span,
2716    pub base: u32,
2717}
2718
2719#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            EmptyExponentFloat 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 {
                    EmptyExponentFloat { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected at least one digit in exponent")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2720#[diag("expected at least one digit in exponent")]
2721pub(crate) struct EmptyExponentFloat {
2722    #[primary_span]
2723    pub span: Span,
2724}
2725
2726#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            FloatLiteralUnsupportedBase 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 {
                    FloatLiteralUnsupportedBase {
                        span: __binding_0, base: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("{$base} float literal is not supported")));
                        ;
                        diag.arg("base", __binding_1);
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2727#[diag("{$base} float literal is not supported")]
2728pub(crate) struct FloatLiteralUnsupportedBase {
2729    #[primary_span]
2730    pub span: Span,
2731    pub base: &'static str,
2732}
2733
2734#[derive(const _: () =
    {
        impl<'_sess, 'a, G> rustc_errors::Diagnostic<'_sess, G> for
            UnknownPrefix<'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 {
                    UnknownPrefix {
                        span: __binding_0, prefix: __binding_1, sugg: __binding_2 }
                        => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("prefix `{$prefix}` is unknown")));
                        diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("prefixed identifiers and literals are reserved since Rust 2021")));
                        ;
                        diag.arg("prefix", __binding_1);
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("unknown prefix")));
                        if let Some(__binding_2) = __binding_2 {
                            diag.subdiagnostic(__binding_2);
                        }
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2735#[diag("prefix `{$prefix}` is unknown")]
2736#[note("prefixed identifiers and literals are reserved since Rust 2021")]
2737pub(crate) struct UnknownPrefix<'a> {
2738    #[primary_span]
2739    #[label("unknown prefix")]
2740    pub span: Span,
2741    pub prefix: &'a str,
2742    #[subdiagnostic]
2743    pub sugg: Option<UnknownPrefixSugg>,
2744}
2745
2746#[derive(const _: () =
    {
        impl<'a> rustc_errors::Subdiagnostic for MacroExpandsToAdtField<'a> {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    MacroExpandsToAdtField { adt_ty: __binding_0 } => {
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        sub_args.insert("adt_ty".into(),
                            rustc_errors::IntoDiagArg::into_diag_arg(__binding_0,
                                &mut diag.long_ty_path));
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("macros cannot expand to {$adt_ty} fields")),
                                &sub_args);
                        diag.note(__message);
                    }
                }
            }
        }
    };Subdiagnostic)]
2747#[note("macros cannot expand to {$adt_ty} fields")]
2748pub(crate) struct MacroExpandsToAdtField<'a> {
2749    pub adt_ty: &'a str,
2750}
2751
2752#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for UnknownPrefixSugg {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    UnknownPrefixSugg::UseBr(__binding_0) => {
                        let __code_153 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("br"))
                                            })].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("use `br` for a raw byte string")),
                                &sub_args);
                        diag.span_suggestions_with_style(__binding_0, __message,
                            __code_153, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                    }
                    UnknownPrefixSugg::UseCr(__binding_0) => {
                        let __code_154 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("cr"))
                                            })].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("use `cr` for a raw C-string")),
                                &sub_args);
                        diag.span_suggestions_with_style(__binding_0, __message,
                            __code_154, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                    }
                    UnknownPrefixSugg::Whitespace(__binding_0) => {
                        let __code_155 =
                            [::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("consider inserting whitespace here")),
                                &sub_args);
                        diag.span_suggestions_with_style(__binding_0, __message,
                            __code_155, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                    }
                    UnknownPrefixSugg::MeantStr {
                        start: __binding_0, end: __binding_1 } => {
                        let mut suggestions = Vec::new();
                        let __code_156 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!("\""))
                                });
                        let __code_157 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!("\""))
                                });
                        suggestions.push((__binding_0, __code_156));
                        suggestions.push((__binding_1, __code_157));
                        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 write a string literal, use double quotes")),
                                &sub_args);
                        diag.multipart_suggestion_with_style(__message, suggestions,
                            rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                    }
                }
            }
        }
    };Subdiagnostic)]
2753pub(crate) enum UnknownPrefixSugg {
2754    #[suggestion(
2755        "use `br` for a raw byte string",
2756        code = "br",
2757        applicability = "maybe-incorrect",
2758        style = "verbose"
2759    )]
2760    UseBr(#[primary_span] Span),
2761    #[suggestion(
2762        "use `cr` for a raw C-string",
2763        code = "cr",
2764        applicability = "maybe-incorrect",
2765        style = "verbose"
2766    )]
2767    UseCr(#[primary_span] Span),
2768    #[suggestion(
2769        "consider inserting whitespace here",
2770        code = " ",
2771        applicability = "maybe-incorrect",
2772        style = "verbose"
2773    )]
2774    Whitespace(#[primary_span] Span),
2775    #[multipart_suggestion(
2776        "if you meant to write a string literal, use double quotes",
2777        applicability = "maybe-incorrect",
2778        style = "verbose"
2779    )]
2780    MeantStr {
2781        #[suggestion_part(code = "\"")]
2782        start: Span,
2783        #[suggestion_part(code = "\"")]
2784        end: Span,
2785    },
2786}
2787
2788#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            ReservedMultihash 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 {
                    ReservedMultihash { span: __binding_0, sugg: __binding_1 }
                        => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("reserved multi-hash token is forbidden")));
                        diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("sequences of two or more # are reserved for future use since Rust 2024")));
                        ;
                        diag.span(__binding_0);
                        if let Some(__binding_1) = __binding_1 {
                            diag.subdiagnostic(__binding_1);
                        }
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2789#[diag("reserved multi-hash token is forbidden")]
2790#[note("sequences of two or more # are reserved for future use since Rust 2024")]
2791pub(crate) struct ReservedMultihash {
2792    #[primary_span]
2793    pub span: Span,
2794    #[subdiagnostic]
2795    pub sugg: Option<GuardedStringSugg>,
2796}
2797#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for ReservedString
            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 {
                    ReservedString { span: __binding_0, sugg: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("invalid string literal")));
                        diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("unprefixed guarded string literals are reserved for future use since Rust 2024")));
                        ;
                        diag.span(__binding_0);
                        if let Some(__binding_1) = __binding_1 {
                            diag.subdiagnostic(__binding_1);
                        }
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2798#[diag("invalid string literal")]
2799#[note("unprefixed guarded string literals are reserved for future use since Rust 2024")]
2800pub(crate) struct ReservedString {
2801    #[primary_span]
2802    pub span: Span,
2803    #[subdiagnostic]
2804    pub sugg: Option<GuardedStringSugg>,
2805}
2806#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for GuardedStringSugg {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    GuardedStringSugg(__binding_0) => {
                        let __code_158 =
                            [::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("consider inserting whitespace here")),
                                &sub_args);
                        diag.span_suggestions_with_style(__binding_0, __message,
                            __code_158, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                    }
                }
            }
        }
    };Subdiagnostic)]
2807#[suggestion(
2808    "consider inserting whitespace here",
2809    code = " ",
2810    applicability = "maybe-incorrect",
2811    style = "verbose"
2812)]
2813pub(crate) struct GuardedStringSugg(#[primary_span] pub Span);
2814
2815#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for TooManyHashes
            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 {
                    TooManyHashes { span: __binding_0, num: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("too many `#` symbols: raw strings may be delimited by up to 255 `#` symbols, but found {$num}")));
                        ;
                        diag.arg("num", __binding_1);
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2816#[diag(
2817    "too many `#` symbols: raw strings may be delimited by up to 255 `#` symbols, but found {$num}"
2818)]
2819pub(crate) struct TooManyHashes {
2820    #[primary_span]
2821    pub span: Span,
2822    pub num: u32,
2823}
2824
2825#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            UnknownTokenStart 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 {
                    UnknownTokenStart {
                        span: __binding_0,
                        escaped: __binding_1,
                        sugg: __binding_2,
                        null: __binding_3,
                        repeat: __binding_4,
                        invisible: __binding_5 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("unknown start of token: {$escaped}")));
                        ;
                        diag.arg("escaped", __binding_1);
                        diag.span(__binding_0);
                        if let Some(__binding_2) = __binding_2 {
                            diag.subdiagnostic(__binding_2);
                        }
                        if __binding_3 {
                            diag.help(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("source files must contain UTF-8 encoded text, unexpected null bytes might occur when a different encoding is used")));
                        }
                        if let Some(__binding_4) = __binding_4 {
                            diag.subdiagnostic(__binding_4);
                        }
                        if __binding_5 {
                            diag.help(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("invisible characters like '{$escaped}' are not usually visible in text editors")));
                        }
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2826#[diag("unknown start of token: {$escaped}")]
2827pub(crate) struct UnknownTokenStart {
2828    #[primary_span]
2829    pub span: Span,
2830    pub escaped: String,
2831    #[subdiagnostic]
2832    pub sugg: Option<TokenSubstitution>,
2833    #[help(
2834        "source files must contain UTF-8 encoded text, unexpected null bytes might occur when a different encoding is used"
2835    )]
2836    pub null: bool,
2837    #[subdiagnostic]
2838    pub repeat: Option<UnknownTokenRepeat>,
2839    #[help("invisible characters like '{$escaped}' are not usually visible in text editors")]
2840    pub invisible: bool,
2841}
2842
2843#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for TokenSubstitution {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    TokenSubstitution::DirectedQuotes {
                        span: __binding_0,
                        suggestion: __binding_1,
                        ascii_str: __binding_2,
                        ascii_name: __binding_3 } => {
                        let __code_159 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("{0}", __binding_1))
                                            })].into_iter();
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        sub_args.insert("suggestion".into(),
                            rustc_errors::IntoDiagArg::into_diag_arg(__binding_1,
                                &mut diag.long_ty_path));
                        sub_args.insert("ascii_str".into(),
                            rustc_errors::IntoDiagArg::into_diag_arg(__binding_2,
                                &mut diag.long_ty_path));
                        sub_args.insert("ascii_name".into(),
                            rustc_errors::IntoDiagArg::into_diag_arg(__binding_3,
                                &mut diag.long_ty_path));
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("Unicode characters '“' (Left Double Quotation Mark) and '”' (Right Double Quotation Mark) look like '{$ascii_str}' ({$ascii_name}), but are not")),
                                &sub_args);
                        diag.span_suggestions_with_style(__binding_0, __message,
                            __code_159, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                    }
                    TokenSubstitution::Other {
                        span: __binding_0,
                        suggestion: __binding_1,
                        ch: __binding_2,
                        u_name: __binding_3,
                        ascii_str: __binding_4,
                        ascii_name: __binding_5 } => {
                        let __code_160 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("{0}", __binding_1))
                                            })].into_iter();
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        sub_args.insert("suggestion".into(),
                            rustc_errors::IntoDiagArg::into_diag_arg(__binding_1,
                                &mut diag.long_ty_path));
                        sub_args.insert("ch".into(),
                            rustc_errors::IntoDiagArg::into_diag_arg(__binding_2,
                                &mut diag.long_ty_path));
                        sub_args.insert("u_name".into(),
                            rustc_errors::IntoDiagArg::into_diag_arg(__binding_3,
                                &mut diag.long_ty_path));
                        sub_args.insert("ascii_str".into(),
                            rustc_errors::IntoDiagArg::into_diag_arg(__binding_4,
                                &mut diag.long_ty_path));
                        sub_args.insert("ascii_name".into(),
                            rustc_errors::IntoDiagArg::into_diag_arg(__binding_5,
                                &mut diag.long_ty_path));
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("Unicode character '{$ch}' ({$u_name}) looks like '{$ascii_str}' ({$ascii_name}), but it is not")),
                                &sub_args);
                        diag.span_suggestions_with_style(__binding_0, __message,
                            __code_160, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                    }
                }
            }
        }
    };Subdiagnostic)]
2844pub(crate) enum TokenSubstitution {
2845    #[suggestion(
2846        "Unicode characters '“' (Left Double Quotation Mark) and '”' (Right Double Quotation Mark) look like '{$ascii_str}' ({$ascii_name}), but are not",
2847        code = "{suggestion}",
2848        applicability = "maybe-incorrect",
2849        style = "verbose"
2850    )]
2851    DirectedQuotes {
2852        #[primary_span]
2853        span: Span,
2854        suggestion: String,
2855        ascii_str: &'static str,
2856        ascii_name: &'static str,
2857    },
2858    #[suggestion(
2859        "Unicode character '{$ch}' ({$u_name}) looks like '{$ascii_str}' ({$ascii_name}), but it is not",
2860        code = "{suggestion}",
2861        applicability = "maybe-incorrect",
2862        style = "verbose"
2863    )]
2864    Other {
2865        #[primary_span]
2866        span: Span,
2867        suggestion: String,
2868        ch: String,
2869        u_name: &'static str,
2870        ascii_str: &'static str,
2871        ascii_name: &'static str,
2872    },
2873}
2874
2875#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for UnknownTokenRepeat {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    UnknownTokenRepeat { repeats: __binding_0 } => {
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        sub_args.insert("repeats".into(),
                            rustc_errors::IntoDiagArg::into_diag_arg(__binding_0,
                                &mut diag.long_ty_path));
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("character appears {$repeats ->\n        [one] once more\n        *[other] {$repeats} more times\n    }")),
                                &sub_args);
                        diag.note(__message);
                    }
                }
            }
        }
    };Subdiagnostic)]
2876#[note(
2877    "character appears {$repeats ->
2878        [one] once more
2879        *[other] {$repeats} more times
2880    }"
2881)]
2882pub(crate) struct UnknownTokenRepeat {
2883    pub repeats: usize,
2884}
2885
2886#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for UnescapeError
            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 {
                    UnescapeError::InvalidUnicodeEscape {
                        span: __binding_0, surrogate: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("invalid unicode character escape")));
                        diag.help(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("unicode escape must {$surrogate ->\n            [true] not be a surrogate\n            *[false] be at most 10FFFF\n        }")));
                        ;
                        diag.arg("surrogate", __binding_1);
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("invalid escape")));
                        diag
                    }
                    UnescapeError::EscapeOnlyChar {
                        span: __binding_0,
                        char_span: __binding_1,
                        escaped_sugg: __binding_2,
                        escaped_msg: __binding_3,
                        byte: __binding_4 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("{$byte ->\n            [true] byte\n            *[false] character\n        } constant must be escaped: `{$escaped_msg}`")));
                        let __code_161 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("{0}", __binding_2))
                                            })].into_iter();
                        ;
                        diag.arg("escaped_sugg", __binding_2);
                        diag.arg("escaped_msg", __binding_3);
                        diag.arg("byte", __binding_4);
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("escape the character")),
                            __code_161, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                    UnescapeError::BareCr {
                        span: __binding_0, double_quotes: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("{$double_quotes ->\n            [true] bare CR not allowed in string, use `\\r` instead\n            *[false] character constant must be escaped: `\\r`\n        }")));
                        let __code_162 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("\\r"))
                                            })].into_iter();
                        ;
                        diag.arg("double_quotes", __binding_1);
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("escape the character")),
                            __code_162, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                    UnescapeError::BareCrRawString(__binding_0) => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("bare CR not allowed in raw string")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                    UnescapeError::TooShortHexEscape(__binding_0) => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("numeric character escape is too short")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                    UnescapeError::InvalidCharInEscape {
                        span: __binding_0, is_hex: __binding_1, ch: __binding_2 } =>
                        {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("invalid character in {$is_hex ->\n            [true] numeric character\n            *[false] unicode\n        } escape: `{$ch}`")));
                        ;
                        diag.arg("is_hex", __binding_1);
                        diag.arg("ch", __binding_2);
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("invalid character in {$is_hex ->\n                [true] numeric character\n                *[false] unicode\n            } escape")));
                        diag
                    }
                    UnescapeError::LeadingUnderscoreUnicodeEscape {
                        span: __binding_0, ch: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("invalid start of unicode escape: `_`")));
                        ;
                        diag.arg("ch", __binding_1);
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("invalid start of unicode escape")));
                        diag
                    }
                    UnescapeError::OverlongUnicodeEscape(__binding_0) => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("overlong unicode escape")));
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("must have at most 6 hex digits")));
                        diag
                    }
                    UnescapeError::UnclosedUnicodeEscape(__binding_0,
                        __binding_1) => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("unterminated unicode escape")));
                        let __code_163 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("}}"))
                                            })].into_iter();
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("missing a closing `{\"}\"}`")));
                        diag.span_suggestions_with_style(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("terminate the unicode escape")),
                            __code_163, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                    UnescapeError::NoBraceInUnicodeEscape {
                        span: __binding_0, label: __binding_1, sub: __binding_2 } =>
                        {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("incorrect unicode escape sequence")));
                        ;
                        diag.span(__binding_0);
                        if let Some(__binding_1) = __binding_1 {
                            diag.span_label(__binding_1,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("incorrect unicode escape sequence")));
                        }
                        diag.subdiagnostic(__binding_2);
                        diag
                    }
                    UnescapeError::UnicodeEscapeInByte(__binding_0) => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("unicode escape in byte string")));
                        diag.help(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("unicode escape sequences cannot be used as a byte or in a byte string")));
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("unicode escape in byte string")));
                        diag
                    }
                    UnescapeError::EmptyUnicodeEscape(__binding_0) => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("empty unicode escape")));
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("this escape must have at least 1 hex digit")));
                        diag
                    }
                    UnescapeError::ZeroChars(__binding_0) => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("empty character literal")));
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("empty character literal")));
                        diag
                    }
                    UnescapeError::LoneSlash(__binding_0) => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("invalid trailing slash in literal")));
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("invalid trailing slash in literal")));
                        diag
                    }
                    UnescapeError::UnskippedWhitespace {
                        span: __binding_0, char_span: __binding_1, ch: __binding_2 }
                        => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("whitespace symbol '{$ch}' is not skipped")));
                        ;
                        diag.arg("ch", __binding_2);
                        diag.span(__binding_0);
                        diag.span_label(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("whitespace symbol '{$ch}' is not skipped")));
                        diag
                    }
                    UnescapeError::MultipleSkippedLinesWarning(__binding_0) => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("multiple lines skipped by escaped newline")));
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("skipping everything up to and including this point")));
                        diag
                    }
                    UnescapeError::MoreThanOneChar {
                        span: __binding_0,
                        note: __binding_1,
                        suggestion: __binding_2 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("character literal may only contain one codepoint")));
                        ;
                        diag.span(__binding_0);
                        if let Some(__binding_1) = __binding_1 {
                            diag.subdiagnostic(__binding_1);
                        }
                        diag.subdiagnostic(__binding_2);
                        diag
                    }
                    UnescapeError::NulInCStr { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("null characters in C string literals are not supported")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
2887pub(crate) enum UnescapeError {
2888    #[diag("invalid unicode character escape")]
2889    #[help(
2890        "unicode escape must {$surrogate ->
2891            [true] not be a surrogate
2892            *[false] be at most 10FFFF
2893        }"
2894    )]
2895    InvalidUnicodeEscape {
2896        #[primary_span]
2897        #[label("invalid escape")]
2898        span: Span,
2899        surrogate: bool,
2900    },
2901    #[diag(
2902        "{$byte ->
2903            [true] byte
2904            *[false] character
2905        } constant must be escaped: `{$escaped_msg}`"
2906    )]
2907    EscapeOnlyChar {
2908        #[primary_span]
2909        span: Span,
2910        #[suggestion(
2911            "escape the character",
2912            applicability = "machine-applicable",
2913            code = "{escaped_sugg}",
2914            style = "verbose"
2915        )]
2916        char_span: Span,
2917        escaped_sugg: String,
2918        escaped_msg: String,
2919        byte: bool,
2920    },
2921    #[diag(
2922        r#"{$double_quotes ->
2923            [true] bare CR not allowed in string, use `\r` instead
2924            *[false] character constant must be escaped: `\r`
2925        }"#
2926    )]
2927    BareCr {
2928        #[primary_span]
2929        #[suggestion(
2930            "escape the character",
2931            applicability = "machine-applicable",
2932            code = "\\r",
2933            style = "verbose"
2934        )]
2935        span: Span,
2936        double_quotes: bool,
2937    },
2938    #[diag("bare CR not allowed in raw string")]
2939    BareCrRawString(#[primary_span] Span),
2940    #[diag("numeric character escape is too short")]
2941    TooShortHexEscape(#[primary_span] Span),
2942    #[diag(
2943        "invalid character in {$is_hex ->
2944            [true] numeric character
2945            *[false] unicode
2946        } escape: `{$ch}`"
2947    )]
2948    InvalidCharInEscape {
2949        #[primary_span]
2950        #[label(
2951            "invalid character in {$is_hex ->
2952                [true] numeric character
2953                *[false] unicode
2954            } escape"
2955        )]
2956        span: Span,
2957        is_hex: bool,
2958        ch: String,
2959    },
2960    #[diag("invalid start of unicode escape: `_`")]
2961    LeadingUnderscoreUnicodeEscape {
2962        #[primary_span]
2963        #[label("invalid start of unicode escape")]
2964        span: Span,
2965        ch: String,
2966    },
2967    #[diag("overlong unicode escape")]
2968    OverlongUnicodeEscape(
2969        #[primary_span]
2970        #[label("must have at most 6 hex digits")]
2971        Span,
2972    ),
2973    #[diag("unterminated unicode escape")]
2974    UnclosedUnicodeEscape(
2975        #[primary_span]
2976        #[label(r#"missing a closing `{"}"}`"#)]
2977        Span,
2978        #[suggestion(
2979            "terminate the unicode escape",
2980            code = "}}",
2981            applicability = "maybe-incorrect",
2982            style = "verbose"
2983        )]
2984        Span,
2985    ),
2986    #[diag("incorrect unicode escape sequence")]
2987    NoBraceInUnicodeEscape {
2988        #[primary_span]
2989        span: Span,
2990        #[label("incorrect unicode escape sequence")]
2991        label: Option<Span>,
2992        #[subdiagnostic]
2993        sub: NoBraceUnicodeSub,
2994    },
2995    #[diag("unicode escape in byte string")]
2996    #[help("unicode escape sequences cannot be used as a byte or in a byte string")]
2997    UnicodeEscapeInByte(
2998        #[primary_span]
2999        #[label("unicode escape in byte string")]
3000        Span,
3001    ),
3002    #[diag("empty unicode escape")]
3003    EmptyUnicodeEscape(
3004        #[primary_span]
3005        #[label("this escape must have at least 1 hex digit")]
3006        Span,
3007    ),
3008    #[diag("empty character literal")]
3009    ZeroChars(
3010        #[primary_span]
3011        #[label("empty character literal")]
3012        Span,
3013    ),
3014    #[diag("invalid trailing slash in literal")]
3015    LoneSlash(
3016        #[primary_span]
3017        #[label("invalid trailing slash in literal")]
3018        Span,
3019    ),
3020    #[diag("whitespace symbol '{$ch}' is not skipped")]
3021    UnskippedWhitespace {
3022        #[primary_span]
3023        span: Span,
3024        #[label("whitespace symbol '{$ch}' is not skipped")]
3025        char_span: Span,
3026        ch: String,
3027    },
3028    #[diag("multiple lines skipped by escaped newline")]
3029    MultipleSkippedLinesWarning(
3030        #[primary_span]
3031        #[label("skipping everything up to and including this point")]
3032        Span,
3033    ),
3034    #[diag("character literal may only contain one codepoint")]
3035    MoreThanOneChar {
3036        #[primary_span]
3037        span: Span,
3038        #[subdiagnostic]
3039        note: Option<MoreThanOneCharNote>,
3040        #[subdiagnostic]
3041        suggestion: MoreThanOneCharSugg,
3042    },
3043    #[diag("null characters in C string literals are not supported")]
3044    NulInCStr {
3045        #[primary_span]
3046        span: Span,
3047    },
3048}
3049
3050#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for MoreThanOneCharSugg {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    MoreThanOneCharSugg::NormalizedForm {
                        span: __binding_0, ch: __binding_1, normalized: __binding_2
                        } => {
                        let __code_164 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("{0}", __binding_2))
                                            })].into_iter();
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        sub_args.insert("ch".into(),
                            rustc_errors::IntoDiagArg::into_diag_arg(__binding_1,
                                &mut diag.long_ty_path));
                        sub_args.insert("normalized".into(),
                            rustc_errors::IntoDiagArg::into_diag_arg(__binding_2,
                                &mut diag.long_ty_path));
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("consider using the normalized form `{$ch}` of this character")),
                                &sub_args);
                        diag.span_suggestions_with_style(__binding_0, __message,
                            __code_164, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                    }
                    MoreThanOneCharSugg::RemoveNonPrinting {
                        span: __binding_0, ch: __binding_1 } => {
                        let __code_165 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("{0}", __binding_1))
                                            })].into_iter();
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        sub_args.insert("ch".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("consider removing the non-printing characters")),
                                &sub_args);
                        diag.span_suggestions_with_style(__binding_0, __message,
                            __code_165, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                    }
                    MoreThanOneCharSugg::QuotesFull {
                        span: __binding_0, is_byte: __binding_1, sugg: __binding_2 }
                        => {
                        let __code_166 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("{0}", __binding_2))
                                            })].into_iter();
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        sub_args.insert("is_byte".into(),
                            rustc_errors::IntoDiagArg::into_diag_arg(__binding_1,
                                &mut diag.long_ty_path));
                        sub_args.insert("sugg".into(),
                            rustc_errors::IntoDiagArg::into_diag_arg(__binding_2,
                                &mut diag.long_ty_path));
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("if you meant to write a {$is_byte ->\n            [true] byte string\n            *[false] string\n        } literal, use double quotes")),
                                &sub_args);
                        diag.span_suggestions_with_style(__binding_0, __message,
                            __code_166, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                    }
                    MoreThanOneCharSugg::Quotes {
                        start: __binding_0,
                        end: __binding_1,
                        is_byte: __binding_2,
                        prefix: __binding_3 } => {
                        let mut suggestions = Vec::new();
                        let __code_167 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!("{0}\"", __binding_3))
                                });
                        let __code_168 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!("\""))
                                });
                        suggestions.push((__binding_0, __code_167));
                        suggestions.push((__binding_1, __code_168));
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        sub_args.insert("is_byte".into(),
                            rustc_errors::IntoDiagArg::into_diag_arg(__binding_2,
                                &mut diag.long_ty_path));
                        sub_args.insert("prefix".into(),
                            rustc_errors::IntoDiagArg::into_diag_arg(__binding_3,
                                &mut diag.long_ty_path));
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("if you meant to write a {$is_byte ->\n            [true] byte string\n            *[false] string\n        } literal, use double quotes")),
                                &sub_args);
                        diag.multipart_suggestion_with_style(__message, suggestions,
                            rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowCode);
                    }
                }
            }
        }
    };Subdiagnostic)]
3051pub(crate) enum MoreThanOneCharSugg {
3052    #[suggestion(
3053        "consider using the normalized form `{$ch}` of this character",
3054        code = "{normalized}",
3055        applicability = "machine-applicable",
3056        style = "verbose"
3057    )]
3058    NormalizedForm {
3059        #[primary_span]
3060        span: Span,
3061        ch: String,
3062        normalized: String,
3063    },
3064    #[suggestion(
3065        "consider removing the non-printing characters",
3066        code = "{ch}",
3067        applicability = "maybe-incorrect",
3068        style = "verbose"
3069    )]
3070    RemoveNonPrinting {
3071        #[primary_span]
3072        span: Span,
3073        ch: String,
3074    },
3075    #[suggestion(
3076        "if you meant to write a {$is_byte ->
3077            [true] byte string
3078            *[false] string
3079        } literal, use double quotes",
3080        code = "{sugg}",
3081        applicability = "machine-applicable",
3082        style = "verbose"
3083    )]
3084    QuotesFull {
3085        #[primary_span]
3086        span: Span,
3087        is_byte: bool,
3088        sugg: String,
3089    },
3090    #[multipart_suggestion(
3091        "if you meant to write a {$is_byte ->
3092            [true] byte string
3093            *[false] string
3094        } literal, use double quotes",
3095        applicability = "machine-applicable"
3096    )]
3097    Quotes {
3098        #[suggestion_part(code = "{prefix}\"")]
3099        start: Span,
3100        #[suggestion_part(code = "\"")]
3101        end: Span,
3102        is_byte: bool,
3103        prefix: &'static str,
3104    },
3105}
3106
3107#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for MoreThanOneCharNote {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    MoreThanOneCharNote::AllCombining {
                        span: __binding_0,
                        chr: __binding_1,
                        len: __binding_2,
                        escaped_marks: __binding_3 } => {
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        sub_args.insert("chr".into(),
                            rustc_errors::IntoDiagArg::into_diag_arg(__binding_1,
                                &mut diag.long_ty_path));
                        sub_args.insert("len".into(),
                            rustc_errors::IntoDiagArg::into_diag_arg(__binding_2,
                                &mut diag.long_ty_path));
                        sub_args.insert("escaped_marks".into(),
                            rustc_errors::IntoDiagArg::into_diag_arg(__binding_3,
                                &mut diag.long_ty_path));
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("this `{$chr}` is followed by the combining {$len ->\n            [one] mark\n            *[other] marks\n        } `{$escaped_marks}`")),
                                &sub_args);
                        diag.span_note(__binding_0, __message);
                    }
                    MoreThanOneCharNote::NonPrinting {
                        span: __binding_0, escaped: __binding_1 } => {
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        sub_args.insert("escaped".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("there are non-printing characters, the full sequence is `{$escaped}`")),
                                &sub_args);
                        diag.span_note(__binding_0, __message);
                    }
                }
            }
        }
    };Subdiagnostic)]
3108pub(crate) enum MoreThanOneCharNote {
3109    #[note(
3110        "this `{$chr}` is followed by the combining {$len ->
3111            [one] mark
3112            *[other] marks
3113        } `{$escaped_marks}`"
3114    )]
3115    AllCombining {
3116        #[primary_span]
3117        span: Span,
3118        chr: String,
3119        len: usize,
3120        escaped_marks: String,
3121    },
3122    #[note("there are non-printing characters, the full sequence is `{$escaped}`")]
3123    NonPrinting {
3124        #[primary_span]
3125        span: Span,
3126        escaped: String,
3127    },
3128}
3129
3130#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for NoBraceUnicodeSub {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    NoBraceUnicodeSub::Suggestion {
                        span: __binding_0, suggestion: __binding_1 } => {
                        let __code_169 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("{0}", __binding_1))
                                            })].into_iter();
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        sub_args.insert("suggestion".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("format of unicode escape sequences uses braces")),
                                &sub_args);
                        diag.span_suggestions_with_style(__binding_0, __message,
                            __code_169, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                    }
                    NoBraceUnicodeSub::Help => {
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("format of unicode escape sequences is `\\u{\"{...}\"}`")),
                                &sub_args);
                        diag.help(__message);
                    }
                }
            }
        }
    };Subdiagnostic)]
3131pub(crate) enum NoBraceUnicodeSub {
3132    #[suggestion(
3133        "format of unicode escape sequences uses braces",
3134        code = "{suggestion}",
3135        applicability = "maybe-incorrect",
3136        style = "verbose"
3137    )]
3138    Suggestion {
3139        #[primary_span]
3140        span: Span,
3141        suggestion: String,
3142    },
3143    #[help(r#"format of unicode escape sequences is `\u{"{...}"}`"#)]
3144    Help,
3145}
3146
3147#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for WrapInParens {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    WrapInParens { lo: __binding_0, hi: __binding_1 } => {
                        let mut suggestions = Vec::new();
                        let __code_170 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!("("))
                                });
                        let __code_171 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!(")"))
                                });
                        suggestions.push((__binding_0, __code_170));
                        suggestions.push((__binding_1, __code_171));
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("wrap the pattern in parentheses")),
                                &sub_args);
                        diag.multipart_suggestion_with_style(__message, suggestions,
                            rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowCode);
                    }
                }
            }
        }
    };Subdiagnostic)]
3148#[multipart_suggestion("wrap the pattern in parentheses", applicability = "machine-applicable")]
3149pub(crate) struct WrapInParens {
3150    #[suggestion_part(code = "(")]
3151    pub(crate) lo: Span,
3152    #[suggestion_part(code = ")")]
3153    pub(crate) hi: Span,
3154}
3155
3156#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for TopLevelOrPatternNotAllowedSugg {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    TopLevelOrPatternNotAllowedSugg::RemoveLeadingVert {
                        span: __binding_0 } => {
                        let __code_172 =
                            [::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 the `|`")),
                                &sub_args);
                        diag.span_suggestions_with_style(__binding_0, __message,
                            __code_172, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::CompletelyHidden);
                    }
                    TopLevelOrPatternNotAllowedSugg::WrapInParens {
                        span: __binding_0, suggestion: __binding_1 } => {
                        __binding_1.add_to_diag(diag);
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                    }
                }
            }
        }
    };Subdiagnostic)]
3157pub(crate) enum TopLevelOrPatternNotAllowedSugg {
3158    #[suggestion(
3159        "remove the `|`",
3160        code = "",
3161        applicability = "machine-applicable",
3162        style = "tool-only"
3163    )]
3164    RemoveLeadingVert {
3165        #[primary_span]
3166        span: Span,
3167    },
3168    WrapInParens {
3169        #[primary_span]
3170        span: Span,
3171        #[subdiagnostic]
3172        suggestion: WrapInParens,
3173    },
3174}
3175
3176#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            UnexpectedVertVertBeforeFunctionParam 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 {
                    UnexpectedVertVertBeforeFunctionParam { span: __binding_0 }
                        => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("unexpected `||` before function parameter")));
                        let __code_173 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(""))
                                            })].into_iter();
                        diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("alternatives in or-patterns are separated with `|`, not `||`")));
                        ;
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("remove the `||`")),
                            __code_173, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
3177#[diag("unexpected `||` before function parameter")]
3178#[note("alternatives in or-patterns are separated with `|`, not `||`")]
3179pub(crate) struct UnexpectedVertVertBeforeFunctionParam {
3180    #[primary_span]
3181    #[suggestion(
3182        "remove the `||`",
3183        code = "",
3184        applicability = "machine-applicable",
3185        style = "verbose"
3186    )]
3187    pub span: Span,
3188}
3189
3190#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            UnexpectedVertVertInPattern 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 {
                    UnexpectedVertVertInPattern {
                        span: __binding_0, start: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("unexpected token `||` in pattern")));
                        let __code_174 =
                            [::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("use a single `|` to separate multiple alternative patterns")),
                            __code_174, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        if let Some(__binding_1) = __binding_1 {
                            diag.span_label(__binding_1,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("while parsing this or-pattern starting here")));
                        }
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
3191#[diag("unexpected token `||` in pattern")]
3192pub(crate) struct UnexpectedVertVertInPattern {
3193    #[primary_span]
3194    #[suggestion(
3195        "use a single `|` to separate multiple alternative patterns",
3196        code = "|",
3197        applicability = "machine-applicable",
3198        style = "verbose"
3199    )]
3200    pub span: Span,
3201    #[label("while parsing this or-pattern starting here")]
3202    pub start: Option<Span>,
3203}
3204
3205#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for TrailingVertSuggestion {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    TrailingVertSuggestion {
                        span: __binding_0, token: __binding_1 } => {
                        let __code_175 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(""))
                                            })].into_iter();
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        sub_args.insert("token".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("a trailing `{$token}` is not allowed in an or-pattern")),
                                &sub_args);
                        diag.span_suggestions_with_style(__binding_0, __message,
                            __code_175, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::CompletelyHidden);
                    }
                }
            }
        }
    };Subdiagnostic)]
3206#[suggestion(
3207    "a trailing `{$token}` is not allowed in an or-pattern",
3208    code = "",
3209    applicability = "machine-applicable",
3210    style = "tool-only"
3211)]
3212pub(crate) struct TrailingVertSuggestion {
3213    #[primary_span]
3214    pub span: Span,
3215    pub token: Token,
3216}
3217
3218#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            TrailingVertNotAllowed 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 {
                    TrailingVertNotAllowed {
                        span: __binding_0,
                        suggestion: __binding_1,
                        start: __binding_2,
                        token: __binding_3,
                        note_double_vert: __binding_4 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("a trailing `{$token}` is not allowed in an or-pattern")));
                        ;
                        diag.arg("token", __binding_3);
                        diag.span(__binding_0);
                        diag.subdiagnostic(__binding_1);
                        if let Some(__binding_2) = __binding_2 {
                            diag.span_label(__binding_2,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("while parsing this or-pattern starting here")));
                        }
                        if __binding_4 {
                            diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("alternatives in or-patterns are separated with `|`, not `||`")));
                        }
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
3219#[diag("a trailing `{$token}` is not allowed in an or-pattern")]
3220pub(crate) struct TrailingVertNotAllowed {
3221    #[primary_span]
3222    pub span: Span,
3223    #[subdiagnostic]
3224    pub suggestion: TrailingVertSuggestion,
3225    #[label("while parsing this or-pattern starting here")]
3226    pub start: Option<Span>,
3227    pub token: Token,
3228    #[note("alternatives in or-patterns are separated with `|`, not `||`")]
3229    pub note_double_vert: bool,
3230}
3231
3232#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            DotDotDotRestPattern 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 {
                    DotDotDotRestPattern {
                        span: __binding_0,
                        suggestion: __binding_1,
                        var_args: __binding_2 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("unexpected `...`")));
                        let __code_176 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(""))
                                            })].into_iter();
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("not a valid pattern")));
                        if let Some(__binding_1) = __binding_1 {
                            diag.span_suggestions_with_style(__binding_1,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("for a rest pattern, use `..` instead of `...`")),
                                __code_176, rustc_errors::Applicability::MachineApplicable,
                                rustc_errors::SuggestionStyle::ShowAlways);
                        }
                        if let Some(__binding_2) = __binding_2 {
                            diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("only `extern \"C\"` and `extern \"C-unwind\"` functions may have a C variable argument list")));
                        }
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
3233#[diag("unexpected `...`")]
3234pub(crate) struct DotDotDotRestPattern {
3235    #[primary_span]
3236    #[label("not a valid pattern")]
3237    pub span: Span,
3238    #[suggestion(
3239        "for a rest pattern, use `..` instead of `...`",
3240        style = "verbose",
3241        code = "",
3242        applicability = "machine-applicable"
3243    )]
3244    pub suggestion: Option<Span>,
3245    #[note(
3246        "only `extern \"C\"` and `extern \"C-unwind\"` functions may have a C variable argument list"
3247    )]
3248    pub var_args: Option<()>,
3249}
3250
3251#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            PatternOnWrongSideOfAt 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 {
                    PatternOnWrongSideOfAt {
                        whole_span: __binding_0,
                        whole_pat: __binding_1,
                        pattern: __binding_2,
                        binding: __binding_3 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("pattern on wrong side of `@`")));
                        let __code_177 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("{0}", __binding_1))
                                            })].into_iter();
                        ;
                        diag.arg("whole_pat", __binding_1);
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("switch the order")),
                            __code_177, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag.span_label(__binding_2,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("pattern on the left, should be on the right")));
                        diag.span_label(__binding_3,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("binding on the right, should be on the left")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
3252#[diag("pattern on wrong side of `@`")]
3253pub(crate) struct PatternOnWrongSideOfAt {
3254    #[primary_span]
3255    #[suggestion(
3256        "switch the order",
3257        code = "{whole_pat}",
3258        applicability = "machine-applicable",
3259        style = "verbose"
3260    )]
3261    pub whole_span: Span,
3262    pub whole_pat: String,
3263    #[label("pattern on the left, should be on the right")]
3264    pub pattern: Span,
3265    #[label("binding on the right, should be on the left")]
3266    pub binding: Span,
3267}
3268
3269#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            ExpectedBindingLeftOfAt 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 {
                    ExpectedBindingLeftOfAt {
                        whole_span: __binding_0, lhs: __binding_1, rhs: __binding_2
                        } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("left-hand side of `@` must be a binding")));
                        diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("bindings are `x`, `mut x`, `ref x`, and `ref mut x`")));
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("interpreted as a pattern, not a binding")));
                        diag.span_label(__binding_2,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("also a pattern")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
3270#[diag("left-hand side of `@` must be a binding")]
3271#[note("bindings are `x`, `mut x`, `ref x`, and `ref mut x`")]
3272pub(crate) struct ExpectedBindingLeftOfAt {
3273    #[primary_span]
3274    pub whole_span: Span,
3275    #[label("interpreted as a pattern, not a binding")]
3276    pub lhs: Span,
3277    #[label("also a pattern")]
3278    pub rhs: Span,
3279}
3280
3281#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for ParenRangeSuggestion {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    ParenRangeSuggestion { lo: __binding_0, hi: __binding_1 } =>
                        {
                        let mut suggestions = Vec::new();
                        let __code_178 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!("("))
                                });
                        let __code_179 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!(")"))
                                });
                        suggestions.push((__binding_0, __code_178));
                        suggestions.push((__binding_1, __code_179));
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("add parentheses to clarify the precedence")),
                                &sub_args);
                        diag.multipart_suggestion_with_style(__message, suggestions,
                            rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowCode);
                    }
                }
            }
        }
    };Subdiagnostic)]
3282#[multipart_suggestion(
3283    "add parentheses to clarify the precedence",
3284    applicability = "machine-applicable"
3285)]
3286pub(crate) struct ParenRangeSuggestion {
3287    #[suggestion_part(code = "(")]
3288    pub lo: Span,
3289    #[suggestion_part(code = ")")]
3290    pub hi: Span,
3291}
3292
3293#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            AmbiguousRangePattern 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 {
                    AmbiguousRangePattern {
                        span: __binding_0, suggestion: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("the range pattern here has ambiguous interpretation")));
                        ;
                        diag.span(__binding_0);
                        diag.subdiagnostic(__binding_1);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
3294#[diag("the range pattern here has ambiguous interpretation")]
3295pub(crate) struct AmbiguousRangePattern {
3296    #[primary_span]
3297    pub span: Span,
3298    #[subdiagnostic]
3299    pub suggestion: ParenRangeSuggestion,
3300}
3301
3302#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            UnexpectedLifetimeInPattern 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 {
                    UnexpectedLifetimeInPattern {
                        span: __binding_0,
                        symbol: __binding_1,
                        suggestion: __binding_2 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("unexpected lifetime `{$symbol}` in pattern")));
                        let __code_180 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(""))
                                            })].into_iter();
                        ;
                        diag.arg("symbol", __binding_1);
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_2,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("remove the lifetime")),
                            __code_180, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
3303#[diag("unexpected lifetime `{$symbol}` in pattern")]
3304pub(crate) struct UnexpectedLifetimeInPattern {
3305    #[primary_span]
3306    pub span: Span,
3307    pub symbol: Symbol,
3308    #[suggestion(
3309        "remove the lifetime",
3310        code = "",
3311        applicability = "machine-applicable",
3312        style = "verbose"
3313    )]
3314    pub suggestion: Span,
3315}
3316
3317#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            InvalidMutInPattern 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 {
                    InvalidMutInPattern::NestedIdent {
                        span: __binding_0, pat: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`mut` must be attached to each individual binding")));
                        let __code_181 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("{0}", __binding_1))
                                            })].into_iter();
                        diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`mut` may be followed by `variable` and `variable @ pattern`")));
                        ;
                        diag.arg("pat", __binding_1);
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("add `mut` to each binding")),
                            __code_181, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                    InvalidMutInPattern::NonIdent { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`mut` must be followed by a named binding")));
                        let __code_182 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(""))
                                            })].into_iter();
                        diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`mut` may be followed by `variable` and `variable @ pattern`")));
                        ;
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("remove the `mut` prefix")),
                            __code_182, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
3318pub(crate) enum InvalidMutInPattern {
3319    #[diag("`mut` must be attached to each individual binding")]
3320    #[note("`mut` may be followed by `variable` and `variable @ pattern`")]
3321    NestedIdent {
3322        #[primary_span]
3323        #[suggestion(
3324            "add `mut` to each binding",
3325            code = "{pat}",
3326            applicability = "machine-applicable",
3327            style = "verbose"
3328        )]
3329        span: Span,
3330        pat: String,
3331    },
3332    #[diag("`mut` must be followed by a named binding")]
3333    #[note("`mut` may be followed by `variable` and `variable @ pattern`")]
3334    NonIdent {
3335        #[primary_span]
3336        #[suggestion(
3337            "remove the `mut` prefix",
3338            code = "",
3339            applicability = "machine-applicable",
3340            style = "verbose"
3341        )]
3342        span: Span,
3343    },
3344}
3345
3346#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            RepeatedMutInPattern 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 {
                    RepeatedMutInPattern {
                        span: __binding_0, suggestion: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`mut` on a binding may not be repeated")));
                        let __code_183 =
                            [::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 additional `mut`s")),
                            __code_183, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
3347#[diag("`mut` on a binding may not be repeated")]
3348pub(crate) struct RepeatedMutInPattern {
3349    #[primary_span]
3350    pub span: Span,
3351    #[suggestion(
3352        "remove the additional `mut`s",
3353        code = "",
3354        applicability = "machine-applicable",
3355        style = "verbose"
3356    )]
3357    pub suggestion: Span,
3358}
3359
3360#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            DotDotDotRangeToPatternNotAllowed 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 {
                    DotDotDotRangeToPatternNotAllowed { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("range-to patterns with `...` are not allowed")));
                        let __code_184 =
                            [::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("use `..=` instead")),
                            __code_184, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
3361#[diag("range-to patterns with `...` are not allowed")]
3362pub(crate) struct DotDotDotRangeToPatternNotAllowed {
3363    #[primary_span]
3364    #[suggestion(
3365        "use `..=` instead",
3366        style = "verbose",
3367        code = "..=",
3368        applicability = "machine-applicable"
3369    )]
3370    pub span: Span,
3371}
3372
3373#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            EnumPatternInsteadOfIdentifier 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 {
                    EnumPatternInsteadOfIdentifier { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected identifier, found enum pattern")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
3374#[diag("expected identifier, found enum pattern")]
3375pub(crate) struct EnumPatternInsteadOfIdentifier {
3376    #[primary_span]
3377    pub span: Span,
3378}
3379
3380#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            AtDotDotInStructPattern 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 {
                    AtDotDotInStructPattern {
                        span: __binding_0, remove: __binding_1, ident: __binding_2 }
                        => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`@ ..` is not supported in struct patterns")));
                        let __code_185 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(""))
                                            })].into_iter();
                        ;
                        diag.arg("ident", __binding_2);
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("bind to each field separately or, if you don't need them, just remove `{$ident} @`")),
                            __code_185, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
3381#[diag("`@ ..` is not supported in struct patterns")]
3382pub(crate) struct AtDotDotInStructPattern {
3383    #[primary_span]
3384    pub span: Span,
3385    #[suggestion(
3386        "bind to each field separately or, if you don't need them, just remove `{$ident} @`",
3387        code = "",
3388        style = "verbose",
3389        applicability = "machine-applicable"
3390    )]
3391    pub remove: Span,
3392    pub ident: Ident,
3393}
3394
3395#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            AtInStructPattern 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 {
                    AtInStructPattern { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("unexpected `@` in struct pattern")));
                        diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("struct patterns use `field: pattern` syntax to bind to fields")));
                        diag.help(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("consider replacing `new_name @ field_name` with `field_name: new_name` if that is what you intended")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
3396#[diag("unexpected `@` in struct pattern")]
3397#[note("struct patterns use `field: pattern` syntax to bind to fields")]
3398#[help(
3399    "consider replacing `new_name @ field_name` with `field_name: new_name` if that is what you intended"
3400)]
3401pub(crate) struct AtInStructPattern {
3402    #[primary_span]
3403    pub span: Span,
3404}
3405
3406#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            DotDotDotForRemainingFields 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 {
                    DotDotDotForRemainingFields {
                        span: __binding_0, token_str: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected field pattern, found `{$token_str}`")));
                        let __code_186 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(".."))
                                            })].into_iter();
                        ;
                        diag.arg("token_str", __binding_1);
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("to omit remaining fields, use `..`")),
                            __code_186, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
3407#[diag("expected field pattern, found `{$token_str}`")]
3408pub(crate) struct DotDotDotForRemainingFields {
3409    #[primary_span]
3410    #[suggestion(
3411        "to omit remaining fields, use `..`",
3412        code = "..",
3413        style = "verbose",
3414        applicability = "machine-applicable"
3415    )]
3416    pub span: Span,
3417    pub token_str: Cow<'static, str>,
3418}
3419
3420#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            ExpectedCommaAfterPatternField 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 {
                    ExpectedCommaAfterPatternField { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected `,`")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
3421#[diag("expected `,`")]
3422pub(crate) struct ExpectedCommaAfterPatternField {
3423    #[primary_span]
3424    pub span: Span,
3425}
3426
3427#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            UnexpectedExpressionInPattern 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 {
                    UnexpectedExpressionInPattern {
                        span: __binding_0,
                        is_bound: __binding_1,
                        expr_precedence: __binding_2 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected {$is_bound ->\n        [true] a pattern range bound\n        *[false] a pattern\n    }, found an expression")));
                        diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("arbitrary expressions are not allowed in patterns: <https://doc.rust-lang.org/book/ch19-00-patterns.html>")));
                        ;
                        diag.arg("is_bound", __binding_1);
                        diag.arg("expr_precedence", __binding_2);
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("not a pattern")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
3428#[diag(
3429    "expected {$is_bound ->
3430        [true] a pattern range bound
3431        *[false] a pattern
3432    }, found an expression"
3433)]
3434#[note(
3435    "arbitrary expressions are not allowed in patterns: <https://doc.rust-lang.org/book/ch19-00-patterns.html>"
3436)]
3437pub(crate) struct UnexpectedExpressionInPattern {
3438    /// The unexpected expr's span.
3439    #[primary_span]
3440    #[label("not a pattern")]
3441    pub span: Span,
3442    /// Was a `RangePatternBound` expected?
3443    pub is_bound: bool,
3444    /// The unexpected expr's precedence (used in match arm guard suggestions).
3445    pub expr_precedence: ExprPrecedence,
3446}
3447
3448#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for UnexpectedExpressionInPatternSugg
            {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    UnexpectedExpressionInPatternSugg::CreateGuard {
                        ident_span: __binding_0,
                        pat_hi: __binding_1,
                        ident: __binding_2,
                        expr: __binding_3 } => {
                        let mut suggestions = Vec::new();
                        let __code_187 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!("{0}", __binding_2))
                                });
                        let __code_188 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!(" if {1} == {0}",
                                            __binding_3, __binding_2))
                                });
                        suggestions.push((__binding_0, __code_187));
                        suggestions.push((__binding_1, __code_188));
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        sub_args.insert("ident".into(),
                            rustc_errors::IntoDiagArg::into_diag_arg(__binding_2,
                                &mut diag.long_ty_path));
                        sub_args.insert("expr".into(),
                            rustc_errors::IntoDiagArg::into_diag_arg(__binding_3,
                                &mut diag.long_ty_path));
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("consider moving the expression to a match arm guard")),
                                &sub_args);
                        diag.multipart_suggestion_with_style(__message, suggestions,
                            rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowCode);
                    }
                    UnexpectedExpressionInPatternSugg::UpdateGuard {
                        ident_span: __binding_0,
                        guard_lo: __binding_1,
                        guard_hi: __binding_2,
                        guard_hi_paren: __binding_3,
                        ident: __binding_4,
                        expr: __binding_5 } => {
                        let mut suggestions = Vec::new();
                        let __code_189 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!("{0}", __binding_4))
                                });
                        let __code_190 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!("("))
                                });
                        let __code_191 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!("{1} && {2} == {0}",
                                            __binding_5, __binding_3, __binding_4))
                                });
                        suggestions.push((__binding_0, __code_189));
                        if let Some(__binding_1) = __binding_1 {
                            suggestions.push((__binding_1, __code_190));
                        }
                        suggestions.push((__binding_2, __code_191));
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        sub_args.insert("guard_hi_paren".into(),
                            rustc_errors::IntoDiagArg::into_diag_arg(__binding_3,
                                &mut diag.long_ty_path));
                        sub_args.insert("ident".into(),
                            rustc_errors::IntoDiagArg::into_diag_arg(__binding_4,
                                &mut diag.long_ty_path));
                        sub_args.insert("expr".into(),
                            rustc_errors::IntoDiagArg::into_diag_arg(__binding_5,
                                &mut diag.long_ty_path));
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("consider moving the expression to the match arm guard")),
                                &sub_args);
                        diag.multipart_suggestion_with_style(__message, suggestions,
                            rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowCode);
                    }
                    UnexpectedExpressionInPatternSugg::Const {
                        stmt_lo: __binding_0,
                        ident_span: __binding_1,
                        ident: __binding_2,
                        expr: __binding_3,
                        indentation: __binding_4 } => {
                        let mut suggestions = Vec::new();
                        let __code_192 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!("{2}const {1}: /* Type */ = {0};\n",
                                            __binding_3, __binding_2, __binding_4))
                                });
                        let __code_193 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!("{0}", __binding_2))
                                });
                        suggestions.push((__binding_0, __code_192));
                        suggestions.push((__binding_1, __code_193));
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        sub_args.insert("ident".into(),
                            rustc_errors::IntoDiagArg::into_diag_arg(__binding_2,
                                &mut diag.long_ty_path));
                        sub_args.insert("expr".into(),
                            rustc_errors::IntoDiagArg::into_diag_arg(__binding_3,
                                &mut diag.long_ty_path));
                        sub_args.insert("indentation".into(),
                            rustc_errors::IntoDiagArg::into_diag_arg(__binding_4,
                                &mut diag.long_ty_path));
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("consider extracting the expression into a `const`")),
                                &sub_args);
                        diag.multipart_suggestion_with_style(__message, suggestions,
                            rustc_errors::Applicability::HasPlaceholders,
                            rustc_errors::SuggestionStyle::ShowCode);
                    }
                }
            }
        }
    };Subdiagnostic)]
3449pub(crate) enum UnexpectedExpressionInPatternSugg {
3450    #[multipart_suggestion(
3451        "consider moving the expression to a match arm guard",
3452        applicability = "maybe-incorrect"
3453    )]
3454    CreateGuard {
3455        /// Where to put the suggested identifier.
3456        #[suggestion_part(code = "{ident}")]
3457        ident_span: Span,
3458        /// Where to put the match arm.
3459        #[suggestion_part(code = " if {ident} == {expr}")]
3460        pat_hi: Span,
3461        /// The suggested identifier.
3462        ident: String,
3463        /// The unexpected expression.
3464        expr: String,
3465    },
3466
3467    #[multipart_suggestion(
3468        "consider moving the expression to the match arm guard",
3469        applicability = "maybe-incorrect"
3470    )]
3471    UpdateGuard {
3472        /// Where to put the suggested identifier.
3473        #[suggestion_part(code = "{ident}")]
3474        ident_span: Span,
3475        /// The beginning of the match arm guard's expression (insert a `(` if `Some`).
3476        #[suggestion_part(code = "(")]
3477        guard_lo: Option<Span>,
3478        /// The end of the match arm guard's expression.
3479        #[suggestion_part(code = "{guard_hi_paren} && {ident} == {expr}")]
3480        guard_hi: Span,
3481        /// Either `")"` or `""`.
3482        guard_hi_paren: &'static str,
3483        /// The suggested identifier.
3484        ident: String,
3485        /// The unexpected expression.
3486        expr: String,
3487    },
3488
3489    #[multipart_suggestion(
3490        "consider extracting the expression into a `const`",
3491        applicability = "has-placeholders"
3492    )]
3493    Const {
3494        /// Where to put the extracted constant declaration.
3495        #[suggestion_part(code = "{indentation}const {ident}: /* Type */ = {expr};\n")]
3496        stmt_lo: Span,
3497        /// Where to put the suggested identifier.
3498        #[suggestion_part(code = "{ident}")]
3499        ident_span: Span,
3500        /// The suggested identifier.
3501        ident: String,
3502        /// The unexpected expression.
3503        expr: String,
3504        /// The statement's block's indentation.
3505        indentation: String,
3506    },
3507}
3508
3509#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            UnexpectedParenInRangePat 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 {
                    UnexpectedParenInRangePat {
                        span: __binding_0, sugg: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("range pattern bounds cannot have parentheses")));
                        ;
                        diag.span(__binding_0.clone());
                        diag.subdiagnostic(__binding_1);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
3510#[diag("range pattern bounds cannot have parentheses")]
3511pub(crate) struct UnexpectedParenInRangePat {
3512    #[primary_span]
3513    pub span: Vec<Span>,
3514    #[subdiagnostic]
3515    pub sugg: UnexpectedParenInRangePatSugg,
3516}
3517
3518#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for UnexpectedParenInRangePatSugg {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    UnexpectedParenInRangePatSugg {
                        start_span: __binding_0, end_span: __binding_1 } => {
                        let mut suggestions = Vec::new();
                        let __code_194 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!(""))
                                });
                        let __code_195 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!(""))
                                });
                        suggestions.push((__binding_0, __code_194));
                        suggestions.push((__binding_1, __code_195));
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("remove these parentheses")),
                                &sub_args);
                        diag.multipart_suggestion_with_style(__message, suggestions,
                            rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowCode);
                    }
                }
            }
        }
    };Subdiagnostic)]
3519#[multipart_suggestion("remove these parentheses", applicability = "machine-applicable")]
3520pub(crate) struct UnexpectedParenInRangePatSugg {
3521    #[suggestion_part(code = "")]
3522    pub start_span: Span,
3523    #[suggestion_part(code = "")]
3524    pub end_span: Span,
3525}
3526
3527#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            ReturnTypesUseThinArrow 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 {
                    ReturnTypesUseThinArrow {
                        span: __binding_0, suggestion: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("return types are denoted using `->`")));
                        let __code_196 =
                            [::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("use `->` instead")),
                            __code_196, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
3528#[diag("return types are denoted using `->`")]
3529pub(crate) struct ReturnTypesUseThinArrow {
3530    #[primary_span]
3531    pub span: Span,
3532    #[suggestion(
3533        "use `->` instead",
3534        style = "verbose",
3535        code = " -> ",
3536        applicability = "machine-applicable"
3537    )]
3538    pub suggestion: Span,
3539}
3540
3541#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            NeedPlusAfterTraitObjectLifetime 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 {
                    NeedPlusAfterTraitObjectLifetime {
                        span: __binding_0, suggestion: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("lifetimes must be followed by `+` to form a trait object type")));
                        let __code_197 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(" + /* Trait */"))
                                            })].into_iter();
                        ;
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("consider adding a trait bound after the potential lifetime bound")),
                            __code_197, rustc_errors::Applicability::HasPlaceholders,
                            rustc_errors::SuggestionStyle::ShowCode);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
3542#[diag("lifetimes must be followed by `+` to form a trait object type")]
3543pub(crate) struct NeedPlusAfterTraitObjectLifetime {
3544    #[primary_span]
3545    pub span: Span,
3546    #[suggestion(
3547        "consider adding a trait bound after the potential lifetime bound",
3548        code = " + /* Trait */",
3549        applicability = "has-placeholders"
3550    )]
3551    pub suggestion: Span,
3552}
3553
3554#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            ExpectedMutOrConstInRawPointerType 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 {
                    ExpectedMutOrConstInRawPointerType {
                        span: __binding_0, after_asterisk: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected `mut` or `const` keyword in raw pointer type")));
                        let __code_198 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("mut "))
                                            }),
                                        ::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("const "))
                                            })].into_iter();
                        ;
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("add `mut` or `const` here")),
                            __code_198, rustc_errors::Applicability::HasPlaceholders,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
3555#[diag("expected `mut` or `const` keyword in raw pointer type")]
3556pub(crate) struct ExpectedMutOrConstInRawPointerType {
3557    #[primary_span]
3558    pub span: Span,
3559    #[suggestion(
3560        "add `mut` or `const` here",
3561        code("mut ", "const "),
3562        applicability = "has-placeholders",
3563        style = "verbose"
3564    )]
3565    pub after_asterisk: Span,
3566}
3567
3568#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            LifetimeAfterMut 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 {
                    LifetimeAfterMut {
                        span: __binding_0,
                        suggest_lifetime: __binding_1,
                        snippet: __binding_2 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("lifetime must precede `mut`")));
                        let __code_199 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("&{0} mut", __binding_2))
                                            })].into_iter();
                        ;
                        diag.arg("snippet", __binding_2);
                        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("place the lifetime before `mut`")),
                                __code_199, rustc_errors::Applicability::MaybeIncorrect,
                                rustc_errors::SuggestionStyle::ShowAlways);
                        }
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
3569#[diag("lifetime must precede `mut`")]
3570pub(crate) struct LifetimeAfterMut {
3571    #[primary_span]
3572    pub span: Span,
3573    #[suggestion(
3574        "place the lifetime before `mut`",
3575        code = "&{snippet} mut",
3576        applicability = "maybe-incorrect",
3577        style = "verbose"
3578    )]
3579    pub suggest_lifetime: Option<Span>,
3580    pub snippet: String,
3581}
3582
3583#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for DynAfterMut
            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 {
                    DynAfterMut { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`mut` must precede `dyn`")));
                        let __code_200 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("&mut dyn"))
                                            })].into_iter();
                        ;
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("place `mut` before `dyn`")),
                            __code_200, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
3584#[diag("`mut` must precede `dyn`")]
3585pub(crate) struct DynAfterMut {
3586    #[primary_span]
3587    #[suggestion(
3588        "place `mut` before `dyn`",
3589        code = "&mut dyn",
3590        applicability = "machine-applicable",
3591        style = "verbose"
3592    )]
3593    pub span: Span,
3594}
3595
3596#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            FnPointerCannotBeConst 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 {
                    FnPointerCannotBeConst {
                        span: __binding_0, suggestion: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("an `fn` pointer type cannot be `const`")));
                        let __code_201 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(""))
                                            })].into_iter();
                        diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("allowed qualifiers are: `unsafe` and `extern`")));
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`const` because of this")));
                        diag.span_suggestions_with_style(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("remove the `const` qualifier")),
                            __code_201, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
3597#[diag("an `fn` pointer type cannot be `const`")]
3598#[note("allowed qualifiers are: `unsafe` and `extern`")]
3599pub(crate) struct FnPointerCannotBeConst {
3600    #[primary_span]
3601    #[label("`const` because of this")]
3602    pub span: Span,
3603    #[suggestion(
3604        "remove the `const` qualifier",
3605        code = "",
3606        applicability = "maybe-incorrect",
3607        style = "verbose"
3608    )]
3609    pub suggestion: Span,
3610}
3611
3612#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            FnPointerCannotBeAsync 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 {
                    FnPointerCannotBeAsync {
                        span: __binding_0, suggestion: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("an `fn` pointer type cannot be `async`")));
                        let __code_202 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(""))
                                            })].into_iter();
                        diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("allowed qualifiers are: `unsafe` and `extern`")));
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`async` because of this")));
                        diag.span_suggestions_with_style(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("remove the `async` qualifier")),
                            __code_202, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
3613#[diag("an `fn` pointer type cannot be `async`")]
3614#[note("allowed qualifiers are: `unsafe` and `extern`")]
3615pub(crate) struct FnPointerCannotBeAsync {
3616    #[primary_span]
3617    #[label("`async` because of this")]
3618    pub span: Span,
3619    #[suggestion(
3620        "remove the `async` qualifier",
3621        code = "",
3622        applicability = "maybe-incorrect",
3623        style = "verbose"
3624    )]
3625    pub suggestion: Span,
3626}
3627
3628#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            NestedCVariadicType 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 {
                    NestedCVariadicType { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("C-variadic type `...` may not be nested inside another type")));
                        diag.code(E0743);
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
3629#[diag("C-variadic type `...` may not be nested inside another type", code = E0743)]
3630pub(crate) struct NestedCVariadicType {
3631    #[primary_span]
3632    pub span: Span,
3633}
3634
3635#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            InvalidCVariadicType 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 {
                    InvalidCVariadicType { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("unexpected `...`")));
                        diag.note(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)]
3636#[diag("unexpected `...`")]
3637#[note(
3638    "only `extern \"C\"` and `extern \"C-unwind\"` functions may have a C variable argument list"
3639)]
3640pub(crate) struct InvalidCVariadicType {
3641    #[primary_span]
3642    pub span: Span,
3643}
3644
3645#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            InvalidDynKeyword 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 {
                    InvalidDynKeyword {
                        span: __binding_0, suggestion: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("invalid `dyn` keyword")));
                        let __code_203 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(""))
                                            })].into_iter();
                        diag.help(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`dyn` is only needed at the start of a trait `+`-separated list")));
                        ;
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("remove this keyword")),
                            __code_203, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
3646#[diag("invalid `dyn` keyword")]
3647#[help("`dyn` is only needed at the start of a trait `+`-separated list")]
3648pub(crate) struct InvalidDynKeyword {
3649    #[primary_span]
3650    pub span: Span,
3651    #[suggestion(
3652        "remove this keyword",
3653        code = "",
3654        applicability = "machine-applicable",
3655        style = "verbose"
3656    )]
3657    pub suggestion: Span,
3658}
3659
3660#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for HelpUseLatestEdition {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    HelpUseLatestEdition::Cargo { edition: __binding_0 } => {
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        sub_args.insert("edition".into(),
                            rustc_errors::IntoDiagArg::into_diag_arg(__binding_0,
                                &mut diag.long_ty_path));
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("set `edition = \"{$edition}\"` in `Cargo.toml`")),
                                &sub_args);
                        diag.help(__message);
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("for more on editions, read https://doc.rust-lang.org/edition-guide")),
                                &sub_args);
                        diag.note(__message);
                    }
                    HelpUseLatestEdition::Standalone { edition: __binding_0 } =>
                        {
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        sub_args.insert("edition".into(),
                            rustc_errors::IntoDiagArg::into_diag_arg(__binding_0,
                                &mut diag.long_ty_path));
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("pass `--edition {$edition}` to `rustc`")),
                                &sub_args);
                        diag.help(__message);
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("for more on editions, read https://doc.rust-lang.org/edition-guide")),
                                &sub_args);
                        diag.note(__message);
                    }
                }
            }
        }
    };Subdiagnostic)]
3661pub(crate) enum HelpUseLatestEdition {
3662    #[help("set `edition = \"{$edition}\"` in `Cargo.toml`")]
3663    #[note("for more on editions, read https://doc.rust-lang.org/edition-guide")]
3664    Cargo { edition: Edition },
3665    #[help("pass `--edition {$edition}` to `rustc`")]
3666    #[note("for more on editions, read https://doc.rust-lang.org/edition-guide")]
3667    Standalone { edition: Edition },
3668}
3669
3670impl HelpUseLatestEdition {
3671    pub(crate) fn new() -> Self {
3672        let edition = LATEST_STABLE_EDITION;
3673        if rustc_session::utils::was_invoked_from_cargo() {
3674            Self::Cargo { edition }
3675        } else {
3676            Self::Standalone { edition }
3677        }
3678    }
3679}
3680
3681#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            BoxSyntaxRemoved 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 {
                    BoxSyntaxRemoved { span: __binding_0, sugg: __binding_1 } =>
                        {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`box_syntax` has been removed")));
                        ;
                        diag.span(__binding_0);
                        diag.subdiagnostic(__binding_1);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
3682#[diag("`box_syntax` has been removed")]
3683pub(crate) struct BoxSyntaxRemoved {
3684    #[primary_span]
3685    pub span: Span,
3686    #[subdiagnostic]
3687    pub sugg: AddBoxNew,
3688}
3689
3690#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for AddBoxNew {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    AddBoxNew { box_kw_and_lo: __binding_0, hi: __binding_1 } =>
                        {
                        let mut suggestions = Vec::new();
                        let __code_204 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!("Box::new("))
                                });
                        let __code_205 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!(")"))
                                });
                        suggestions.push((__binding_0, __code_204));
                        suggestions.push((__binding_1, __code_205));
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("use `Box::new()` instead")),
                                &sub_args);
                        diag.multipart_suggestion_with_style(__message, suggestions,
                            rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                    }
                }
            }
        }
    };Subdiagnostic)]
3691#[multipart_suggestion(
3692    "use `Box::new()` instead",
3693    applicability = "machine-applicable",
3694    style = "verbose"
3695)]
3696pub(crate) struct AddBoxNew {
3697    #[suggestion_part(code = "Box::new(")]
3698    pub box_kw_and_lo: Span,
3699    #[suggestion_part(code = ")")]
3700    pub hi: Span,
3701}
3702
3703#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            BadReturnTypeNotationOutput 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 {
                    BadReturnTypeNotationOutput {
                        span: __binding_0, suggestion: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("return type not allowed with return type notation")));
                        let __code_206 =
                            [::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 return type")),
                            __code_206, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
3704#[diag("return type not allowed with return type notation")]
3705pub(crate) struct BadReturnTypeNotationOutput {
3706    #[primary_span]
3707    pub span: Span,
3708    #[suggestion(
3709        "remove the return type",
3710        code = "",
3711        applicability = "maybe-incorrect",
3712        style = "verbose"
3713    )]
3714    pub suggestion: Span,
3715}
3716
3717#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            BadAssocTypeBounds 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 {
                    BadAssocTypeBounds { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("bounds on associated types do not belong here")));
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("belongs in `where` clause")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
3718#[diag("bounds on associated types do not belong here")]
3719pub(crate) struct BadAssocTypeBounds {
3720    #[primary_span]
3721    #[label("belongs in `where` clause")]
3722    pub span: Span,
3723}
3724
3725#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            AttrAfterGeneric 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 {
                    AttrAfterGeneric { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("trailing attribute after generic parameter")));
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("attributes must go before parameters")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
3726#[diag("trailing attribute after generic parameter")]
3727pub(crate) struct AttrAfterGeneric {
3728    #[primary_span]
3729    #[label("attributes must go before parameters")]
3730    pub span: Span,
3731}
3732
3733#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            AttrWithoutGenerics 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 {
                    AttrWithoutGenerics { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("attribute without generic parameters")));
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("attributes are only permitted when preceding parameters")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
3734#[diag("attribute without generic parameters")]
3735pub(crate) struct AttrWithoutGenerics {
3736    #[primary_span]
3737    #[label("attributes are only permitted when preceding parameters")]
3738    pub span: Span,
3739}
3740
3741#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            WhereOnGenerics 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 {
                    WhereOnGenerics { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("generic parameters on `where` clauses are reserved for future use")));
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("currently unsupported")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
3742#[diag("generic parameters on `where` clauses are reserved for future use")]
3743pub(crate) struct WhereOnGenerics {
3744    #[primary_span]
3745    #[label("currently unsupported")]
3746    pub span: Span,
3747}
3748
3749#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for GenericsInPath
            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 {
                    GenericsInPath { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("unexpected generic arguments in path")));
                        ;
                        diag.span(__binding_0.clone());
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
3750#[diag("unexpected generic arguments in path")]
3751pub(crate) struct GenericsInPath {
3752    #[primary_span]
3753    pub span: Vec<Span>,
3754}
3755
3756#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            LifetimeInEqConstraint 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 {
                    LifetimeInEqConstraint {
                        span: __binding_0,
                        lifetime: __binding_1,
                        binding_label: __binding_2,
                        colon_sugg: __binding_3 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("lifetimes are not permitted in this context")));
                        let __code_207 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(": "))
                                            })].into_iter();
                        diag.help(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("if you meant to specify a trait object, write `dyn /* Trait */ + {$lifetime}`")));
                        ;
                        diag.arg("lifetime", __binding_1);
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("lifetime is not allowed here")));
                        diag.span_label(__binding_2,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("this introduces an associated item binding")));
                        diag.span_suggestions_with_style(__binding_3,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("you might have meant to write a bound here")),
                            __code_207, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
3757#[diag("lifetimes are not permitted in this context")]
3758#[help("if you meant to specify a trait object, write `dyn /* Trait */ + {$lifetime}`")]
3759pub(crate) struct LifetimeInEqConstraint {
3760    #[primary_span]
3761    #[label("lifetime is not allowed here")]
3762    pub span: Span,
3763    pub lifetime: Ident,
3764    #[label("this introduces an associated item binding")]
3765    pub binding_label: Span,
3766    #[suggestion(
3767        "you might have meant to write a bound here",
3768        style = "verbose",
3769        applicability = "maybe-incorrect",
3770        code = ": "
3771    )]
3772    pub colon_sugg: Span,
3773}
3774
3775#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            ModifierLifetime 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 {
                    ModifierLifetime { span: __binding_0, modifier: __binding_1
                        } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`{$modifier}` may only modify trait bounds, not lifetime bounds")));
                        let __code_208 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(""))
                                            })].into_iter();
                        ;
                        diag.arg("modifier", __binding_1);
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("remove the `{$modifier}`")),
                            __code_208, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::CompletelyHidden);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
3776#[diag("`{$modifier}` may only modify trait bounds, not lifetime bounds")]
3777pub(crate) struct ModifierLifetime {
3778    #[primary_span]
3779    #[suggestion(
3780        "remove the `{$modifier}`",
3781        style = "tool-only",
3782        applicability = "maybe-incorrect",
3783        code = ""
3784    )]
3785    pub span: Span,
3786    pub modifier: &'static str,
3787}
3788
3789#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            UnderscoreLiteralSuffix 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 {
                    UnderscoreLiteralSuffix { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("underscore literal suffix is not allowed")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
3790#[diag("underscore literal suffix is not allowed")]
3791pub(crate) struct UnderscoreLiteralSuffix {
3792    #[primary_span]
3793    pub span: Span,
3794}
3795
3796#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            ExpectedLabelFoundIdent 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 {
                    ExpectedLabelFoundIdent {
                        span: __binding_0, start: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected a label, found an identifier")));
                        let __code_209 =
                            [::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("labels start with a tick")),
                            __code_209, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
3797#[diag("expected a label, found an identifier")]
3798pub(crate) struct ExpectedLabelFoundIdent {
3799    #[primary_span]
3800    pub span: Span,
3801    #[suggestion(
3802        "labels start with a tick",
3803        code = "'",
3804        applicability = "machine-applicable",
3805        style = "verbose"
3806    )]
3807    pub start: Span,
3808}
3809
3810#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            InappropriateDefault 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 {
                    InappropriateDefault {
                        span: __binding_0, article: __binding_1, descr: __binding_2
                        } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("{$article} {$descr} cannot be `default`")));
                        diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("only associated `fn`, `const`, and `type` items can be `default`")));
                        ;
                        diag.arg("article", __binding_1);
                        diag.arg("descr", __binding_2);
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`default` because of this")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
3811#[diag("{$article} {$descr} cannot be `default`")]
3812#[note("only associated `fn`, `const`, and `type` items can be `default`")]
3813pub(crate) struct InappropriateDefault {
3814    #[primary_span]
3815    #[label("`default` because of this")]
3816    pub span: Span,
3817    pub article: &'static str,
3818    pub descr: &'static str,
3819}
3820
3821#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            RecoverImportAsUse 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 {
                    RecoverImportAsUse {
                        span: __binding_0, token_name: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected item, found {$token_name}")));
                        let __code_210 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("use"))
                                            })].into_iter();
                        ;
                        diag.arg("token_name", __binding_1);
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("items are imported using the `use` keyword")),
                            __code_210, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
3822#[diag("expected item, found {$token_name}")]
3823pub(crate) struct RecoverImportAsUse {
3824    #[primary_span]
3825    #[suggestion(
3826        "items are imported using the `use` keyword",
3827        code = "use",
3828        applicability = "machine-applicable",
3829        style = "verbose"
3830    )]
3831    pub span: Span,
3832    pub token_name: String,
3833}
3834
3835#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            InappropriateFinal 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 {
                    InappropriateFinal {
                        span: __binding_0, article: __binding_1, descr: __binding_2
                        } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("{$article} {$descr} cannot be `final`")));
                        diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("only associated functions in traits can be `final`")));
                        ;
                        diag.arg("article", __binding_1);
                        diag.arg("descr", __binding_2);
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`final` because of this")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
3836#[diag("{$article} {$descr} cannot be `final`")]
3837#[note("only associated functions in traits can be `final`")]
3838pub(crate) struct InappropriateFinal {
3839    #[primary_span]
3840    #[label("`final` because of this")]
3841    pub span: Span,
3842    pub article: &'static str,
3843    pub descr: &'static str,
3844}
3845
3846#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            SingleColonImportPath 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 {
                    SingleColonImportPath { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected `::`, found `:`")));
                        let __code_211 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("::"))
                                            })].into_iter();
                        diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("import paths are delimited using `::`")));
                        ;
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("use double colon")),
                            __code_211, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
3847#[diag("expected `::`, found `:`")]
3848#[note("import paths are delimited using `::`")]
3849pub(crate) struct SingleColonImportPath {
3850    #[primary_span]
3851    #[suggestion(
3852        "use double colon",
3853        code = "::",
3854        applicability = "machine-applicable",
3855        style = "verbose"
3856    )]
3857    pub span: Span,
3858}
3859
3860#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for BadItemKind
            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 {
                    BadItemKind {
                        span: __binding_0,
                        descr: __binding_1,
                        ctx: __binding_2,
                        help: __binding_3 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("{$descr} is not supported in {$ctx}")));
                        ;
                        diag.arg("descr", __binding_1);
                        diag.arg("ctx", __binding_2);
                        diag.span(__binding_0);
                        if __binding_3 {
                            diag.help(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("consider moving the {$descr} out to a nearby module scope")));
                        }
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
3861#[diag("{$descr} is not supported in {$ctx}")]
3862pub(crate) struct BadItemKind {
3863    #[primary_span]
3864    pub span: Span,
3865    pub descr: &'static str,
3866    pub ctx: &'static str,
3867    #[help("consider moving the {$descr} out to a nearby module scope")]
3868    pub help: bool,
3869}
3870
3871#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            MacroRulesMissingBang 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 {
                    MacroRulesMissingBang { span: __binding_0, hi: __binding_1 }
                        => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected `!` after `macro_rules`")));
                        let __code_212 =
                            [::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("add a `!`")),
                            __code_212, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
3872#[diag("expected `!` after `macro_rules`")]
3873pub(crate) struct MacroRulesMissingBang {
3874    #[primary_span]
3875    pub span: Span,
3876    #[suggestion("add a `!`", code = "!", applicability = "machine-applicable", style = "verbose")]
3877    pub hi: Span,
3878}
3879
3880#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            MacroNameRemoveBang 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 {
                    MacroNameRemoveBang { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("macro names aren't followed by a `!`")));
                        let __code_213 =
                            [::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 `!`")),
                            __code_213, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::HideCodeInline);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
3881#[diag("macro names aren't followed by a `!`")]
3882pub(crate) struct MacroNameRemoveBang {
3883    #[primary_span]
3884    #[suggestion(
3885        "remove the `!`",
3886        code = "",
3887        applicability = "machine-applicable",
3888        style = "short"
3889    )]
3890    pub span: Span,
3891}
3892
3893#[derive(const _: () =
    {
        impl<'_sess, 'a, G> rustc_errors::Diagnostic<'_sess, G> for
            MacroRulesVisibility<'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 {
                    MacroRulesVisibility { span: __binding_0, vis: __binding_1 }
                        => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("can't qualify macro_rules invocation with `{$vis}`")));
                        let __code_214 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("#[macro_export]"))
                                            })].into_iter();
                        ;
                        diag.arg("vis", __binding_1);
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("try exporting the macro")),
                            __code_214, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
3894#[diag("can't qualify macro_rules invocation with `{$vis}`")]
3895pub(crate) struct MacroRulesVisibility<'a> {
3896    #[primary_span]
3897    #[suggestion(
3898        "try exporting the macro",
3899        code = "#[macro_export]",
3900        applicability = "maybe-incorrect",
3901        style = "verbose"
3902    )]
3903    pub span: Span,
3904    pub vis: &'a str,
3905}
3906
3907#[derive(const _: () =
    {
        impl<'_sess, 'a, G> rustc_errors::Diagnostic<'_sess, G> for
            MacroInvocationVisibility<'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 {
                    MacroInvocationVisibility {
                        span: __binding_0, vis: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("can't qualify macro invocation with `pub`")));
                        let __code_215 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(""))
                                            })].into_iter();
                        diag.help(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("try adjusting the macro to put `{$vis}` inside the invocation")));
                        ;
                        diag.arg("vis", __binding_1);
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("remove the visibility")),
                            __code_215, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
3908#[diag("can't qualify macro invocation with `pub`")]
3909#[help("try adjusting the macro to put `{$vis}` inside the invocation")]
3910pub(crate) struct MacroInvocationVisibility<'a> {
3911    #[primary_span]
3912    #[suggestion(
3913        "remove the visibility",
3914        code = "",
3915        applicability = "machine-applicable",
3916        style = "verbose"
3917    )]
3918    pub span: Span,
3919    pub vis: &'a str,
3920}
3921
3922#[derive(const _: () =
    {
        impl<'_sess, 'a, G> rustc_errors::Diagnostic<'_sess, G> for
            NestedAdt<'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 {
                    NestedAdt {
                        span: __binding_0,
                        item: __binding_1,
                        keyword: __binding_2,
                        kw_str: __binding_3 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`{$kw_str}` definition cannot be nested inside `{$keyword}`")));
                        let __code_216 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(""))
                                            })].into_iter();
                        ;
                        diag.arg("keyword", __binding_2);
                        diag.arg("kw_str", __binding_3);
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("consider creating a new `{$kw_str}` definition instead of nesting")),
                            __code_216, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
3923#[diag("`{$kw_str}` definition cannot be nested inside `{$keyword}`")]
3924pub(crate) struct NestedAdt<'a> {
3925    #[primary_span]
3926    pub span: Span,
3927    #[suggestion(
3928        "consider creating a new `{$kw_str}` definition instead of nesting",
3929        code = "",
3930        applicability = "maybe-incorrect",
3931        style = "verbose"
3932    )]
3933    pub item: Span,
3934    pub keyword: &'a str,
3935    pub kw_str: Cow<'a, str>,
3936}
3937
3938#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            FunctionBodyEqualsExpr 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 {
                    FunctionBodyEqualsExpr {
                        span: __binding_0, sugg: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("function body cannot be `= expression;`")));
                        ;
                        diag.span(__binding_0);
                        diag.subdiagnostic(__binding_1);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
3939#[diag("function body cannot be `= expression;`")]
3940pub(crate) struct FunctionBodyEqualsExpr {
3941    #[primary_span]
3942    pub span: Span,
3943    #[subdiagnostic]
3944    pub sugg: FunctionBodyEqualsExprSugg,
3945}
3946
3947#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for FunctionBodyEqualsExprSugg {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    FunctionBodyEqualsExprSugg {
                        eq: __binding_0, semi: __binding_1 } => {
                        let mut suggestions = Vec::new();
                        let __code_217 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!("{{"))
                                });
                        let __code_218 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!(" }}"))
                                });
                        suggestions.push((__binding_0, __code_217));
                        suggestions.push((__binding_1, __code_218));
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("surround the expression with `{\"{\"}` and `{\"}\"}` instead of `=` and `;`")),
                                &sub_args);
                        diag.multipart_suggestion_with_style(__message, suggestions,
                            rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowCode);
                    }
                }
            }
        }
    };Subdiagnostic)]
3948#[multipart_suggestion(
3949    r#"surround the expression with `{"{"}` and `{"}"}` instead of `=` and `;`"#,
3950    applicability = "machine-applicable"
3951)]
3952pub(crate) struct FunctionBodyEqualsExprSugg {
3953    #[suggestion_part(code = "{{")]
3954    pub eq: Span,
3955    #[suggestion_part(code = " }}")]
3956    pub semi: Span,
3957}
3958
3959#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for BoxNotPat
            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 {
                    BoxNotPat {
                        span: __binding_0,
                        kw: __binding_1,
                        lo: __binding_2,
                        descr: __binding_3 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected pattern, found {$descr}")));
                        let __code_219 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("r#"))
                                            })].into_iter();
                        ;
                        diag.arg("descr", __binding_3);
                        diag.span(__binding_0);
                        diag.span_note(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`box` is a reserved keyword")));
                        diag.span_suggestions_with_style(__binding_2,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("escape `box` to use it as an identifier")),
                            __code_219, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
3960#[diag("expected pattern, found {$descr}")]
3961pub(crate) struct BoxNotPat {
3962    #[primary_span]
3963    pub span: Span,
3964    #[note("`box` is a reserved keyword")]
3965    pub kw: Span,
3966    #[suggestion(
3967        "escape `box` to use it as an identifier",
3968        code = "r#",
3969        applicability = "maybe-incorrect",
3970        style = "verbose"
3971    )]
3972    pub lo: Span,
3973    pub descr: String,
3974}
3975
3976#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for UnmatchedAngle
            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 {
                    UnmatchedAngle { span: __binding_0, plural: __binding_1 } =>
                        {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("unmatched angle {$plural ->\n        [true] brackets\n        *[false] bracket\n    }")));
                        let __code_220 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(""))
                                            })].into_iter();
                        ;
                        diag.arg("plural", __binding_1);
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("remove extra angle {$plural ->\n            [true] brackets\n            *[false] bracket\n        }")),
                            __code_220, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
3977#[diag(
3978    "unmatched angle {$plural ->
3979        [true] brackets
3980        *[false] bracket
3981    }"
3982)]
3983pub(crate) struct UnmatchedAngle {
3984    #[primary_span]
3985    #[suggestion(
3986        "remove extra angle {$plural ->
3987            [true] brackets
3988            *[false] bracket
3989        }",
3990        code = "",
3991        applicability = "machine-applicable",
3992        style = "verbose"
3993    )]
3994    pub span: Span,
3995    pub plural: bool,
3996}
3997
3998#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            MissingPlusBounds 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 {
                    MissingPlusBounds {
                        span: __binding_0, hi: __binding_1, sym: __binding_2 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected `+` between lifetime and {$sym}")));
                        let __code_221 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(" +"))
                                            })].into_iter();
                        ;
                        diag.arg("sym", __binding_2);
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("add `+`")),
                            __code_221, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
3999#[diag("expected `+` between lifetime and {$sym}")]
4000pub(crate) struct MissingPlusBounds {
4001    #[primary_span]
4002    pub span: Span,
4003    #[suggestion("add `+`", code = " +", applicability = "maybe-incorrect", style = "verbose")]
4004    pub hi: Span,
4005    pub sym: Symbol,
4006}
4007
4008#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            IncorrectParensTraitBounds 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 {
                    IncorrectParensTraitBounds {
                        span: __binding_0, sugg: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("incorrect parentheses around trait bounds")));
                        ;
                        diag.span(__binding_0.clone());
                        diag.subdiagnostic(__binding_1);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
4009#[diag("incorrect parentheses around trait bounds")]
4010pub(crate) struct IncorrectParensTraitBounds {
4011    #[primary_span]
4012    pub span: Vec<Span>,
4013    #[subdiagnostic]
4014    pub sugg: IncorrectParensTraitBoundsSugg,
4015}
4016
4017#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for IncorrectParensTraitBoundsSugg {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    IncorrectParensTraitBoundsSugg {
                        wrong_span: __binding_0, new_span: __binding_1 } => {
                        let mut suggestions = Vec::new();
                        let __code_222 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!(" "))
                                });
                        let __code_223 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!("("))
                                });
                        suggestions.push((__binding_0, __code_222));
                        suggestions.push((__binding_1, __code_223));
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("fix the parentheses")),
                                &sub_args);
                        diag.multipart_suggestion_with_style(__message, suggestions,
                            rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowCode);
                    }
                }
            }
        }
    };Subdiagnostic)]
4018#[multipart_suggestion("fix the parentheses", applicability = "machine-applicable")]
4019pub(crate) struct IncorrectParensTraitBoundsSugg {
4020    #[suggestion_part(code = " ")]
4021    pub wrong_span: Span,
4022    #[suggestion_part(code = "(")]
4023    pub new_span: Span,
4024}
4025
4026#[derive(const _: () =
    {
        impl<'_sess, 'a, G> rustc_errors::Diagnostic<'_sess, G> for
            KwBadCase<'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 {
                    KwBadCase {
                        span: __binding_0, kw: __binding_1, case: __binding_2 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("keyword `{$kw}` is written in the wrong case")));
                        let __code_224 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("{0}", __binding_1))
                                            })].into_iter();
                        ;
                        diag.arg("kw", __binding_1);
                        diag.arg("case", __binding_2);
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("write it in {$case}")),
                            __code_224, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
4027#[diag("keyword `{$kw}` is written in the wrong case")]
4028pub(crate) struct KwBadCase<'a> {
4029    #[primary_span]
4030    #[suggestion(
4031        "write it in {$case}",
4032        code = "{kw}",
4033        style = "verbose",
4034        applicability = "machine-applicable"
4035    )]
4036    pub span: Span,
4037    pub kw: &'a str,
4038    pub case: Case,
4039}
4040
4041pub(crate) enum Case {
4042    Upper,
4043    Lower,
4044    Mixed,
4045}
4046
4047impl IntoDiagArg for Case {
4048    fn into_diag_arg(self, path: &mut Option<PathBuf>) -> DiagArgValue {
4049        match self {
4050            Case::Upper => "uppercase",
4051            Case::Lower => "lowercase",
4052            Case::Mixed => "the correct case",
4053        }
4054        .into_diag_arg(path)
4055    }
4056}
4057
4058#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            UnknownBuiltinConstruct 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 {
                    UnknownBuiltinConstruct {
                        span: __binding_0, name: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("unknown `builtin #` construct `{$name}`")));
                        ;
                        diag.arg("name", __binding_1);
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
4059#[diag("unknown `builtin #` construct `{$name}`")]
4060pub(crate) struct UnknownBuiltinConstruct {
4061    #[primary_span]
4062    pub span: Span,
4063    pub name: Ident,
4064}
4065
4066#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            ExpectedBuiltinIdent 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 {
                    ExpectedBuiltinIdent { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected identifier after `builtin #`")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
4067#[diag("expected identifier after `builtin #`")]
4068pub(crate) struct ExpectedBuiltinIdent {
4069    #[primary_span]
4070    pub span: Span,
4071}
4072
4073#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            StaticWithGenerics 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 {
                    StaticWithGenerics { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("static items may not have generic parameters")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
4074#[diag("static items may not have generic parameters")]
4075pub(crate) struct StaticWithGenerics {
4076    #[primary_span]
4077    pub span: Span,
4078}
4079
4080#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            WhereClauseBeforeConstBody 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 {
                    WhereClauseBeforeConstBody {
                        span: __binding_0,
                        name: __binding_1,
                        body: __binding_2,
                        sugg: __binding_3 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("where clauses are not allowed before const item bodies")));
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("unexpected where clause")));
                        diag.span_label(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("while parsing this const item")));
                        diag.span_label(__binding_2,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("the item body")));
                        if let Some(__binding_3) = __binding_3 {
                            diag.subdiagnostic(__binding_3);
                        }
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
4081#[diag("where clauses are not allowed before const item bodies")]
4082pub(crate) struct WhereClauseBeforeConstBody {
4083    #[primary_span]
4084    #[label("unexpected where clause")]
4085    pub span: Span,
4086    #[label("while parsing this const item")]
4087    pub name: Span,
4088    #[label("the item body")]
4089    pub body: Span,
4090    #[subdiagnostic]
4091    pub sugg: Option<WhereClauseBeforeConstBodySugg>,
4092}
4093
4094#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for WhereClauseBeforeConstBodySugg {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    WhereClauseBeforeConstBodySugg {
                        left: __binding_0, snippet: __binding_1, right: __binding_2
                        } => {
                        let mut suggestions = Vec::new();
                        let __code_225 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!("= {0} ", __binding_1))
                                });
                        let __code_226 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!(""))
                                });
                        suggestions.push((__binding_0, __code_225));
                        suggestions.push((__binding_2, __code_226));
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        sub_args.insert("snippet".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("move the body before the where clause")),
                                &sub_args);
                        diag.multipart_suggestion_with_style(__message, suggestions,
                            rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowCode);
                    }
                }
            }
        }
    };Subdiagnostic)]
4095#[multipart_suggestion(
4096    "move the body before the where clause",
4097    applicability = "machine-applicable"
4098)]
4099pub(crate) struct WhereClauseBeforeConstBodySugg {
4100    #[suggestion_part(code = "= {snippet} ")]
4101    pub left: Span,
4102    pub snippet: String,
4103    #[suggestion_part(code = "")]
4104    pub right: Span,
4105}
4106
4107#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            GenericArgsInPatRequireTurbofishSyntax 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 {
                    GenericArgsInPatRequireTurbofishSyntax {
                        span: __binding_0, suggest_turbofish: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("generic args in patterns require the turbofish syntax")));
                        let __code_227 =
                            [::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("use `::<...>` instead of `<...>` to specify lifetime, type, or const arguments")),
                            __code_227, rustc_errors::Applicability::MaybeIncorrect,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
4108#[diag("generic args in patterns require the turbofish syntax")]
4109pub(crate) struct GenericArgsInPatRequireTurbofishSyntax {
4110    #[primary_span]
4111    pub span: Span,
4112    #[suggestion(
4113        "use `::<...>` instead of `<...>` to specify lifetime, type, or const arguments",
4114        style = "verbose",
4115        code = "::",
4116        applicability = "maybe-incorrect"
4117    )]
4118    pub suggest_turbofish: Span,
4119}
4120
4121#[derive(const _: () =
    {
        impl<'_sess, 'a, G> rustc_errors::Diagnostic<'_sess, G> for
            TransposeDynOrImpl<'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 {
                    TransposeDynOrImpl {
                        span: __binding_0, kw: __binding_1, sugg: __binding_2 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`for<...>` expected after `{$kw}`, not before")));
                        ;
                        diag.arg("kw", __binding_1);
                        diag.span(__binding_0);
                        diag.subdiagnostic(__binding_2);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
4122#[diag("`for<...>` expected after `{$kw}`, not before")]
4123pub(crate) struct TransposeDynOrImpl<'a> {
4124    #[primary_span]
4125    pub span: Span,
4126    pub kw: &'a str,
4127    #[subdiagnostic]
4128    pub sugg: TransposeDynOrImplSugg<'a>,
4129}
4130
4131#[derive(const _: () =
    {
        impl<'a> rustc_errors::Subdiagnostic for TransposeDynOrImplSugg<'a> {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    TransposeDynOrImplSugg {
                        removal_span: __binding_0,
                        insertion_span: __binding_1,
                        kw: __binding_2 } => {
                        let mut suggestions = Vec::new();
                        let __code_228 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!(""))
                                });
                        let __code_229 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!("{0} ", __binding_2))
                                });
                        suggestions.push((__binding_0, __code_228));
                        suggestions.push((__binding_1, __code_229));
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        sub_args.insert("kw".into(),
                            rustc_errors::IntoDiagArg::into_diag_arg(__binding_2,
                                &mut diag.long_ty_path));
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("move `{$kw}` before the `for<...>`")),
                                &sub_args);
                        diag.multipart_suggestion_with_style(__message, suggestions,
                            rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowCode);
                    }
                }
            }
        }
    };Subdiagnostic)]
4132#[multipart_suggestion("move `{$kw}` before the `for<...>`", applicability = "machine-applicable")]
4133pub(crate) struct TransposeDynOrImplSugg<'a> {
4134    #[suggestion_part(code = "")]
4135    pub removal_span: Span,
4136    #[suggestion_part(code = "{kw} ")]
4137    pub insertion_span: Span,
4138    pub kw: &'a str,
4139}
4140
4141#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            ArrayIndexInOffsetOf 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 {
                    ArrayIndexInOffsetOf(__binding_0) => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("array indexing not supported in offset_of")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
4142#[diag("array indexing not supported in offset_of")]
4143pub(crate) struct ArrayIndexInOffsetOf(#[primary_span] pub Span);
4144
4145#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            InvalidOffsetOf 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 {
                    InvalidOffsetOf(__binding_0) => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("offset_of expects dot-separated field and variant names")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
4146#[diag("offset_of expects dot-separated field and variant names")]
4147pub(crate) struct InvalidOffsetOf(#[primary_span] pub Span);
4148
4149#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for AsyncImpl
            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 {
                    AsyncImpl { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`async` trait implementations are unsupported")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
4150#[diag("`async` trait implementations are unsupported")]
4151pub(crate) struct AsyncImpl {
4152    #[primary_span]
4153    pub span: Span,
4154}
4155
4156#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for ExprRArrowCall
            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 {
                    ExprRArrowCall { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`->` is not valid syntax for field accesses and method calls")));
                        let __code_230 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("."))
                                            })].into_iter();
                        diag.help(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("the `.` operator will automatically dereference the value, except if the value is a raw pointer")));
                        ;
                        diag.span(__binding_0);
                        diag.span_suggestions_with_style(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("try using `.` instead")),
                            __code_230, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
4157#[diag("`->` is not valid syntax for field accesses and method calls")]
4158#[help(
4159    "the `.` operator will automatically dereference the value, except if the value is a raw pointer"
4160)]
4161pub(crate) struct ExprRArrowCall {
4162    #[primary_span]
4163    #[suggestion(
4164        "try using `.` instead",
4165        style = "verbose",
4166        applicability = "machine-applicable",
4167        code = "."
4168    )]
4169    pub span: Span,
4170}
4171
4172#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            DotDotRangeAttribute 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 {
                    DotDotRangeAttribute { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("attributes are not allowed on range expressions starting with `..`")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
4173#[diag("attributes are not allowed on range expressions starting with `..`")]
4174pub(crate) struct DotDotRangeAttribute {
4175    #[primary_span]
4176    pub span: Span,
4177}
4178
4179#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            BinderBeforeModifiers 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 {
                    BinderBeforeModifiers {
                        binder_span: __binding_0, modifiers_span: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`for<...>` binder should be placed before trait bound modifiers")));
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("place the `for<...>` binder before any modifiers")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
4180#[diag("`for<...>` binder should be placed before trait bound modifiers")]
4181pub(crate) struct BinderBeforeModifiers {
4182    #[primary_span]
4183    pub binder_span: Span,
4184    #[label("place the `for<...>` binder before any modifiers")]
4185    pub modifiers_span: Span,
4186}
4187
4188#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            BinderAndPolarity 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 {
                    BinderAndPolarity {
                        polarity_span: __binding_0,
                        binder_span: __binding_1,
                        polarity: __binding_2 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`for<...>` binder not allowed with `{$polarity}` trait polarity modifier")));
                        ;
                        diag.arg("polarity", __binding_2);
                        diag.span(__binding_0);
                        diag.span_label(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("there is not a well-defined meaning for a higher-ranked `{$polarity}` trait")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
4189#[diag("`for<...>` binder not allowed with `{$polarity}` trait polarity modifier")]
4190pub(crate) struct BinderAndPolarity {
4191    #[primary_span]
4192    pub polarity_span: Span,
4193    #[label("there is not a well-defined meaning for a higher-ranked `{$polarity}` trait")]
4194    pub binder_span: Span,
4195    pub polarity: &'static str,
4196}
4197
4198#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            PolarityAndModifiers 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 {
                    PolarityAndModifiers {
                        polarity_span: __binding_0,
                        modifiers_span: __binding_1,
                        polarity: __binding_2,
                        modifiers_concatenated: __binding_3 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`{$modifiers_concatenated}` trait not allowed with `{$polarity}` trait polarity modifier")));
                        ;
                        diag.arg("polarity", __binding_2);
                        diag.arg("modifiers_concatenated", __binding_3);
                        diag.span(__binding_0);
                        diag.span_label(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("there is not a well-defined meaning for a `{$modifiers_concatenated} {$polarity}` trait")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
4199#[diag("`{$modifiers_concatenated}` trait not allowed with `{$polarity}` trait polarity modifier")]
4200pub(crate) struct PolarityAndModifiers {
4201    #[primary_span]
4202    pub polarity_span: Span,
4203    #[label(
4204        "there is not a well-defined meaning for a `{$modifiers_concatenated} {$polarity}` trait"
4205    )]
4206    pub modifiers_span: Span,
4207    pub polarity: &'static str,
4208    pub modifiers_concatenated: String,
4209}
4210
4211#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            IncorrectTypeOnSelf 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 {
                    IncorrectTypeOnSelf {
                        span: __binding_0, move_self_modifier: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("type not allowed for shorthand `self` parameter")));
                        ;
                        diag.span(__binding_0);
                        diag.subdiagnostic(__binding_1);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
4212#[diag("type not allowed for shorthand `self` parameter")]
4213pub(crate) struct IncorrectTypeOnSelf {
4214    #[primary_span]
4215    pub span: Span,
4216    #[subdiagnostic]
4217    pub move_self_modifier: MoveSelfModifier,
4218}
4219
4220#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for MoveSelfModifier {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    MoveSelfModifier {
                        removal_span: __binding_0,
                        insertion_span: __binding_1,
                        modifier: __binding_2 } => {
                        let mut suggestions = Vec::new();
                        let __code_231 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!(""))
                                });
                        let __code_232 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!("{0}", __binding_2))
                                });
                        suggestions.push((__binding_0, __code_231));
                        suggestions.push((__binding_1, __code_232));
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        sub_args.insert("modifier".into(),
                            rustc_errors::IntoDiagArg::into_diag_arg(__binding_2,
                                &mut diag.long_ty_path));
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("move the modifiers on `self` to the type")),
                                &sub_args);
                        diag.multipart_suggestion_with_style(__message, suggestions,
                            rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowCode);
                    }
                }
            }
        }
    };Subdiagnostic)]
4221#[multipart_suggestion(
4222    "move the modifiers on `self` to the type",
4223    applicability = "machine-applicable"
4224)]
4225pub(crate) struct MoveSelfModifier {
4226    #[suggestion_part(code = "")]
4227    pub removal_span: Span,
4228    #[suggestion_part(code = "{modifier}")]
4229    pub insertion_span: Span,
4230    pub modifier: String,
4231}
4232
4233#[derive(const _: () =
    {
        impl<'_sess, 'a, G> rustc_errors::Diagnostic<'_sess, G> for
            AsmUnsupportedOperand<'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 {
                    AsmUnsupportedOperand {
                        span: __binding_0,
                        symbol: __binding_1,
                        macro_name: __binding_2 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("the `{$symbol}` operand cannot be used with `{$macro_name}!`")));
                        ;
                        diag.arg("symbol", __binding_1);
                        diag.arg("macro_name", __binding_2);
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("the `{$symbol}` operand is not meaningful for global-scoped inline assembly, remove it")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
4234#[diag("the `{$symbol}` operand cannot be used with `{$macro_name}!`")]
4235pub(crate) struct AsmUnsupportedOperand<'a> {
4236    #[primary_span]
4237    #[label(
4238        "the `{$symbol}` operand is not meaningful for global-scoped inline assembly, remove it"
4239    )]
4240    pub(crate) span: Span,
4241    pub(crate) symbol: &'a str,
4242    pub(crate) macro_name: &'static str,
4243}
4244
4245#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            AsmUnderscoreInput 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 {
                    AsmUnderscoreInput { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("_ cannot be used for input operands")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
4246#[diag("_ cannot be used for input operands")]
4247pub(crate) struct AsmUnderscoreInput {
4248    #[primary_span]
4249    pub(crate) span: Span,
4250}
4251
4252#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for AsmSymNoPath
            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 {
                    AsmSymNoPath { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected a path for argument to `sym`")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
4253#[diag("expected a path for argument to `sym`")]
4254pub(crate) struct AsmSymNoPath {
4255    #[primary_span]
4256    pub(crate) span: Span,
4257}
4258
4259#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            AsmRequiresTemplate 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 {
                    AsmRequiresTemplate { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("requires at least a template string argument")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
4260#[diag("requires at least a template string argument")]
4261pub(crate) struct AsmRequiresTemplate {
4262    #[primary_span]
4263    pub(crate) span: Span,
4264}
4265
4266#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            AsmExpectedComma 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 {
                    AsmExpectedComma { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected token: `,`")));
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected `,`")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
4267#[diag("expected token: `,`")]
4268pub(crate) struct AsmExpectedComma {
4269    #[primary_span]
4270    #[label("expected `,`")]
4271    pub(crate) span: Span,
4272}
4273
4274#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            AsmExpectedOther 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 {
                    AsmExpectedOther {
                        span: __binding_0, is_inline_asm: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected operand, {$is_inline_asm ->\n        [false] options\n        *[true] clobber_abi, options\n    }, or additional template string")));
                        ;
                        diag.arg("is_inline_asm", __binding_1);
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected operand, {$is_inline_asm ->\n            [false] options\n            *[true] clobber_abi, options\n        }, or additional template string")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
4275#[diag(
4276    "expected operand, {$is_inline_asm ->
4277        [false] options
4278        *[true] clobber_abi, options
4279    }, or additional template string"
4280)]
4281pub(crate) struct AsmExpectedOther {
4282    #[primary_span]
4283    #[label(
4284        "expected operand, {$is_inline_asm ->
4285            [false] options
4286            *[true] clobber_abi, options
4287        }, or additional template string"
4288    )]
4289    pub(crate) span: Span,
4290    pub(crate) is_inline_asm: bool,
4291}
4292
4293#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for NonABI 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 {
                    NonABI { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("at least one abi must be provided as an argument to `clobber_abi`")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
4294#[diag("at least one abi must be provided as an argument to `clobber_abi`")]
4295pub(crate) struct NonABI {
4296    #[primary_span]
4297    pub(crate) span: Span,
4298}
4299
4300#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            AsmExpectedStringLiteral 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 {
                    AsmExpectedStringLiteral { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected string literal")));
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("not a string literal")));
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
4301#[diag("expected string literal")]
4302pub(crate) struct AsmExpectedStringLiteral {
4303    #[primary_span]
4304    #[label("not a string literal")]
4305    pub(crate) span: Span,
4306}
4307
4308#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            ExpectedRegisterClassOrExplicitRegister 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 {
                    ExpectedRegisterClassOrExplicitRegister { span: __binding_0
                        } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected register class or explicit register")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
4309#[diag("expected register class or explicit register")]
4310pub(crate) struct ExpectedRegisterClassOrExplicitRegister {
4311    #[primary_span]
4312    pub(crate) span: Span,
4313}
4314
4315#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            HiddenUnicodeCodepointsDiag 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 {
                    HiddenUnicodeCodepointsDiag {
                        label: __binding_0,
                        count: __binding_1,
                        span_label: __binding_2,
                        labels: __binding_3,
                        sub: __binding_4 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("unicode codepoint changing visible direction of text present in {$label}")));
                        diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("these kind of unicode codepoints change the way text flows on applications that support them, but can cause confusion because they change the order of characters on the screen")));
                        ;
                        diag.arg("label", __binding_0);
                        diag.arg("count", __binding_1);
                        diag.span_label(__binding_2,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("this {$label} contains {$count ->\n            [one] an invisible\n            *[other] invisible\n        } unicode text flow control {$count ->\n            [one] codepoint\n            *[other] codepoints\n        }")));
                        if let Some(__binding_3) = __binding_3 {
                            diag.subdiagnostic(__binding_3);
                        }
                        diag.subdiagnostic(__binding_4);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
4316#[diag("unicode codepoint changing visible direction of text present in {$label}")]
4317#[note(
4318    "these kind of unicode codepoints change the way text flows on applications that support them, but can cause confusion because they change the order of characters on the screen"
4319)]
4320pub(crate) struct HiddenUnicodeCodepointsDiag {
4321    pub label: String,
4322    pub count: usize,
4323    #[label(
4324        "this {$label} contains {$count ->
4325            [one] an invisible
4326            *[other] invisible
4327        } unicode text flow control {$count ->
4328            [one] codepoint
4329            *[other] codepoints
4330        }"
4331    )]
4332    pub span_label: Span,
4333    #[subdiagnostic]
4334    pub labels: Option<HiddenUnicodeCodepointsDiagLabels>,
4335    #[subdiagnostic]
4336    pub sub: HiddenUnicodeCodepointsDiagSub,
4337}
4338
4339pub(crate) struct HiddenUnicodeCodepointsDiagLabels {
4340    pub spans: Vec<(char, Span)>,
4341}
4342
4343impl Subdiagnostic for HiddenUnicodeCodepointsDiagLabels {
4344    fn add_to_diag<G: EmissionGuarantee>(self, diag: &mut Diag<'_, G>) {
4345        for (c, span) in self.spans {
4346            diag.span_label(span, ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0:?}", c))
    })format!("{c:?}"));
4347        }
4348    }
4349}
4350
4351pub(crate) enum HiddenUnicodeCodepointsDiagSub {
4352    Escape { spans: Vec<(char, Span)> },
4353    NoEscape { spans: Vec<(char, Span)>, is_doc_comment: bool },
4354}
4355
4356// Used because of multiple multipart_suggestion and note
4357impl Subdiagnostic for HiddenUnicodeCodepointsDiagSub {
4358    fn add_to_diag<G: EmissionGuarantee>(self, diag: &mut Diag<'_, G>) {
4359        match self {
4360            HiddenUnicodeCodepointsDiagSub::Escape { spans } => {
4361                diag.multipart_suggestion_with_style(
4362                    rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("if their presence wasn't intentional, you can remove them"))msg!("if their presence wasn't intentional, you can remove them"),
4363                    spans.iter().map(|(_, span)| (*span, "".to_string())).collect(),
4364                    Applicability::MachineApplicable,
4365                    SuggestionStyle::HideCodeAlways,
4366                );
4367                diag.multipart_suggestion(
4368                    rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("if you want to keep them but make them visible in your source code, you can escape them"))msg!("if you want to keep them but make them visible in your source code, you can escape them"),
4369                    spans
4370                        .into_iter()
4371                        .map(|(c, span)| {
4372                            let c = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0:?}", c))
    })format!("{c:?}");
4373                            (span, c[1..c.len() - 1].to_string())
4374                        })
4375                        .collect(),
4376                    Applicability::MachineApplicable,
4377                );
4378            }
4379            HiddenUnicodeCodepointsDiagSub::NoEscape { spans, is_doc_comment } => {
4380                // FIXME: in other suggestions we've reversed the inner spans of doc comments. We
4381                // should do the same here to provide the same good suggestions as we do for
4382                // literals above.
4383                diag.arg(
4384                    "escaped",
4385                    spans
4386                        .into_iter()
4387                        .map(|(c, _)| ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0:?}", c))
    })format!("{c:?}"))
4388                        .collect::<Vec<String>>()
4389                        .join(", "),
4390                );
4391                diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("if their presence wasn't intentional, you can remove them"))msg!("if their presence wasn't intentional, you can remove them"));
4392                if is_doc_comment {
4393                    diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("if you need to keep them and make them explicit in source, rewrite this doc comment as a `#[doc = \"...\"]` attribute and use Unicode escapes such as {$escaped}"))msg!(r#"if you need to keep them and make them explicit in source, rewrite this doc comment as a `#[doc = "..."]` attribute and use Unicode escapes such as {$escaped}"#));
4394                } else {
4395                    diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("if you want to keep them but make them visible in your source code, you can escape them: {$escaped}"))msg!("if you want to keep them but make them visible in your source code, you can escape them: {$escaped}"));
4396                }
4397            }
4398        }
4399    }
4400}
4401
4402#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            VarargsWithoutPattern 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 {
                    VarargsWithoutPattern { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("missing pattern for `...` argument")));
                        let __code_233 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("_: ..."))
                                            })].into_iter();
                        ;
                        diag.span_suggestions_with_style(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("name the argument, or use `_` to continue ignoring it")),
                            __code_233, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowCode);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
4403#[diag("missing pattern for `...` argument")]
4404pub(crate) struct VarargsWithoutPattern {
4405    #[suggestion(
4406        "name the argument, or use `_` to continue ignoring it",
4407        code = "_: ...",
4408        applicability = "machine-applicable"
4409    )]
4410    pub span: Span,
4411}
4412
4413#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            ImplReuseInherentImpl 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 {
                    ImplReuseInherentImpl { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("only trait impls can be reused")));
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
4414#[diag("only trait impls can be reused")]
4415pub(crate) struct ImplReuseInherentImpl {
4416    #[primary_span]
4417    pub span: Span,
4418}
4419
4420#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            StructLiteralPlaceholderPath 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 {
                    StructLiteralPlaceholderPath { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("placeholder `_` is not allowed for the path in struct literals")));
                        let __code_234 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("/* Type */"))
                                            })].into_iter();
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("not allowed in struct literals")));
                        diag.span_suggestions_with_style(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("replace it with the correct type")),
                            __code_234, rustc_errors::Applicability::HasPlaceholders,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
4421#[diag("placeholder `_` is not allowed for the path in struct literals")]
4422pub(crate) struct StructLiteralPlaceholderPath {
4423    #[primary_span]
4424    #[label("not allowed in struct literals")]
4425    #[suggestion(
4426        "replace it with the correct type",
4427        applicability = "has-placeholders",
4428        code = "/* Type */",
4429        style = "verbose"
4430    )]
4431    pub span: Span,
4432}
4433
4434#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            StructLiteralWithoutPathLate 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 {
                    StructLiteralWithoutPathLate {
                        span: __binding_0, suggestion_span: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("struct literal body without path")));
                        let __code_235 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("/* Type */ "))
                                            })].into_iter();
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("struct name missing for struct literal")));
                        diag.span_suggestions_with_style(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("add the correct type")),
                            __code_235, rustc_errors::Applicability::HasPlaceholders,
                            rustc_errors::SuggestionStyle::ShowAlways);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
4435#[diag("struct literal body without path")]
4436pub(crate) struct StructLiteralWithoutPathLate {
4437    #[primary_span]
4438    #[label("struct name missing for struct literal")]
4439    pub span: Span,
4440    #[suggestion(
4441        "add the correct type",
4442        applicability = "has-placeholders",
4443        code = "/* Type */ ",
4444        style = "verbose"
4445    )]
4446    pub suggestion_span: Span,
4447}
4448
4449/// Used to forbid `let` expressions in certain syntactic locations.
4450#[derive(#[automatically_derived]
impl ::core::clone::Clone for ForbiddenLetReason {
    #[inline]
    fn clone(&self) -> ForbiddenLetReason {
        let _: ::core::clone::AssertParamIsClone<Span>;
        *self
    }
}Clone, #[automatically_derived]
impl ::core::marker::Copy for ForbiddenLetReason { }Copy, const _: () =
    {
        impl rustc_errors::Subdiagnostic for ForbiddenLetReason {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    ForbiddenLetReason::OtherForbidden => {}
                    ForbiddenLetReason::NotSupportedOr(__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("`||` operators are not supported in let chain expressions")),
                                &sub_args);
                        diag.span_note(__binding_0, __message);
                    }
                    ForbiddenLetReason::NotSupportedParentheses(__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("`let`s wrapped in parentheses are not supported in a context with let chains")),
                                &sub_args);
                        diag.span_note(__binding_0, __message);
                    }
                }
            }
        }
    };Subdiagnostic)]
4451pub(crate) enum ForbiddenLetReason {
4452    /// `let` is not valid and the source environment is not important
4453    OtherForbidden,
4454    /// A let chain with the `||` operator
4455    #[note("`||` operators are not supported in let chain expressions")]
4456    NotSupportedOr(#[primary_span] Span),
4457    /// A let chain with invalid parentheses
4458    ///
4459    /// For example, `let 1 = 1 && (expr && expr)` is allowed
4460    /// but `(let 1 = 1 && (let 1 = 1 && (let 1 = 1))) && let a = 1` is not
4461    #[note("`let`s wrapped in parentheses are not supported in a context with let chains")]
4462    NotSupportedParentheses(#[primary_span] Span),
4463}
4464
4465#[derive(#[automatically_derived]
impl ::core::fmt::Debug for MisspelledKw {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field3_finish(f, "MisspelledKw",
            "similar_kw", &self.similar_kw, "span", &self.span,
            "is_incorrect_case", &&self.is_incorrect_case)
    }
}Debug, const _: () =
    {
        impl rustc_errors::Subdiagnostic for MisspelledKw {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    MisspelledKw {
                        similar_kw: __binding_0,
                        span: __binding_1,
                        is_incorrect_case: __binding_2 } => {
                        let __code_236 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!("{0}", __binding_0))
                                            })].into_iter();
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        sub_args.insert("similar_kw".into(),
                            rustc_errors::IntoDiagArg::into_diag_arg(__binding_0,
                                &mut diag.long_ty_path));
                        sub_args.insert("is_incorrect_case".into(),
                            rustc_errors::IntoDiagArg::into_diag_arg(__binding_2,
                                &mut diag.long_ty_path));
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("{$is_incorrect_case ->\n        [true] write keyword `{$similar_kw}` in lowercase\n        *[false] there is a keyword `{$similar_kw}` with a similar name\n    }")),
                                &sub_args);
                        diag.span_suggestions_with_style(__binding_1, __message,
                            __code_236, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowAlways);
                    }
                }
            }
        }
    };rustc_macros::Subdiagnostic)]
4466#[suggestion(
4467    "{$is_incorrect_case ->
4468        [true] write keyword `{$similar_kw}` in lowercase
4469        *[false] there is a keyword `{$similar_kw}` with a similar name
4470    }",
4471    applicability = "machine-applicable",
4472    code = "{similar_kw}",
4473    style = "verbose"
4474)]
4475pub(crate) struct MisspelledKw {
4476    // We use a String here because `Symbol::into_diag_arg` calls `Symbol::to_ident_string`, which
4477    // prefix the keyword with a `r#` because it aims to print the symbol as an identifier.
4478    pub similar_kw: String,
4479    #[primary_span]
4480    pub span: Span,
4481    pub is_incorrect_case: bool,
4482}
4483
4484#[derive(#[automatically_derived]
impl ::core::clone::Clone for TokenDescription {
    #[inline]
    fn clone(&self) -> TokenDescription {
        let _: ::core::clone::AssertParamIsClone<MetaVarKind>;
        *self
    }
}Clone, #[automatically_derived]
impl ::core::marker::Copy for TokenDescription { }Copy, #[automatically_derived]
impl ::core::fmt::Debug for TokenDescription {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        match self {
            TokenDescription::ReservedIdentifier =>
                ::core::fmt::Formatter::write_str(f, "ReservedIdentifier"),
            TokenDescription::Keyword =>
                ::core::fmt::Formatter::write_str(f, "Keyword"),
            TokenDescription::ReservedKeyword =>
                ::core::fmt::Formatter::write_str(f, "ReservedKeyword"),
            TokenDescription::DocComment =>
                ::core::fmt::Formatter::write_str(f, "DocComment"),
            TokenDescription::MetaVar(__self_0) =>
                ::core::fmt::Formatter::debug_tuple_field1_finish(f,
                    "MetaVar", &__self_0),
        }
    }
}Debug, #[automatically_derived]
impl ::core::cmp::PartialEq for TokenDescription {
    #[inline]
    fn eq(&self, other: &TokenDescription) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr &&
            match (self, other) {
                (TokenDescription::MetaVar(__self_0),
                    TokenDescription::MetaVar(__arg1_0)) =>
                    __self_0 == __arg1_0,
                _ => true,
            }
    }
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for TokenDescription {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<MetaVarKind>;
    }
}Eq)]
4485pub(super) enum TokenDescription {
4486    ReservedIdentifier,
4487    Keyword,
4488    ReservedKeyword,
4489    DocComment,
4490
4491    // Expanded metavariables are wrapped in invisible delimiters which aren't
4492    // pretty-printed. In error messages we must handle these specially
4493    // otherwise we get confusing things in messages like "expected `(`, found
4494    // ``". It's better to say e.g. "expected `(`, found type metavariable".
4495    MetaVar(MetaVarKind),
4496}
4497
4498impl TokenDescription {
4499    pub(super) fn from_token(token: &Token) -> Option<Self> {
4500        match token.kind {
4501            _ if token.is_special_ident() => Some(TokenDescription::ReservedIdentifier),
4502            _ if token.is_used_keyword() => Some(TokenDescription::Keyword),
4503            _ if token.is_unused_keyword() => Some(TokenDescription::ReservedKeyword),
4504            token::DocComment(..) => Some(TokenDescription::DocComment),
4505            token::OpenInvisible(InvisibleOrigin::MetaVar(kind)) => {
4506                Some(TokenDescription::MetaVar(kind))
4507            }
4508            _ => None,
4509        }
4510    }
4511}
4512
4513#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            BreakWithLabelAndLoop 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 {
                    BreakWithLabelAndLoop { sub: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("this labeled break expression is easy to confuse with an unlabeled break with a labeled value expression")));
                        ;
                        diag.subdiagnostic(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
4514#[diag(
4515    "this labeled break expression is easy to confuse with an unlabeled break with a labeled value expression"
4516)]
4517pub(crate) struct BreakWithLabelAndLoop {
4518    #[subdiagnostic]
4519    pub sub: BreakWithLabelAndLoopSub,
4520}
4521
4522#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for BreakWithLabelAndLoopSub {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    BreakWithLabelAndLoopSub {
                        left: __binding_0, right: __binding_1 } => {
                        let mut suggestions = Vec::new();
                        let __code_237 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!("("))
                                });
                        let __code_238 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!(")"))
                                });
                        suggestions.push((__binding_0, __code_237));
                        suggestions.push((__binding_1, __code_238));
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("wrap this expression in parentheses")),
                                &sub_args);
                        diag.multipart_suggestion_with_style(__message, suggestions,
                            rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowCode);
                    }
                }
            }
        }
    };Subdiagnostic)]
4523#[multipart_suggestion("wrap this expression in parentheses", applicability = "machine-applicable")]
4524pub(crate) struct BreakWithLabelAndLoopSub {
4525    #[suggestion_part(code = "(")]
4526    pub left: Span,
4527    #[suggestion_part(code = ")")]
4528    pub right: Span,
4529}
4530
4531#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for RawPrefix
            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 {
                    RawPrefix { label: __binding_0, suggestion: __binding_1 } =>
                        {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("prefix `'r` is reserved")));
                        let __code_239 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(" "))
                                            })].into_iter();
                        ;
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("reserved prefix")));
                        diag.span_suggestions_with_style(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("insert whitespace here to avoid this being parsed as a prefix in Rust 2021")),
                            __code_239, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowCode);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
4532#[diag("prefix `'r` is reserved")]
4533pub(crate) struct RawPrefix {
4534    #[label("reserved prefix")]
4535    pub label: Span,
4536    #[suggestion(
4537        "insert whitespace here to avoid this being parsed as a prefix in Rust 2021",
4538        code = " ",
4539        applicability = "machine-applicable"
4540    )]
4541    pub suggestion: Span,
4542}
4543
4544#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            UnicodeTextFlow 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 {
                    UnicodeTextFlow {
                        comment_span: __binding_0,
                        characters: __binding_1,
                        suggestions: __binding_2,
                        num_codepoints: __binding_3 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("unicode codepoint changing visible direction of text present in comment")));
                        diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("these kind of unicode codepoints change the way text flows on applications that support them, but can cause confusion because they change the order of characters on the screen")));
                        ;
                        diag.arg("num_codepoints", __binding_3);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("{$num_codepoints ->\n            [1] this comment contains an invisible unicode text flow control codepoint\n            *[other] this comment contains invisible unicode text flow control codepoints\n        }")));
                        for __binding_1 in __binding_1 {
                            diag.subdiagnostic(__binding_1);
                        }
                        if let Some(__binding_2) = __binding_2 {
                            diag.subdiagnostic(__binding_2);
                        }
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
4545#[diag("unicode codepoint changing visible direction of text present in comment")]
4546#[note(
4547    "these kind of unicode codepoints change the way text flows on applications that support them, but can cause confusion because they change the order of characters on the screen"
4548)]
4549pub(crate) struct UnicodeTextFlow {
4550    #[label(
4551        "{$num_codepoints ->
4552            [1] this comment contains an invisible unicode text flow control codepoint
4553            *[other] this comment contains invisible unicode text flow control codepoints
4554        }"
4555    )]
4556    pub comment_span: Span,
4557    #[subdiagnostic]
4558    pub characters: Vec<UnicodeCharNoteSub>,
4559    #[subdiagnostic]
4560    pub suggestions: Option<UnicodeTextFlowSuggestion>,
4561
4562    pub num_codepoints: usize,
4563}
4564
4565#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for UnicodeCharNoteSub {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    UnicodeCharNoteSub { span: __binding_0, c_debug: __binding_1
                        } => {
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        sub_args.insert("c_debug".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("{$c_debug}")),
                                &sub_args);
                        diag.span_label(__binding_0, __message);
                    }
                }
            }
        }
    };Subdiagnostic)]
4566#[label("{$c_debug}")]
4567pub(crate) struct UnicodeCharNoteSub {
4568    #[primary_span]
4569    pub span: Span,
4570    pub c_debug: String,
4571}
4572
4573#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for UnicodeTextFlowSuggestion {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    UnicodeTextFlowSuggestion { spans: __binding_0 } => {
                        let mut suggestions = Vec::new();
                        let __code_240 =
                            ::alloc::__export::must_use({
                                    ::alloc::fmt::format(format_args!(""))
                                });
                        for __binding_0 in __binding_0 {
                            suggestions.push((__binding_0, __code_240.clone()));
                        }
                        let mut sub_args = rustc_errors::DiagArgMap::default();
                        let __message =
                            rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("if their presence wasn't intentional, you can remove them")),
                                &sub_args);
                        diag.multipart_suggestion_with_style(__message, suggestions,
                            rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::HideCodeAlways);
                    }
                }
            }
        }
    };Subdiagnostic)]
4574#[multipart_suggestion(
4575    "if their presence wasn't intentional, you can remove them",
4576    applicability = "machine-applicable",
4577    style = "hidden"
4578)]
4579pub(crate) struct UnicodeTextFlowSuggestion {
4580    #[suggestion_part(code = "")]
4581    pub spans: Vec<Span>,
4582}
4583
4584#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for ReservedPrefix
            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 {
                    ReservedPrefix {
                        label: __binding_0,
                        suggestion: __binding_1,
                        prefix: __binding_2 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("prefix `{$prefix}` is unknown")));
                        let __code_241 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(" "))
                                            })].into_iter();
                        ;
                        diag.arg("prefix", __binding_2);
                        diag.span_label(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("unknown prefix")));
                        diag.span_suggestions_with_style(__binding_1,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("insert whitespace here to avoid this being parsed as a prefix in Rust 2021")),
                            __code_241, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowCode);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
4585#[diag("prefix `{$prefix}` is unknown")]
4586pub(crate) struct ReservedPrefix {
4587    #[label("unknown prefix")]
4588    pub label: Span,
4589    #[suggestion(
4590        "insert whitespace here to avoid this being parsed as a prefix in Rust 2021",
4591        code = " ",
4592        applicability = "machine-applicable"
4593    )]
4594    pub suggestion: Span,
4595
4596    pub prefix: String,
4597}
4598
4599#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            ReservedStringLint 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 {
                    ReservedStringLint { suggestion: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("will be parsed as a guarded string in Rust 2024")));
                        let __code_242 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(" "))
                                            })].into_iter();
                        ;
                        diag.span_suggestions_with_style(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("insert whitespace here to avoid this being parsed as a guarded string in Rust 2024")),
                            __code_242, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowCode);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
4600#[diag("will be parsed as a guarded string in Rust 2024")]
4601pub(crate) struct ReservedStringLint {
4602    #[suggestion(
4603        "insert whitespace here to avoid this being parsed as a guarded string in Rust 2024",
4604        code = " ",
4605        applicability = "machine-applicable"
4606    )]
4607    pub suggestion: Span,
4608}
4609
4610#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            ReservedMultihashLint 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 {
                    ReservedMultihashLint { suggestion: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("reserved token in Rust 2024")));
                        let __code_243 =
                            [::alloc::__export::must_use({
                                                ::alloc::fmt::format(format_args!(" "))
                                            })].into_iter();
                        ;
                        diag.span_suggestions_with_style(__binding_0,
                            rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("insert whitespace here to avoid this being parsed as a forbidden token in Rust 2024")),
                            __code_243, rustc_errors::Applicability::MachineApplicable,
                            rustc_errors::SuggestionStyle::ShowCode);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
4611#[diag("reserved token in Rust 2024")]
4612pub(crate) struct ReservedMultihashLint {
4613    #[suggestion(
4614        "insert whitespace here to avoid this being parsed as a forbidden token in Rust 2024",
4615        code = " ",
4616        applicability = "machine-applicable"
4617    )]
4618    pub suggestion: Span,
4619}