rustc_metadata/
errors.rs

1use std::io::Error;
2use std::path::{Path, PathBuf};
3
4use rustc_errors::codes::*;
5use rustc_errors::{Diag, DiagCtxtHandle, Diagnostic, EmissionGuarantee, Level};
6use rustc_macros::{Diagnostic, Subdiagnostic};
7use rustc_span::{Span, Symbol, sym};
8use rustc_target::spec::{PanicStrategy, TargetTuple};
9
10use crate::fluent_generated as fluent;
11use crate::locator::CrateFlavor;
12
13#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for RlibRequired
            where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    RlibRequired { crate_name: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_rlib_required);
                        ;
                        diag.arg("crate_name", __binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
14#[diag(metadata_rlib_required)]
15pub struct RlibRequired {
16    pub crate_name: Symbol,
17}
18
19#[derive(const _: () =
    {
        impl<'_sess, 'a, G> rustc_errors::Diagnostic<'_sess, G> for
            LibRequired<'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 {
                    LibRequired { crate_name: __binding_0, kind: __binding_1 }
                        => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_lib_required);
                        ;
                        diag.arg("crate_name", __binding_0);
                        diag.arg("kind", __binding_1);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
20#[diag(metadata_lib_required)]
21pub struct LibRequired<'a> {
22    pub crate_name: Symbol,
23    pub kind: &'a str,
24}
25
26#[derive(const _: () =
    {
        impl<'_sess, 'a, G> rustc_errors::Diagnostic<'_sess, G> for
            RustcLibRequired<'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 {
                    RustcLibRequired {
                        crate_name: __binding_0, kind: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_rustc_lib_required);
                        diag.help(crate::fluent_generated::_subdiag::help);
                        ;
                        diag.arg("crate_name", __binding_0);
                        diag.arg("kind", __binding_1);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
27#[diag(metadata_rustc_lib_required)]
28#[help]
29pub struct RustcLibRequired<'a> {
30    pub crate_name: Symbol,
31    pub kind: &'a str,
32}
33
34#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            CrateDepMultiple where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    CrateDepMultiple {
                        crate_name: __binding_0,
                        non_static_deps: __binding_1,
                        rustc_driver_help: __binding_2 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_crate_dep_multiple);
                        diag.help(crate::fluent_generated::_subdiag::help);
                        ;
                        diag.arg("crate_name", __binding_0);
                        for __binding_1 in __binding_1 {
                            diag.subdiagnostic(__binding_1);
                        }
                        if let Some(__binding_2) = __binding_2 {
                            diag.subdiagnostic(__binding_2);
                        }
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
35#[diag(metadata_crate_dep_multiple)]
36#[help]
37pub struct CrateDepMultiple {
38    pub crate_name: Symbol,
39    #[subdiagnostic]
40    pub non_static_deps: Vec<NonStaticCrateDep>,
41    #[subdiagnostic]
42    pub rustc_driver_help: Option<RustcDriverHelp>,
43}
44
45#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for NonStaticCrateDep {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    NonStaticCrateDep { crate_name_: __binding_0 } => {
                        diag.store_args();
                        diag.arg("crate_name_", __binding_0);
                        let __message =
                            diag.eagerly_translate(crate::fluent_generated::metadata_crate_dep_not_static);
                        diag.note(__message);
                        diag.restore_args();
                    }
                }
            }
        }
    };Subdiagnostic)]
46#[note(metadata_crate_dep_not_static)]
47pub struct NonStaticCrateDep {
48    /// It's different from `crate_name` in main Diagnostic.
49    pub crate_name_: Symbol,
50}
51
52#[derive(const _: () =
    {
        impl rustc_errors::Subdiagnostic for RustcDriverHelp {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    RustcDriverHelp => {
                        diag.store_args();
                        let __message =
                            diag.eagerly_translate(crate::fluent_generated::metadata_crate_dep_rustc_driver);
                        diag.help(__message);
                        diag.restore_args();
                    }
                }
            }
        }
    };Subdiagnostic)]
53#[help(metadata_crate_dep_rustc_driver)]
54pub struct RustcDriverHelp;
55
56#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            TwoPanicRuntimes where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    TwoPanicRuntimes {
                        prev_name: __binding_0, cur_name: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_two_panic_runtimes);
                        ;
                        diag.arg("prev_name", __binding_0);
                        diag.arg("cur_name", __binding_1);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
57#[diag(metadata_two_panic_runtimes)]
58pub struct TwoPanicRuntimes {
59    pub prev_name: Symbol,
60    pub cur_name: Symbol,
61}
62
63#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            BadPanicStrategy where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    BadPanicStrategy {
                        runtime: __binding_0, strategy: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_bad_panic_strategy);
                        ;
                        diag.arg("runtime", __binding_0);
                        diag.arg("strategy", __binding_1);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
64#[diag(metadata_bad_panic_strategy)]
65pub struct BadPanicStrategy {
66    pub runtime: Symbol,
67    pub strategy: PanicStrategy,
68}
69
70#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            RequiredPanicStrategy where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    RequiredPanicStrategy {
                        crate_name: __binding_0,
                        found_strategy: __binding_1,
                        desired_strategy: __binding_2 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_required_panic_strategy);
                        ;
                        diag.arg("crate_name", __binding_0);
                        diag.arg("found_strategy", __binding_1);
                        diag.arg("desired_strategy", __binding_2);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
