1use rustc_abi::ExternAbi;
4use rustc_errors::codes::*;
5use rustc_errors::{
6 Applicability, Diag, DiagCtxtHandle, DiagSymbolList, Diagnostic, Level, MultiSpan, listify, msg,
7};
8use rustc_macros::{Diagnostic, Subdiagnostic};
9use rustc_middle::ty::{self, Ty};
10use rustc_span::{Ident, Span, Symbol};
11use rustc_structures::Limit;
12pub(crate) mod wrong_number_of_generic_args;
13
14mod precise_captures;
15pub(crate) use precise_captures::*;
16
17pub(crate) mod remove_or_use_generic;
18
19#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
ComplexConstArg {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
ComplexConstArg { span: __binding_0 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("complex const arguments must be placed inside of a `const` block")));
;
diag.span(__binding_0);
diag
}
}
}
}
};Diagnostic)]
20#[diag("complex const arguments must be placed inside of a `const` block")]
21pub(crate) struct ComplexConstArg {
22 #[primary_span]
23 pub span: Span,
24}
25
26#[derive(const _: () =
{
impl<'_sess, 'a, G> rustc_errors::Diagnostic<'_sess, G> for
AmbiguousAssocItem<'a> {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
AmbiguousAssocItem {
span: __binding_0,
assoc_kind: __binding_1,
assoc_ident: __binding_2,
qself: __binding_3 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("ambiguous associated {$assoc_kind} `{$assoc_ident}` in bounds of `{$qself}`")));
;
diag.arg("assoc_kind", __binding_1);
diag.arg("assoc_ident", __binding_2);
diag.arg("qself", __binding_3);
diag.span(__binding_0);
diag.span_label(__binding_0,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("ambiguous associated {$assoc_kind} `{$assoc_ident}`")));
diag
}
}
}
}
};Diagnostic)]
27#[diag("ambiguous associated {$assoc_kind} `{$assoc_ident}` in bounds of `{$qself}`")]
28pub(crate) struct AmbiguousAssocItem<'a> {
29 #[primary_span]
30 #[label("ambiguous associated {$assoc_kind} `{$assoc_ident}`")]
31 pub span: Span,
32 pub assoc_kind: &'static str,
33 pub assoc_ident: Ident,
34 pub qself: &'a str,
35}
36
37#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
AssocKindMismatch {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
AssocKindMismatch {
span: __binding_0,
expected: __binding_1,
got: __binding_2,
expected_because_label: __binding_3,
assoc_kind: __binding_4,
def_span: __binding_5,
bound_on_assoc_const_label: __binding_6,
wrap_in_braces_sugg: __binding_7 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected {$expected}, found {$got}")));
;
diag.arg("expected", __binding_1);
diag.arg("got", __binding_2);
diag.arg("assoc_kind", __binding_4);
diag.span(__binding_0);
diag.span_label(__binding_0,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("unexpected {$got}")));
if let Some(__binding_3) = __binding_3 {
diag.span_label(__binding_3,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected a {$expected} because of this associated {$expected}")));
}
diag.span_note(__binding_5,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("the associated {$assoc_kind} is defined here")));
if let Some(__binding_6) = __binding_6 {
diag.span_label(__binding_6,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("bounds are not allowed on associated constants")));
}
if let Some(__binding_7) = __binding_7 {
diag.subdiagnostic(__binding_7);
}
diag
}
}
}
}
};Diagnostic)]
38#[diag("expected {$expected}, found {$got}")]
39pub(crate) struct AssocKindMismatch {
40 #[primary_span]
41 #[label("unexpected {$got}")]
42 pub span: Span,
43 pub expected: &'static str,
44 pub got: &'static str,
45 #[label("expected a {$expected} because of this associated {$expected}")]
46 pub expected_because_label: Option<Span>,
47 pub assoc_kind: &'static str,
48 #[note("the associated {$assoc_kind} is defined here")]
49 pub def_span: Span,
50 #[label("bounds are not allowed on associated constants")]
51 pub bound_on_assoc_const_label: Option<Span>,
52 #[subdiagnostic]
53 pub wrap_in_braces_sugg: Option<AssocKindMismatchWrapInBracesSugg>,
54}
55
56#[derive(const _: () =
{
impl rustc_errors::Subdiagnostic for AssocKindMismatchWrapInBracesSugg
{
fn add_to_diag<__G>(self,
diag: &mut rustc_errors::Diag<'_, __G>) {
match self {
AssocKindMismatchWrapInBracesSugg {
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("consider adding braces here")),
&sub_args);
diag.multipart_suggestion_with_style(__message, suggestions,
rustc_errors::Applicability::MaybeIncorrect,
rustc_errors::SuggestionStyle::ShowCode);
}
}
}
}
};Subdiagnostic)]
57#[multipart_suggestion("consider adding braces here", applicability = "maybe-incorrect")]
58pub(crate) struct AssocKindMismatchWrapInBracesSugg {
59 #[suggestion_part(code = "{{ ")]
60 pub lo: Span,
61 #[suggestion_part(code = " }}")]
62 pub hi: Span,
63}
64
65#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
AssocItemIsPrivate {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
AssocItemIsPrivate {
span: __binding_0,
kind: __binding_1,
name: __binding_2,
defined_here_label: __binding_3 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("{$kind} `{$name}` is private")));
diag.code(E0624);
;
diag.arg("kind", __binding_1);
diag.arg("name", __binding_2);
diag.span(__binding_0);
diag.span_label(__binding_0,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("private {$kind}")));
diag.span_label(__binding_3,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("the {$kind} is defined here")));
diag
}
}
}
}
};Diagnostic)]
66#[diag("{$kind} `{$name}` is private", code = E0624)]
67pub(crate) struct AssocItemIsPrivate {
68 #[primary_span]
69 #[label("private {$kind}")]
70 pub span: Span,
71 pub kind: &'static str,
72 pub name: Ident,
73 #[label("the {$kind} is defined here")]
74 pub defined_here_label: Span,
75}
76
77#[derive(const _: () =
{
impl<'_sess, 'a, G> rustc_errors::Diagnostic<'_sess, G> for
AssocItemNotFound<'a> {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
AssocItemNotFound {
span: __binding_0,
assoc_ident: __binding_1,
assoc_kind: __binding_2,
qself: __binding_3,
label: __binding_4,
sugg: __binding_5,
within_macro_span: __binding_6 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("associated {$assoc_kind} `{$assoc_ident}` not found for `{$qself}`")));
diag.code(E0220);
;
diag.arg("assoc_ident", __binding_1);
diag.arg("assoc_kind", __binding_2);
diag.arg("qself", __binding_3);
diag.span(__binding_0);
if let Some(__binding_4) = __binding_4 {
diag.subdiagnostic(__binding_4);
}
if let Some(__binding_5) = __binding_5 {
diag.subdiagnostic(__binding_5);
}
if let Some(__binding_6) = __binding_6 {
diag.span_label(__binding_6,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("due to this macro variable")));
}
diag
}
}
}
}
};Diagnostic)]
78#[diag("associated {$assoc_kind} `{$assoc_ident}` not found for `{$qself}`", code = E0220)]
79pub(crate) struct AssocItemNotFound<'a> {
80 #[primary_span]
81 pub span: Span,
82 pub assoc_ident: Ident,
83 pub assoc_kind: &'static str,
84 pub qself: &'a str,
85 #[subdiagnostic]
86 pub label: Option<AssocItemNotFoundLabel<'a>>,
87 #[subdiagnostic]
88 pub sugg: Option<AssocItemNotFoundSugg<'a>>,
89 #[label("due to this macro variable")]
90 pub within_macro_span: Option<Span>,
91}
92
93#[derive(const _: () =
{
impl<'a> rustc_errors::Subdiagnostic for AssocItemNotFoundLabel<'a> {
fn add_to_diag<__G>(self,
diag: &mut rustc_errors::Diag<'_, __G>) {
match self {
AssocItemNotFoundLabel::NotFound {
span: __binding_0,
assoc_ident: __binding_1,
assoc_kind: __binding_2 } => {
let mut sub_args = rustc_errors::DiagArgMap::default();
sub_args.insert("assoc_ident".into(),
rustc_errors::IntoDiagArg::into_diag_arg(__binding_1,
&mut diag.long_ty_path));
sub_args.insert("assoc_kind".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("associated {$assoc_kind} `{$assoc_ident}` not found")),
&sub_args);
diag.span_label(__binding_0, __message);
}
AssocItemNotFoundLabel::FoundInOtherTrait {
span: __binding_0,
assoc_kind: __binding_1,
trait_name: __binding_2,
suggested_name: __binding_3,
identically_named: __binding_4 } => {
let mut sub_args = rustc_errors::DiagArgMap::default();
sub_args.insert("assoc_kind".into(),
rustc_errors::IntoDiagArg::into_diag_arg(__binding_1,
&mut diag.long_ty_path));
sub_args.insert("trait_name".into(),
rustc_errors::IntoDiagArg::into_diag_arg(__binding_2,
&mut diag.long_ty_path));
sub_args.insert("suggested_name".into(),
rustc_errors::IntoDiagArg::into_diag_arg(__binding_3,
&mut diag.long_ty_path));
sub_args.insert("identically_named".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("there is {$identically_named ->\n [true] an\n *[false] a similarly named\n } associated {$assoc_kind} `{$suggested_name}` in the trait `{$trait_name}`")),
&sub_args);
diag.span_label(__binding_0, __message);
}
}
}
}
};Subdiagnostic)]
94pub(crate) enum AssocItemNotFoundLabel<'a> {
95 #[label("associated {$assoc_kind} `{$assoc_ident}` not found")]
96 NotFound {
97 #[primary_span]
98 span: Span,
99 assoc_ident: Ident,
100 assoc_kind: &'static str,
101 },
102 #[label(
103 "there is {$identically_named ->
104 [true] an
105 *[false] a similarly named
106 } associated {$assoc_kind} `{$suggested_name}` in the trait `{$trait_name}`"
107 )]
108 FoundInOtherTrait {
109 #[primary_span]
110 span: Span,
111 assoc_kind: &'static str,
112 trait_name: &'a str,
113 suggested_name: Symbol,
114 identically_named: bool,
115 },
116}
117
118#[derive(const _: () =
{
impl<'a> rustc_errors::Subdiagnostic for AssocItemNotFoundSugg<'a> {
fn add_to_diag<__G>(self,
diag: &mut rustc_errors::Diag<'_, __G>) {
match self {
AssocItemNotFoundSugg::Similar {
span: __binding_0,
assoc_kind: __binding_1,
suggested_name: __binding_2 } => {
let __code_2 =
[::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("assoc_kind".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 is an associated {$assoc_kind} with a similar name")),
&sub_args);
diag.span_suggestions_with_style(__binding_0, __message,
__code_2, rustc_errors::Applicability::MaybeIncorrect,
rustc_errors::SuggestionStyle::ShowCode);
}
AssocItemNotFoundSugg::SimilarInOtherTrait {
span: __binding_0,
trait_name: __binding_1,
assoc_kind: __binding_2,
suggested_name: __binding_3 } => {
let __code_3 =
[::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}", __binding_3))
})].into_iter();
let mut sub_args = rustc_errors::DiagArgMap::default();
sub_args.insert("trait_name".into(),
rustc_errors::IntoDiagArg::into_diag_arg(__binding_1,
&mut diag.long_ty_path));
sub_args.insert("assoc_kind".into(),
rustc_errors::IntoDiagArg::into_diag_arg(__binding_2,
&mut diag.long_ty_path));
sub_args.insert("suggested_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("change the associated {$assoc_kind} name to use `{$suggested_name}` from `{$trait_name}`")),
&sub_args);
diag.span_suggestions_with_style(__binding_0, __message,
__code_3, rustc_errors::Applicability::MaybeIncorrect,
rustc_errors::SuggestionStyle::ShowAlways);
}
AssocItemNotFoundSugg::SimilarInOtherTraitQPath {
lo: __binding_0,
mi: __binding_1,
hi: __binding_2,
trait_ref: __binding_3,
suggested_name: __binding_4,
identically_named: __binding_5,
assoc_kind: __binding_6,
applicability: __binding_7 } => {
let mut suggestions = Vec::new();
let __code_4 =
::alloc::__export::must_use({
::alloc::fmt::format(format_args!("<"))
});
let __code_5 =
::alloc::__export::must_use({
::alloc::fmt::format(format_args!(" as {0}>", __binding_3))
});
let __code_6 =
::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}", __binding_4))
});
suggestions.push((__binding_0, __code_4));
suggestions.push((__binding_1, __code_5));
if let Some(__binding_2) = __binding_2 {
suggestions.push((__binding_2, __code_6));
}
let mut sub_args = rustc_errors::DiagArgMap::default();
sub_args.insert("suggested_name".into(),
rustc_errors::IntoDiagArg::into_diag_arg(__binding_4,
&mut diag.long_ty_path));
sub_args.insert("identically_named".into(),
rustc_errors::IntoDiagArg::into_diag_arg(__binding_5,
&mut diag.long_ty_path));
sub_args.insert("assoc_kind".into(),
rustc_errors::IntoDiagArg::into_diag_arg(__binding_6,
&mut diag.long_ty_path));
let __message =
rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("consider fully qualifying{$identically_named ->\n [true] {\"\"}\n *[false] {\" \"}and renaming\n } the associated {$assoc_kind}")),
&sub_args);
diag.multipart_suggestion_with_style(__message, suggestions,
__binding_7, rustc_errors::SuggestionStyle::ShowAlways);
}
AssocItemNotFoundSugg::Other {
span: __binding_0,
qself: __binding_1,
assoc_kind: __binding_2,
suggested_name: __binding_3 } => {
let __code_7 =
[::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}", __binding_3))
})].into_iter();
let mut sub_args = rustc_errors::DiagArgMap::default();
sub_args.insert("qself".into(),
rustc_errors::IntoDiagArg::into_diag_arg(__binding_1,
&mut diag.long_ty_path));
sub_args.insert("assoc_kind".into(),
rustc_errors::IntoDiagArg::into_diag_arg(__binding_2,
&mut diag.long_ty_path));
sub_args.insert("suggested_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("`{$qself}` has the following associated {$assoc_kind}")),
&sub_args);
diag.span_suggestions_with_style(__binding_0, __message,
__code_7, rustc_errors::Applicability::MaybeIncorrect,
rustc_errors::SuggestionStyle::ShowCode);
}
}
}
}
};Subdiagnostic)]
119
120pub(crate) enum AssocItemNotFoundSugg<'a> {
121 #[suggestion(
122 "there is an associated {$assoc_kind} with a similar name",
123 code = "{suggested_name}",
124 applicability = "maybe-incorrect"
125 )]
126 Similar {
127 #[primary_span]
128 span: Span,
129 assoc_kind: &'static str,
130 suggested_name: Symbol,
131 },
132 #[suggestion(
133 "change the associated {$assoc_kind} name to use `{$suggested_name}` from `{$trait_name}`",
134 code = "{suggested_name}",
135 style = "verbose",
136 applicability = "maybe-incorrect"
137 )]
138 SimilarInOtherTrait {
139 #[primary_span]
140 span: Span,
141 trait_name: &'a str,
142 assoc_kind: &'static str,
143 suggested_name: Symbol,
144 },
145 #[multipart_suggestion(
146 "consider fully qualifying{$identically_named ->
147 [true] {\"\"}
148 *[false] {\" \"}and renaming
149 } the associated {$assoc_kind}",
150 style = "verbose"
151 )]
152 SimilarInOtherTraitQPath {
153 #[suggestion_part(code = "<")]
154 lo: Span,
155 #[suggestion_part(code = " as {trait_ref}>")]
156 mi: Span,
157 #[suggestion_part(code = "{suggested_name}")]
158 hi: Option<Span>,
159 trait_ref: String,
160 suggested_name: Symbol,
161 identically_named: bool,
162 assoc_kind: &'static str,
163 #[applicability]
164 applicability: Applicability,
165 },
166 #[suggestion(
167 "`{$qself}` has the following associated {$assoc_kind}",
168 code = "{suggested_name}",
169 applicability = "maybe-incorrect"
170 )]
171 Other {
172 #[primary_span]
173 span: Span,
174 qself: &'a str,
175 assoc_kind: &'static str,
176 suggested_name: Symbol,
177 },
178}
179
180#[derive(const _: () =
{
impl<'_sess, 'a, G> rustc_errors::Diagnostic<'_sess, G> for
WrongNumberOfGenericArgumentsToIntrinsic<'a> {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
WrongNumberOfGenericArgumentsToIntrinsic {
span: __binding_0,
found: __binding_1,
expected: __binding_2,
descr: __binding_3 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("intrinsic has wrong number of {$descr} parameters: found {$found}, expected {$expected}")));
diag.code(E0094);
;
diag.arg("found", __binding_1);
diag.arg("expected", __binding_2);
diag.arg("descr", __binding_3);
diag.span(__binding_0);
diag.span_label(__binding_0,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected {$expected} {$descr} {$expected ->\n [one] parameter\n *[other] parameters\n }")));
diag
}
}
}
}
};Diagnostic)]
181#[diag("intrinsic has wrong number of {$descr} parameters: found {$found}, expected {$expected}", code = E0094)]
182pub(crate) struct WrongNumberOfGenericArgumentsToIntrinsic<'a> {
183 #[primary_span]
184 #[label(
185 "expected {$expected} {$descr} {$expected ->
186 [one] parameter
187 *[other] parameters
188 }"
189 )]
190 pub span: Span,
191 pub found: usize,
192 pub expected: usize,
193 pub descr: &'a str,
194}
195
196#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
UnrecognizedIntrinsicFunction {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
UnrecognizedIntrinsicFunction {
span: __binding_0, name: __binding_1 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("unrecognized intrinsic function: `{$name}`")));
diag.code(E0093);
diag.help(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("if you're adding an intrinsic, be sure to update `check_intrinsic_type`")));
;
diag.arg("name", __binding_1);
diag.span(__binding_0);
diag.span_label(__binding_0,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("unrecognized intrinsic")));
diag
}
}
}
}
};Diagnostic)]
197#[diag("unrecognized intrinsic function: `{$name}`", code = E0093)]
198#[help("if you're adding an intrinsic, be sure to update `check_intrinsic_type`")]
199pub(crate) struct UnrecognizedIntrinsicFunction {
200 #[primary_span]
201 #[label("unrecognized intrinsic")]
202 pub span: Span,
203 pub name: Symbol,
204}
205
206#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
LifetimesOrBoundsMismatchOnTrait {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
LifetimesOrBoundsMismatchOnTrait {
span: __binding_0,
generics_span: __binding_1,
where_span: __binding_2,
bounds_span: __binding_3,
item_kind: __binding_4,
ident: __binding_5 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("lifetime parameters or bounds on {$item_kind} `{$ident}` do not match the trait declaration")));
diag.code(E0195);
;
diag.arg("item_kind", __binding_4);
diag.arg("ident", __binding_5);
diag.span(__binding_0);
diag.span_label(__binding_0,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("lifetimes do not match {$item_kind} in trait")));
diag.span_label(__binding_1,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("lifetimes in impl do not match this {$item_kind} in trait")));
if let Some(__binding_2) = __binding_2 {
diag.span_label(__binding_2,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("this `where` clause might not match the one in the trait")));
}
for __binding_3 in __binding_3 {
diag.span_label(__binding_3,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("this bound might be missing in the impl")));
}
diag
}
}
}
}
};Diagnostic)]
207#[diag("lifetime parameters or bounds on {$item_kind} `{$ident}` do not match the trait declaration", code = E0195)]
208pub(crate) struct LifetimesOrBoundsMismatchOnTrait {
209 #[primary_span]
210 #[label("lifetimes do not match {$item_kind} in trait")]
211 pub span: Span,
212 #[label("lifetimes in impl do not match this {$item_kind} in trait")]
213 pub generics_span: Span,
214 #[label("this `where` clause might not match the one in the trait")]
215 pub where_span: Option<Span>,
216 #[label("this bound might be missing in the impl")]
217 pub bounds_span: Vec<Span>,
218 pub item_kind: &'static str,
219 pub ident: Ident,
220}
221
222#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
DropImplOnWrongItem {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
DropImplOnWrongItem { span: __binding_0, trait_: __binding_1
} => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("the `{$trait_}` trait may only be implemented for local structs, enums, and unions")));
diag.code(E0120);
;
diag.arg("trait_", __binding_1);
diag.span(__binding_0);
diag.span_label(__binding_0,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("must be a struct, enum, or union in the current crate")));
diag
}
}
}
}
};Diagnostic)]
223#[diag("the `{$trait_}` trait may only be implemented for local structs, enums, and unions", code = E0120)]
224pub(crate) struct DropImplOnWrongItem {
225 #[primary_span]
226 #[label("must be a struct, enum, or union in the current crate")]
227 pub span: Span,
228 pub trait_: Symbol,
229}
230
231#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
FieldAlreadyDeclared {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
FieldAlreadyDeclared::NotNested {
field_name: __binding_0,
span: __binding_1,
prev_span: __binding_2 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("field `{$field_name}` is already declared")));
diag.code(E0124);
;
diag.arg("field_name", __binding_0);
diag.span(__binding_1);
diag.span_label(__binding_1,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("field already declared")));
diag.span_label(__binding_2,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`{$field_name}` first declared here")));
diag
}
FieldAlreadyDeclared::CurrentNested {
field_name: __binding_0,
span: __binding_1,
nested_field_span: __binding_2,
help: __binding_3,
prev_span: __binding_4 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("field `{$field_name}` is already declared")));
;
diag.arg("field_name", __binding_0);
diag.span(__binding_1);
diag.span_label(__binding_1,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("field `{$field_name}` declared in this unnamed field")));
diag.span_note(__binding_2,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("field `{$field_name}` declared here")));
diag.subdiagnostic(__binding_3);
diag.span_label(__binding_4,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`{$field_name}` first declared here")));
diag
}
FieldAlreadyDeclared::PreviousNested {
field_name: __binding_0,
span: __binding_1,
prev_span: __binding_2,
prev_nested_field_span: __binding_3,
prev_help: __binding_4 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("field `{$field_name}` is already declared")));
;
diag.arg("field_name", __binding_0);
diag.span(__binding_1);
diag.span_label(__binding_1,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("field already declared")));
diag.span_label(__binding_2,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`{$field_name}` first declared here in this unnamed field")));
diag.span_note(__binding_3,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("field `{$field_name}` first declared here")));
diag.subdiagnostic(__binding_4);
diag
}
FieldAlreadyDeclared::BothNested {
field_name: __binding_0,
span: __binding_1,
nested_field_span: __binding_2,
help: __binding_3,
prev_span: __binding_4,
prev_nested_field_span: __binding_5,
prev_help: __binding_6 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("field `{$field_name}` is already declared")));
;
diag.arg("field_name", __binding_0);
diag.span(__binding_1);
diag.span_label(__binding_1,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("field `{$field_name}` declared in this unnamed field")));
diag.span_note(__binding_2,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("field `{$field_name}` declared here")));
diag.subdiagnostic(__binding_3);
diag.span_label(__binding_4,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`{$field_name}` first declared here in this unnamed field")));
diag.span_note(__binding_5,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("field `{$field_name}` first declared here")));
diag.subdiagnostic(__binding_6);
diag
}
}
}
}
};Diagnostic)]
232pub(crate) enum FieldAlreadyDeclared {
233 #[diag("field `{$field_name}` is already declared", code = E0124)]
234 NotNested {
235 field_name: Ident,
236 #[primary_span]
237 #[label("field already declared")]
238 span: Span,
239 #[label("`{$field_name}` first declared here")]
240 prev_span: Span,
241 },
242 #[diag("field `{$field_name}` is already declared")]
243 CurrentNested {
244 field_name: Ident,
245 #[primary_span]
246 #[label("field `{$field_name}` declared in this unnamed field")]
247 span: Span,
248 #[note("field `{$field_name}` declared here")]
249 nested_field_span: Span,
250 #[subdiagnostic]
251 help: FieldAlreadyDeclaredNestedHelp,
252 #[label("`{$field_name}` first declared here")]
253 prev_span: Span,
254 },
255 #[diag("field `{$field_name}` is already declared")]
256 PreviousNested {
257 field_name: Ident,
258 #[primary_span]
259 #[label("field already declared")]
260 span: Span,
261 #[label("`{$field_name}` first declared here in this unnamed field")]
262 prev_span: Span,
263 #[note("field `{$field_name}` first declared here")]
264 prev_nested_field_span: Span,
265 #[subdiagnostic]
266 prev_help: FieldAlreadyDeclaredNestedHelp,
267 },
268 #[diag("field `{$field_name}` is already declared")]
269 BothNested {
270 field_name: Ident,
271 #[primary_span]
272 #[label("field `{$field_name}` declared in this unnamed field")]
273 span: Span,
274 #[note("field `{$field_name}` declared here")]
275 nested_field_span: Span,
276 #[subdiagnostic]
277 help: FieldAlreadyDeclaredNestedHelp,
278 #[label("`{$field_name}` first declared here in this unnamed field")]
279 prev_span: Span,
280 #[note("field `{$field_name}` first declared here")]
281 prev_nested_field_span: Span,
282 #[subdiagnostic]
283 prev_help: FieldAlreadyDeclaredNestedHelp,
284 },
285}
286
287#[derive(const _: () =
{
impl rustc_errors::Subdiagnostic for FieldAlreadyDeclaredNestedHelp {
fn add_to_diag<__G>(self,
diag: &mut rustc_errors::Diag<'_, __G>) {
match self {
FieldAlreadyDeclaredNestedHelp { 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("fields from the type of this unnamed field are considered fields of the outer type")),
&sub_args);
diag.span_help(__binding_0, __message);
}
}
}
}
};Subdiagnostic)]
288#[help("fields from the type of this unnamed field are considered fields of the outer type")]
289pub(crate) struct FieldAlreadyDeclaredNestedHelp {
290 #[primary_span]
291 pub span: Span,
292}
293
294#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
CopyImplOnTypeWithDtor {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
CopyImplOnTypeWithDtor {
span: __binding_0, impl_: __binding_1 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("the trait `Copy` cannot be implemented for this type; the type has a destructor")));
diag.code(E0184);
;
diag.span(__binding_0);
diag.span_label(__binding_0,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`Copy` not allowed on types with destructors")));
diag.span_note(__binding_1,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("destructor declared here")));
diag
}
}
}
}
};Diagnostic)]
295#[diag("the trait `Copy` cannot be implemented for this type; the type has a destructor", code = E0184)]
296pub(crate) struct CopyImplOnTypeWithDtor {
297 #[primary_span]
298 #[label("`Copy` not allowed on types with destructors")]
299 pub span: Span,
300 #[note("destructor declared here")]
301 pub impl_: Span,
302}
303
304#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
CopyImplOnNonAdt {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
CopyImplOnNonAdt { span: __binding_0 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("the trait `Copy` cannot be implemented for this type")));
diag.code(E0206);
;
diag.span(__binding_0);
diag.span_label(__binding_0,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("type is not a structure or enumeration")));
diag
}
}
}
}
};Diagnostic)]
305#[diag("the trait `Copy` cannot be implemented for this type", code = E0206)]
306pub(crate) struct CopyImplOnNonAdt {
307 #[primary_span]
308 #[label("type is not a structure or enumeration")]
309 pub span: Span,
310}
311
312#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
ConstParamTyImplOnUnsized {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
ConstParamTyImplOnUnsized { span: __binding_0 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("the trait `ConstParamTy` may not be implemented for this type")));
;
diag.span(__binding_0);
diag.span_label(__binding_0,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("type is not `Sized`")));
diag
}
}
}
}
};Diagnostic)]
313#[diag("the trait `ConstParamTy` may not be implemented for this type")]
314pub(crate) struct ConstParamTyImplOnUnsized {
315 #[primary_span]
316 #[label("type is not `Sized`")]
317 pub span: Span,
318}
319
320#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
ConstParamTyImplOnNonAdt {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
ConstParamTyImplOnNonAdt { span: __binding_0 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("the trait `ConstParamTy` may not be implemented for this type")));
;
diag.span(__binding_0);
diag.span_label(__binding_0,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("type is not a structure or enumeration")));
diag
}
}
}
}
};Diagnostic)]
321#[diag("the trait `ConstParamTy` may not be implemented for this type")]
322pub(crate) struct ConstParamTyImplOnNonAdt {
323 #[primary_span]
324 #[label("type is not a structure or enumeration")]
325 pub span: Span,
326}
327
328#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
ConstParamTyImplOnNonExhaustive {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
ConstParamTyImplOnNonExhaustive {
defn_span: __binding_0, attr_span: __binding_1 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("the trait `ConstParamTy` may not be implemented for this type")));
;
diag.span(__binding_0);
diag.span_label(__binding_0,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("non exhaustive const params are forbidden")));
diag.span_label(__binding_1,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("caused by this attribute")));
diag
}
}
}
}
};Diagnostic)]
329#[diag("the trait `ConstParamTy` may not be implemented for this type")]
330pub(crate) struct ConstParamTyImplOnNonExhaustive {
331 #[primary_span]
332 #[label("non exhaustive const params are forbidden")]
333 pub defn_span: Span,
334 #[label("caused by this attribute")]
335 pub attr_span: Span,
336}
337
338#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
ConstParamTyFieldVisMismatch {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
ConstParamTyFieldVisMismatch { span: __binding_0 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("the trait `ConstParamTy` may not be implemented for this struct")));
;
diag.span(__binding_0);
diag.span_label(__binding_0,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("struct fields are less visible than the struct")));
diag
}
}
}
}
};Diagnostic)]
339#[diag("the trait `ConstParamTy` may not be implemented for this struct")]
340pub(crate) struct ConstParamTyFieldVisMismatch {
341 #[primary_span]
342 #[label("struct fields are less visible than the struct")]
343 pub span: Span,
344}
345
346#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
TraitObjectDeclaredWithNoTraits {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
TraitObjectDeclaredWithNoTraits {
span: __binding_0, trait_alias_span: __binding_1 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("at least one trait is required for an object type")));
diag.code(E0224);
;
diag.span(__binding_0);
if let Some(__binding_1) = __binding_1 {
diag.span_label(__binding_1,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("this alias does not contain a trait")));
}
diag
}
}
}
}
};Diagnostic)]
347#[diag("at least one trait is required for an object type", code = E0224)]
348pub(crate) struct TraitObjectDeclaredWithNoTraits {
349 #[primary_span]
350 pub span: Span,
351 #[label("this alias does not contain a trait")]
352 pub trait_alias_span: Option<Span>,
353}
354
355#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
AmbiguousLifetimeBound {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
AmbiguousLifetimeBound { span: __binding_0 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("ambiguous lifetime bound, explicit lifetime bound required")));
diag.code(E0227);
;
diag.span(__binding_0);
diag
}
}
}
}
};Diagnostic)]
356#[diag("ambiguous lifetime bound, explicit lifetime bound required", code = E0227)]
357pub(crate) struct AmbiguousLifetimeBound {
358 #[primary_span]
359 pub span: Span,
360}
361
362#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
AssocItemConstraintsNotAllowedHere {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
AssocItemConstraintsNotAllowedHere {
span: __binding_0, fn_trait_expansion: __binding_1 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("associated item constraints are not allowed here")));
diag.code(E0229);
;
diag.span(__binding_0);
diag.span_label(__binding_0,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("associated item constraint not allowed here")));
if let Some(__binding_1) = __binding_1 {
diag.subdiagnostic(__binding_1);
}
diag
}
}
}
}
};Diagnostic)]
363#[diag("associated item constraints are not allowed here", code = E0229)]
364pub(crate) struct AssocItemConstraintsNotAllowedHere {
365 #[primary_span]
366 #[label("associated item constraint not allowed here")]
367 pub span: Span,
368
369 #[subdiagnostic]
370 pub fn_trait_expansion: Option<ParenthesizedFnTraitExpansion>,
371}
372
373#[derive(const _: () =
{
impl<'_sess, 'tcx, G> rustc_errors::Diagnostic<'_sess, G> for
ParamInTyOfAssocConstBinding<'tcx> {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
ParamInTyOfAssocConstBinding {
span: __binding_0,
assoc_const: __binding_1,
param_name: __binding_2,
param_def_kind: __binding_3,
param_category: __binding_4,
param_defined_here_label: __binding_5,
ty_note: __binding_6 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("the type of the associated constant `{$assoc_const}` must not depend on {$param_category ->\n [self] `Self`\n [synthetic] `impl Trait`\n *[normal] generic parameters\n }")));
;
diag.arg("assoc_const", __binding_1);
diag.arg("param_name", __binding_2);
diag.arg("param_def_kind", __binding_3);
diag.arg("param_category", __binding_4);
diag.span(__binding_0);
diag.span_label(__binding_0,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("its type must not depend on {$param_category ->\n [self] `Self`\n [synthetic] `impl Trait`\n *[normal] the {$param_def_kind} `{$param_name}`\n }")));
if let Some(__binding_5) = __binding_5 {
diag.span_label(__binding_5,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("{$param_category ->\n [synthetic] the `impl Trait` is specified here\n *[normal] the {$param_def_kind} `{$param_name}` is defined here\n }")));
}
if let Some(__binding_6) = __binding_6 {
diag.subdiagnostic(__binding_6);
}
diag
}
}
}
}
};Diagnostic)]
374#[diag(
375 "the type of the associated constant `{$assoc_const}` must not depend on {$param_category ->
376 [self] `Self`
377 [synthetic] `impl Trait`
378 *[normal] generic parameters
379 }"
380)]
381pub(crate) struct ParamInTyOfAssocConstBinding<'tcx> {
382 #[primary_span]
383 #[label(
384 "its type must not depend on {$param_category ->
385 [self] `Self`
386 [synthetic] `impl Trait`
387 *[normal] the {$param_def_kind} `{$param_name}`
388 }"
389 )]
390 pub span: Span,
391 pub assoc_const: Ident,
392 pub param_name: Symbol,
393 pub param_def_kind: &'static str,
394 pub param_category: &'static str,
395 #[label(
396 "{$param_category ->
397 [synthetic] the `impl Trait` is specified here
398 *[normal] the {$param_def_kind} `{$param_name}` is defined here
399 }"
400 )]
401 pub param_defined_here_label: Option<Span>,
402 #[subdiagnostic]
403 pub ty_note: Option<TyOfAssocConstBindingNote<'tcx>>,
404}
405
406#[derive(const _: () =
{
impl<'tcx> rustc_errors::Subdiagnostic for
TyOfAssocConstBindingNote<'tcx> {
fn add_to_diag<__G>(self,
diag: &mut rustc_errors::Diag<'_, __G>) {
match self {
TyOfAssocConstBindingNote {
assoc_const: __binding_0, ty: __binding_1 } => {
let mut sub_args = rustc_errors::DiagArgMap::default();
sub_args.insert("assoc_const".into(),
rustc_errors::IntoDiagArg::into_diag_arg(__binding_0,
&mut diag.long_ty_path));
sub_args.insert("ty".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("`{$assoc_const}` has type `{$ty}`")),
&sub_args);
diag.note(__message);
}
}
}
}
};Subdiagnostic, #[automatically_derived]
#[doc(hidden)]
unsafe impl<'tcx> ::core::clone::TrivialClone for
TyOfAssocConstBindingNote<'tcx> {
}
#[automatically_derived]
impl<'tcx> ::core::clone::Clone for TyOfAssocConstBindingNote<'tcx> {
#[inline]
fn clone(&self) -> TyOfAssocConstBindingNote<'tcx> {
let _: ::core::clone::AssertParamIsClone<Ident>;
let _: ::core::clone::AssertParamIsClone<Ty<'tcx>>;
*self
}
}Clone, #[automatically_derived]
impl<'tcx> ::core::marker::Copy for TyOfAssocConstBindingNote<'tcx> { }Copy)]
407#[note("`{$assoc_const}` has type `{$ty}`")]
408pub(crate) struct TyOfAssocConstBindingNote<'tcx> {
409 pub assoc_const: Ident,
410 pub ty: Ty<'tcx>,
411}
412
413#[derive(const _: () =
{
impl<'_sess, 'tcx, G> rustc_errors::Diagnostic<'_sess, G> for
EscapingBoundVarInTyOfAssocConstBinding<'tcx> {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
EscapingBoundVarInTyOfAssocConstBinding {
span: __binding_0,
assoc_const: __binding_1,
var_name: __binding_2,
var_def_kind: __binding_3,
var_defined_here_label: __binding_4,
ty_note: __binding_5 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("the type of the associated constant `{$assoc_const}` cannot capture late-bound generic parameters")));
;
diag.arg("assoc_const", __binding_1);
diag.arg("var_name", __binding_2);
diag.arg("var_def_kind", __binding_3);
diag.span(__binding_0);
diag.span_label(__binding_0,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("its type cannot capture the late-bound {$var_def_kind} `{$var_name}`")));
diag.span_label(__binding_4,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("the late-bound {$var_def_kind} `{$var_name}` is defined here")));
if let Some(__binding_5) = __binding_5 {
diag.subdiagnostic(__binding_5);
}
diag
}
}
}
}
};Diagnostic)]
414#[diag(
415 "the type of the associated constant `{$assoc_const}` cannot capture late-bound generic parameters"
416)]
417pub(crate) struct EscapingBoundVarInTyOfAssocConstBinding<'tcx> {
418 #[primary_span]
419 #[label("its type cannot capture the late-bound {$var_def_kind} `{$var_name}`")]
420 pub span: Span,
421 pub assoc_const: Ident,
422 pub var_name: Symbol,
423 pub var_def_kind: &'static str,
424 #[label("the late-bound {$var_def_kind} `{$var_name}` is defined here")]
425 pub var_defined_here_label: Span,
426 #[subdiagnostic]
427 pub ty_note: Option<TyOfAssocConstBindingNote<'tcx>>,
428}
429
430#[derive(const _: () =
{
impl rustc_errors::Subdiagnostic for ParenthesizedFnTraitExpansion {
fn add_to_diag<__G>(self,
diag: &mut rustc_errors::Diag<'_, __G>) {
match self {
ParenthesizedFnTraitExpansion {
span: __binding_0, expanded_type: __binding_1 } => {
let mut sub_args = rustc_errors::DiagArgMap::default();
sub_args.insert("expanded_type".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("parenthesized trait syntax expands to `{$expanded_type}`")),
&sub_args);
diag.span_help(__binding_0, __message);
}
}
}
}
};Subdiagnostic)]
431#[help("parenthesized trait syntax expands to `{$expanded_type}`")]
432pub(crate) struct ParenthesizedFnTraitExpansion {
433 #[primary_span]
434 pub span: Span,
435
436 pub expanded_type: String,
437}
438
439#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
ValueOfAssociatedStructAlreadySpecified {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
ValueOfAssociatedStructAlreadySpecified {
span: __binding_0,
prev_span: __binding_1,
item_name: __binding_2,
def_path: __binding_3 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("the value of the associated type `{$item_name}` in trait `{$def_path}` is already specified")));
diag.code(E0719);
;
diag.arg("item_name", __binding_2);
diag.arg("def_path", __binding_3);
diag.span(__binding_0);
diag.span_label(__binding_0,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("re-bound here")));
diag.span_label(__binding_1,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`{$item_name}` bound here first")));
diag
}
}
}
}
};Diagnostic)]
440#[diag("the value of the associated type `{$item_name}` in trait `{$def_path}` is already specified", code = E0719)]
441pub(crate) struct ValueOfAssociatedStructAlreadySpecified {
442 #[primary_span]
443 #[label("re-bound here")]
444 pub span: Span,
445 #[label("`{$item_name}` bound here first")]
446 pub prev_span: Span,
447 pub item_name: Ident,
448 pub def_path: String,
449}
450
451#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
UnconstrainedOpaqueType {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
UnconstrainedOpaqueType {
span: __binding_0, name: __binding_1, what: __binding_2 } =>
{
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("unconstrained opaque type")));
diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`{$name}` must be used in combination with a concrete type within the same {$what}")));
;
diag.arg("name", __binding_1);
diag.arg("what", __binding_2);
diag.span(__binding_0);
diag
}
}
}
}
};Diagnostic)]
452#[diag("unconstrained opaque type")]
453#[note("`{$name}` must be used in combination with a concrete type within the same {$what}")]
454pub(crate) struct UnconstrainedOpaqueType {
455 #[primary_span]
456 pub span: Span,
457 pub name: Ident,
458 pub what: &'static str,
459}
460
461pub(crate) struct MissingGenericParams {
462 pub span: Span,
463 pub def_span: Span,
464 pub span_snippet: Option<String>,
465 pub missing_generic_params: Vec<(Symbol, ty::GenericParamDefKind)>,
466 pub empty_generic_args: bool,
467}
468
469impl<'a, G> Diagnostic<'a, G> for MissingGenericParams {
471 #[track_caller]
472 fn into_diag(self, dcx: DiagCtxtHandle<'a>, level: Level) -> Diag<'a, G> {
473 let mut err = Diag::new(
474 dcx,
475 level,
476 rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("the {$descr} {$parameterCount ->\n [one] parameter\n *[other] parameters\n } {$parameters} must be explicitly specified"))msg!(
477 "the {$descr} {$parameterCount ->
478 [one] parameter
479 *[other] parameters
480 } {$parameters} must be explicitly specified"
481 ),
482 );
483 err.span(self.span);
484 err.code(E0393);
485 err.span_label(
486 self.def_span,
487 rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("{$descr} {$parameterCount ->\n [one] parameter\n *[other] parameters\n } {$parameters} must be specified for this"))msg!(
488 "{$descr} {$parameterCount ->
489 [one] parameter
490 *[other] parameters
491 } {$parameters} must be specified for this"
492 ),
493 );
494
495 enum Descr {
496 Generic,
497 Type,
498 Const,
499 }
500
501 let mut descr = None;
502 for (_, kind) in &self.missing_generic_params {
503 descr = match (&descr, kind) {
504 (None, ty::GenericParamDefKind::Type { .. }) => Some(Descr::Type),
505 (None, ty::GenericParamDefKind::Const { .. }) => Some(Descr::Const),
506 (Some(Descr::Type), ty::GenericParamDefKind::Const { .. })
507 | (Some(Descr::Const), ty::GenericParamDefKind::Type { .. }) => {
508 Some(Descr::Generic)
509 }
510 _ => continue,
511 }
512 }
513
514 err.arg(
515 "descr",
516 match descr.unwrap() {
517 Descr::Generic => "generic",
518 Descr::Type => "type",
519 Descr::Const => "const",
520 },
521 );
522 err.arg("parameterCount", self.missing_generic_params.len());
523 err.arg(
524 "parameters",
525 listify(&self.missing_generic_params, |(n, _)| ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("`{0}`", n))
})format!("`{n}`")).unwrap(),
526 );
527
528 let mut suggested = false;
529 if let Some(snippet) = self.span_snippet
532 && self.empty_generic_args
533 {
534 if snippet.ends_with('>') {
535 } else {
539 err.span_suggestion_verbose(
542 self.span.shrink_to_hi(),
543 rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("explicitly specify the {$descr} {$parameterCount ->\n [one] parameter\n *[other] parameters\n }"))msg!(
544 "explicitly specify the {$descr} {$parameterCount ->
545 [one] parameter
546 *[other] parameters
547 }"
548 ),
549 ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("<{0}>",
self.missing_generic_params.iter().map(|(n, _)|
::alloc::__export::must_use({
::alloc::fmt::format(format_args!("/* {0} */", n))
})).collect::<Vec<_>>().join(", ")))
})format!(
550 "<{}>",
551 self.missing_generic_params
552 .iter()
553 .map(|(n, _)| format!("/* {n} */"))
554 .collect::<Vec<_>>()
555 .join(", ")
556 ),
557 Applicability::HasPlaceholders,
558 );
559 suggested = true;
560 }
561 }
562 if !suggested {
563 err.span_label(
564 self.span,
565 rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("missing {$parameterCount ->\n [one] reference\n *[other] references\n } to {$parameters}"))msg!(
566 "missing {$parameterCount ->
567 [one] reference
568 *[other] references
569 } to {$parameters}"
570 ),
571 );
572 }
573
574 err.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("because the parameter {$parameterCount ->\n [one] default references\n *[other] defaults reference\n } `Self`, the {$parameterCount ->\n [one] parameter\n *[other] parameters\n } must be specified on the trait object type"))msg!(
575 "because the parameter {$parameterCount ->
576 [one] default references
577 *[other] defaults reference
578 } `Self`, the {$parameterCount ->
579 [one] parameter
580 *[other] parameters
581 } must be specified on the trait object type"
582 ));
583 err
584 }
585}
586
587#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
ManualImplementation {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
ManualImplementation {
span: __binding_0, trait_name: __binding_1 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("manual implementations of `{$trait_name}` are experimental")));
diag.code(E0183);
diag.help(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("add `#![feature(unboxed_closures)]` to the crate attributes to enable")));
;
diag.arg("trait_name", __binding_1);
diag.span(__binding_0);
diag.span_label(__binding_0,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("manual implementations of `{$trait_name}` are experimental")));
diag
}
}
}
}
};Diagnostic)]
588#[diag("manual implementations of `{$trait_name}` are experimental", code = E0183)]
589#[help("add `#![feature(unboxed_closures)]` to the crate attributes to enable")]
590pub(crate) struct ManualImplementation {
591 #[primary_span]
592 #[label("manual implementations of `{$trait_name}` are experimental")]
593 pub span: Span,
594 pub trait_name: String,
595}
596
597#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
GenericArgsOnOverriddenImpl {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
GenericArgsOnOverriddenImpl { span: __binding_0 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("could not resolve generic parameters on overridden impl")));
;
diag.span(__binding_0);
diag
}
}
}
}
};Diagnostic)]
598#[diag("could not resolve generic parameters on overridden impl")]
599pub(crate) struct GenericArgsOnOverriddenImpl {
600 #[primary_span]
601 pub span: Span,
602}
603
604#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
ConstImplForNonConstTrait {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
ConstImplForNonConstTrait {
trait_ref_span: __binding_0,
trait_name: __binding_1,
suggestion: __binding_2,
suggestion_pre: __binding_3,
marking: __binding_4,
adding: __binding_5 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("const `impl` for trait `{$trait_name}` which is not `const`")));
let __code_8 =
[::alloc::__export::must_use({
::alloc::fmt::format(format_args!("const "))
})].into_iter();
;
diag.arg("trait_name", __binding_1);
diag.arg("suggestion_pre", __binding_3);
diag.span(__binding_0);
diag.span_label(__binding_0,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("this trait is not `const`")));
if let Some(__binding_2) = __binding_2 {
diag.span_suggestions_with_style(__binding_2,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("{$suggestion_pre}mark `{$trait_name}` as `const` to allow it to have `const` implementations")),
__code_8, rustc_errors::Applicability::MachineApplicable,
rustc_errors::SuggestionStyle::ShowAlways);
}
diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("marking a trait with `const` ensures all default method bodies are `const`")));
diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("adding a non-const method body in the future would be a breaking change")));
diag
}
}
}
}
};Diagnostic)]
605#[diag("const `impl` for trait `{$trait_name}` which is not `const`")]
606pub(crate) struct ConstImplForNonConstTrait {
607 #[primary_span]
608 #[label("this trait is not `const`")]
609 pub trait_ref_span: Span,
610 pub trait_name: String,
611 #[suggestion(
612 "{$suggestion_pre}mark `{$trait_name}` as `const` to allow it to have `const` implementations",
613 applicability = "machine-applicable",
614 code = "const ",
615 style = "verbose"
616 )]
617 pub suggestion: Option<Span>,
618 pub suggestion_pre: &'static str,
619 #[note("marking a trait with `const` ensures all default method bodies are `const`")]
620 pub marking: (),
621 #[note("adding a non-const method body in the future would be a breaking change")]
622 pub adding: (),
623}
624
625#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
ConstBoundForNonConstTrait {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
ConstBoundForNonConstTrait {
span: __binding_0,
modifier: __binding_1,
def_span: __binding_2,
suggestion: __binding_3,
suggestion_pre: __binding_4,
trait_name: __binding_5 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`{$modifier}` can only be applied to `const` traits")));
let __code_9 =
[::alloc::__export::must_use({
::alloc::fmt::format(format_args!("const "))
})].into_iter();
;
diag.arg("modifier", __binding_1);
diag.arg("suggestion_pre", __binding_4);
diag.arg("trait_name", __binding_5);
diag.span(__binding_0);
diag.span_label(__binding_0,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("can't be applied to `{$trait_name}`")));
if let Some(__binding_2) = __binding_2 {
diag.span_note(__binding_2,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`{$trait_name}` can't be used with `{$modifier}` because it isn't `const`")));
}
if let Some(__binding_3) = __binding_3 {
diag.span_suggestions_with_style(__binding_3,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("{$suggestion_pre}mark `{$trait_name}` as `const` to allow it to have `const` implementations")),
__code_9, rustc_errors::Applicability::MachineApplicable,
rustc_errors::SuggestionStyle::ShowAlways);
}
diag
}
}
}
}
};Diagnostic)]
626#[diag("`{$modifier}` can only be applied to `const` traits")]
627pub(crate) struct ConstBoundForNonConstTrait {
628 #[primary_span]
629 #[label("can't be applied to `{$trait_name}`")]
630 pub span: Span,
631 pub modifier: &'static str,
632 #[note("`{$trait_name}` can't be used with `{$modifier}` because it isn't `const`")]
633 pub def_span: Option<Span>,
634 #[suggestion(
635 "{$suggestion_pre}mark `{$trait_name}` as `const` to allow it to have `const` implementations",
636 applicability = "machine-applicable",
637 code = "const ",
638 style = "verbose"
639 )]
640 pub suggestion: Option<Span>,
641 pub suggestion_pre: &'static str,
642 pub trait_name: String,
643}
644
645#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for SelfInImplSelf
{
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
SelfInImplSelf { span: __binding_0, note: __binding_1 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`Self` is not valid in the self type of an impl block")));
;
diag.span(__binding_0);
diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("replace `Self` with a different type")));
diag
}
}
}
}
};Diagnostic)]
646#[diag("`Self` is not valid in the self type of an impl block")]
647pub(crate) struct SelfInImplSelf {
648 #[primary_span]
649 pub span: MultiSpan,
650 #[note("replace `Self` with a different type")]
651 pub note: (),
652}
653
654#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for LinkageType {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
LinkageType { span: __binding_0 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("invalid type for variable with `#[linkage]` attribute")));
diag.code(E0791);
;
diag.span(__binding_0);
diag
}
}
}
}
};Diagnostic)]
655#[diag("invalid type for variable with `#[linkage]` attribute", code = E0791)]
656pub(crate) struct LinkageType {
657 #[primary_span]
658 pub span: Span,
659}
660
661#[derive(const _: () =
{
impl<'_sess, 'a, G> rustc_errors::Diagnostic<'_sess, G> for
AutoDerefReachedRecursionLimit<'a> {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
AutoDerefReachedRecursionLimit {
span: __binding_0,
ty: __binding_1,
suggested_limit: __binding_2,
crate_name: __binding_3 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("reached the recursion limit while auto-dereferencing `{$ty}`")));
diag.help(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("consider increasing the recursion limit by adding a `#![recursion_limit = \"{$suggested_limit}\"]` attribute to your crate (`{$crate_name}`)")));
diag.code(E0055);
;
diag.arg("ty", __binding_1);
diag.arg("suggested_limit", __binding_2);
diag.arg("crate_name", __binding_3);
diag.span(__binding_0);
diag.span_label(__binding_0,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("deref recursion limit reached")));
diag
}
}
}
}
};Diagnostic)]
662#[help(
663 "consider increasing the recursion limit by adding a `#![recursion_limit = \"{$suggested_limit}\"]` attribute to your crate (`{$crate_name}`)"
664)]
665#[diag("reached the recursion limit while auto-dereferencing `{$ty}`", code = E0055)]
666pub(crate) struct AutoDerefReachedRecursionLimit<'a> {
667 #[primary_span]
668 #[label("deref recursion limit reached")]
669 pub span: Span,
670 pub ty: Ty<'a>,
671 pub suggested_limit: Limit,
672 pub crate_name: Symbol,
673}
674
675#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
WhereClauseOnMain {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
WhereClauseOnMain {
span: __binding_0, generics_span: __binding_1 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`main` function is not allowed to have a `where` clause")));
diag.code(E0646);
;
diag.span(__binding_0);
if let Some(__binding_1) = __binding_1 {
diag.span_label(__binding_1,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`main` cannot have a `where` clause")));
}
diag
}
}
}
}
};Diagnostic)]
676#[diag("`main` function is not allowed to have a `where` clause", code = E0646)]
677pub(crate) struct WhereClauseOnMain {
678 #[primary_span]
679 pub span: Span,
680 #[label("`main` cannot have a `where` clause")]
681 pub generics_span: Option<Span>,
682}
683
684#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
TrackCallerOnMain {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
TrackCallerOnMain {
span: __binding_0, annotated: __binding_1 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`main` function is not allowed to be `#[track_caller]`")));
let __code_10 =
[::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 this annotation")),
__code_10, rustc_errors::Applicability::MaybeIncorrect,
rustc_errors::SuggestionStyle::ShowCode);
diag.span_label(__binding_1,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`main` function is not allowed to be `#[track_caller]`")));
diag
}
}
}
}
};Diagnostic)]
685#[diag("`main` function is not allowed to be `#[track_caller]`")]
686pub(crate) struct TrackCallerOnMain {
687 #[primary_span]
688 #[suggestion("remove this annotation", applicability = "maybe-incorrect", code = "")]
689 pub span: Span,
690 #[label("`main` function is not allowed to be `#[track_caller]`")]
691 pub annotated: Span,
692}
693
694#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
TargetFeatureOnMain {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
TargetFeatureOnMain { main: __binding_0 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`main` function is not allowed to have `#[target_feature]`")));
;
diag.span(__binding_0);
diag.span_label(__binding_0,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`main` function is not allowed to have `#[target_feature]`")));
diag
}
}
}
}
};Diagnostic)]
695#[diag("`main` function is not allowed to have `#[target_feature]`")]
696pub(crate) struct TargetFeatureOnMain {
697 #[primary_span]
698 #[label("`main` function is not allowed to have `#[target_feature]`")]
699 pub main: Span,
700}
701
702#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
MainFunctionReturnTypeGeneric {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
MainFunctionReturnTypeGeneric { span: __binding_0 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`main` function return type is not allowed to have generic parameters")));
diag.code(E0131);
;
diag.span(__binding_0);
diag
}
}
}
}
};Diagnostic)]
703#[diag("`main` function return type is not allowed to have generic parameters", code = E0131)]
704pub(crate) struct MainFunctionReturnTypeGeneric {
705 #[primary_span]
706 pub span: Span,
707}
708
709#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
MainFunctionAsync {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
MainFunctionAsync {
span: __binding_0, asyncness: __binding_1 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`main` function is not allowed to be `async`")));
diag.code(E0752);
;
diag.span(__binding_0);
if let Some(__binding_1) = __binding_1 {
diag.span_label(__binding_1,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`main` function is not allowed to be `async`")));
}
diag
}
}
}
}
};Diagnostic)]
710#[diag("`main` function is not allowed to be `async`", code = E0752)]
711pub(crate) struct MainFunctionAsync {
712 #[primary_span]
713 pub span: Span,
714 #[label("`main` function is not allowed to be `async`")]
715 pub asyncness: Option<Span>,
716}
717
718#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
MainFunctionGenericParameters {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
MainFunctionGenericParameters {
span: __binding_0, label_span: __binding_1 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`main` function is not allowed to have generic parameters")));
diag.code(E0131);
;
diag.span(__binding_0);
if let Some(__binding_1) = __binding_1 {
diag.span_label(__binding_1,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`main` cannot have generic parameters")));
}
diag
}
}
}
}
};Diagnostic)]
719#[diag("`main` function is not allowed to have generic parameters", code = E0131)]
720pub(crate) struct MainFunctionGenericParameters {
721 #[primary_span]
722 pub span: Span,
723 #[label("`main` cannot have generic parameters")]
724 pub label_span: Option<Span>,
725}
726
727#[derive(const _: () =
{
impl<'_sess, 'a, G> rustc_errors::Diagnostic<'_sess, G> for
VariadicFunctionCompatibleConvention<'a> {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
VariadicFunctionCompatibleConvention {
span: __binding_0, convention: __binding_1 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("C-variadic functions with the {$convention} calling convention are not supported")));
diag.code(E0045);
;
diag.arg("convention", __binding_1);
diag.span(__binding_0);
diag.span_label(__binding_0,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("C-variadic function must have a compatible calling convention")));
diag
}
}
}
}
};Diagnostic)]
728#[diag("C-variadic functions with the {$convention} calling convention are not supported", code = E0045)]
729pub(crate) struct VariadicFunctionCompatibleConvention<'a> {
730 #[primary_span]
731 #[label("C-variadic function must have a compatible calling convention")]
732 pub span: Span,
733 pub convention: &'a str,
734}
735
736#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
CannotCaptureLateBound {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
CannotCaptureLateBound::Type {
use_span: __binding_0,
def_span: __binding_1,
what: __binding_2 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("cannot capture late-bound type parameter in {$what}")));
;
diag.arg("what", __binding_2);
diag.span(__binding_0);
diag.span_label(__binding_1,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("parameter defined here")));
diag
}
CannotCaptureLateBound::Const {
use_span: __binding_0,
def_span: __binding_1,
what: __binding_2 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("cannot capture late-bound const parameter in {$what}")));
;
diag.arg("what", __binding_2);
diag.span(__binding_0);
diag.span_label(__binding_1,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("parameter defined here")));
diag
}
CannotCaptureLateBound::Lifetime {
use_span: __binding_0,
def_span: __binding_1,
what: __binding_2 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("cannot capture late-bound lifetime in {$what}")));
;
diag.arg("what", __binding_2);
diag.span(__binding_0);
diag.span_label(__binding_1,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("lifetime defined here")));
diag
}
}
}
}
};Diagnostic)]
737pub(crate) enum CannotCaptureLateBound {
738 #[diag("cannot capture late-bound type parameter in {$what}")]
739 Type {
740 #[primary_span]
741 use_span: Span,
742 #[label("parameter defined here")]
743 def_span: Span,
744 what: &'static str,
745 },
746 #[diag("cannot capture late-bound const parameter in {$what}")]
747 Const {
748 #[primary_span]
749 use_span: Span,
750 #[label("parameter defined here")]
751 def_span: Span,
752 what: &'static str,
753 },
754 #[diag("cannot capture late-bound lifetime in {$what}")]
755 Lifetime {
756 #[primary_span]
757 use_span: Span,
758 #[label("lifetime defined here")]
759 def_span: Span,
760 what: &'static str,
761 },
762}
763
764#[derive(const _: () =
{
impl<'_sess, 'tcx, G> rustc_errors::Diagnostic<'_sess, G> for
TypeOf<'tcx> {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
TypeOf { span: __binding_0, ty: __binding_1 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("{$ty}")));
;
diag.arg("ty", __binding_1);
diag.span(__binding_0);
diag
}
}
}
}
};Diagnostic)]
765#[diag("{$ty}")]
766pub(crate) struct TypeOf<'tcx> {
767 #[primary_span]
768 pub span: Span,
769 pub ty: Ty<'tcx>,
770}
771
772#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
InvalidUnionField {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
InvalidUnionField {
field_span: __binding_0,
sugg: __binding_1,
note: __binding_2 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("field must implement `Copy` or be wrapped in `ManuallyDrop<...>` to be used in a union")));
diag.code(E0740);
;
diag.span(__binding_0);
diag.subdiagnostic(__binding_1);
diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("union fields must not have drop side-effects, which is currently enforced via either `Copy` or `ManuallyDrop<...>`")));
diag
}
}
}
}
};Diagnostic)]
773#[diag("field must implement `Copy` or be wrapped in `ManuallyDrop<...>` to be used in a union", code = E0740)]
774pub(crate) struct InvalidUnionField {
775 #[primary_span]
776 pub field_span: Span,
777 #[subdiagnostic]
778 pub sugg: InvalidUnionFieldSuggestion,
779 #[note(
780 "union fields must not have drop side-effects, which is currently enforced via either `Copy` or `ManuallyDrop<...>`"
781 )]
782 pub note: (),
783}
784
785#[derive(const _: () =
{
impl<'_sess, 'tcx, G> rustc_errors::Diagnostic<'_sess, G> for
ReturnTypeNotationOnNonRpitit<'tcx> {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
ReturnTypeNotationOnNonRpitit {
span: __binding_0,
ty: __binding_1,
fn_span: __binding_2,
note: __binding_3 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("return type notation used on function that is not `async` and does not return `impl Trait`")));
;
diag.arg("ty", __binding_1);
diag.span(__binding_0);
if let Some(__binding_2) = __binding_2 {
diag.span_label(__binding_2,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("this function must be `async` or return `impl Trait`")));
}
diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("function returns `{$ty}`, which is not compatible with associated type return bounds")));
diag
}
}
}
}
};Diagnostic)]
786#[diag(
787 "return type notation used on function that is not `async` and does not return `impl Trait`"
788)]
789pub(crate) struct ReturnTypeNotationOnNonRpitit<'tcx> {
790 #[primary_span]
791 pub span: Span,
792 pub ty: Ty<'tcx>,
793 #[label("this function must be `async` or return `impl Trait`")]
794 pub fn_span: Option<Span>,
795 #[note("function returns `{$ty}`, which is not compatible with associated type return bounds")]
796 pub note: (),
797}
798
799#[derive(const _: () =
{
impl rustc_errors::Subdiagnostic for InvalidUnionFieldSuggestion {
fn add_to_diag<__G>(self,
diag: &mut rustc_errors::Diag<'_, __G>) {
match self {
InvalidUnionFieldSuggestion {
lo: __binding_0, hi: __binding_1 } => {
let mut suggestions = Vec::new();
let __code_11 =
::alloc::__export::must_use({
::alloc::fmt::format(format_args!("std::mem::ManuallyDrop<"))
});
let __code_12 =
::alloc::__export::must_use({
::alloc::fmt::format(format_args!(">"))
});
suggestions.push((__binding_0, __code_11));
suggestions.push((__binding_1, __code_12));
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 field type in `ManuallyDrop<...>`")),
&sub_args);
diag.multipart_suggestion_with_style(__message, suggestions,
rustc_errors::Applicability::MachineApplicable,
rustc_errors::SuggestionStyle::ShowCode);
}
}
}
}
};Subdiagnostic)]
800#[multipart_suggestion(
801 "wrap the field type in `ManuallyDrop<...>`",
802 applicability = "machine-applicable"
803)]
804pub(crate) struct InvalidUnionFieldSuggestion {
805 #[suggestion_part(code = "std::mem::ManuallyDrop<")]
806 pub lo: Span,
807 #[suggestion_part(code = ">")]
808 pub hi: Span,
809}
810
811#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
ReturnTypeNotationEqualityBound {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
ReturnTypeNotationEqualityBound { span: __binding_0 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("return type notation is not allowed to use type equality")));
;
diag.span(__binding_0);
diag
}
}
}
}
};Diagnostic)]
812#[diag("return type notation is not allowed to use type equality")]
813pub(crate) struct ReturnTypeNotationEqualityBound {
814 #[primary_span]
815 pub span: Span,
816}
817
818#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
PlaceholderNotAllowedItemSignatures {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
PlaceholderNotAllowedItemSignatures {
spans: __binding_0, kind: __binding_1 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("the placeholder `_` is not allowed within types on item signatures for {$kind}")));
diag.code(E0121);
;
diag.arg("kind", __binding_1);
diag.span(__binding_0.clone());
for __binding_0 in __binding_0 {
diag.span_label(__binding_0,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("not allowed in type signatures")));
}
diag
}
}
}
}
};Diagnostic)]
819#[diag("the placeholder `_` is not allowed within types on item signatures for {$kind}", code = E0121)]
820pub(crate) struct PlaceholderNotAllowedItemSignatures {
821 #[primary_span]
822 #[label("not allowed in type signatures")]
823 pub spans: Vec<Span>,
824 pub kind: String,
825}
826
827#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
AssociatedItemTraitUninferredGenericParams {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
AssociatedItemTraitUninferredGenericParams {
span: __binding_0,
inferred_sugg: __binding_1,
bound: __binding_2,
mpart_sugg: __binding_3,
what: __binding_4 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("cannot use the {$what} of a trait with uninferred generic parameters")));
let __code_13 =
[::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}", __binding_2))
})].into_iter();
diag.code(E0212);
;
diag.arg("what", __binding_4);
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("use a fully qualified path with inferred lifetimes")),
__code_13, rustc_errors::Applicability::MaybeIncorrect,
rustc_errors::SuggestionStyle::ShowAlways);
}
if let Some(__binding_3) = __binding_3 {
diag.subdiagnostic(__binding_3);
}
diag
}
}
}
}
};Diagnostic)]
828#[diag("cannot use the {$what} of a trait with uninferred generic parameters", code = E0212)]
829pub(crate) struct AssociatedItemTraitUninferredGenericParams {
830 #[primary_span]
831 pub span: Span,
832 #[suggestion(
833 "use a fully qualified path with inferred lifetimes",
834 style = "verbose",
835 applicability = "maybe-incorrect",
836 code = "{bound}"
837 )]
838 pub inferred_sugg: Option<Span>,
839 pub bound: String,
840 #[subdiagnostic]
841 pub mpart_sugg: Option<AssociatedItemTraitUninferredGenericParamsMultipartSuggestion>,
842 pub what: &'static str,
843}
844
845#[derive(const _: () =
{
impl rustc_errors::Subdiagnostic for
AssociatedItemTraitUninferredGenericParamsMultipartSuggestion {
fn add_to_diag<__G>(self,
diag: &mut rustc_errors::Diag<'_, __G>) {
match self {
AssociatedItemTraitUninferredGenericParamsMultipartSuggestion {
fspan: __binding_0,
first: __binding_1,
sspan: __binding_2,
second: __binding_3 } => {
let mut suggestions = Vec::new();
let __code_14 =
::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}", __binding_1))
});
let __code_15 =
::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}", __binding_3))
});
suggestions.push((__binding_0, __code_14));
suggestions.push((__binding_2, __code_15));
let mut sub_args = rustc_errors::DiagArgMap::default();
let __message =
rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("use a fully qualified path with explicit lifetimes")),
&sub_args);
diag.multipart_suggestion_with_style(__message, suggestions,
rustc_errors::Applicability::MaybeIncorrect,
rustc_errors::SuggestionStyle::ShowCode);
}
}
}
}
};Subdiagnostic)]
846#[multipart_suggestion(
847 "use a fully qualified path with explicit lifetimes",
848 applicability = "maybe-incorrect"
849)]
850pub(crate) struct AssociatedItemTraitUninferredGenericParamsMultipartSuggestion {
851 #[suggestion_part(code = "{first}")]
852 pub fspan: Span,
853 pub first: String,
854 #[suggestion_part(code = "{second}")]
855 pub sspan: Span,
856 pub second: String,
857}
858
859#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
EnumDiscriminantOverflowed {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
EnumDiscriminantOverflowed {
span: __binding_0,
discr: __binding_1,
item_name: __binding_2,
wrapped_discr: __binding_3 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("enum discriminant overflowed")));
diag.code(E0370);
diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("explicitly set `{$item_name} = {$wrapped_discr}` if that is desired outcome")));
;
diag.arg("discr", __binding_1);
diag.arg("item_name", __binding_2);
diag.arg("wrapped_discr", __binding_3);
diag.span(__binding_0);
diag.span_label(__binding_0,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("overflowed on value after {$discr}")));
diag
}
}
}
}
};Diagnostic)]
860#[diag("enum discriminant overflowed", code = E0370)]
861#[note("explicitly set `{$item_name} = {$wrapped_discr}` if that is desired outcome")]
862pub(crate) struct EnumDiscriminantOverflowed {
863 #[primary_span]
864 #[label("overflowed on value after {$discr}")]
865 pub span: Span,
866 pub discr: String,
867 pub item_name: Ident,
868 pub wrapped_discr: String,
869}
870
871#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
SIMDFFIHighlyExperimental {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
SIMDFFIHighlyExperimental {
span: __binding_0, snip: __binding_1 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("use of SIMD type{$snip} in FFI is highly experimental and may result in invalid code")));
diag.help(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("add `#![feature(simd_ffi)]` to the crate attributes to enable")));
;
diag.arg("snip", __binding_1);
diag.span(__binding_0);
diag
}
}
}
}
};Diagnostic)]
872#[diag("use of SIMD type{$snip} in FFI is highly experimental and may result in invalid code")]
873#[help("add `#![feature(simd_ffi)]` to the crate attributes to enable")]
874pub(crate) struct SIMDFFIHighlyExperimental {
875 #[primary_span]
876 pub span: Span,
877 pub snip: String,
878}
879
880#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
ImplNotMarkedDefault {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
ImplNotMarkedDefault::Ok {
span: __binding_0, ok_label: __binding_1, ident: __binding_2
} => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`{$ident}` specializes an item from a parent `impl`, but that item is not marked `default`")));
diag.code(E0520);
diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("to specialize, `{$ident}` in the parent `impl` must be marked `default`")));
;
diag.arg("ident", __binding_2);
diag.span(__binding_0);
diag.span_label(__binding_0,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("cannot specialize default item `{$ident}`")));
diag.span_label(__binding_1,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("parent `impl` is here")));
diag
}
ImplNotMarkedDefault::Err {
span: __binding_0, cname: __binding_1, ident: __binding_2 }
=> {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`{$ident}` specializes an item from a parent `impl`, but that item is not marked `default`")));
diag.code(E0520);
diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("parent implementation is in crate `{$cname}`")));
;
diag.arg("cname", __binding_1);
diag.arg("ident", __binding_2);
diag.span(__binding_0);
diag
}
}
}
}
};Diagnostic)]
881pub(crate) enum ImplNotMarkedDefault {
882 #[diag("`{$ident}` specializes an item from a parent `impl`, but that item is not marked `default`", code = E0520)]
883 #[note("to specialize, `{$ident}` in the parent `impl` must be marked `default`")]
884 Ok {
885 #[primary_span]
886 #[label("cannot specialize default item `{$ident}`")]
887 span: Span,
888 #[label("parent `impl` is here")]
889 ok_label: Span,
890 ident: Ident,
891 },
892 #[diag("`{$ident}` specializes an item from a parent `impl`, but that item is not marked `default`", code = E0520)]
893 #[note("parent implementation is in crate `{$cname}`")]
894 Err {
895 #[primary_span]
896 span: Span,
897 cname: Symbol,
898 ident: Ident,
899 },
900}
901
902#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
UselessImplItem {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
UselessImplItem => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("this item cannot be used as its where bounds are not satisfied for the `Self` type")));
;
diag
}
}
}
}
};Diagnostic)]
903#[diag("this item cannot be used as its where bounds are not satisfied for the `Self` type")]
904pub(crate) struct UselessImplItem;
905
906#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
OverridingFinalTraitFunction {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
OverridingFinalTraitFunction {
impl_span: __binding_0,
trait_span: __binding_1,
ident: __binding_2 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("cannot override `{$ident}` because it already has a `final` definition in the trait")));
;
diag.arg("ident", __binding_2);
diag.span(__binding_0);
diag.span_note(__binding_1,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`{$ident}` is marked final here")));
diag
}
}
}
}
};Diagnostic)]
907#[diag("cannot override `{$ident}` because it already has a `final` definition in the trait")]
908pub(crate) struct OverridingFinalTraitFunction {
909 #[primary_span]
910 pub impl_span: Span,
911 #[note("`{$ident}` is marked final here")]
912 pub trait_span: Span,
913 pub ident: Ident,
914}
915
916#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
MissingTraitItem {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
MissingTraitItem {
span: __binding_0,
missing_trait_item_label: __binding_1,
missing_trait_item: __binding_2,
missing_trait_item_none: __binding_3,
missing_trait_item_unstable: __binding_4,
missing_items_msg: __binding_5 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("not all trait items implemented, missing: `{$missing_items_msg}`")));
diag.code(E0046);
;
diag.arg("missing_items_msg", __binding_5);
diag.span(__binding_0);
diag.span_label(__binding_0,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("missing `{$missing_items_msg}` in implementation")));
for __binding_1 in __binding_1 {
diag.subdiagnostic(__binding_1);
}
for __binding_2 in __binding_2 {
diag.subdiagnostic(__binding_2);
}
for __binding_3 in __binding_3 {
diag.subdiagnostic(__binding_3);
}
for __binding_4 in __binding_4 {
diag.subdiagnostic(__binding_4);
}
diag
}
}
}
}
};Diagnostic)]
917#[diag("not all trait items implemented, missing: `{$missing_items_msg}`", code = E0046)]
918pub(crate) struct MissingTraitItem {
919 #[primary_span]
920 #[label("missing `{$missing_items_msg}` in implementation")]
921 pub span: Span,
922 #[subdiagnostic]
923 pub missing_trait_item_label: Vec<MissingTraitItemLabel>,
924 #[subdiagnostic]
925 pub missing_trait_item: Vec<MissingTraitItemSuggestion>,
926 #[subdiagnostic]
927 pub missing_trait_item_none: Vec<MissingTraitItemSuggestionNone>,
928 #[subdiagnostic]
929 pub missing_trait_item_unstable: Vec<MissingTraitItemSuggestionUnstable>,
930 pub missing_items_msg: String,
931}
932
933#[derive(const _: () =
{
impl rustc_errors::Subdiagnostic for MissingTraitItemLabel {
fn add_to_diag<__G>(self,
diag: &mut rustc_errors::Diag<'_, __G>) {
match self {
MissingTraitItemLabel { span: __binding_0, item: __binding_1
} => {
let mut sub_args = rustc_errors::DiagArgMap::default();
sub_args.insert("item".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("`{$item}` from trait")),
&sub_args);
diag.span_label(__binding_0, __message);
}
}
}
}
};Subdiagnostic)]
934#[label("`{$item}` from trait")]
935pub(crate) struct MissingTraitItemLabel {
936 #[primary_span]
937 pub span: Span,
938 pub item: Symbol,
939}
940
941#[derive(const _: () =
{
impl rustc_errors::Subdiagnostic for MissingTraitItemSuggestion {
fn add_to_diag<__G>(self,
diag: &mut rustc_errors::Diag<'_, __G>) {
match self {
MissingTraitItemSuggestion {
span: __binding_0, code: __binding_1, snippet: __binding_2 }
=> {
let __code_16 =
[::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_2,
&mut diag.long_ty_path));
let __message =
rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("implement the missing item: `{$snippet}`")),
&sub_args);
diag.span_suggestions_with_style(__binding_0, __message,
__code_16, rustc_errors::Applicability::HasPlaceholders,
rustc_errors::SuggestionStyle::CompletelyHidden);
}
}
}
}
};Subdiagnostic)]
942#[suggestion(
943 "implement the missing item: `{$snippet}`",
944 style = "tool-only",
945 applicability = "has-placeholders",
946 code = "{code}"
947)]
948pub(crate) struct MissingTraitItemSuggestion {
949 #[primary_span]
950 pub span: Span,
951 pub code: String,
952 pub snippet: String,
953}
954
955#[derive(const _: () =
{
impl rustc_errors::Subdiagnostic for
MissingTraitItemSuggestionUnstable {
fn add_to_diag<__G>(self,
diag: &mut rustc_errors::Diag<'_, __G>) {
match self {
MissingTraitItemSuggestionUnstable {
span: __binding_0,
code: __binding_1,
snippet: __binding_2,
feature: __binding_3 } => {
let __code_17 =
[::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_2,
&mut diag.long_ty_path));
sub_args.insert("feature".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("implement the missing item: `{$snippet}` (unstable, requires feature `{$feature}`)")),
&sub_args);
diag.span_suggestions_with_style(__binding_0, __message,
__code_17, rustc_errors::Applicability::HasPlaceholders,
rustc_errors::SuggestionStyle::HideCodeAlways);
}
}
}
}
};Subdiagnostic)]
956#[suggestion(
957 "implement the missing item: `{$snippet}` (unstable, requires feature `{$feature}`)",
958 style = "hidden",
959 applicability = "has-placeholders",
960 code = "{code}"
961)]
962pub(crate) struct MissingTraitItemSuggestionUnstable {
963 #[primary_span]
964 pub span: Span,
965 pub code: String,
966 pub snippet: String,
967 pub feature: Symbol,
968}
969
970#[derive(const _: () =
{
impl rustc_errors::Subdiagnostic for MissingTraitItemSuggestionNone {
fn add_to_diag<__G>(self,
diag: &mut rustc_errors::Diag<'_, __G>) {
match self {
MissingTraitItemSuggestionNone {
span: __binding_0, code: __binding_1, snippet: __binding_2 }
=> {
let __code_18 =
[::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_2,
&mut diag.long_ty_path));
let __message =
rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("implement the missing item: `{$snippet}`")),
&sub_args);
diag.span_suggestions_with_style(__binding_0, __message,
__code_18, rustc_errors::Applicability::HasPlaceholders,
rustc_errors::SuggestionStyle::HideCodeAlways);
}
}
}
}
};Subdiagnostic)]
971#[suggestion(
972 "implement the missing item: `{$snippet}`",
973 style = "hidden",
974 applicability = "has-placeholders",
975 code = "{code}"
976)]
977pub(crate) struct MissingTraitItemSuggestionNone {
978 #[primary_span]
979 pub span: Span,
980 pub code: String,
981 pub snippet: String,
982}
983
984#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
MissingOneOfTraitItem {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
MissingOneOfTraitItem {
span: __binding_0,
note: __binding_1,
missing_trait_item_label: __binding_2,
missing_trait_item: __binding_3,
missing_trait_item_none: __binding_4,
missing_trait_item_unstable: __binding_5,
missing_items_msg: __binding_6 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("not all trait items implemented, missing one of: `{$missing_items_msg}`")));
diag.code(E0046);
;
diag.arg("missing_items_msg", __binding_6);
diag.span(__binding_0);
diag.span_label(__binding_0,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("missing one of `{$missing_items_msg}` in implementation")));
if let Some(__binding_1) = __binding_1 {
diag.span_note(__binding_1,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("required because of this annotation")));
}
for __binding_2 in __binding_2 {
diag.subdiagnostic(__binding_2);
}
for __binding_3 in __binding_3 {
diag.subdiagnostic(__binding_3);
}
for __binding_4 in __binding_4 {
diag.subdiagnostic(__binding_4);
}
for __binding_5 in __binding_5 {
diag.subdiagnostic(__binding_5);
}
diag
}
}
}
}
};Diagnostic)]
985#[diag("not all trait items implemented, missing one of: `{$missing_items_msg}`", code = E0046)]
986pub(crate) struct MissingOneOfTraitItem {
987 #[primary_span]
988 #[label("missing one of `{$missing_items_msg}` in implementation")]
989 pub span: Span,
990 #[note("required because of this annotation")]
991 pub note: Option<Span>,
992 #[subdiagnostic]
993 pub missing_trait_item_label: Vec<MissingTraitItemLabel>,
994 #[subdiagnostic]
995 pub missing_trait_item: Vec<MissingTraitItemSuggestion>,
996 #[subdiagnostic]
997 pub missing_trait_item_none: Vec<MissingTraitItemSuggestionNone>,
998 #[subdiagnostic]
999 pub missing_trait_item_unstable: Vec<MissingTraitItemSuggestionUnstable>,
1000 pub missing_items_msg: String,
1001}
1002
1003#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
MissingTraitItemUnstable {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
MissingTraitItemUnstable {
span: __binding_0,
some_note: __binding_1,
none_note: __binding_2,
missing_item_name: __binding_3,
feature: __binding_4,
reason: __binding_5 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("not all trait items implemented, missing: `{$missing_item_name}`")));
diag.code(E0046);
diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("default implementation of `{$missing_item_name}` is unstable")));
;
diag.arg("missing_item_name", __binding_3);
diag.arg("feature", __binding_4);
diag.arg("reason", __binding_5);
diag.span(__binding_0);
if __binding_1 {
diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("use of unstable library feature `{$feature}`: {$reason}")));
}
if __binding_2 {
diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("use of unstable library feature `{$feature}`")));
}
diag
}
}
}
}
};Diagnostic)]
1004#[diag("not all trait items implemented, missing: `{$missing_item_name}`", code = E0046)]
1005#[note("default implementation of `{$missing_item_name}` is unstable")]
1006pub(crate) struct MissingTraitItemUnstable {
1007 #[primary_span]
1008 pub span: Span,
1009 #[note("use of unstable library feature `{$feature}`: {$reason}")]
1010 pub some_note: bool,
1011 #[note("use of unstable library feature `{$feature}`")]
1012 pub none_note: bool,
1013 pub missing_item_name: Ident,
1014 pub feature: Symbol,
1015 pub reason: String,
1016}
1017
1018#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
TransparentEnumVariant {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
TransparentEnumVariant {
span: __binding_0,
spans: __binding_1,
many: __binding_2,
number: __binding_3,
path: __binding_4 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("transparent enum needs exactly one variant, but has {$number}")));
diag.code(E0731);
;
diag.arg("number", __binding_3);
diag.arg("path", __binding_4);
diag.span(__binding_0);
diag.span_label(__binding_0,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("needs exactly one variant, but has {$number}")));
for __binding_1 in __binding_1 {
diag.span_label(__binding_1,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("variant here")));
}
if let Some(__binding_2) = __binding_2 {
diag.span_label(__binding_2,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("too many variants in `{$path}`")));
}
diag
}
}
}
}
};Diagnostic)]
1019#[diag("transparent enum needs exactly one variant, but has {$number}", code = E0731)]
1020pub(crate) struct TransparentEnumVariant {
1021 #[primary_span]
1022 #[label("needs exactly one variant, but has {$number}")]
1023 pub span: Span,
1024 #[label("variant here")]
1025 pub spans: Vec<Span>,
1026 #[label("too many variants in `{$path}`")]
1027 pub many: Option<Span>,
1028 pub number: usize,
1029 pub path: String,
1030}
1031
1032#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for TooLargeStatic
{
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
TooLargeStatic { span: __binding_0 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("extern static is too large for the target architecture")));
;
diag.span(__binding_0);
diag
}
}
}
}
};Diagnostic)]
1033#[diag("extern static is too large for the target architecture")]
1034pub(crate) struct TooLargeStatic {
1035 #[primary_span]
1036 pub span: Span,
1037}
1038
1039#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
SpecializationTrait {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
SpecializationTrait { span: __binding_0 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("implementing `rustc_specialization_trait` traits is unstable")));
diag.help(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("add `#![feature(min_specialization)]` to the crate attributes to enable")));
;
diag.span(__binding_0);
diag
}
}
}
}
};Diagnostic)]
1040#[diag("implementing `rustc_specialization_trait` traits is unstable")]
1041#[help("add `#![feature(min_specialization)]` to the crate attributes to enable")]
1042pub(crate) struct SpecializationTrait {
1043 #[primary_span]
1044 pub span: Span,
1045}
1046
1047#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
ImplOfRestrictedTrait {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
ImplOfRestrictedTrait {
impl_span: __binding_0,
restriction_span: __binding_1,
restriction_path: __binding_2 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("trait cannot be implemented outside `{$restriction_path}`")));
;
diag.arg("restriction_path", __binding_2);
diag.span(__binding_0);
diag.span_note(__binding_1,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("trait restricted here")));
diag
}
}
}
}
};Diagnostic)]
1048#[diag("trait cannot be implemented outside `{$restriction_path}`")]
1049pub(crate) struct ImplOfRestrictedTrait {
1050 #[primary_span]
1051 pub impl_span: Span,
1052 #[note("trait restricted here")]
1053 pub restriction_span: Span,
1054 pub restriction_path: String,
1055}
1056
1057#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
ClosureImplicitHrtb {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
ClosureImplicitHrtb {
spans: __binding_0, for_sp: __binding_1 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("implicit types in closure signatures are forbidden when `for<...>` is present")));
;
diag.span(__binding_0.clone());
diag.span_label(__binding_1,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`for<...>` is here")));
diag
}
}
}
}
};Diagnostic)]
1058#[diag("implicit types in closure signatures are forbidden when `for<...>` is present")]
1059pub(crate) struct ClosureImplicitHrtb {
1060 #[primary_span]
1061 pub spans: Vec<Span>,
1062 #[label("`for<...>` is here")]
1063 pub for_sp: Span,
1064}
1065
1066#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
EmptySpecialization {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
EmptySpecialization {
span: __binding_0, base_impl_span: __binding_1 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("specialization impl does not specialize any associated items")));
;
diag.span(__binding_0);
diag.span_note(__binding_1,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("impl is a specialization of this impl")));
diag
}
}
}
}
};Diagnostic)]
1067#[diag("specialization impl does not specialize any associated items")]
1068pub(crate) struct EmptySpecialization {
1069 #[primary_span]
1070 pub span: Span,
1071 #[note("impl is a specialization of this impl")]
1072 pub base_impl_span: Span,
1073}
1074
1075#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
StaticSpecialize {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
StaticSpecialize { span: __binding_0 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("cannot specialize on `'static` lifetime")));
;
diag.span(__binding_0);
diag
}
}
}
}
};Diagnostic)]
1076#[diag("cannot specialize on `'static` lifetime")]
1077pub(crate) struct StaticSpecialize {
1078 #[primary_span]
1079 pub span: Span,
1080}
1081
1082#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
NegativeDropImplPolarity {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
NegativeDropImplPolarity { span: __binding_0 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("negative `Drop` impls are not supported")));
;
diag.span(__binding_0);
diag
}
}
}
}
};Diagnostic)]
1083#[diag("negative `Drop` impls are not supported")]
1084pub(crate) struct NegativeDropImplPolarity {
1085 #[primary_span]
1086 pub span: Span,
1087}
1088
1089#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
ReturnTypeNotationIllegalParam {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
ReturnTypeNotationIllegalParam::Type {
span: __binding_0, param_span: __binding_1 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("return type notation is not allowed for functions that have type parameters")));
;
diag.span(__binding_0);
diag.span_label(__binding_1,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("type parameter declared here")));
diag
}
ReturnTypeNotationIllegalParam::Const {
span: __binding_0, param_span: __binding_1 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("return type notation is not allowed for functions that have const parameters")));
;
diag.span(__binding_0);
diag.span_label(__binding_1,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("const parameter declared here")));
diag
}
}
}
}
};Diagnostic)]
1090pub(crate) enum ReturnTypeNotationIllegalParam {
1091 #[diag("return type notation is not allowed for functions that have type parameters")]
1092 Type {
1093 #[primary_span]
1094 span: Span,
1095 #[label("type parameter declared here")]
1096 param_span: Span,
1097 },
1098 #[diag("return type notation is not allowed for functions that have const parameters")]
1099 Const {
1100 #[primary_span]
1101 span: Span,
1102 #[label("const parameter declared here")]
1103 param_span: Span,
1104 },
1105}
1106
1107#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
LateBoundInApit {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
LateBoundInApit::Type {
span: __binding_0, param_span: __binding_1 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`impl Trait` can only mention type parameters from an fn or impl")));
;
diag.span(__binding_0);
diag.span_label(__binding_1,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("type parameter declared here")));
diag
}
LateBoundInApit::Const {
span: __binding_0, param_span: __binding_1 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`impl Trait` can only mention const parameters from an fn or impl")));
;
diag.span(__binding_0);
diag.span_label(__binding_1,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("const parameter declared here")));
diag
}
LateBoundInApit::Lifetime {
span: __binding_0, param_span: __binding_1 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`impl Trait` can only mention lifetimes from an fn or impl")));
;
diag.span(__binding_0);
diag.span_label(__binding_1,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("lifetime declared here")));
diag
}
}
}
}
};Diagnostic)]
1108pub(crate) enum LateBoundInApit {
1109 #[diag("`impl Trait` can only mention type parameters from an fn or impl")]
1110 Type {
1111 #[primary_span]
1112 span: Span,
1113 #[label("type parameter declared here")]
1114 param_span: Span,
1115 },
1116 #[diag("`impl Trait` can only mention const parameters from an fn or impl")]
1117 Const {
1118 #[primary_span]
1119 span: Span,
1120 #[label("const parameter declared here")]
1121 param_span: Span,
1122 },
1123 #[diag("`impl Trait` can only mention lifetimes from an fn or impl")]
1124 Lifetime {
1125 #[primary_span]
1126 span: Span,
1127 #[label("lifetime declared here")]
1128 param_span: Span,
1129 },
1130}
1131
1132#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
UnusedAssociatedTypeBounds {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
UnusedAssociatedTypeBounds { span: __binding_0 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("unnecessary associated type bound for dyn-incompatible associated type")));
let __code_19 =
[::alloc::__export::must_use({
::alloc::fmt::format(format_args!(""))
})].into_iter();
diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("this associated type has a `where Self: Sized` bound, and while the associated type can be specified, it cannot be used because trait objects are never `Sized`")));
;
diag.span_suggestions_with_style(__binding_0,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("remove this bound")),
__code_19, rustc_errors::Applicability::Unspecified,
rustc_errors::SuggestionStyle::ShowCode);
diag
}
}
}
}
};Diagnostic)]
1133#[diag("unnecessary associated type bound for dyn-incompatible associated type")]
1134#[note(
1135 "this associated type has a `where Self: Sized` bound, and while the associated type can be specified, it cannot be used because trait objects are never `Sized`"
1136)]
1137pub(crate) struct UnusedAssociatedTypeBounds {
1138 #[suggestion("remove this bound", code = "")]
1139 pub span: Span,
1140}
1141
1142#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
ReturnPositionImplTraitInTraitRefined {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
ReturnPositionImplTraitInTraitRefined {
impl_return_span: __binding_0,
trait_return_span: __binding_1,
unmatched_bound: __binding_2,
pre: __binding_3,
post: __binding_4,
return_ty: __binding_5 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("impl trait in impl method signature does not match trait method signature")));
let __code_20 =
[::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{1}{2}{0}", __binding_4,
__binding_3, __binding_5))
})].into_iter();
diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("add `#[allow(refining_impl_trait)]` if it is intended for this to be part of the public API of this crate")));
diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("we are soliciting feedback, see issue #121718 <https://github.com/rust-lang/rust/issues/121718> for more information")));
;
diag.span_suggestions_with_style(__binding_0,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("replace the return type so that it matches the trait")),
__code_20, rustc_errors::Applicability::MaybeIncorrect,
rustc_errors::SuggestionStyle::ShowCode);
if let Some(__binding_1) = __binding_1 {
diag.span_label(__binding_1,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("return type from trait method defined here")));
}
if let Some(__binding_2) = __binding_2 {
diag.span_label(__binding_2,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("this bound is stronger than that defined on the trait")));
}
diag
}
}
}
}
};Diagnostic)]
1143#[diag("impl trait in impl method signature does not match trait method signature")]
1144#[note(
1145 "add `#[allow(refining_impl_trait)]` if it is intended for this to be part of the public API of this crate"
1146)]
1147#[note(
1148 "we are soliciting feedback, see issue #121718 <https://github.com/rust-lang/rust/issues/121718> for more information"
1149)]
1150pub(crate) struct ReturnPositionImplTraitInTraitRefined {
1151 #[suggestion(
1152 "replace the return type so that it matches the trait",
1153 applicability = "maybe-incorrect",
1154 code = "{pre}{return_ty}{post}"
1155 )]
1156 pub impl_return_span: Span,
1157 #[label("return type from trait method defined here")]
1158 pub trait_return_span: Option<Span>,
1159 #[label("this bound is stronger than that defined on the trait")]
1160 pub unmatched_bound: Option<Span>,
1161
1162 pub pre: &'static str,
1163 pub post: &'static str,
1164 pub return_ty: String,
1165}
1166
1167#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
ReturnPositionImplTraitInTraitRefinedLifetimes {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
ReturnPositionImplTraitInTraitRefinedLifetimes {
suggestion_span: __binding_0, suggestion: __binding_1 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("impl trait in impl method captures fewer lifetimes than in trait")));
let __code_21 =
[::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}", __binding_1))
})].into_iter();
diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("add `#[allow(refining_impl_trait)]` if it is intended for this to be part of the public API of this crate")));
diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("we are soliciting feedback, see issue #121718 <https://github.com/rust-lang/rust/issues/121718> for more information")));
;
diag.span_suggestions_with_style(__binding_0,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("modify the `use<..>` bound to capture the same lifetimes that the trait does")),
__code_21, rustc_errors::Applicability::MaybeIncorrect,
rustc_errors::SuggestionStyle::ShowCode);
diag
}
}
}
}
};Diagnostic)]
1168#[diag("impl trait in impl method captures fewer lifetimes than in trait")]
1169#[note(
1170 "add `#[allow(refining_impl_trait)]` if it is intended for this to be part of the public API of this crate"
1171)]
1172#[note(
1173 "we are soliciting feedback, see issue #121718 <https://github.com/rust-lang/rust/issues/121718> for more information"
1174)]
1175pub(crate) struct ReturnPositionImplTraitInTraitRefinedLifetimes {
1176 #[suggestion(
1177 "modify the `use<..>` bound to capture the same lifetimes that the trait does",
1178 applicability = "maybe-incorrect",
1179 code = "{suggestion}"
1180 )]
1181 pub suggestion_span: Span,
1182 pub suggestion: String,
1183}
1184
1185#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
InherentTyOutside {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
InherentTyOutside { span: __binding_0 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("cannot define inherent `impl` for a type outside of the crate where the type is defined")));
diag.code(E0390);
diag.help(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("consider moving this inherent impl into the crate defining the type if possible")));
;
diag.span(__binding_0);
diag.span_help(__binding_0,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("alternatively add `#[rustc_has_incoherent_inherent_impls]` to the type and `#[rustc_allow_incoherent_impl]` to the relevant impl items")));
diag
}
}
}
}
};Diagnostic)]
1186#[diag("cannot define inherent `impl` for a type outside of the crate where the type is defined", code = E0390)]
1187#[help("consider moving this inherent impl into the crate defining the type if possible")]
1188pub(crate) struct InherentTyOutside {
1189 #[primary_span]
1190 #[help(
1191 "alternatively add `#[rustc_has_incoherent_inherent_impls]` to the type and `#[rustc_allow_incoherent_impl]` to the relevant impl items"
1192 )]
1193 pub span: Span,
1194}
1195
1196#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
DispatchFromDynRepr {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
DispatchFromDynRepr { span: __binding_0 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("structs implementing `DispatchFromDyn` may not have `#[repr(packed)]` or `#[repr(C)]`")));
diag.code(E0378);
;
diag.span(__binding_0);
diag
}
}
}
}
};Diagnostic)]
1197#[diag("structs implementing `DispatchFromDyn` may not have `#[repr(packed)]` or `#[repr(C)]`", code = E0378)]
1198pub(crate) struct DispatchFromDynRepr {
1199 #[primary_span]
1200 pub span: Span,
1201}
1202
1203#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
CoercePointeeNotStruct {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
CoercePointeeNotStruct {
span: __binding_0, kind: __binding_1 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`derive(CoercePointee)` is only applicable to `struct`, instead of `{$kind}`")));
diag.code(E0802);
;
diag.arg("kind", __binding_1);
diag.span(__binding_0);
diag
}
}
}
}
};Diagnostic)]
1204#[diag("`derive(CoercePointee)` is only applicable to `struct`, instead of `{$kind}`", code = E0802)]
1205pub(crate) struct CoercePointeeNotStruct {
1206 #[primary_span]
1207 pub span: Span,
1208 pub kind: String,
1209}
1210
1211#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
CoercePointeeNotConcreteType {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
CoercePointeeNotConcreteType { span: __binding_0 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`derive(CoercePointee)` is only applicable to `struct`")));
diag.code(E0802);
;
diag.span(__binding_0);
diag
}
}
}
}
};Diagnostic)]
1212#[diag("`derive(CoercePointee)` is only applicable to `struct`", code = E0802)]
1213pub(crate) struct CoercePointeeNotConcreteType {
1214 #[primary_span]
1215 pub span: Span,
1216}
1217
1218#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
CoercePointeeNoUserValidityAssertion {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
CoercePointeeNoUserValidityAssertion { span: __binding_0 }
=> {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("asserting applicability of `derive(CoercePointee)` on a target data is forbidden")));
diag.code(E0802);
;
diag.span(__binding_0);
diag
}
}
}
}
};Diagnostic)]
1219#[diag("asserting applicability of `derive(CoercePointee)` on a target data is forbidden", code = E0802)]
1220pub(crate) struct CoercePointeeNoUserValidityAssertion {
1221 #[primary_span]
1222 pub span: Span,
1223}
1224
1225#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
CoercePointeeNotTransparent {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
CoercePointeeNotTransparent { span: __binding_0 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`derive(CoercePointee)` is only applicable to `struct` with `repr(transparent)` layout")));
diag.code(E0802);
;
diag.span(__binding_0);
diag
}
}
}
}
};Diagnostic)]
1226#[diag("`derive(CoercePointee)` is only applicable to `struct` with `repr(transparent)` layout", code = E0802)]
1227pub(crate) struct CoercePointeeNotTransparent {
1228 #[primary_span]
1229 pub span: Span,
1230}
1231
1232#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
CoercePointeeNoField {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
CoercePointeeNoField { span: __binding_0 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`CoercePointee` can only be derived on `struct`s with at least one field")));
diag.code(E0802);
;
diag.span(__binding_0);
diag
}
}
}
}
};Diagnostic)]
1233#[diag("`CoercePointee` can only be derived on `struct`s with at least one field", code = E0802)]
1234pub(crate) struct CoercePointeeNoField {
1235 #[primary_span]
1236 pub span: Span,
1237}
1238
1239#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
InherentTyOutsideRelevant {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
InherentTyOutsideRelevant {
span: __binding_0, help_span: __binding_1 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("cannot define inherent `impl` for a type outside of the crate where the type is defined")));
diag.code(E0390);
diag.help(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("consider moving this inherent impl into the crate defining the type if possible")));
;
diag.span(__binding_0);
diag.span_help(__binding_1,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("alternatively add `#[rustc_allow_incoherent_impl]` to the relevant impl items")));
diag
}
}
}
}
};Diagnostic)]
1240#[diag("cannot define inherent `impl` for a type outside of the crate where the type is defined", code = E0390)]
1241#[help("consider moving this inherent impl into the crate defining the type if possible")]
1242pub(crate) struct InherentTyOutsideRelevant {
1243 #[primary_span]
1244 pub span: Span,
1245 #[help("alternatively add `#[rustc_allow_incoherent_impl]` to the relevant impl items")]
1246 pub help_span: Span,
1247}
1248
1249#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
InherentTyOutsideNew {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
InherentTyOutsideNew { span: __binding_0, note: __binding_1
} => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("cannot define inherent `impl` for a type outside of the crate where the type is defined")));
diag.code(E0116);
diag.help(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("consider defining a trait and implementing it for the type or using a newtype wrapper like `struct MyType(ExternalType);` and implement it")));
diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("for more details about the orphan rules, see <https://doc.rust-lang.org/reference/items/implementations.html?highlight=orphan#orphan-rules>")));
;
diag.span(__binding_0);
diag.span_label(__binding_0,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("impl for type defined outside of crate")));
if let Some(__binding_1) = __binding_1 {
diag.subdiagnostic(__binding_1);
}
diag
}
}
}
}
};Diagnostic)]
1250#[diag("cannot define inherent `impl` for a type outside of the crate where the type is defined", code = E0116)]
1251#[help(
1252 "consider defining a trait and implementing it for the type or using a newtype wrapper like `struct MyType(ExternalType);` and implement it"
1253)]
1254#[note(
1255 "for more details about the orphan rules, see <https://doc.rust-lang.org/reference/items/implementations.html?highlight=orphan#orphan-rules>"
1256)]
1257pub(crate) struct InherentTyOutsideNew {
1258 #[primary_span]
1259 #[label("impl for type defined outside of crate")]
1260 pub span: Span,
1261 #[subdiagnostic]
1262 pub note: Option<InherentTyOutsideNewAliasNote>,
1263}
1264
1265#[derive(const _: () =
{
impl rustc_errors::Subdiagnostic for InherentTyOutsideNewAliasNote {
fn add_to_diag<__G>(self,
diag: &mut rustc_errors::Diag<'_, __G>) {
match self {
InherentTyOutsideNewAliasNote {
span: __binding_0,
ty_name: __binding_1,
alias_ty_name: __binding_2 } => {
let mut sub_args = rustc_errors::DiagArgMap::default();
sub_args.insert("ty_name".into(),
rustc_errors::IntoDiagArg::into_diag_arg(__binding_1,
&mut diag.long_ty_path));
sub_args.insert("alias_ty_name".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("`{$ty_name}` does not define a new type, only an alias of `{$alias_ty_name}` defined here")),
&sub_args);
diag.span_note(__binding_0, __message);
}
}
}
}
};Subdiagnostic)]
1266#[note("`{$ty_name}` does not define a new type, only an alias of `{$alias_ty_name}` defined here")]
1267pub(crate) struct InherentTyOutsideNewAliasNote {
1268 #[primary_span]
1269 pub span: Span,
1270 pub ty_name: String,
1271 pub alias_ty_name: String,
1272}
1273
1274#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
InherentTyOutsidePrimitive {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
InherentTyOutsidePrimitive {
span: __binding_0, help_span: __binding_1 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("cannot define inherent `impl` for primitive types outside of `core`")));
diag.code(E0390);
diag.help(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("consider moving this inherent impl into `core` if possible")));
;
diag.span(__binding_0);
diag.span_help(__binding_1,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("alternatively add `#[rustc_allow_incoherent_impl]` to the relevant impl items")));
diag
}
}
}
}
};Diagnostic)]
1275#[diag("cannot define inherent `impl` for primitive types outside of `core`", code = E0390)]
1276#[help("consider moving this inherent impl into `core` if possible")]
1277pub(crate) struct InherentTyOutsidePrimitive {
1278 #[primary_span]
1279 pub span: Span,
1280 #[help("alternatively add `#[rustc_allow_incoherent_impl]` to the relevant impl items")]
1281 pub help_span: Span,
1282}
1283
1284#[derive(const _: () =
{
impl<'_sess, 'a, G> rustc_errors::Diagnostic<'_sess, G> for
InherentPrimitiveTy<'a> {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
InherentPrimitiveTy { span: __binding_0, note: __binding_1 }
=> {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("cannot define inherent `impl` for primitive types")));
diag.code(E0390);
diag.help(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("consider using an extension trait instead")));
;
diag.span(__binding_0);
if let Some(__binding_1) = __binding_1 {
diag.subdiagnostic(__binding_1);
}
diag
}
}
}
}
};Diagnostic)]
1285#[diag("cannot define inherent `impl` for primitive types", code = E0390)]
1286#[help("consider using an extension trait instead")]
1287pub(crate) struct InherentPrimitiveTy<'a> {
1288 #[primary_span]
1289 pub span: Span,
1290 #[subdiagnostic]
1291 pub note: Option<InherentPrimitiveTyNote<'a>>,
1292}
1293
1294#[derive(const _: () =
{
impl<'a> rustc_errors::Subdiagnostic for InherentPrimitiveTyNote<'a> {
fn add_to_diag<__G>(self,
diag: &mut rustc_errors::Diag<'_, __G>) {
match self {
InherentPrimitiveTyNote { subty: __binding_0 } => {
let mut sub_args = rustc_errors::DiagArgMap::default();
sub_args.insert("subty".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("you could also try moving the reference to uses of `{$subty}` (such as `self`) within the implementation")),
&sub_args);
diag.note(__message);
}
}
}
}
};Subdiagnostic)]
1295#[note(
1296 "you could also try moving the reference to uses of `{$subty}` (such as `self`) within the implementation"
1297)]
1298pub(crate) struct InherentPrimitiveTyNote<'a> {
1299 pub subty: Ty<'a>,
1300}
1301
1302#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for InherentDyn {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
InherentDyn { span: __binding_0 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("cannot define inherent `impl` for a dyn auto trait")));
diag.code(E0785);
diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("define and implement a new trait or type instead")));
;
diag.span(__binding_0);
diag.span_label(__binding_0,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("impl requires at least one non-auto trait")));
diag
}
}
}
}
};Diagnostic)]
1303#[diag("cannot define inherent `impl` for a dyn auto trait", code = E0785)]
1304#[note("define and implement a new trait or type instead")]
1305pub(crate) struct InherentDyn {
1306 #[primary_span]
1307 #[label("impl requires at least one non-auto trait")]
1308 pub span: Span,
1309}
1310
1311#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
InherentNominal {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
InherentNominal { span: __binding_0 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("no nominal type found for inherent implementation")));
diag.code(E0118);
diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("either implement a trait on it or create a newtype to wrap it instead")));
;
diag.span(__binding_0);
diag.span_label(__binding_0,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("impl requires a nominal type")));
diag
}
}
}
}
};Diagnostic)]
1312#[diag("no nominal type found for inherent implementation", code = E0118)]
1313#[note("either implement a trait on it or create a newtype to wrap it instead")]
1314pub(crate) struct InherentNominal {
1315 #[primary_span]
1316 #[label("impl requires a nominal type")]
1317 pub span: Span,
1318}
1319
1320#[derive(const _: () =
{
impl<'_sess, 'a, G> rustc_errors::Diagnostic<'_sess, G> for
DispatchFromDynZST<'a> {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
DispatchFromDynZST {
span: __binding_0, name: __binding_1, ty: __binding_2 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("the trait `DispatchFromDyn` may only be implemented for structs containing the field being coerced, ZST fields with 1 byte alignment that don't mention type/const generics, and nothing else")));
diag.code(E0378);
diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("extra field `{$name}` of type `{$ty}` is not allowed")));
;
diag.arg("name", __binding_1);
diag.arg("ty", __binding_2);
diag.span(__binding_0);
diag
}
}
}
}
};Diagnostic)]
1321#[diag("the trait `DispatchFromDyn` may only be implemented for structs containing the field being coerced, ZST fields with 1 byte alignment that don't mention type/const generics, and nothing else", code = E0378)]
1322#[note("extra field `{$name}` of type `{$ty}` is not allowed")]
1323pub(crate) struct DispatchFromDynZST<'a> {
1324 #[primary_span]
1325 pub span: Span,
1326 pub name: Ident,
1327 pub ty: Ty<'a>,
1328}
1329
1330#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for CoerceNoField
{
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
CoerceNoField {
span: __binding_0,
trait_name: __binding_1,
note: __binding_2 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("implementing `{$trait_name}` requires a field to be coerced")));
diag.code(E0374);
;
diag.arg("trait_name", __binding_1);
diag.span(__binding_0);
if __binding_2 {
diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected a single field to be coerced, none found")));
}
diag
}
}
}
}
};Diagnostic)]
1331#[diag("implementing `{$trait_name}` requires a field to be coerced", code = E0374)]
1332pub(crate) struct CoerceNoField {
1333 #[primary_span]
1334 pub span: Span,
1335 pub trait_name: &'static str,
1336 #[note("expected a single field to be coerced, none found")]
1337 pub note: bool,
1338}
1339
1340#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for CoerceMulti {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
CoerceMulti {
trait_name: __binding_0,
span: __binding_1,
number: __binding_2,
fields: __binding_3 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("implementing `{$trait_name}` does not allow multiple fields to be coerced")));
diag.code(E0375);
;
diag.arg("trait_name", __binding_0);
diag.span(__binding_1);
diag.span_note(__binding_3,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("the trait `{$trait_name}` may only be implemented when a single field is being coerced")));
diag
}
}
}
}
};Diagnostic)]
1341#[diag("implementing `{$trait_name}` does not allow multiple fields to be coerced", code = E0375)]
1342pub(crate) struct CoerceMulti {
1343 pub trait_name: &'static str,
1344 #[primary_span]
1345 pub span: Span,
1346 pub number: usize,
1347 #[note(
1348 "the trait `{$trait_name}` may only be implemented when a single field is being coerced"
1349 )]
1350 pub fields: MultiSpan,
1351}
1352
1353#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
CoerceSharedNotSingleLifetimeParam {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
CoerceSharedNotSingleLifetimeParam {
span: __binding_0, trait_name: __binding_1 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("implementing `{$trait_name}` requires that a single lifetime parameter is passed between source and target")));
;
diag.arg("trait_name", __binding_1);
diag.span(__binding_0);
diag
}
}
}
}
};Diagnostic)]
1354#[diag(
1355 "implementing `{$trait_name}` requires that a single lifetime parameter is passed between source and target"
1356)]
1357pub(crate) struct CoerceSharedNotSingleLifetimeParam {
1358 #[primary_span]
1359 pub span: Span,
1360 pub trait_name: &'static str,
1361}
1362
1363#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
CoerceSharedMulti {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
CoerceSharedMulti {
span: __binding_0, trait_name: __binding_1 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("implementing `{$trait_name}` requires exactly one lifetime argument in the reborrowed type")));
;
diag.arg("trait_name", __binding_1);
diag.span(__binding_0);
diag
}
}
}
}
};Diagnostic)]
1364#[diag(
1365 "implementing `{$trait_name}` requires exactly one lifetime argument in the reborrowed type"
1366)]
1367pub(crate) struct CoerceSharedMulti {
1368 #[primary_span]
1369 pub span: Span,
1370 pub trait_name: &'static str,
1371}
1372
1373#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
CoerceSharedLifetimeMismatch {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
CoerceSharedLifetimeMismatch {
span: __binding_0,
source_lifetime_span: __binding_1,
target_lifetime_span: __binding_2,
trait_name: __binding_3 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("implementing `{$trait_name}` requires source and target to use the same reborrow lifetime argument")));
;
diag.arg("trait_name", __binding_3);
diag.span(__binding_0);
if let Some(__binding_1) = __binding_1 {
diag.span_label(__binding_1,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("source reborrow lifetime")));
}
if let Some(__binding_2) = __binding_2 {
diag.span_label(__binding_2,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("target reborrow lifetime")));
}
diag
}
}
}
}
};Diagnostic)]
1374#[diag(
1375 "implementing `{$trait_name}` requires source and target to use the same reborrow lifetime \
1376 argument"
1377)]
1378pub(crate) struct CoerceSharedLifetimeMismatch {
1379 #[primary_span]
1380 pub span: Span,
1381 #[label("source reborrow lifetime")]
1382 pub source_lifetime_span: Option<Span>,
1383 #[label("target reborrow lifetime")]
1384 pub target_lifetime_span: Option<Span>,
1385 pub trait_name: &'static str,
1386}
1387
1388#[derive(const _: () =
{
impl<'_sess, 'tcx, G> rustc_errors::Diagnostic<'_sess, G> for
CoerceSharedFieldMismatch<'tcx> {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
CoerceSharedFieldMismatch {
span: __binding_0,
source_span: __binding_1,
impl_span: __binding_2,
source_name: __binding_3,
source_ty: __binding_4,
target_name: __binding_5,
target_ty: __binding_6,
trait_name: __binding_7 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("implementing `{$trait_name}` requires corresponding fields to match, be reborrowable with `CoerceShared`, or coerce a mutable reference field to a shared reference field")));
;
diag.arg("source_name", __binding_3);
diag.arg("source_ty", __binding_4);
diag.arg("target_name", __binding_5);
diag.arg("target_ty", __binding_6);
diag.arg("trait_name", __binding_7);
diag.span(__binding_0);
diag.span_label(__binding_0,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("target field `{$target_name}` has type `{$target_ty}`")));
diag.span_label(__binding_1,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("source field `{$source_name}` has type `{$source_ty}`")));
diag.span_label(__binding_2,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("required by this `CoerceShared` implementation")));
diag
}
}
}
}
};Diagnostic)]
1389#[diag(
1390 "implementing `{$trait_name}` requires corresponding fields to match, \
1391 be reborrowable with `CoerceShared`, or coerce a mutable reference field \
1392 to a shared reference field"
1393)]
1394pub(crate) struct CoerceSharedFieldMismatch<'tcx> {
1395 #[primary_span]
1396 #[label("target field `{$target_name}` has type `{$target_ty}`")]
1397 pub span: Span,
1398 #[label("source field `{$source_name}` has type `{$source_ty}`")]
1399 pub source_span: Span,
1400 #[label("required by this `CoerceShared` implementation")]
1401 pub impl_span: Span,
1402 pub source_name: Symbol,
1403 pub source_ty: Ty<'tcx>,
1404 pub target_name: Symbol,
1405 pub target_ty: Ty<'tcx>,
1406 pub trait_name: &'static str,
1407}
1408
1409#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
CoerceSharedMissingField {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
CoerceSharedMissingField {
span: __binding_0,
source_ty_span: __binding_1,
trait_name: __binding_2,
source_ty_name: __binding_3,
field_name: __binding_4 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("implementing `{$trait_name}` requires every target field to have a corresponding source field")));
;
diag.arg("trait_name", __binding_2);
diag.arg("source_ty_name", __binding_3);
diag.arg("field_name", __binding_4);
diag.span(__binding_0);
diag.span_label(__binding_0,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("target field `{$field_name}` has no corresponding source field")));
diag.span_label(__binding_1,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("source type `{$source_ty_name}` does not contain field `{$field_name}`")));
diag
}
}
}
}
};Diagnostic)]
1410#[diag(
1411 "implementing `{$trait_name}` requires every target field to have a corresponding source field"
1412)]
1413pub(crate) struct CoerceSharedMissingField {
1414 #[primary_span]
1415 #[label("target field `{$field_name}` has no corresponding source field")]
1416 pub span: Span,
1417 #[label("source type `{$source_ty_name}` does not contain field `{$field_name}`")]
1418 pub source_ty_span: Span,
1419 pub trait_name: &'static str,
1420 pub source_ty_name: Symbol,
1421 pub field_name: Symbol,
1422}
1423
1424#[derive(const _: () =
{
impl<'_sess, 'tcx, G> rustc_errors::Diagnostic<'_sess, G> for
CoerceSharedOmittedSourceFieldNotCopyOrReborrow<'tcx> {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
CoerceSharedOmittedSourceFieldNotCopyOrReborrow {
span: __binding_0,
impl_span: __binding_1,
trait_name: __binding_2,
field_name: __binding_3,
field_ty: __binding_4 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("implementing `{$trait_name}` requires source fields omitted from the target to be `Copy` or `Reborrow`")));
;
diag.arg("trait_name", __binding_2);
diag.arg("field_name", __binding_3);
diag.arg("field_ty", __binding_4);
diag.span(__binding_0);
diag.span_label(__binding_0,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("source field `{$field_name}` has type `{$field_ty}`")));
diag.span_label(__binding_1,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("required by this `CoerceShared` implementation")));
diag
}
}
}
}
};Diagnostic)]
1425#[diag(
1426 "implementing `{$trait_name}` requires source fields omitted from the target to be `Copy` or \
1427 `Reborrow`"
1428)]
1429pub(crate) struct CoerceSharedOmittedSourceFieldNotCopyOrReborrow<'tcx> {
1430 #[primary_span]
1431 #[label("source field `{$field_name}` has type `{$field_ty}`")]
1432 pub span: Span,
1433 #[label("required by this `CoerceShared` implementation")]
1434 pub impl_span: Span,
1435 pub trait_name: &'static str,
1436 pub field_name: Symbol,
1437 pub field_ty: Ty<'tcx>,
1438}
1439
1440#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
CoerceSharedFieldStyleMismatch {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
CoerceSharedFieldStyleMismatch {
span: __binding_0, trait_name: __binding_1 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("implementing `{$trait_name}` requires source and target structs to use the same field style")));
;
diag.arg("trait_name", __binding_1);
diag.span(__binding_0);
diag
}
}
}
}
};Diagnostic)]
1441#[diag(
1442 "implementing `{$trait_name}` requires source and target structs to use the same field style"
1443)]
1444pub(crate) struct CoerceSharedFieldStyleMismatch {
1445 #[primary_span]
1446 pub span: Span,
1447 pub trait_name: &'static str,
1448}
1449
1450#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
CoerceSharedInaccessibleField {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
CoerceSharedInaccessibleField {
span: __binding_0,
type_span: __binding_1,
trait_name: __binding_2,
role: __binding_3,
type_name: __binding_4 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("implementing `{$trait_name}` requires all {$role} type fields to be accessible from the impl")));
;
diag.arg("trait_name", __binding_2);
diag.arg("role", __binding_3);
diag.arg("type_name", __binding_4);
diag.span(__binding_0);
diag.span_label(__binding_1,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("{$role} type `{$type_name}` has inaccessible reborrow data fields")));
diag
}
}
}
}
};Diagnostic)]
1451#[diag(
1452 "implementing `{$trait_name}` requires all {$role} type fields to be accessible from the impl"
1453)]
1454pub(crate) struct CoerceSharedInaccessibleField {
1455 #[primary_span]
1456 pub span: Span,
1457 #[label("{$role} type `{$type_name}` has inaccessible reborrow data fields")]
1458 pub type_span: Span,
1459 pub trait_name: &'static str,
1460 pub role: &'static str,
1461 pub type_name: Symbol,
1462}
1463
1464#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
CoerceSharedMultipleNonZstFields {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
CoerceSharedMultipleNonZstFields {
span: __binding_0,
source_ty_span: __binding_1,
target_ty_span: __binding_2,
trait_name: __binding_3,
source_count: __binding_4,
target_count: __binding_5 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("implementing `{$trait_name}` currently requires source and target to have at most one non-ZST reborrow data field")));
diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("this is a temporary restriction until `CoerceShared` lowering supports non-trivially memcpy-compatible field layouts")));
;
diag.arg("trait_name", __binding_3);
diag.arg("source_count", __binding_4);
diag.arg("target_count", __binding_5);
diag.span(__binding_0);
diag.span_label(__binding_0,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("in this `CoerceShared` implementation")));
diag.span_label(__binding_1,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("source type has {$source_count} non-ZST reborrow data fields")));
diag.span_label(__binding_2,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("target type has {$target_count} non-ZST reborrow data fields")));
diag
}
}
}
}
};Diagnostic)]
1465#[diag(
1466 "implementing `{$trait_name}` currently requires source and target to have at most one \
1467 non-ZST reborrow data field"
1468)]
1469#[note(
1470 "this is a temporary restriction until `CoerceShared` lowering supports non-trivially \
1471 memcpy-compatible field layouts"
1472)]
1473pub(crate) struct CoerceSharedMultipleNonZstFields {
1474 #[primary_span]
1475 #[label("in this `CoerceShared` implementation")]
1476 pub span: Span,
1477 #[label("source type has {$source_count} non-ZST reborrow data fields")]
1478 pub source_ty_span: Span,
1479 #[label("target type has {$target_count} non-ZST reborrow data fields")]
1480 pub target_ty_span: Span,
1481 pub trait_name: &'static str,
1482 pub source_count: usize,
1483 pub target_count: usize,
1484}
1485
1486#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
CoerceUnsizedNonStruct {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
CoerceUnsizedNonStruct {
span: __binding_0, trait_name: __binding_1 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("the trait `{$trait_name}` may only be implemented for a coercion between structures")));
diag.code(E0377);
;
diag.arg("trait_name", __binding_1);
diag.span(__binding_0);
diag
}
}
}
}
};Diagnostic)]
1487#[diag("the trait `{$trait_name}` may only be implemented for a coercion between structures", code = E0377)]
1488pub(crate) struct CoerceUnsizedNonStruct {
1489 #[primary_span]
1490 pub span: Span,
1491 pub trait_name: &'static str,
1492}
1493
1494#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
CoerceSamePatKind {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
CoerceSamePatKind {
span: __binding_0,
trait_name: __binding_1,
pat_a: __binding_2,
pat_b: __binding_3 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("only pattern types with the same pattern can be coerced between each other")));
;
diag.span(__binding_0);
diag
}
}
}
}
};Diagnostic)]
1495#[diag("only pattern types with the same pattern can be coerced between each other")]
1496pub(crate) struct CoerceSamePatKind {
1497 #[primary_span]
1498 pub span: Span,
1499 pub trait_name: &'static str,
1500 pub pat_a: String,
1501 pub pat_b: String,
1502}
1503
1504#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
CoerceSameStruct {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
CoerceSameStruct {
span: __binding_0,
trait_name: __binding_1,
note: __binding_2,
source_path: __binding_3,
target_path: __binding_4 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("the trait `{$trait_name}` may only be implemented for a coercion between structures")));
diag.code(E0377);
;
diag.arg("trait_name", __binding_1);
diag.arg("source_path", __binding_3);
diag.arg("target_path", __binding_4);
diag.span(__binding_0);
if __binding_2 {
diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expected coercion between the same definition; expected `{$source_path}`, found `{$target_path}`")));
}
diag
}
}
}
}
};Diagnostic)]
1505#[diag("the trait `{$trait_name}` may only be implemented for a coercion between structures", code = E0377)]
1506pub(crate) struct CoerceSameStruct {
1507 #[primary_span]
1508 pub span: Span,
1509 pub trait_name: &'static str,
1510 #[note(
1511 "expected coercion between the same definition; expected `{$source_path}`, found `{$target_path}`"
1512 )]
1513 pub note: bool,
1514 pub source_path: String,
1515 pub target_path: String,
1516}
1517
1518#[derive(const _: () =
{
impl<'_sess, 'tcx, G> rustc_errors::Diagnostic<'_sess, G> for
CoerceFieldValidity<'tcx> {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
CoerceFieldValidity {
span: __binding_0,
ty: __binding_1,
trait_name: __binding_2,
field_span: __binding_3,
field_ty: __binding_4 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("for `{$ty}` to have a valid implementation of `{$trait_name}`, it must be possible to coerce the field of type `{$field_ty}`")));
;
diag.arg("ty", __binding_1);
diag.arg("trait_name", __binding_2);
diag.arg("field_ty", __binding_4);
diag.span(__binding_0);
diag.span_label(__binding_3,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`{$field_ty}` must be a pointer, reference, or smart pointer that is allowed to be unsized")));
diag
}
}
}
}
};Diagnostic)]
1519#[diag(
1520 "for `{$ty}` to have a valid implementation of `{$trait_name}`, it must be possible to coerce the field of type `{$field_ty}`"
1521)]
1522pub(crate) struct CoerceFieldValidity<'tcx> {
1523 #[primary_span]
1524 pub span: Span,
1525 pub ty: Ty<'tcx>,
1526 pub trait_name: &'static str,
1527 #[label(
1528 "`{$field_ty}` must be a pointer, reference, or smart pointer that is allowed to be unsized"
1529 )]
1530 pub field_span: Span,
1531 pub field_ty: Ty<'tcx>,
1532}
1533
1534#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
TraitCannotImplForTy {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
TraitCannotImplForTy {
span: __binding_0,
trait_name: __binding_1,
label_spans: __binding_2,
notes: __binding_3 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("the trait `{$trait_name}` cannot be implemented for this type")));
diag.code(E0204);
;
diag.arg("trait_name", __binding_1);
diag.span(__binding_0);
for __binding_2 in __binding_2 {
diag.span_label(__binding_2,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("this field does not implement `{$trait_name}`")));
}
for __binding_3 in __binding_3 {
diag.subdiagnostic(__binding_3);
}
diag
}
}
}
}
};Diagnostic)]
1535#[diag("the trait `{$trait_name}` cannot be implemented for this type", code = E0204)]
1536pub(crate) struct TraitCannotImplForTy {
1537 #[primary_span]
1538 pub span: Span,
1539 pub trait_name: String,
1540 #[label("this field does not implement `{$trait_name}`")]
1541 pub label_spans: Vec<Span>,
1542 #[subdiagnostic]
1543 pub notes: Vec<ImplForTyRequires>,
1544}
1545
1546#[derive(const _: () =
{
impl rustc_errors::Subdiagnostic for ImplForTyRequires {
fn add_to_diag<__G>(self,
diag: &mut rustc_errors::Diag<'_, __G>) {
match self {
ImplForTyRequires {
span: __binding_0,
error_predicate: __binding_1,
trait_name: __binding_2,
ty: __binding_3 } => {
let mut sub_args = rustc_errors::DiagArgMap::default();
sub_args.insert("error_predicate".into(),
rustc_errors::IntoDiagArg::into_diag_arg(__binding_1,
&mut diag.long_ty_path));
sub_args.insert("trait_name".into(),
rustc_errors::IntoDiagArg::into_diag_arg(__binding_2,
&mut diag.long_ty_path));
sub_args.insert("ty".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("the `{$trait_name}` impl for `{$ty}` requires that `{$error_predicate}`")),
&sub_args);
diag.span_note(__binding_0, __message);
}
}
}
}
};Subdiagnostic)]
1547#[note("the `{$trait_name}` impl for `{$ty}` requires that `{$error_predicate}`")]
1548pub(crate) struct ImplForTyRequires {
1549 #[primary_span]
1550 pub span: MultiSpan,
1551 pub error_predicate: String,
1552 pub trait_name: String,
1553 pub ty: String,
1554}
1555
1556#[derive(const _: () =
{
impl<'_sess, 'a, G> rustc_errors::Diagnostic<'_sess, G> for
TraitsWithDefaultImpl<'a> {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
TraitsWithDefaultImpl {
span: __binding_0,
traits: __binding_1,
problematic_kind: __binding_2,
self_ty: __binding_3 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("traits with a default impl, like `{$traits}`, cannot be implemented for {$problematic_kind} `{$self_ty}`")));
diag.code(E0321);
diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("a trait object implements `{$traits}` if and only if `{$traits}` is one of the trait object's trait bounds")));
;
diag.arg("traits", __binding_1);
diag.arg("problematic_kind", __binding_2);
diag.arg("self_ty", __binding_3);
diag.span(__binding_0);
diag
}
}
}
}
};Diagnostic)]
1557#[diag("traits with a default impl, like `{$traits}`, cannot be implemented for {$problematic_kind} `{$self_ty}`", code = E0321)]
1558#[note(
1559 "a trait object implements `{$traits}` if and only if `{$traits}` is one of the trait object's trait bounds"
1560)]
1561pub(crate) struct TraitsWithDefaultImpl<'a> {
1562 #[primary_span]
1563 pub span: Span,
1564 pub traits: String,
1565 pub problematic_kind: &'a str,
1566 pub self_ty: Ty<'a>,
1567}
1568
1569#[derive(const _: () =
{
impl<'_sess, 'a, G> rustc_errors::Diagnostic<'_sess, G> for
CrossCrateTraits<'a> {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
CrossCrateTraits {
span: __binding_0, traits: __binding_1, self_ty: __binding_2
} => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("cross-crate traits with a default impl, like `{$traits}`, can only be implemented for a struct/enum type, not `{$self_ty}`")));
diag.code(E0321);
;
diag.arg("traits", __binding_1);
diag.arg("self_ty", __binding_2);
diag.span(__binding_0);
diag.span_label(__binding_0,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("can't implement cross-crate trait with a default impl for non-struct/enum type")));
diag
}
}
}
}
};Diagnostic)]
1570#[diag("cross-crate traits with a default impl, like `{$traits}`, can only be implemented for a struct/enum type, not `{$self_ty}`", code = E0321)]
1571pub(crate) struct CrossCrateTraits<'a> {
1572 #[primary_span]
1573 #[label("can't implement cross-crate trait with a default impl for non-struct/enum type")]
1574 pub span: Span,
1575 pub traits: String,
1576 pub self_ty: Ty<'a>,
1577}
1578
1579#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
CrossCrateTraitsDefined {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
CrossCrateTraitsDefined {
span: __binding_0, traits: __binding_1 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("cross-crate traits with a default impl, like `{$traits}`, can only be implemented for a struct/enum type defined in the current crate")));
diag.code(E0321);
;
diag.arg("traits", __binding_1);
diag.span(__binding_0);
diag.span_label(__binding_0,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("can't implement cross-crate trait for type in another crate")));
diag
}
}
}
}
};Diagnostic)]
1580#[diag("cross-crate traits with a default impl, like `{$traits}`, can only be implemented for a struct/enum type defined in the current crate", code = E0321)]
1581pub(crate) struct CrossCrateTraitsDefined {
1582 #[primary_span]
1583 #[label("can't implement cross-crate trait for type in another crate")]
1584 pub span: Span,
1585 pub traits: String,
1586}
1587
1588#[derive(const _: () =
{
impl<'_sess, 'tcx, G> rustc_errors::Diagnostic<'_sess, G> for
NoVariantNamed<'tcx> {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
NoVariantNamed {
span: __binding_0, ident: __binding_1, ty: __binding_2 } =>
{
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("no variant named `{$ident}` found for enum `{$ty}`")));
diag.code(E0599);
;
diag.arg("ident", __binding_1);
diag.arg("ty", __binding_2);
diag.span(__binding_0);
diag
}
}
}
}
};Diagnostic)]
1589#[diag("no variant named `{$ident}` found for enum `{$ty}`", code = E0599)]
1590pub struct NoVariantNamed<'tcx> {
1591 #[primary_span]
1592 pub span: Span,
1593 pub ident: Ident,
1594 pub ty: Ty<'tcx>,
1595}
1596
1597#[derive(const _: () =
{
impl<'_sess, 'tcx, G> rustc_errors::Diagnostic<'_sess, G> for
NoFieldOnType<'tcx> {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
NoFieldOnType {
span: __binding_0, ty: __binding_1, field: __binding_2 } =>
{
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("no field `{$field}` on type `{$ty}`")));
diag.code(E0609);
;
diag.arg("ty", __binding_1);
diag.arg("field", __binding_2);
diag.span(__binding_0);
diag
}
}
}
}
};Diagnostic)]
1598#[diag("no field `{$field}` on type `{$ty}`", code = E0609)]
1599pub struct NoFieldOnType<'tcx> {
1600 #[primary_span]
1601 pub span: Span,
1602 pub ty: Ty<'tcx>,
1603 pub field: Ident,
1604}
1605
1606#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
OnlyCurrentTraits {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
OnlyCurrentTraits::Outside {
span: __binding_0, note: __binding_1 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("only traits defined in the current crate can be implemented for types defined outside of the crate")));
diag.code(E0117);
;
diag.span(__binding_0);
diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("impl doesn't have any local type before any uncovered type parameters")));
diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("for more information see https://doc.rust-lang.org/reference/items/implementations.html#orphan-rules")));
diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("define and implement a trait or new type instead")));
diag
}
OnlyCurrentTraits::Primitive {
span: __binding_0, note: __binding_1 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("only traits defined in the current crate can be implemented for primitive types")));
diag.code(E0117);
;
diag.span(__binding_0);
diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("impl doesn't have any local type before any uncovered type parameters")));
diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("for more information see https://doc.rust-lang.org/reference/items/implementations.html#orphan-rules")));
diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("define and implement a trait or new type instead")));
diag
}
OnlyCurrentTraits::Arbitrary {
span: __binding_0, note: __binding_1 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("only traits defined in the current crate can be implemented for arbitrary types")));
diag.code(E0117);
;
diag.span(__binding_0);
diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("impl doesn't have any local type before any uncovered type parameters")));
diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("for more information see https://doc.rust-lang.org/reference/items/implementations.html#orphan-rules")));
diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("define and implement a trait or new type instead")));
diag
}
}
}
}
};Diagnostic)]
1607pub(crate) enum OnlyCurrentTraits {
1608 #[diag("only traits defined in the current crate can be implemented for types defined outside of the crate", code = E0117)]
1609 Outside {
1610 #[primary_span]
1611 span: Span,
1612 #[note("impl doesn't have any local type before any uncovered type parameters")]
1613 #[note(
1614 "for more information see https://doc.rust-lang.org/reference/items/implementations.html#orphan-rules"
1615 )]
1616 #[note("define and implement a trait or new type instead")]
1617 note: (),
1618 },
1619 #[diag("only traits defined in the current crate can be implemented for primitive types", code = E0117)]
1620 Primitive {
1621 #[primary_span]
1622 span: Span,
1623 #[note("impl doesn't have any local type before any uncovered type parameters")]
1624 #[note(
1625 "for more information see https://doc.rust-lang.org/reference/items/implementations.html#orphan-rules"
1626 )]
1627 #[note("define and implement a trait or new type instead")]
1628 note: (),
1629 },
1630 #[diag("only traits defined in the current crate can be implemented for arbitrary types", code = E0117)]
1631 Arbitrary {
1632 #[primary_span]
1633 span: Span,
1634 #[note("impl doesn't have any local type before any uncovered type parameters")]
1635 #[note(
1636 "for more information see https://doc.rust-lang.org/reference/items/implementations.html#orphan-rules"
1637 )]
1638 #[note("define and implement a trait or new type instead")]
1639 note: (),
1640 },
1641}
1642
1643#[derive(const _: () =
{
impl rustc_errors::Subdiagnostic for OnlyCurrentTraitsOpaque {
fn add_to_diag<__G>(self,
diag: &mut rustc_errors::Diag<'_, __G>) {
match self {
OnlyCurrentTraitsOpaque { 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("type alias impl trait is treated as if it were foreign, because its hidden type could be from a foreign crate")),
&sub_args);
diag.span_label(__binding_0, __message);
}
}
}
}
};Subdiagnostic)]
1644#[label(
1645 "type alias impl trait is treated as if it were foreign, because its hidden type could be from a foreign crate"
1646)]
1647pub(crate) struct OnlyCurrentTraitsOpaque {
1648 #[primary_span]
1649 pub span: Span,
1650}
1651#[derive(const _: () =
{
impl rustc_errors::Subdiagnostic for OnlyCurrentTraitsForeign {
fn add_to_diag<__G>(self,
diag: &mut rustc_errors::Diag<'_, __G>) {
match self {
OnlyCurrentTraitsForeign { span: __binding_0 } => {
let mut sub_args = rustc_errors::DiagArgMap::default();
let __message =
rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("this is not defined in the current crate because this is a foreign trait")),
&sub_args);
diag.span_label(__binding_0, __message);
}
}
}
}
};Subdiagnostic)]
1652#[label("this is not defined in the current crate because this is a foreign trait")]
1653pub(crate) struct OnlyCurrentTraitsForeign {
1654 #[primary_span]
1655 pub span: Span,
1656}
1657
1658#[derive(const _: () =
{
impl<'a> rustc_errors::Subdiagnostic for OnlyCurrentTraitsName<'a> {
fn add_to_diag<__G>(self,
diag: &mut rustc_errors::Diag<'_, __G>) {
match self {
OnlyCurrentTraitsName { span: __binding_0, name: __binding_1
} => {
let mut sub_args = rustc_errors::DiagArgMap::default();
sub_args.insert("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("this is not defined in the current crate because {$name} are always foreign")),
&sub_args);
diag.span_label(__binding_0, __message);
}
}
}
}
};Subdiagnostic)]
1659#[label("this is not defined in the current crate because {$name} are always foreign")]
1660pub(crate) struct OnlyCurrentTraitsName<'a> {
1661 #[primary_span]
1662 pub span: Span,
1663 pub name: &'a str,
1664}
1665
1666#[derive(const _: () =
{
impl<'a> rustc_errors::Subdiagnostic for OnlyCurrentTraitsPointer<'a>
{
fn add_to_diag<__G>(self,
diag: &mut rustc_errors::Diag<'_, __G>) {
match self {
OnlyCurrentTraitsPointer {
span: __binding_0, pointer: __binding_1 } => {
let mut sub_args = rustc_errors::DiagArgMap::default();
sub_args.insert("pointer".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("`{$pointer}` is not defined in the current crate because raw pointers are always foreign")),
&sub_args);
diag.span_label(__binding_0, __message);
}
}
}
}
};Subdiagnostic)]
1667#[label("`{$pointer}` is not defined in the current crate because raw pointers are always foreign")]
1668pub(crate) struct OnlyCurrentTraitsPointer<'a> {
1669 #[primary_span]
1670 pub span: Span,
1671 pub pointer: Ty<'a>,
1672}
1673
1674#[derive(const _: () =
{
impl<'a> rustc_errors::Subdiagnostic for OnlyCurrentTraitsTy<'a> {
fn add_to_diag<__G>(self,
diag: &mut rustc_errors::Diag<'_, __G>) {
match self {
OnlyCurrentTraitsTy { span: __binding_0, ty: __binding_1 }
=> {
let mut sub_args = rustc_errors::DiagArgMap::default();
sub_args.insert("ty".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("`{$ty}` is not defined in the current crate")),
&sub_args);
diag.span_label(__binding_0, __message);
}
}
}
}
};Subdiagnostic)]
1675#[label("`{$ty}` is not defined in the current crate")]
1676pub(crate) struct OnlyCurrentTraitsTy<'a> {
1677 #[primary_span]
1678 pub span: Span,
1679 pub ty: Ty<'a>,
1680}
1681
1682#[derive(const _: () =
{
impl rustc_errors::Subdiagnostic for OnlyCurrentTraitsAdt {
fn add_to_diag<__G>(self,
diag: &mut rustc_errors::Diag<'_, __G>) {
match self {
OnlyCurrentTraitsAdt { span: __binding_0, name: __binding_1
} => {
let mut sub_args = rustc_errors::DiagArgMap::default();
sub_args.insert("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("`{$name}` is not defined in the current crate")),
&sub_args);
diag.span_label(__binding_0, __message);
}
}
}
}
};Subdiagnostic)]
1683#[label("`{$name}` is not defined in the current crate")]
1684pub(crate) struct OnlyCurrentTraitsAdt {
1685 #[primary_span]
1686 pub span: Span,
1687 pub name: String,
1688}
1689
1690#[derive(const _: () =
{
impl<'a> rustc_errors::Subdiagnostic for
OnlyCurrentTraitsPointerSugg<'a> {
fn add_to_diag<__G>(self,
diag: &mut rustc_errors::Diag<'_, __G>) {
match self {
OnlyCurrentTraitsPointerSugg {
wrapper_span: __binding_0,
struct_span: __binding_1,
mut_key: __binding_2,
ptr_ty: __binding_3 } => {
let mut suggestions = Vec::new();
let __code_22 =
::alloc::__export::must_use({
::alloc::fmt::format(format_args!("WrapperType"))
});
let __code_23 =
::alloc::__export::must_use({
::alloc::fmt::format(format_args!("struct WrapperType(*{0}{1});\n\n",
__binding_2, __binding_3))
});
suggestions.push((__binding_0, __code_22));
suggestions.push((__binding_1, __code_23));
let mut sub_args = rustc_errors::DiagArgMap::default();
let __message =
rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("consider introducing a new wrapper type")),
&sub_args);
diag.multipart_suggestion_with_style(__message, suggestions,
rustc_errors::Applicability::MaybeIncorrect,
rustc_errors::SuggestionStyle::ShowCode);
}
}
}
}
};Subdiagnostic)]
1691#[multipart_suggestion(
1692 "consider introducing a new wrapper type",
1693 applicability = "maybe-incorrect"
1694)]
1695pub(crate) struct OnlyCurrentTraitsPointerSugg<'a> {
1696 #[suggestion_part(code = "WrapperType")]
1697 pub wrapper_span: Span,
1698 #[suggestion_part(code = "struct WrapperType(*{mut_key}{ptr_ty});\n\n")]
1699 pub(crate) struct_span: Span,
1700 pub mut_key: &'a str,
1701 pub ptr_ty: Ty<'a>,
1702}
1703
1704#[derive(const _: () =
{
impl<'_sess, 'a, G> rustc_errors::Diagnostic<'_sess, G> for
UnsupportedDelegation<'a> {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
UnsupportedDelegation {
span: __binding_0,
descr: __binding_1,
callee_span: __binding_2 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("{$descr}")));
;
diag.arg("descr", __binding_1);
diag.span(__binding_0);
diag.span_label(__binding_2,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("callee defined here")));
diag
}
}
}
}
};Diagnostic)]
1705#[diag("{$descr}")]
1706pub(crate) struct UnsupportedDelegation<'a> {
1707 #[primary_span]
1708 pub span: Span,
1709 pub descr: &'a str,
1710 #[label("callee defined here")]
1711 pub callee_span: Span,
1712}
1713
1714#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
ElidedLifetimesAreNotAllowedInDelegations {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
ElidedLifetimesAreNotAllowedInDelegations {
span: __binding_0 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("inferred lifetimes are not allowed in delegations as we need to inherit signature")));
;
diag.span(__binding_0);
diag
}
}
}
}
};Diagnostic)]
1715#[diag("inferred lifetimes are not allowed in delegations as we need to inherit signature")]
1716pub(crate) struct ElidedLifetimesAreNotAllowedInDelegations {
1717 #[primary_span]
1718 pub span: Span,
1719}
1720
1721#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
MethodShouldReturnFuture {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
MethodShouldReturnFuture {
span: __binding_0,
method_name: __binding_1,
trait_item_span: __binding_2 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("method should be `async` or return a future, but it is synchronous")));
;
diag.span(__binding_0);
if let Some(__binding_2) = __binding_2 {
diag.span_note(__binding_2,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("this method is `async` so it expects a future to be returned")));
}
diag
}
}
}
}
};Diagnostic)]
1722#[diag("method should be `async` or return a future, but it is synchronous")]
1723pub(crate) struct MethodShouldReturnFuture {
1724 #[primary_span]
1725 pub span: Span,
1726 pub method_name: Ident,
1727 #[note("this method is `async` so it expects a future to be returned")]
1728 pub trait_item_span: Option<Span>,
1729}
1730
1731#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
UnusedGenericParameter {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
UnusedGenericParameter {
span: __binding_0,
param_name: __binding_1,
param_def_kind: __binding_2,
usage_spans: __binding_3,
help: __binding_4,
const_param_help: __binding_5 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("{$param_def_kind} `{$param_name}` is never used")));
;
diag.arg("param_name", __binding_1);
diag.arg("param_def_kind", __binding_2);
diag.span(__binding_0);
diag.span_label(__binding_0,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("unused {$param_def_kind}")));
for __binding_3 in __binding_3 {
diag.span_label(__binding_3,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`{$param_name}` is named here, but is likely unused in the containing type")));
}
diag.subdiagnostic(__binding_4);
if __binding_5 {
diag.help(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("if you intended `{$param_name}` to be a const parameter, use `const {$param_name}: /* Type */` instead")));
}
diag
}
}
}
}
};Diagnostic)]
1732#[diag("{$param_def_kind} `{$param_name}` is never used")]
1733pub(crate) struct UnusedGenericParameter {
1734 #[primary_span]
1735 #[label("unused {$param_def_kind}")]
1736 pub span: Span,
1737 pub param_name: Ident,
1738 pub param_def_kind: &'static str,
1739 #[label("`{$param_name}` is named here, but is likely unused in the containing type")]
1740 pub usage_spans: Vec<Span>,
1741 #[subdiagnostic]
1742 pub help: UnusedGenericParameterHelp,
1743 #[help(
1744 "if you intended `{$param_name}` to be a const parameter, use `const {$param_name}: /* Type */` instead"
1745 )]
1746 pub const_param_help: bool,
1747}
1748
1749#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
RecursiveGenericParameter {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
RecursiveGenericParameter {
spans: __binding_0,
param_span: __binding_1,
param_name: __binding_2,
param_def_kind: __binding_3,
help: __binding_4,
note: __binding_5 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("{$param_def_kind} `{$param_name}` is only used recursively")));
;
diag.arg("param_name", __binding_2);
diag.arg("param_def_kind", __binding_3);
diag.span(__binding_0.clone());
diag.span_label(__binding_1,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("{$param_def_kind} must be used non-recursively in the definition")));
diag.subdiagnostic(__binding_4);
diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("all type parameters must be used in a non-recursive way in order to constrain their variance")));
diag
}
}
}
}
};Diagnostic)]
1750#[diag("{$param_def_kind} `{$param_name}` is only used recursively")]
1751pub(crate) struct RecursiveGenericParameter {
1752 #[primary_span]
1753 pub spans: Vec<Span>,
1754 #[label("{$param_def_kind} must be used non-recursively in the definition")]
1755 pub param_span: Span,
1756 pub param_name: Ident,
1757 pub param_def_kind: &'static str,
1758 #[subdiagnostic]
1759 pub help: UnusedGenericParameterHelp,
1760 #[note(
1761 "all type parameters must be used in a non-recursive way in order to constrain their variance"
1762 )]
1763 pub note: (),
1764}
1765
1766#[derive(const _: () =
{
impl rustc_errors::Subdiagnostic for UnusedGenericParameterHelp {
fn add_to_diag<__G>(self,
diag: &mut rustc_errors::Diag<'_, __G>) {
match self {
UnusedGenericParameterHelp::Adt {
param_name: __binding_0, phantom_data: __binding_1 } => {
let mut sub_args = rustc_errors::DiagArgMap::default();
sub_args.insert("param_name".into(),
rustc_errors::IntoDiagArg::into_diag_arg(__binding_0,
&mut diag.long_ty_path));
sub_args.insert("phantom_data".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 `{$param_name}`, referring to it in a field, or using a marker such as `{$phantom_data}`")),
&sub_args);
diag.help(__message);
}
UnusedGenericParameterHelp::AdtNoPhantomData {
param_name: __binding_0 } => {
let mut sub_args = rustc_errors::DiagArgMap::default();
sub_args.insert("param_name".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("consider removing `{$param_name}` or referring to it in a field")),
&sub_args);
diag.help(__message);
}
UnusedGenericParameterHelp::TyAlias {
param_name: __binding_0 } => {
let mut sub_args = rustc_errors::DiagArgMap::default();
sub_args.insert("param_name".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("consider removing `{$param_name}` or referring to it in the body of the type alias")),
&sub_args);
diag.help(__message);
}
}
}
}
};Subdiagnostic)]
1767pub(crate) enum UnusedGenericParameterHelp {
1768 #[help(
1769 "consider removing `{$param_name}`, referring to it in a field, or using a marker such as `{$phantom_data}`"
1770 )]
1771 Adt { param_name: Ident, phantom_data: String },
1772 #[help("consider removing `{$param_name}` or referring to it in a field")]
1773 AdtNoPhantomData { param_name: Ident },
1774 #[help("consider removing `{$param_name}` or referring to it in the body of the type alias")]
1775 TyAlias { param_name: Ident },
1776}
1777
1778#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
UnconstrainedGenericParameter {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
UnconstrainedGenericParameter {
span: __binding_0,
param_name: __binding_1,
param_def_kind: __binding_2,
const_param_note: __binding_3,
const_param_note2: __binding_4 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("the {$param_def_kind} `{$param_name}` is not constrained by the impl trait, self type, or predicates")));
;
diag.arg("param_name", __binding_1);
diag.arg("param_def_kind", __binding_2);
diag.span(__binding_0);
diag.span_label(__binding_0,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("unconstrained {$param_def_kind}")));
if __binding_3 {
diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("expressions using a const parameter must map each value to a distinct output value")));
}
if __binding_4 {
diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("proving the result of expressions other than the parameter are unique is not supported")));
}
diag
}
}
}
}
};Diagnostic)]
1779#[diag(
1780 "the {$param_def_kind} `{$param_name}` is not constrained by the impl trait, self type, or predicates"
1781)]
1782pub(crate) struct UnconstrainedGenericParameter {
1783 #[primary_span]
1784 #[label("unconstrained {$param_def_kind}")]
1785 pub span: Span,
1786 pub param_name: Ident,
1787 pub param_def_kind: &'static str,
1788 #[note("expressions using a const parameter must map each value to a distinct output value")]
1789 pub const_param_note: bool,
1790 #[note(
1791 "proving the result of expressions other than the parameter are unique is not supported"
1792 )]
1793 pub const_param_note2: bool,
1794}
1795
1796#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
OpaqueCapturesHigherRankedLifetime {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
OpaqueCapturesHigherRankedLifetime {
span: __binding_0,
label: __binding_1,
decl_span: __binding_2,
bad_place: __binding_3 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`impl Trait` cannot capture {$bad_place}")));
diag.code(E0657);
;
diag.arg("bad_place", __binding_3);
diag.span(__binding_0);
if let Some(__binding_1) = __binding_1 {
diag.span_label(__binding_1,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`impl Trait` implicitly captures all lifetimes in scope")));
}
diag.span_note(__binding_2,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("lifetime declared here")));
diag
}
}
}
}
};Diagnostic)]
1797#[diag("`impl Trait` cannot capture {$bad_place}", code = E0657)]
1798pub(crate) struct OpaqueCapturesHigherRankedLifetime {
1799 #[primary_span]
1800 pub span: MultiSpan,
1801 #[label("`impl Trait` implicitly captures all lifetimes in scope")]
1802 pub label: Option<Span>,
1803 #[note("lifetime declared here")]
1804 pub decl_span: MultiSpan,
1805 pub bad_place: &'static str,
1806}
1807
1808#[derive(const _: () =
{
impl rustc_errors::Subdiagnostic for InvalidReceiverTyHint {
fn add_to_diag<__G>(self,
diag: &mut rustc_errors::Diag<'_, __G>) {
match self {
InvalidReceiverTyHint::Weak => {
let mut sub_args = rustc_errors::DiagArgMap::default();
let __message =
rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`Weak` does not implement `Receiver` because it has methods that may shadow the referent; consider wrapping your `Weak` in a newtype wrapper for which you implement `Receiver`")),
&sub_args);
diag.note(__message);
}
InvalidReceiverTyHint::NonNull => {
let mut sub_args = rustc_errors::DiagArgMap::default();
let __message =
rustc_errors::format_diag_message(&rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`NonNull` does not implement `Receiver` because it has methods that may shadow the referent; consider wrapping your `NonNull` in a newtype wrapper for which you implement `Receiver`")),
&sub_args);
diag.note(__message);
}
}
}
}
};Subdiagnostic)]
1809pub(crate) enum InvalidReceiverTyHint {
1810 #[note(
1811 "`Weak` does not implement `Receiver` because it has methods that may shadow the referent; consider wrapping your `Weak` in a newtype wrapper for which you implement `Receiver`"
1812 )]
1813 Weak,
1814 #[note(
1815 "`NonNull` does not implement `Receiver` because it has methods that may shadow the referent; consider wrapping your `NonNull` in a newtype wrapper for which you implement `Receiver`"
1816 )]
1817 NonNull,
1818}
1819
1820#[derive(const _: () =
{
impl<'_sess, 'tcx, G> rustc_errors::Diagnostic<'_sess, G> for
InvalidReceiverTyNoArbitrarySelfTypes<'tcx> {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
InvalidReceiverTyNoArbitrarySelfTypes {
span: __binding_0, receiver_ty: __binding_1 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("invalid `self` parameter type: `{$receiver_ty}`")));
diag.code(E0307);
diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("type of `self` must be `Self` or a type that dereferences to it")));
diag.help(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("consider changing to `self`, `&self`, `&mut self`, `self: Box<Self>`, `self: Rc<Self>`, `self: Arc<Self>`, or `self: Pin<P>` (where P is one of the previous types except `Self`)")));
;
diag.arg("receiver_ty", __binding_1);
diag.span(__binding_0);
diag
}
}
}
}
};Diagnostic)]
1821#[diag("invalid `self` parameter type: `{$receiver_ty}`", code = E0307)]
1822#[note("type of `self` must be `Self` or a type that dereferences to it")]
1823#[help(
1824 "consider changing to `self`, `&self`, `&mut self`, `self: Box<Self>`, `self: Rc<Self>`, `self: Arc<Self>`, or `self: Pin<P>` (where P is one of the previous types except `Self`)"
1825)]
1826pub(crate) struct InvalidReceiverTyNoArbitrarySelfTypes<'tcx> {
1827 #[primary_span]
1828 pub span: Span,
1829 pub receiver_ty: Ty<'tcx>,
1830}
1831
1832#[derive(const _: () =
{
impl<'_sess, 'tcx, G> rustc_errors::Diagnostic<'_sess, G> for
InvalidReceiverTy<'tcx> {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
InvalidReceiverTy {
span: __binding_0,
receiver_ty: __binding_1,
hint: __binding_2 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("invalid `self` parameter type: `{$receiver_ty}`")));
diag.code(E0307);
diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("type of `self` must be `Self` or some type implementing `Receiver`")));
diag.help(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("consider changing to `self`, `&self`, `&mut self`, or a type implementing `Receiver` such as `self: Box<Self>`, `self: Rc<Self>`, or `self: Arc<Self>`")));
;
diag.arg("receiver_ty", __binding_1);
diag.span(__binding_0);
if let Some(__binding_2) = __binding_2 {
diag.subdiagnostic(__binding_2);
}
diag
}
}
}
}
};Diagnostic)]
1833#[diag("invalid `self` parameter type: `{$receiver_ty}`", code = E0307)]
1834#[note("type of `self` must be `Self` or some type implementing `Receiver`")]
1835#[help(
1836 "consider changing to `self`, `&self`, `&mut self`, or a type implementing `Receiver` such as `self: Box<Self>`, `self: Rc<Self>`, or `self: Arc<Self>`"
1837)]
1838pub(crate) struct InvalidReceiverTy<'tcx> {
1839 #[primary_span]
1840 pub span: Span,
1841 pub receiver_ty: Ty<'tcx>,
1842 #[subdiagnostic]
1843 pub hint: Option<InvalidReceiverTyHint>,
1844}
1845
1846#[derive(const _: () =
{
impl<'_sess, 'tcx, G> rustc_errors::Diagnostic<'_sess, G> for
InvalidGenericReceiverTy<'tcx> {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
InvalidGenericReceiverTy {
span: __binding_0, receiver_ty: __binding_1 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("invalid generic `self` parameter type: `{$receiver_ty}`")));
diag.code(E0801);
diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("type of `self` must not be a method generic parameter type")));
diag.help(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("use a concrete type such as `self`, `&self`, `&mut self`, `self: Box<Self>`, `self: Rc<Self>`, `self: Arc<Self>`, or `self: Pin<P>` (where P is one of the previous types except `Self`)")));
;
diag.arg("receiver_ty", __binding_1);
diag.span(__binding_0);
diag
}
}
}
}
};Diagnostic)]
1847#[diag("invalid generic `self` parameter type: `{$receiver_ty}`", code = E0801)]
1848#[note("type of `self` must not be a method generic parameter type")]
1849#[help(
1850 "use a concrete type such as `self`, `&self`, `&mut self`, `self: Box<Self>`, `self: Rc<Self>`, `self: Arc<Self>`, or `self: Pin<P>` (where P is one of the previous types except `Self`)"
1851)]
1852pub(crate) struct InvalidGenericReceiverTy<'tcx> {
1853 #[primary_span]
1854 pub span: Span,
1855 pub receiver_ty: Ty<'tcx>,
1856}
1857
1858#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
CmseInputsStackSpill {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
CmseInputsStackSpill { spans: __binding_0, abi: __binding_1
} => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("arguments for `{$abi}` function too large to pass via registers")));
diag.code(E0798);
diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("functions with the `{$abi}` ABI must pass all their arguments via the 4 32-bit argument registers")));
;
diag.arg("abi", __binding_1);
diag.span(__binding_0.clone());
for __binding_0 in __binding_0 {
diag.span_label(__binding_0,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("does not fit in the available registers")));
}
diag
}
}
}
}
};Diagnostic)]
1859#[diag("arguments for `{$abi}` function too large to pass via registers", code = E0798)]
1860#[note(
1861 "functions with the `{$abi}` ABI must pass all their arguments via the 4 32-bit argument registers"
1862)]
1863pub(crate) struct CmseInputsStackSpill {
1864 #[primary_span]
1865 #[label("does not fit in the available registers")]
1866 pub spans: Vec<Span>,
1867 pub abi: ExternAbi,
1868}
1869
1870#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
CmseOutputStackSpill {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
CmseOutputStackSpill { span: __binding_0, abi: __binding_1 }
=> {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("return value of `{$abi}` function too large to pass via registers")));
diag.code(E0798);
diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("functions with the `{$abi}` ABI must pass their result via the available return registers")));
diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("the result must either be a (transparently wrapped) i64, u64 or f64, or be at most 4 bytes in size")));
;
diag.arg("abi", __binding_1);
diag.span(__binding_0);
diag.span_label(__binding_0,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("this type doesn't fit in the available registers")));
diag
}
}
}
}
};Diagnostic)]
1871#[diag("return value of `{$abi}` function too large to pass via registers", code = E0798)]
1872#[note("functions with the `{$abi}` ABI must pass their result via the available return registers")]
1873#[note(
1874 "the result must either be a (transparently wrapped) i64, u64 or f64, or be at most 4 bytes in size"
1875)]
1876pub(crate) struct CmseOutputStackSpill {
1877 #[primary_span]
1878 #[label("this type doesn't fit in the available registers")]
1879 pub span: Span,
1880 pub abi: ExternAbi,
1881}
1882
1883#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for CmseGeneric {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
CmseGeneric { span: __binding_0, abi: __binding_1 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("generics are not allowed in `extern {$abi}` signatures")));
diag.code(E0798);
;
diag.arg("abi", __binding_1);
diag.span(__binding_0);
diag
}
}
}
}
};Diagnostic)]
1884#[diag("generics are not allowed in `extern {$abi}` signatures", code = E0798)]
1885pub(crate) struct CmseGeneric {
1886 #[primary_span]
1887 pub span: Span,
1888 pub abi: ExternAbi,
1889}
1890
1891#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for CmseImplTrait
{
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
CmseImplTrait { span: __binding_0, abi: __binding_1 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`impl Trait` is not allowed in `extern {$abi}` signatures")));
diag.code(E0798);
;
diag.arg("abi", __binding_1);
diag.span(__binding_0);
diag
}
}
}
}
};Diagnostic)]
1892#[diag("`impl Trait` is not allowed in `extern {$abi}` signatures", code = E0798)]
1893pub(crate) struct CmseImplTrait {
1894 #[primary_span]
1895 pub span: Span,
1896 pub abi: ExternAbi,
1897}
1898
1899#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
BadReturnTypeNotation {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
BadReturnTypeNotation {
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 notation not allowed in this position yet")));
let __code_24 =
[::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("furthermore, argument types not allowed with return type notation")),
__code_24, rustc_errors::Applicability::MaybeIncorrect,
rustc_errors::SuggestionStyle::ShowAlways);
}
diag
}
}
}
}
};Diagnostic)]
1900#[diag("return type notation not allowed in this position yet")]
1901pub(crate) struct BadReturnTypeNotation {
1902 #[primary_span]
1903 pub span: Span,
1904 #[suggestion(
1905 "furthermore, argument types not allowed with return type notation",
1906 applicability = "maybe-incorrect",
1907 code = "(..)",
1908 style = "verbose"
1909 )]
1910 pub suggestion: Option<Span>,
1911}
1912
1913#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
SupertraitItemShadowing {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
SupertraitItemShadowing {
item: __binding_0,
subtrait: __binding_1,
shadowee: __binding_2 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("trait item `{$item}` from `{$subtrait}` shadows identically named item from supertrait")));
;
diag.arg("item", __binding_0);
diag.arg("subtrait", __binding_1);
diag.subdiagnostic(__binding_2);
diag
}
}
}
}
};Diagnostic)]
1914#[diag("trait item `{$item}` from `{$subtrait}` shadows identically named item from supertrait")]
1915pub(crate) struct SupertraitItemShadowing {
1916 pub item: Symbol,
1917 pub subtrait: Symbol,
1918 #[subdiagnostic]
1919 pub shadowee: SupertraitItemShadowee,
1920}
1921
1922#[derive(const _: () =
{
impl rustc_errors::Subdiagnostic for SupertraitItemShadowee {
fn add_to_diag<__G>(self,
diag: &mut rustc_errors::Diag<'_, __G>) {
match self {
SupertraitItemShadowee::Labeled {
span: __binding_0, supertrait: __binding_1 } => {
let mut sub_args = rustc_errors::DiagArgMap::default();
sub_args.insert("supertrait".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("item from `{$supertrait}` is shadowed by a subtrait item")),
&sub_args);
diag.span_note(__binding_0, __message);
}
SupertraitItemShadowee::Several {
spans: __binding_0, traits: __binding_1 } => {
let mut sub_args = rustc_errors::DiagArgMap::default();
sub_args.insert("traits".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("items from several supertraits are shadowed: {$traits}")),
&sub_args);
diag.span_note(__binding_0, __message);
}
}
}
}
};Subdiagnostic)]
1923pub(crate) enum SupertraitItemShadowee {
1924 #[note("item from `{$supertrait}` is shadowed by a subtrait item")]
1925 Labeled {
1926 #[primary_span]
1927 span: Span,
1928 supertrait: Symbol,
1929 },
1930 #[note("items from several supertraits are shadowed: {$traits}")]
1931 Several {
1932 #[primary_span]
1933 spans: MultiSpan,
1934 traits: DiagSymbolList,
1935 },
1936}
1937
1938#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
DynTraitAssocItemBindingMentionsSelf {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
DynTraitAssocItemBindingMentionsSelf {
span: __binding_0, kind: __binding_1, binding: __binding_2 }
=> {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("{$kind} binding in trait object type mentions `Self`")));
;
diag.arg("kind", __binding_1);
diag.span(__binding_0);
diag.span_label(__binding_0,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("contains a mention of `Self`")));
diag.span_label(__binding_2,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("this binding mentions `Self`")));
diag
}
}
}
}
};Diagnostic)]
1939#[diag("{$kind} binding in trait object type mentions `Self`")]
1940pub(crate) struct DynTraitAssocItemBindingMentionsSelf {
1941 #[primary_span]
1942 #[label("contains a mention of `Self`")]
1943 pub span: Span,
1944 pub kind: &'static str,
1945 #[label("this binding mentions `Self`")]
1946 pub binding: Span,
1947}
1948
1949#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
AsyncDropWithoutSyncDrop {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
AsyncDropWithoutSyncDrop { span: __binding_0 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`AsyncDrop` impl without `Drop` impl")));
diag.help(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("type implementing `AsyncDrop` trait must also implement `Drop` trait to be used in sync context and unwinds")));
;
diag.span(__binding_0);
diag
}
}
}
}
};Diagnostic)]
1950#[diag("`AsyncDrop` impl without `Drop` impl")]
1951#[help(
1952 "type implementing `AsyncDrop` trait must also implement `Drop` trait to be used in sync context and unwinds"
1953)]
1954pub(crate) struct AsyncDropWithoutSyncDrop {
1955 #[primary_span]
1956 pub span: Span,
1957}
1958
1959#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
LifetimesOrBoundsMismatchOnEii {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
LifetimesOrBoundsMismatchOnEii {
span: __binding_0,
generics_span: __binding_1,
where_span: __binding_2,
bounds_span: __binding_3,
ident: __binding_4 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("lifetime parameters or bounds of `{$ident}` do not match the declaration")));
;
diag.arg("ident", __binding_4);
diag.span(__binding_0);
diag.span_label(__binding_0,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("lifetimes do not match")));
diag.span_label(__binding_1,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("lifetimes in impl do not match this signature")));
if let Some(__binding_2) = __binding_2 {
diag.span_label(__binding_2,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("this `where` clause might not match the one in the trait")));
}
for __binding_3 in __binding_3 {
diag.span_label(__binding_3,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("this bound might be missing in the impl")));
}
diag
}
}
}
}
};Diagnostic)]
1960#[diag("lifetime parameters or bounds of `{$ident}` do not match the declaration")]
1961pub(crate) struct LifetimesOrBoundsMismatchOnEii {
1962 #[primary_span]
1963 #[label("lifetimes do not match")]
1964 pub span: Span,
1965 #[label("lifetimes in impl do not match this signature")]
1966 pub generics_span: Span,
1967 #[label("this `where` clause might not match the one in the trait")]
1968 pub where_span: Option<Span>,
1969 #[label("this bound might be missing in the impl")]
1970 pub bounds_span: Vec<Span>,
1971 pub ident: Symbol,
1972}
1973
1974#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
EiiWithGenerics {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
EiiWithGenerics {
span: __binding_0,
attr: __binding_1,
eii_name: __binding_2,
impl_name: __binding_3 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`{$impl_name}` cannot have generic parameters other than lifetimes")));
diag.help(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`#[{$eii_name}]` marks the implementation of an \"externally implementable item\"")));
;
diag.arg("eii_name", __binding_2);
diag.arg("impl_name", __binding_3);
diag.span(__binding_0);
diag.span_label(__binding_1,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("required by this attribute")));
diag
}
}
}
}
};Diagnostic)]
1975#[diag("`{$impl_name}` cannot have generic parameters other than lifetimes")]
1976#[help("`#[{$eii_name}]` marks the implementation of an \"externally implementable item\"")]
1977pub(crate) struct EiiWithGenerics {
1978 #[primary_span]
1979 pub span: Span,
1980 #[label("required by this attribute")]
1981 pub attr: Span,
1982 pub eii_name: Symbol,
1983 pub impl_name: Symbol,
1984}
1985
1986#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
ImplUnpinForPinProjectedType {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
ImplUnpinForPinProjectedType {
span: __binding_0,
adt_span: __binding_1,
adt_name: __binding_2 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("explicit impls for the `Unpin` trait are not permitted for structurally pinned types")));
;
diag.arg("adt_name", __binding_2);
diag.span(__binding_0);
diag.span_label(__binding_0,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("impl of `Unpin` not allowed")));
diag.span_help(__binding_1,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`{$adt_name}` is structurally pinned because it is marked as `#[pin_v2]`")));
diag
}
}
}
}
};Diagnostic)]
1987#[diag("explicit impls for the `Unpin` trait are not permitted for structurally pinned types")]
1988pub(crate) struct ImplUnpinForPinProjectedType {
1989 #[primary_span]
1990 #[label("impl of `Unpin` not allowed")]
1991 pub span: Span,
1992 #[help("`{$adt_name}` is structurally pinned because it is marked as `#[pin_v2]`")]
1993 pub adt_span: Span,
1994 pub adt_name: Symbol,
1995}
1996
1997#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
EiiDefkindMismatch {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
EiiDefkindMismatch {
span: __binding_0,
eii_name: __binding_1,
expected_kind: __binding_2 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`#[{$eii_name}]` must be used on a {$expected_kind}")));
;
diag.arg("eii_name", __binding_1);
diag.arg("expected_kind", __binding_2);
diag.span(__binding_0);
diag
}
}
}
}
};Diagnostic)]
1998#[diag("`#[{$eii_name}]` must be used on a {$expected_kind}")]
1999pub(crate) struct EiiDefkindMismatch {
2000 #[primary_span]
2001 pub span: Span,
2002 pub eii_name: Symbol,
2003 pub expected_kind: &'static str,
2004}
2005
2006#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
EiiDefkindMismatchStaticMutability {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
EiiDefkindMismatchStaticMutability {
span: __binding_0, eii_name: __binding_1 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("mutability does not match with the definition of`#[{$eii_name}]`")));
;
diag.arg("eii_name", __binding_1);
diag.span(__binding_0);
diag
}
}
}
}
};Diagnostic)]
2007#[diag("mutability does not match with the definition of`#[{$eii_name}]`")]
2008pub(crate) struct EiiDefkindMismatchStaticMutability {
2009 #[primary_span]
2010 pub span: Span,
2011 pub eii_name: Symbol,
2012}
2013
2014#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
EiiDefkindMismatchStaticSafety {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
EiiDefkindMismatchStaticSafety {
span: __binding_0, eii_name: __binding_1 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("safety does not match with the definition of`#[{$eii_name}]`")));
;
diag.arg("eii_name", __binding_1);
diag.span(__binding_0);
diag
}
}
}
}
};Diagnostic)]
2015#[diag("safety does not match with the definition of`#[{$eii_name}]`")]
2016pub(crate) struct EiiDefkindMismatchStaticSafety {
2017 #[primary_span]
2018 pub span: Span,
2019 pub eii_name: Symbol,
2020}
2021
2022#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
ConflictImplDropAndPinDrop {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
ConflictImplDropAndPinDrop {
span: __binding_0,
drop_span: __binding_1,
pin_drop_span: __binding_2 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("conflicting implementations of `Drop::drop` and `Drop::pin_drop`")));
;
diag.span(__binding_0);
diag.span_label(__binding_1,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`drop(&mut self)` implemented here")));
diag.span_label(__binding_2,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`pin_drop(&pin mut self)` implemented here")));
diag
}
}
}
}
};Diagnostic)]
2023#[diag("conflicting implementations of `Drop::drop` and `Drop::pin_drop`")]
2024pub(crate) struct ConflictImplDropAndPinDrop {
2025 #[primary_span]
2026 pub span: Span,
2027 #[label("`drop(&mut self)` implemented here")]
2028 pub drop_span: Span,
2029 #[label("`pin_drop(&pin mut self)` implemented here")]
2030 pub pin_drop_span: Span,
2031}
2032
2033#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
PinV2WithoutPinDrop {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
PinV2WithoutPinDrop {
span: __binding_0,
pin_v2_span: __binding_1,
adt_name: __binding_2 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`{$adt_name}` must implement `pin_drop`")));
let __code_25 =
[::alloc::__export::must_use({
::alloc::fmt::format(format_args!("fn pin_drop(&pin mut self)"))
})].into_iter();
let __code_26 =
[::alloc::__export::must_use({
::alloc::fmt::format(format_args!(""))
})].into_iter();
diag.help(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("structurally pinned types must keep `Pin`'s safety contract")));
;
diag.arg("adt_name", __binding_2);
diag.span(__binding_0);
diag.span_suggestions_with_style(__binding_0,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("implement `pin_drop` instead")),
__code_25, rustc_errors::Applicability::MaybeIncorrect,
rustc_errors::SuggestionStyle::ShowCode);
if let Some(__binding_1) = __binding_1 {
diag.span_note(__binding_1,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`{$adt_name}` is marked `#[pin_v2]` here")));
}
if let Some(__binding_1) = __binding_1 {
diag.span_suggestions_with_style(__binding_1,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("remove the `#[pin_v2]` attribute if it is not intended for structurally pinning")),
__code_26, rustc_errors::Applicability::MaybeIncorrect,
rustc_errors::SuggestionStyle::ShowCode);
}
diag
}
}
}
}
};Diagnostic)]
2034#[diag("`{$adt_name}` must implement `pin_drop`")]
2035#[help("structurally pinned types must keep `Pin`'s safety contract")]
2036pub(crate) struct PinV2WithoutPinDrop {
2037 #[primary_span]
2038 #[suggestion(
2039 "implement `pin_drop` instead",
2040 code = "fn pin_drop(&pin mut self)",
2041 applicability = "maybe-incorrect"
2042 )]
2043 pub span: Span,
2044 #[note("`{$adt_name}` is marked `#[pin_v2]` here")]
2045 #[suggestion(
2046 "remove the `#[pin_v2]` attribute if it is not intended for structurally pinning",
2047 code = "",
2048 applicability = "maybe-incorrect"
2049 )]
2050 pub pin_v2_span: Option<Span>,
2051 pub adt_name: Symbol,
2052}
2053
2054#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for PinV2OnPacked
{
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
PinV2OnPacked {
span: __binding_0,
pin_v2_span: __binding_1,
adt_name: __binding_2 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`#[pin_v2]` types may not have `#[repr(packed)]`")));
diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("fields of a `#[repr(packed)]` type can be under-aligned, so a structurally pinned field may be moved to a properly aligned location, which `Pin` does not allow")));
;
diag.arg("adt_name", __binding_2);
diag.span(__binding_0);
if let Some(__binding_1) = __binding_1 {
diag.span_note(__binding_1,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`{$adt_name}` is marked `#[pin_v2]` here")));
}
diag
}
}
}
}
};Diagnostic)]
2055#[diag("`#[pin_v2]` types may not have `#[repr(packed)]`")]
2056#[note(
2057 "fields of a `#[repr(packed)]` type can be under-aligned, so a structurally pinned field may be moved to a properly aligned location, which `Pin` does not allow"
2058)]
2059pub(crate) struct PinV2OnPacked {
2060 #[primary_span]
2061 pub span: Span,
2062 #[note("`{$adt_name}` is marked `#[pin_v2]` here")]
2063 pub pin_v2_span: Option<Span>,
2064 pub adt_name: Symbol,
2065}
2066
2067pub(crate) struct UncoveredTyParam<'tcx> {
2068 pub(crate) param: Ident,
2069 pub(crate) local_ty: Option<Ty<'tcx>>,
2070}
2071
2072impl<G> Diagnostic<'_, G> for UncoveredTyParam<'_> {
2073 fn into_diag(self, dcx: DiagCtxtHandle<'_>, level: Level) -> Diag<'_, G> {
2074 let Self { param, local_ty } = self;
2075
2076 let mut diag = Diag::new(dcx, level, "")
2077 .with_span(param.span)
2078 .with_span_label(param.span, "uncovered type parameter");
2079 if diag.is_error() {
2080 diag.code(E0210);
2081 }
2082
2083 let note = "\
2084 implementing a foreign trait is only possible if \
2085 at least one of the types for which it is implemented is local";
2086
2087 if let Some(local_ty) = local_ty {
2088 diag.primary_message(::alloc::__export::must_use({
::alloc::fmt::format(format_args!("type parameter `{0}` must be covered by another type when it appears before the first local type (`{1}`)",
param, local_ty))
})format!(
2089 "type parameter `{param}` must be covered by another type when \
2090 it appears before the first local type (`{local_ty}`)"
2091 ));
2092
2093 diag.note(::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0},\nand no uncovered type parameters appear before that first local type",
note))
})format!(
2094 "{note},\nand no uncovered type parameters appear before that first local type"
2095 ));
2096 diag.note(
2097 "in this case, 'before' refers to the following order: \
2098 `impl<..> ForeignTrait<T1, ..., Tn> for T0`,\n\
2099 where `T0` is the first and `Tn` is the last",
2100 );
2101 } else {
2102 diag.primary_message(::alloc::__export::must_use({
::alloc::fmt::format(format_args!("type parameter `{0}` must be used as an argument to some local type (e.g., `MyStruct<{0}>`)",
param))
})format!(
2103 "type parameter `{param}` must be used as an argument to \
2104 some local type (e.g., `MyStruct<{param}>`)"
2105 ));
2106
2107 diag.note(note);
2108 diag.note(
2109 "only traits defined in the current crate can be implemented for a type parameter",
2110 );
2111 }
2112
2113 diag
2114 }
2115}
2116
2117#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
ViewedFieldIsAlreadyPartOfTheView {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
ViewedFieldIsAlreadyPartOfTheView {
span: __binding_0,
name: __binding_1,
previous_field_span: __binding_2 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("field `{$name}` is already part of the view")));
;
diag.arg("name", __binding_1);
diag.span(__binding_0);
diag.span_label(__binding_2,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("field `{$name}` is declared as viewed here")));
diag
}
}
}
}
};Diagnostic)]
2118#[diag("field `{$name}` is already part of the view")]
2119pub(crate) struct ViewedFieldIsAlreadyPartOfTheView {
2120 #[primary_span]
2121 pub span: Span,
2122 pub name: Symbol,
2123 #[label("field `{$name}` is declared as viewed here")]
2124 pub previous_field_span: Span,
2125}
2126
2127#[derive(const _: () =
{
impl<'_sess, 'tcx, G> rustc_errors::Diagnostic<'_sess, G> for
OnlyStructsCanBeViewedNonAdt<'tcx> {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
OnlyStructsCanBeViewedNonAdt {
span: __binding_0, ty: __binding_1 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("only structs can be viewed")));
;
diag.arg("ty", __binding_1);
diag.span(__binding_0);
diag.span_label(__binding_0,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("type `{$ty}` cannot be viewed")));
diag
}
}
}
}
};Diagnostic)]
2128#[diag("only structs can be viewed")]
2129pub(crate) struct OnlyStructsCanBeViewedNonAdt<'tcx> {
2130 #[primary_span]
2131 #[label("type `{$ty}` cannot be viewed")]
2132 pub span: Span,
2133 pub ty: Ty<'tcx>,
2134}
2135
2136#[derive(const _: () =
{
impl<'_sess, 'tcx, G> rustc_errors::Diagnostic<'_sess, G> for
OnlyStructsCanBeViewedAdt<'tcx> {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
OnlyStructsCanBeViewedAdt {
span: __binding_0,
ty: __binding_1,
article: __binding_2,
kind: __binding_3 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("only structs can be viewed")));
;
diag.arg("ty", __binding_1);
diag.arg("article", __binding_2);
diag.arg("kind", __binding_3);
diag.span(__binding_0);
diag.span_label(__binding_0,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`{$ty}` is {$article} {$kind}, it cannot be viewed")));
diag
}
}
}
}
};Diagnostic)]
2137#[diag("only structs can be viewed")]
2138pub(crate) struct OnlyStructsCanBeViewedAdt<'tcx> {
2139 #[primary_span]
2140 #[label("`{$ty}` is {$article} {$kind}, it cannot be viewed")]
2141 pub span: Span,
2142 pub ty: Ty<'tcx>,
2143 pub article: &'static str,
2144 pub kind: &'static str,
2145}
2146
2147#[derive(const _: () =
{
impl<'_sess, 'tcx, G> rustc_errors::Diagnostic<'_sess, G> for
ParamInTyOfConstParam<'tcx> {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
ParamInTyOfConstParam { span: __binding_0, ty: __binding_1 }
=> {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("the type of const parameters must not depend on other generic parameters")));
diag.code(E0770);
;
diag.arg("ty", __binding_1);
diag.span(__binding_0);
diag.span_label(__binding_0,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("the type `{$ty}` must not depend on other generic parameter")));
diag
}
}
}
}
};Diagnostic)]
2148#[diag("the type of const parameters must not depend on other generic parameters", code = E0770)]
2149pub(crate) struct ParamInTyOfConstParam<'tcx> {
2150 #[primary_span]
2151 #[label("the type `{$ty}` must not depend on other generic parameter")]
2152 pub(crate) span: Span,
2153 pub(crate) ty: Ty<'tcx>,
2154}