71#[diag(metadata_required_panic_strategy)]
72pub struct RequiredPanicStrategy {
73    pub crate_name: Symbol,
74    pub found_strategy: PanicStrategy,
75    pub desired_strategy: PanicStrategy,
76}
77
78#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            IncompatibleWithImmediateAbort where
            G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    IncompatibleWithImmediateAbort { crate_name: __binding_0 }
                        => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_incompatible_with_immediate_abort);
                        ;
                        diag.arg("crate_name", __binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
79#[diag(metadata_incompatible_with_immediate_abort)]
80pub struct IncompatibleWithImmediateAbort {
81    pub crate_name: Symbol,
82}
83
84#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            IncompatibleWithImmediateAbortCore where
            G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    IncompatibleWithImmediateAbortCore => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_incompatible_with_immediate_abort_core);
                        ;
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
85#[diag(metadata_incompatible_with_immediate_abort_core)]
86pub struct IncompatibleWithImmediateAbortCore;
87
88#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            IncompatiblePanicInDropStrategy where
            G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    IncompatiblePanicInDropStrategy {
                        crate_name: __binding_0,
                        found_strategy: __binding_1,
                        desired_strategy: __binding_2 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_incompatible_panic_in_drop_strategy);
                        ;
                        diag.arg("crate_name", __binding_0);
                        diag.arg("found_strategy", __binding_1);
                        diag.arg("desired_strategy", __binding_2);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
89#[diag(metadata_incompatible_panic_in_drop_strategy)]
90pub struct IncompatiblePanicInDropStrategy {
91    pub crate_name: Symbol,
92    pub found_strategy: PanicStrategy,
93    pub desired_strategy: PanicStrategy,
94}
95
96#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            LinkOrdinalRawDylib where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    LinkOrdinalRawDylib { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_link_ordinal_raw_dylib);
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
97#[diag(metadata_link_ordinal_raw_dylib)]
98pub struct LinkOrdinalRawDylib {
99    #[primary_span]
100    pub span: Span,
101}
102
103#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            LibFrameworkApple where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    LibFrameworkApple => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_lib_framework_apple);
                        ;
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
104#[diag(metadata_lib_framework_apple)]
105pub struct LibFrameworkApple;
106
107#[derive(const _: () =
    {
        impl<'_sess, 'a, G> rustc_errors::Diagnostic<'_sess, G> for
            EmptyRenamingTarget<'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 {
                    EmptyRenamingTarget { lib_name: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_empty_renaming_target);
                        ;
                        diag.arg("lib_name", __binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
108#[diag(metadata_empty_renaming_target)]
109pub struct EmptyRenamingTarget<'a> {
110    pub lib_name: &'a str,
111}
112
113#[derive(const _: () =
    {
        impl<'_sess, 'a, G> rustc_errors::Diagnostic<'_sess, G> for
            RenamingNoLink<'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 {
                    RenamingNoLink { lib_name: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_renaming_no_link);
                        ;
                        diag.arg("lib_name", __binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
114#[diag(metadata_renaming_no_link)]
115pub struct RenamingNoLink<'a> {
116    pub lib_name: &'a str,
117}
118
119#[derive(const _: () =
    {
        impl<'_sess, 'a, G> rustc_errors::Diagnostic<'_sess, G> for
            MultipleRenamings<'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 {
                    MultipleRenamings { lib_name: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_multiple_renamings);
                        ;
                        diag.arg("lib_name", __binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
120#[diag(metadata_multiple_renamings)]
121pub struct MultipleRenamings<'a> {
122    pub lib_name: &'a str,
123}
124
125#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            NoLinkModOverride where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    NoLinkModOverride { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_no_link_mod_override);
                        ;
                        if let Some(__binding_0) = __binding_0 {
                            diag.span(__binding_0);
                        }
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
126#[diag(metadata_no_link_mod_override)]
127pub struct NoLinkModOverride {
128    #[primary_span]
129    pub span: Option<Span>,
130}
131
132#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            RawDylibUnsupportedAbi where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    RawDylibUnsupportedAbi { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_raw_dylib_unsupported_abi);
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
133#[diag(metadata_raw_dylib_unsupported_abi)]
134pub struct RawDylibUnsupportedAbi {
135    #[primary_span]
136    pub span: Span,
137}
138
139#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            FailCreateFileEncoder where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    FailCreateFileEncoder { err: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_fail_create_file_encoder);
                        ;
                        diag.arg("err", __binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
140#[diag(metadata_fail_create_file_encoder)]
141pub struct FailCreateFileEncoder {
142    pub err: Error,
143}
144
145#[derive(const _: () =
    {
        impl<'_sess, 'a, G> rustc_errors::Diagnostic<'_sess, G> for
            FailWriteFile<'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 {
                    FailWriteFile { path: __binding_0, err: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_fail_write_file);
                        ;
                        diag.arg("path", __binding_0);
                        diag.arg("err", __binding_1);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
146#[diag(metadata_fail_write_file)]
147pub struct FailWriteFile<'a> {
148    pub path: &'a Path,
149    pub err: Error,
150}
151
152#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            CrateNotPanicRuntime where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    CrateNotPanicRuntime { crate_name: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_crate_not_panic_runtime);
                        ;
                        diag.arg("crate_name", __binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
153#[diag(metadata_crate_not_panic_runtime)]
154pub struct CrateNotPanicRuntime {
155    pub crate_name: Symbol,
156}
157
158#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            CrateNotCompilerBuiltins where G: rustc_errors::EmissionGuarantee
            {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    CrateNotCompilerBuiltins { crate_name: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_crate_not_compiler_builtins);
                        ;
                        diag.arg("crate_name", __binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
159#[diag(metadata_crate_not_compiler_builtins)]
160pub struct CrateNotCompilerBuiltins {
161    pub crate_name: Symbol,
162}
163
164#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            NoPanicStrategy where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    NoPanicStrategy {
                        crate_name: __binding_0, strategy: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_no_panic_strategy);
                        ;
                        diag.arg("crate_name", __binding_0);
                        diag.arg("strategy", __binding_1);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
165#[diag(metadata_no_panic_strategy)]
166pub struct NoPanicStrategy {
167    pub crate_name: Symbol,
168    pub strategy: PanicStrategy,
169}
170
171#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            NotProfilerRuntime where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    NotProfilerRuntime { crate_name: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_not_profiler_runtime);
                        ;
                        diag.arg("crate_name", __binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
172#[diag(metadata_not_profiler_runtime)]
173pub struct NotProfilerRuntime {
174    pub crate_name: Symbol,
175}
176
177#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            NoMultipleGlobalAlloc where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    NoMultipleGlobalAlloc {
                        span2: __binding_0, span1: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_no_multiple_global_alloc);
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            crate::fluent_generated::_subdiag::label);
                        diag.span_label(__binding_1,
                            crate::fluent_generated::metadata_prev_global_alloc);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
178#[diag(metadata_no_multiple_global_alloc)]
179pub struct NoMultipleGlobalAlloc {
180    #[primary_span]
181    #[label]
182    pub span2: Span,
183    #[label(metadata_prev_global_alloc)]
184    pub span1: Span,
185}
186
187#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            NoMultipleAllocErrorHandler where
            G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    NoMultipleAllocErrorHandler {
                        span2: __binding_0, span1: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_no_multiple_alloc_error_handler);
                        ;
                        diag.span(__binding_0);
                        diag.span_label(__binding_0,
                            crate::fluent_generated::_subdiag::label);
                        diag.span_label(__binding_1,
                            crate::fluent_generated::metadata_prev_alloc_error_handler);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
188#[diag(metadata_no_multiple_alloc_error_handler)]
189pub struct NoMultipleAllocErrorHandler {
190    #[primary_span]
191    #[label]
192    pub span2: Span,
193    #[label(metadata_prev_alloc_error_handler)]
194    pub span1: Span,
195}
196
197#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            ConflictingGlobalAlloc where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    ConflictingGlobalAlloc {
                        crate_name: __binding_0, other_crate_name: __binding_1 } =>
                        {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_conflicting_global_alloc);
                        ;
                        diag.arg("crate_name", __binding_0);
                        diag.arg("other_crate_name", __binding_1);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
198#[diag(metadata_conflicting_global_alloc)]
199pub struct ConflictingGlobalAlloc {
200    pub crate_name: Symbol,
201    pub other_crate_name: Symbol,
202}
203
204#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            ConflictingAllocErrorHandler where
            G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    ConflictingAllocErrorHandler {
                        crate_name: __binding_0, other_crate_name: __binding_1 } =>
                        {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_conflicting_alloc_error_handler);
                        ;
                        diag.arg("crate_name", __binding_0);
                        diag.arg("other_crate_name", __binding_1);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
205#[diag(metadata_conflicting_alloc_error_handler)]
206pub struct ConflictingAllocErrorHandler {
207    pub crate_name: Symbol,
208    pub other_crate_name: Symbol,
209}
210
211#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            GlobalAllocRequired where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    GlobalAllocRequired => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_global_alloc_required);
                        ;
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
212#[diag(metadata_global_alloc_required)]
213pub struct GlobalAllocRequired;
214
215#[derive(const _: () =
    {
        impl<'_sess, 'a, G> rustc_errors::Diagnostic<'_sess, G> for
            NoTransitiveNeedsDep<'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 {
                    NoTransitiveNeedsDep {
                        crate_name: __binding_0,
                        needs_crate_name: __binding_1,
                        deps_crate_name: __binding_2 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_no_transitive_needs_dep);
                        ;
                        diag.arg("crate_name", __binding_0);
                        diag.arg("needs_crate_name", __binding_1);
                        diag.arg("deps_crate_name", __binding_2);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
216#[diag(metadata_no_transitive_needs_dep)]
217pub struct NoTransitiveNeedsDep<'a> {
218    pub crate_name: Symbol,
219    pub needs_crate_name: &'a str,
220    pub deps_crate_name: Symbol,
221}
222
223#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            FailedWriteError where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    FailedWriteError { filename: __binding_0, err: __binding_1 }
                        => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_failed_write_error);
                        ;
                        diag.arg("filename", __binding_0);
                        diag.arg("err", __binding_1);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
224#[diag(metadata_failed_write_error)]
225pub struct FailedWriteError {
226    pub filename: PathBuf,
227    pub err: Error,
228}
229
230#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            FailedCopyToStdout where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    FailedCopyToStdout { filename: __binding_0, err: __binding_1
                        } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_failed_copy_to_stdout);
                        ;
                        diag.arg("filename", __binding_0);
                        diag.arg("err", __binding_1);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
231#[diag(metadata_failed_copy_to_stdout)]
232pub struct FailedCopyToStdout {
233    pub filename: PathBuf,
234    pub err: Error,
235}
236
237#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            BinaryOutputToTty where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    BinaryOutputToTty => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_binary_output_to_tty);
                        ;
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
238#[diag(metadata_binary_output_to_tty)]
239pub struct BinaryOutputToTty;
240
241#[derive(const _: () =
    {
        impl<'_sess, 'a, G> rustc_errors::Diagnostic<'_sess, G> for
            MissingNativeLibrary<'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 {
                    MissingNativeLibrary {
                        libname: __binding_0, suggest_name: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_missing_native_library);
                        ;
                        diag.arg("libname", __binding_0);
                        if let Some(__binding_1) = __binding_1 {
                            diag.subdiagnostic(__binding_1);
                        }
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
242#[diag(metadata_missing_native_library)]
243pub struct MissingNativeLibrary<'a> {
244    libname: &'a str,
245    #[subdiagnostic]
246    suggest_name: Option<SuggestLibraryName<'a>>,
247}
248
249impl<'a> MissingNativeLibrary<'a> {
250    pub fn new(libname: &'a str, verbatim: bool) -> Self {
251        // if it looks like the user has provided a complete filename rather just the bare lib name,
252        // then provide a note that they might want to try trimming the name
253        let suggested_name = if !verbatim {
254            if let Some(libname) = libname.strip_circumfix("lib", ".a") {
255                // this is a unix style filename so trim prefix & suffix
256                Some(libname)
257            } else if let Some(libname) = libname.strip_suffix(".lib") {
258                // this is a Windows style filename so just trim the suffix
259                Some(libname)
260            } else {
261                None
262            }
263        } else {
264            None
265        };
266
267        Self {
268            libname,
269            suggest_name: suggested_name
270                .map(|suggested_name| SuggestLibraryName { suggested_name }),
271        }
272    }
273}
274
275#[derive(const _: () =
    {
        impl<'a> rustc_errors::Subdiagnostic for SuggestLibraryName<'a> {
            fn add_to_diag<__G>(self, diag: &mut rustc_errors::Diag<'_, __G>)
                where __G: rustc_errors::EmissionGuarantee {
                match self {
                    SuggestLibraryName { suggested_name: __binding_0 } => {
                        diag.store_args();
                        diag.arg("suggested_name", __binding_0);
                        let __message =
                            diag.eagerly_translate(crate::fluent_generated::metadata_only_provide_library_name);
                        diag.help(__message);
                        diag.restore_args();
                    }
                }
            }
        }
    };Subdiagnostic)]
276#[help(metadata_only_provide_library_name)]
277pub struct SuggestLibraryName<'a> {
278    suggested_name: &'a str,
279}
280
281#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            FailedCreateTempdir where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    FailedCreateTempdir { err: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_failed_create_tempdir);
                        ;
                        diag.arg("err", __binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
282#[diag(metadata_failed_create_tempdir)]
283pub struct FailedCreateTempdir {
284    pub err: Error,
285}
286
287#[derive(const _: () =
    {
        impl<'_sess, 'a, G> rustc_errors::Diagnostic<'_sess, G> for
            FailedCreateFile<'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 {
                    FailedCreateFile { filename: __binding_0, err: __binding_1 }
                        => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_failed_create_file);
                        ;
                        diag.arg("filename", __binding_0);
                        diag.arg("err", __binding_1);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
288#[diag(metadata_failed_create_file)]
289pub struct FailedCreateFile<'a> {
290    pub filename: &'a Path,
291    pub err: Error,
292}
293
294#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            FailedCreateEncodedMetadata where
            G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    FailedCreateEncodedMetadata { err: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_failed_create_encoded_metadata);
                        ;
                        diag.arg("err", __binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
295#[diag(metadata_failed_create_encoded_metadata)]
296pub struct FailedCreateEncodedMetadata {
297    pub err: Error,
298}
299
300#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for NonAsciiName
            where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    NonAsciiName { span: __binding_0, crate_name: __binding_1 }
                        => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_non_ascii_name);
                        ;
                        diag.arg("crate_name", __binding_1);
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
301#[diag(metadata_non_ascii_name)]
302pub struct NonAsciiName {
303    #[primary_span]
304    pub span: Span,
305    pub crate_name: Symbol,
306}
307
308#[derive(const _: () =
    {
        impl<'_sess, 'a, G> rustc_errors::Diagnostic<'_sess, G> for
            ExternLocationNotExist<'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 {
                    ExternLocationNotExist {
                        span: __binding_0,
                        crate_name: __binding_1,
                        location: __binding_2 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_extern_location_not_exist);
                        ;
                        diag.arg("crate_name", __binding_1);
                        diag.arg("location", __binding_2);
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
309#[diag(metadata_extern_location_not_exist)]
310pub struct ExternLocationNotExist<'a> {
311    #[primary_span]
312    pub span: Span,
313    pub crate_name: Symbol,
314    pub location: &'a Path,
315}
316
317#[derive(const _: () =
    {
        impl<'_sess, 'a, G> rustc_errors::Diagnostic<'_sess, G> for
            ExternLocationNotFile<'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 {
                    ExternLocationNotFile {
                        span: __binding_0,
                        crate_name: __binding_1,
                        location: __binding_2 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_extern_location_not_file);
                        ;
                        diag.arg("crate_name", __binding_1);
                        diag.arg("location", __binding_2);
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
318#[diag(metadata_extern_location_not_file)]
319pub struct ExternLocationNotFile<'a> {
320    #[primary_span]
321    pub span: Span,
322    pub crate_name: Symbol,
323    pub location: &'a Path,
324}
325
326pub(crate) struct MultipleCandidates {
327    pub span: Span,
328    pub flavor: CrateFlavor,
329    pub crate_name: Symbol,
330    pub candidates: Vec<PathBuf>,
331}
332
333impl<G: EmissionGuarantee> Diagnostic<'_, G> for MultipleCandidates {
334    fn into_diag(self, dcx: DiagCtxtHandle<'_>, level: Level) -> Diag<'_, G> {
335        let mut diag = Diag::new(dcx, level, fluent::metadata_multiple_candidates);
336        diag.arg("crate_name", self.crate_name);
337        diag.arg("flavor", self.flavor);
338        diag.code(E0464);
339        diag.span(self.span);
340        for (i, candidate) in self.candidates.iter().enumerate() {
341            // FIXME: make this translatable
342            #[allow(rustc::untranslatable_diagnostic)]
343            diag.note(::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("candidate #{0}: {1}", i + 1,
                candidate.display()))
    })format!("candidate #{}: {}", i + 1, candidate.display()));
344        }
345        diag
346    }
347}
348
349#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            FullMetadataNotFound where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    FullMetadataNotFound {
                        span: __binding_0,
                        flavor: __binding_1,
                        crate_name: __binding_2 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_full_metadata_not_found);
                        ;
                        diag.arg("flavor", __binding_1);
                        diag.arg("crate_name", __binding_2);
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
350#[diag(metadata_full_metadata_not_found)]
351pub(crate) struct FullMetadataNotFound {
352    #[primary_span]
353    pub span: Span,
354    pub flavor: CrateFlavor,
355    pub crate_name: Symbol,
356}
357
358#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            SymbolConflictsCurrent where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    SymbolConflictsCurrent {
                        span: __binding_0, crate_name: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_symbol_conflicts_current);
                        diag.code(E0519);
                        ;
                        diag.arg("crate_name", __binding_1);
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
359#[diag(metadata_symbol_conflicts_current, code = E0519)]
360pub struct SymbolConflictsCurrent {
361    #[primary_span]
362    pub span: Span,
363    pub crate_name: Symbol,
364}
365
366#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            StableCrateIdCollision where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    StableCrateIdCollision {
                        span: __binding_0,
                        crate_name0: __binding_1,
                        crate_name1: __binding_2 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_stable_crate_id_collision);
                        ;
                        diag.arg("crate_name0", __binding_1);
                        diag.arg("crate_name1", __binding_2);
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
367#[diag(metadata_stable_crate_id_collision)]
368pub struct StableCrateIdCollision {
369    #[primary_span]
370    pub span: Span,
371    pub crate_name0: Symbol,
372    pub crate_name1: Symbol,
373}
374
375#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for DlError where
            G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    DlError {
                        span: __binding_0, path: __binding_1, err: __binding_2 } =>
                        {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_dl_error);
                        ;
                        diag.arg("path", __binding_1);
                        diag.arg("err", __binding_2);
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
376#[diag(metadata_dl_error)]
377pub struct DlError {
378    #[primary_span]
379    pub span: Span,
380    pub path: String,
381    pub err: String,
382}
383
384#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            NewerCrateVersion where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    NewerCrateVersion {
                        span: __binding_0,
                        crate_name: __binding_1,
                        add_info: __binding_2,
                        found_crates: __binding_3 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_newer_crate_version);
                        diag.code(E0460);
                        diag.note(crate::fluent_generated::_subdiag::note);
                        diag.note(crate::fluent_generated::metadata_found_crate_versions);
                        ;
                        diag.arg("crate_name", __binding_1);
                        diag.arg("add_info", __binding_2);
                        diag.arg("found_crates", __binding_3);
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
385#[diag(metadata_newer_crate_version, code = E0460)]
386#[note]
387#[note(metadata_found_crate_versions)]
388pub struct NewerCrateVersion {
389    #[primary_span]
390    pub span: Span,
391    pub crate_name: Symbol,
392    pub add_info: String,
393    pub found_crates: String,
394}
395
396#[derive(const _: () =
    {
        impl<'_sess, 'a, G> rustc_errors::Diagnostic<'_sess, G> for
            NoCrateWithTriple<'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 {
                    NoCrateWithTriple {
                        span: __binding_0,
                        crate_name: __binding_1,
                        locator_triple: __binding_2,
                        add_info: __binding_3,
                        found_crates: __binding_4 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_no_crate_with_triple);
                        diag.code(E0461);
                        diag.note(crate::fluent_generated::metadata_found_crate_versions);
                        ;
                        diag.arg("crate_name", __binding_1);
                        diag.arg("locator_triple", __binding_2);
                        diag.arg("add_info", __binding_3);
                        diag.arg("found_crates", __binding_4);
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
397#[diag(metadata_no_crate_with_triple, code = E0461)]
398#[note(metadata_found_crate_versions)]
399pub struct NoCrateWithTriple<'a> {
400    #[primary_span]
401    pub span: Span,
402    pub crate_name: Symbol,
403    pub locator_triple: &'a str,
404    pub add_info: String,
405    pub found_crates: String,
406}
407
408#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for FoundStaticlib
            where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    FoundStaticlib {
                        span: __binding_0,
                        crate_name: __binding_1,
                        add_info: __binding_2,
                        found_crates: __binding_3 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_found_staticlib);
                        diag.code(E0462);
                        diag.note(crate::fluent_generated::metadata_found_crate_versions);
                        diag.help(crate::fluent_generated::_subdiag::help);
                        ;
                        diag.arg("crate_name", __binding_1);
                        diag.arg("add_info", __binding_2);
                        diag.arg("found_crates", __binding_3);
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
409#[diag(metadata_found_staticlib, code = E0462)]
410#[note(metadata_found_crate_versions)]
411#[help]
412pub struct FoundStaticlib {
413    #[primary_span]
414    pub span: Span,
415    pub crate_name: Symbol,
416    pub add_info: String,
417    pub found_crates: String,
418}
419
420#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            IncompatibleRustc where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    IncompatibleRustc {
                        span: __binding_0,
                        crate_name: __binding_1,
                        add_info: __binding_2,
                        found_crates: __binding_3,
                        rustc_version: __binding_4 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_incompatible_rustc);
                        diag.code(E0514);
                        diag.note(crate::fluent_generated::metadata_found_crate_versions);
                        diag.help(crate::fluent_generated::_subdiag::help);
                        ;
                        diag.arg("crate_name", __binding_1);
                        diag.arg("add_info", __binding_2);
                        diag.arg("found_crates", __binding_3);
                        diag.arg("rustc_version", __binding_4);
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
421#[diag(metadata_incompatible_rustc, code = E0514)]
422#[note(metadata_found_crate_versions)]
423#[help]
424pub struct IncompatibleRustc {
425    #[primary_span]
426    pub span: Span,
427    pub crate_name: Symbol,
428    pub add_info: String,
429    pub found_crates: String,
430    pub rustc_version: String,
431}
432
433pub struct InvalidMetadataFiles {
434    pub span: Span,
435    pub crate_name: Symbol,
436    pub add_info: String,
437    pub crate_rejections: Vec<String>,
438}
439
440impl<G: EmissionGuarantee> Diagnostic<'_, G> for InvalidMetadataFiles {
441    #[track_caller]
442    fn into_diag(self, dcx: DiagCtxtHandle<'_>, level: Level) -> Diag<'_, G> {
443        let mut diag = Diag::new(dcx, level, fluent::metadata_invalid_meta_files);
444        diag.arg("crate_name", self.crate_name);
445        diag.arg("add_info", self.add_info);
446        diag.code(E0786);
447        diag.span(self.span);
448        for crate_rejection in self.crate_rejections {
449            // FIXME: make this translatable
450            #[allow(rustc::untranslatable_diagnostic)]
451            diag.note(crate_rejection);
452        }
453        diag
454    }
455}
456
457pub struct CannotFindCrate {
458    pub span: Span,
459    pub crate_name: Symbol,
460    pub add_info: String,
461    pub missing_core: bool,
462    pub current_crate: String,
463    pub is_nightly_build: bool,
464    pub profiler_runtime: Symbol,
465    pub locator_triple: TargetTuple,
466    pub is_ui_testing: bool,
467    pub is_tier_3: bool,
468}
469
470impl<G: EmissionGuarantee> Diagnostic<'_, G> for CannotFindCrate {
471    #[track_caller]
472    fn into_diag(self, dcx: DiagCtxtHandle<'_>, level: Level) -> Diag<'_, G> {
473        let mut diag = Diag::new(dcx, level, fluent::metadata_cannot_find_crate);
474        diag.arg("crate_name", self.crate_name);
475        diag.arg("current_crate", self.current_crate);
476        diag.arg("add_info", self.add_info);
477        diag.arg("locator_triple", self.locator_triple.tuple());
478        diag.code(E0463);
479        diag.span(self.span);
480        if self.crate_name == sym::std || self.crate_name == sym::core {
481            if self.missing_core {
482                diag.note(fluent::metadata_target_not_installed);
483            } else {
484                diag.note(fluent::metadata_target_no_std_support);
485            }
486
487            let has_precompiled_std = !self.is_tier_3;
488
489            if self.missing_core {
490                if "beta"env!("CFG_RELEASE_CHANNEL") == "dev" && !self.is_ui_testing {
491                    // Note: Emits the nicer suggestion only for the dev channel.
492                    diag.help(fluent::metadata_consider_adding_std);
493                } else if has_precompiled_std {
494                    // NOTE: this suggests using rustup, even though the user may not have it installed.
495                    // That's because they could choose to install it; or this may give them a hint which
496                    // target they need to install from their distro.
497                    diag.help(fluent::metadata_consider_downloading_target);
498                }
499            }
500
501            // Suggest using #![no_std]. #[no_core] is unstable and not really supported anyway.
502            // NOTE: this is a dummy span if `extern crate std` was injected by the compiler.
503            // If it's not a dummy, that means someone added `extern crate std` explicitly and
504            // `#![no_std]` won't help.
505            if !self.missing_core && self.span.is_dummy() {
506                diag.note(fluent::metadata_std_required);
507            }
508            // Recommend -Zbuild-std even on stable builds for Tier 3 targets because
509            // it's the recommended way to use the target, the user should switch to nightly.
510            if self.is_nightly_build || !has_precompiled_std {
511                diag.help(fluent::metadata_consider_building_std);
512            }
513        } else if self.crate_name == self.profiler_runtime {
514            diag.note(fluent::metadata_compiler_missing_profiler);
515        } else if self.crate_name.as_str().starts_with("rustc_") {
516            diag.help(fluent::metadata_install_missing_components);
517        }
518        diag.span_label(self.span, fluent::metadata_cant_find_crate);
519        diag
520    }
521}
522
523#[derive(const _: () =
    {
        impl<'_sess, 'a, G> rustc_errors::Diagnostic<'_sess, G> for
            CrateLocationUnknownType<'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 {
                    CrateLocationUnknownType {
                        span: __binding_0,
                        path: __binding_1,
                        crate_name: __binding_2 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_crate_location_unknown_type);
                        ;
                        diag.arg("path", __binding_1);
                        diag.arg("crate_name", __binding_2);
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
524#[diag(metadata_crate_location_unknown_type)]
525pub struct CrateLocationUnknownType<'a> {
526    #[primary_span]
527    pub span: Span,
528    pub path: &'a Path,
529    pub crate_name: Symbol,
530}
531
532#[derive(const _: () =
    {
        impl<'_sess, 'a, G> rustc_errors::Diagnostic<'_sess, G> for
            LibFilenameForm<'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 {
                    LibFilenameForm {
                        span: __binding_0,
                        dll_prefix: __binding_1,
                        dll_suffix: __binding_2 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_lib_filename_form);
                        ;
                        diag.arg("dll_prefix", __binding_1);
                        diag.arg("dll_suffix", __binding_2);
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
533#[diag(metadata_lib_filename_form)]
534pub struct LibFilenameForm<'a> {
535    #[primary_span]
536    pub span: Span,
537    pub dll_prefix: &'a str,
538    pub dll_suffix: &'a str,
539}
540
541#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for WasmCAbi where
            G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    WasmCAbi { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_wasm_c_abi);
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
542#[diag(metadata_wasm_c_abi)]
543pub(crate) struct WasmCAbi {
544    #[primary_span]
545    pub span: Span,
546}
547
548#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            IncompatibleTargetModifiers where
            G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    IncompatibleTargetModifiers {
                        span: __binding_0,
                        extern_crate: __binding_1,
                        local_crate: __binding_2,
                        flag_name: __binding_3,
                        flag_name_prefixed: __binding_4,
                        local_value: __binding_5,
                        extern_value: __binding_6 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_incompatible_target_modifiers);
                        diag.help(crate::fluent_generated::_subdiag::help);
                        diag.note(crate::fluent_generated::_subdiag::note);
                        diag.help(crate::fluent_generated::metadata_incompatible_target_modifiers_help_fix);
                        diag.help(crate::fluent_generated::metadata_incompatible_target_modifiers_help_allow);
                        ;
                        diag.arg("extern_crate", __binding_1);
                        diag.arg("local_crate", __binding_2);
                        diag.arg("flag_name", __binding_3);
                        diag.arg("flag_name_prefixed", __binding_4);
                        diag.arg("local_value", __binding_5);
                        diag.arg("extern_value", __binding_6);
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
549#[diag(metadata_incompatible_target_modifiers)]
550#[help]
551#[note]
552#[help(metadata_incompatible_target_modifiers_help_fix)]
553#[help(metadata_incompatible_target_modifiers_help_allow)]
554pub struct IncompatibleTargetModifiers {
555    #[primary_span]
556    pub span: Span,
557    pub extern_crate: Symbol,
558    pub local_crate: Symbol,
559    pub flag_name: String,
560    pub flag_name_prefixed: String,
561    pub local_value: String,
562    pub extern_value: String,
563}
564
565#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            IncompatibleTargetModifiersLMissed where
            G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    IncompatibleTargetModifiersLMissed {
                        span: __binding_0,
                        extern_crate: __binding_1,
                        local_crate: __binding_2,
                        flag_name: __binding_3,
                        flag_name_prefixed: __binding_4,
                        extern_value: __binding_5 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_incompatible_target_modifiers_l_missed);
                        diag.help(crate::fluent_generated::_subdiag::help);
                        diag.note(crate::fluent_generated::_subdiag::note);
                        diag.help(crate::fluent_generated::metadata_incompatible_target_modifiers_help_fix_l_missed);
                        diag.help(crate::fluent_generated::metadata_incompatible_target_modifiers_help_allow);
                        ;
                        diag.arg("extern_crate", __binding_1);
                        diag.arg("local_crate", __binding_2);
                        diag.arg("flag_name", __binding_3);
                        diag.arg("flag_name_prefixed", __binding_4);
                        diag.arg("extern_value", __binding_5);
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
566#[diag(metadata_incompatible_target_modifiers_l_missed)]
567#[help]
568#[note]
569#[help(metadata_incompatible_target_modifiers_help_fix_l_missed)]
570#[help(metadata_incompatible_target_modifiers_help_allow)]
571pub struct IncompatibleTargetModifiersLMissed {
572    #[primary_span]
573    pub span: Span,
574    pub extern_crate: Symbol,
575    pub local_crate: Symbol,
576    pub flag_name: String,
577    pub flag_name_prefixed: String,
578    pub extern_value: String,
579}
580
581#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            IncompatibleTargetModifiersRMissed where
            G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    IncompatibleTargetModifiersRMissed {
                        span: __binding_0,
                        extern_crate: __binding_1,
                        local_crate: __binding_2,
                        flag_name: __binding_3,
                        flag_name_prefixed: __binding_4,
                        local_value: __binding_5 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_incompatible_target_modifiers_r_missed);
                        diag.help(crate::fluent_generated::_subdiag::help);
                        diag.note(crate::fluent_generated::_subdiag::note);
                        diag.help(crate::fluent_generated::metadata_incompatible_target_modifiers_help_fix_r_missed);
                        diag.help(crate::fluent_generated::metadata_incompatible_target_modifiers_help_allow);
                        ;
                        diag.arg("extern_crate", __binding_1);
                        diag.arg("local_crate", __binding_2);
                        diag.arg("flag_name", __binding_3);
                        diag.arg("flag_name_prefixed", __binding_4);
                        diag.arg("local_value", __binding_5);
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
582#[diag(metadata_incompatible_target_modifiers_r_missed)]
583#[help]
584#[note]
585#[help(metadata_incompatible_target_modifiers_help_fix_r_missed)]
586#[help(metadata_incompatible_target_modifiers_help_allow)]
587pub struct IncompatibleTargetModifiersRMissed {
588    #[primary_span]
589    pub span: Span,
590    pub extern_crate: Symbol,
591    pub local_crate: Symbol,
592    pub flag_name: String,
593    pub flag_name_prefixed: String,
594    pub local_value: String,
595}
596
597#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            UnknownTargetModifierUnsafeAllowed where
            G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    UnknownTargetModifierUnsafeAllowed {
                        span: __binding_0, flag_name: __binding_1 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_unknown_target_modifier_unsafe_allowed);
                        ;
                        diag.arg("flag_name", __binding_1);
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
598#[diag(metadata_unknown_target_modifier_unsafe_allowed)]
599pub struct UnknownTargetModifierUnsafeAllowed {
600    #[primary_span]
601    pub span: Span,
602    pub flag_name: String,
603}
604
605#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            AsyncDropTypesInDependency where
            G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    AsyncDropTypesInDependency {
                        span: __binding_0,
                        extern_crate: __binding_1,
                        local_crate: __binding_2 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_async_drop_types_in_dependency);
                        diag.help(crate::fluent_generated::_subdiag::help);
                        ;
                        diag.arg("extern_crate", __binding_1);
                        diag.arg("local_crate", __binding_2);
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
606#[diag(metadata_async_drop_types_in_dependency)]
607#[help]
608pub struct AsyncDropTypesInDependency {
609    #[primary_span]
610    pub span: Span,
611    pub extern_crate: Symbol,
612    pub local_crate: Symbol,
613}
614
615#[derive(const _: () =
    {
        impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
            RawDylibMalformed where G: rustc_errors::EmissionGuarantee {
            #[track_caller]
            fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
                level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
                match self {
                    RawDylibMalformed { span: __binding_0 } => {
                        let mut diag =
                            rustc_errors::Diag::new(dcx, level,
                                crate::fluent_generated::metadata_raw_dylib_malformed);
                        ;
                        diag.span(__binding_0);
                        diag
                    }
                }
            }
        }
    };Diagnostic)]
616#[diag(metadata_raw_dylib_malformed)]
617pub struct RawDylibMalformed {
618    #[primary_span]
619    pub span: Span,
620}