1use rustc_errors::codes::*;
2use rustc_errors::{
3 Diag, DiagCtxtHandle, Diagnostic, EmissionGuarantee, Level, MultiSpan, SingleLabelManySpans,
4 Subdiagnostic,
5};
6use rustc_macros::{Diagnostic, LintDiagnostic, Subdiagnostic};
7use rustc_span::{Ident, Span, Symbol};
8
9#[derive(LintDiagnostic)]
10#[diag(builtin_macros_avoid_intel_syntax)]
11pub(crate) struct AvoidIntelSyntax;
12
13#[derive(LintDiagnostic)]
14#[diag(builtin_macros_avoid_att_syntax)]
15pub(crate) struct AvoidAttSyntax;
16
17#[derive(LintDiagnostic)]
18#[diag(builtin_macros_incomplete_include)]
19pub(crate) struct IncompleteInclude;
20
21#[derive(LintDiagnostic)]
22#[diag(builtin_macros_unnameable_test_items)]
23pub(crate) struct UnnameableTestItems;
24
25#[derive(LintDiagnostic)]
26#[diag(builtin_macros_duplicate_macro_attribute)]
27pub(crate) struct DuplicateMacroAttribute;
28
29#[derive(Diagnostic)]
30#[diag(builtin_macros_requires_cfg_pattern)]
31pub(crate) struct RequiresCfgPattern {
32 #[primary_span]
33 #[label]
34 pub(crate) span: Span,
35}
36
37#[derive(Diagnostic)]
38#[diag(builtin_macros_expected_one_cfg_pattern)]
39pub(crate) struct OneCfgPattern {
40 #[primary_span]
41 pub(crate) span: Span,
42}
43
44#[derive(Diagnostic)]
45#[diag(builtin_macros_alloc_error_must_be_fn)]
46pub(crate) struct AllocErrorMustBeFn {
47 #[primary_span]
48 pub(crate) span: Span,
49}
50
51#[derive(Diagnostic)]
52#[diag(builtin_macros_assert_requires_boolean)]
53pub(crate) struct AssertRequiresBoolean {
54 #[primary_span]
55 #[label]
56 pub(crate) span: Span,
57}
58
59#[derive(Diagnostic)]
60#[diag(builtin_macros_assert_requires_expression)]
61pub(crate) struct AssertRequiresExpression {
62 #[primary_span]
63 pub(crate) span: Span,
64 #[suggestion(code = "", applicability = "maybe-incorrect")]
65 pub(crate) token: Span,
66}
67
68#[derive(Diagnostic)]
69#[diag(builtin_macros_assert_missing_comma)]
70pub(crate) struct AssertMissingComma {
71 #[primary_span]
72 pub(crate) span: Span,
73 #[suggestion(code = ", ", applicability = "maybe-incorrect", style = "short")]
74 pub(crate) comma: Span,
75}
76
77#[derive(Diagnostic)]
78pub(crate) enum CfgAccessibleInvalid {
79 #[diag(builtin_macros_cfg_accessible_unspecified_path)]
80 UnspecifiedPath(#[primary_span] Span),
81 #[diag(builtin_macros_cfg_accessible_multiple_paths)]
82 MultiplePaths(#[primary_span] Span),
83 #[diag(builtin_macros_cfg_accessible_literal_path)]
84 LiteralPath(#[primary_span] Span),
85 #[diag(builtin_macros_cfg_accessible_has_args)]
86 HasArguments(#[primary_span] Span),
87}
88
89#[derive(Diagnostic)]
90#[diag(builtin_macros_cfg_accessible_indeterminate)]
91pub(crate) struct CfgAccessibleIndeterminate {
92 #[primary_span]
93 pub(crate) span: Span,
94}
95
96#[derive(Diagnostic)]
97#[diag(builtin_macros_concat_missing_literal)]
98#[note]
99pub(crate) struct ConcatMissingLiteral {
100 #[primary_span]
101 pub(crate) spans: Vec<Span>,
102}
103
104#[derive(Diagnostic)]
105#[diag(builtin_macros_concat_bytestr)]
106pub(crate) struct ConcatBytestr {
107 #[primary_span]
108 pub(crate) span: Span,
109}
110
111#[derive(Diagnostic)]
112#[diag(builtin_macros_concat_c_str_lit)]
113pub(crate) struct ConcatCStrLit {
114 #[primary_span]
115 pub(crate) span: Span,
116}
117
118#[derive(Diagnostic)]
119#[diag(builtin_macros_export_macro_rules)]
120pub(crate) struct ExportMacroRules {
121 #[primary_span]
122 pub(crate) span: Span,
123}
124
125#[derive(Diagnostic)]
126#[diag(builtin_macros_proc_macro)]
127pub(crate) struct ProcMacro {
128 #[primary_span]
129 pub(crate) span: Span,
130}
131
132#[derive(Diagnostic)]
133#[diag(builtin_macros_trace_macros)]
134pub(crate) struct TraceMacros {
135 #[primary_span]
136 pub(crate) span: Span,
137}
138
139#[derive(Diagnostic)]
140#[diag(builtin_macros_bench_sig)]
141pub(crate) struct BenchSig {
142 #[primary_span]
143 pub(crate) span: Span,
144}
145
146#[derive(Diagnostic)]
147#[diag(builtin_macros_alloc_must_statics)]
148pub(crate) struct AllocMustStatics {
149 #[primary_span]
150 pub(crate) span: Span,
151}
152
153pub(crate) use autodiff::*;
154
155mod autodiff {
156 use super::*;
157 #[derive(Diagnostic)]
158 #[diag(builtin_macros_autodiff_missing_config)]
159 pub(crate) struct AutoDiffMissingConfig {
160 #[primary_span]
161 pub(crate) span: Span,
162 }
163 #[derive(Diagnostic)]
164 #[diag(builtin_macros_autodiff_unknown_activity)]
165 pub(crate) struct AutoDiffUnknownActivity {
166 #[primary_span]
167 pub(crate) span: Span,
168 pub(crate) act: String,
169 }
170 #[derive(Diagnostic)]
171 #[diag(builtin_macros_autodiff_ty_activity)]
172 pub(crate) struct AutoDiffInvalidTypeForActivity {
173 #[primary_span]
174 pub(crate) span: Span,
175 pub(crate) act: String,
176 }
177 #[derive(Diagnostic)]
178 #[diag(builtin_macros_autodiff_number_activities)]
179 pub(crate) struct AutoDiffInvalidNumberActivities {
180 #[primary_span]
181 pub(crate) span: Span,
182 pub(crate) expected: usize,
183 pub(crate) found: usize,
184 }
185 #[derive(Diagnostic)]
186 #[diag(builtin_macros_autodiff_mode_activity)]
187 pub(crate) struct AutoDiffInvalidApplicationModeAct {
188 #[primary_span]
189 pub(crate) span: Span,
190 pub(crate) mode: String,
191 pub(crate) act: String,
192 }
193
194 #[derive(Diagnostic)]
195 #[diag(builtin_macros_autodiff_ret_activity)]
196 pub(crate) struct AutoDiffInvalidRetAct {
197 #[primary_span]
198 pub(crate) span: Span,
199 pub(crate) mode: String,
200 pub(crate) act: String,
201 }
202
203 #[derive(Diagnostic)]
204 #[diag(builtin_macros_autodiff_width)]
205 pub(crate) struct AutoDiffInvalidWidth {
206 #[primary_span]
207 pub(crate) span: Span,
208 pub(crate) width: u128,
209 }
210
211 #[derive(Diagnostic)]
212 #[diag(builtin_macros_autodiff)]
213 pub(crate) struct AutoDiffInvalidApplication {
214 #[primary_span]
215 pub(crate) span: Span,
216 }
217}
218
219pub(crate) use ad_fallback::*;
220mod ad_fallback {
221 use super::*;
222 #[derive(Diagnostic)]
223 #[diag(builtin_macros_autodiff_not_build)]
224 pub(crate) struct AutoDiffSupportNotBuild {
225 #[primary_span]
226 pub(crate) span: Span,
227 }
228}
229
230#[derive(Diagnostic)]
231#[diag(builtin_macros_concat_bytes_invalid)]
232pub(crate) struct ConcatBytesInvalid {
233 #[primary_span]
234 pub(crate) span: Span,
235 pub(crate) lit_kind: &'static str,
236 #[subdiagnostic]
237 pub(crate) sugg: Option<ConcatBytesInvalidSuggestion>,
238 #[note(builtin_macros_c_str_note)]
239 pub(crate) cs_note: Option<()>,
240}
241
242#[derive(Subdiagnostic)]
243pub(crate) enum ConcatBytesInvalidSuggestion {
244 #[suggestion(
245 builtin_macros_byte_char,
246 code = "b{snippet}",
247 applicability = "machine-applicable"
248 )]
249 CharLit {
250 #[primary_span]
251 span: Span,
252 snippet: String,
253 },
254 #[suggestion(
255 builtin_macros_byte_str,
256 code = "b{snippet}",
257 applicability = "machine-applicable"
258 )]
259 StrLit {
260 #[primary_span]
261 span: Span,
262 snippet: String,
263 },
264 #[note(builtin_macros_c_str_note)]
265 #[suggestion(builtin_macros_c_str, code = "{as_bstr}", applicability = "machine-applicable")]
266 CStrLit {
267 #[primary_span]
268 span: Span,
269 as_bstr: String,
270 },
271 #[suggestion(
272 builtin_macros_number_array,
273 code = "[{snippet}]",
274 applicability = "machine-applicable"
275 )]
276 IntLit {
277 #[primary_span]
278 span: Span,
279 snippet: String,
280 },
281}
282
283#[derive(Diagnostic)]
284#[diag(builtin_macros_concat_bytes_oob)]
285pub(crate) struct ConcatBytesOob {
286 #[primary_span]
287 pub(crate) span: Span,
288}
289
290#[derive(Diagnostic)]
291#[diag(builtin_macros_concat_bytes_non_u8)]
292pub(crate) struct ConcatBytesNonU8 {
293 #[primary_span]
294 pub(crate) span: Span,
295}
296
297#[derive(Diagnostic)]
298#[diag(builtin_macros_concat_bytes_missing_literal)]
299#[note]
300pub(crate) struct ConcatBytesMissingLiteral {
301 #[primary_span]
302 pub(crate) spans: Vec<Span>,
303}
304
305#[derive(Diagnostic)]
306#[diag(builtin_macros_concat_bytes_array)]
307pub(crate) struct ConcatBytesArray {
308 #[primary_span]
309 pub(crate) span: Span,
310 #[note]
311 #[help]
312 pub(crate) bytestr: bool,
313}
314
315#[derive(Diagnostic)]
316#[diag(builtin_macros_concat_bytes_bad_repeat)]
317pub(crate) struct ConcatBytesBadRepeat {
318 #[primary_span]
319 pub(crate) span: Span,
320}
321
322#[derive(Diagnostic)]
323#[diag(builtin_macros_bad_derive_target, code = E0774)]
324pub(crate) struct BadDeriveTarget {
325 #[primary_span]
326 #[label]
327 pub(crate) span: Span,
328 #[label(builtin_macros_label2)]
329 pub(crate) item: Span,
330}
331
332#[derive(Diagnostic)]
333#[diag(builtin_macros_tests_not_support)]
334pub(crate) struct TestsNotSupport {}
335
336#[derive(Diagnostic)]
337#[diag(builtin_macros_unexpected_lit, code = E0777)]
338pub(crate) struct BadDeriveLit {
339 #[primary_span]
340 #[label]
341 pub(crate) span: Span,
342 #[subdiagnostic]
343 pub help: BadDeriveLitHelp,
344}
345
346#[derive(Subdiagnostic)]
347pub(crate) enum BadDeriveLitHelp {
348 #[help(builtin_macros_str_lit)]
349 StrLit { sym: Symbol },
350 #[help(builtin_macros_other)]
351 Other,
352}
353
354#[derive(Diagnostic)]
355#[diag(builtin_macros_derive_path_args_list)]
356pub(crate) struct DerivePathArgsList {
357 #[suggestion(code = "", applicability = "machine-applicable")]
358 #[primary_span]
359 pub(crate) span: Span,
360}
361
362#[derive(Diagnostic)]
363#[diag(builtin_macros_derive_path_args_value)]
364pub(crate) struct DerivePathArgsValue {
365 #[suggestion(code = "", applicability = "machine-applicable")]
366 #[primary_span]
367 pub(crate) span: Span,
368}
369
370#[derive(Diagnostic)]
371#[diag(builtin_macros_no_default_variant, code = E0665)]
372pub(crate) struct NoDefaultVariant {
373 #[primary_span]
374 pub(crate) span: Span,
375 #[label]
376 pub(crate) item_span: Span,
377 #[subdiagnostic]
378 pub(crate) suggs: Vec<NoDefaultVariantSugg>,
379}
380
381#[derive(Subdiagnostic)]
382#[suggestion(builtin_macros_suggestion, code = "#[default] ", applicability = "maybe-incorrect")]
383pub(crate) struct NoDefaultVariantSugg {
384 #[primary_span]
385 pub(crate) span: Span,
386}
387
388#[derive(Diagnostic)]
389#[diag(builtin_macros_multiple_defaults)]
390#[note]
391pub(crate) struct MultipleDefaults {
392 #[primary_span]
393 pub(crate) span: Span,
394 #[label]
395 pub(crate) first: Span,
396 #[label(builtin_macros_additional)]
397 pub additional: Vec<Span>,
398 #[subdiagnostic]
399 pub suggs: Vec<MultipleDefaultsSugg>,
400}
401
402#[derive(Subdiagnostic)]
403#[multipart_suggestion(
404 builtin_macros_suggestion,
405 applicability = "maybe-incorrect",
406 style = "tool-only"
407)]
408pub(crate) struct MultipleDefaultsSugg {
409 #[suggestion_part(code = "")]
410 pub(crate) spans: Vec<Span>,
411 pub(crate) ident: Ident,
412}
413
414#[derive(Diagnostic)]
415#[diag(builtin_macros_non_unit_default)]
416#[help]
417pub(crate) struct NonUnitDefault {
418 #[primary_span]
419 pub(crate) span: Span,
420 pub(crate) post: &'static str,
421}
422
423#[derive(Diagnostic)]
424#[diag(builtin_macros_non_exhaustive_default)]
425#[help]
426pub(crate) struct NonExhaustiveDefault {
427 #[primary_span]
428 pub(crate) span: Span,
429 #[label]
430 pub(crate) non_exhaustive: Span,
431}
432
433#[derive(Diagnostic)]
434#[diag(builtin_macros_multiple_default_attrs)]
435#[note]
436pub(crate) struct MultipleDefaultAttrs {
437 #[primary_span]
438 pub(crate) span: Span,
439 #[label]
440 pub(crate) first: Span,
441 #[label(builtin_macros_label_again)]
442 pub(crate) first_rest: Span,
443 #[help]
444 pub(crate) rest: MultiSpan,
445 pub(crate) only_one: bool,
446 #[subdiagnostic]
447 pub(crate) sugg: MultipleDefaultAttrsSugg,
448}
449
450#[derive(Subdiagnostic)]
451#[multipart_suggestion(
452 builtin_macros_help,
453 applicability = "machine-applicable",
454 style = "tool-only"
455)]
456pub(crate) struct MultipleDefaultAttrsSugg {
457 #[suggestion_part(code = "")]
458 pub(crate) spans: Vec<Span>,
459}
460
461#[derive(Diagnostic)]
462#[diag(builtin_macros_default_arg)]
463pub(crate) struct DefaultHasArg {
464 #[primary_span]
465 #[suggestion(code = "#[default]", style = "hidden", applicability = "maybe-incorrect")]
466 pub(crate) span: Span,
467}
468
469#[derive(Diagnostic)]
470#[diag(builtin_macros_derive_from_wrong_target)]
471#[note(builtin_macros_derive_from_usage_note)]
472pub(crate) struct DeriveFromWrongTarget<'a> {
473 #[primary_span]
474 pub(crate) span: MultiSpan,
475 pub(crate) kind: &'a str,
476}
477
478#[derive(Diagnostic)]
479#[diag(builtin_macros_derive_from_wrong_field_count)]
480#[note(builtin_macros_derive_from_usage_note)]
481pub(crate) struct DeriveFromWrongFieldCount {
482 #[primary_span]
483 pub(crate) span: MultiSpan,
484 pub(crate) multiple_fields: bool,
485}
486
487#[derive(Diagnostic)]
488#[diag(builtin_macros_derive_macro_call)]
489pub(crate) struct DeriveMacroCall {
490 #[primary_span]
491 pub(crate) span: Span,
492}
493
494#[derive(Diagnostic)]
495#[diag(builtin_macros_cannot_derive_union)]
496pub(crate) struct DeriveUnion {
497 #[primary_span]
498 pub(crate) span: Span,
499}
500
501#[derive(Diagnostic)]
502#[diag(builtin_macros_env_takes_args)]
503pub(crate) struct EnvTakesArgs {
504 #[primary_span]
505 pub(crate) span: Span,
506}
507
508pub(crate) struct EnvNotDefinedWithUserMessage {
509 pub(crate) span: Span,
510 pub(crate) msg_from_user: Symbol,
511}
512
513impl<'a, G: EmissionGuarantee> Diagnostic<'a, G> for EnvNotDefinedWithUserMessage {
515 #[track_caller]
516 fn into_diag(self, dcx: DiagCtxtHandle<'a>, level: Level) -> Diag<'a, G> {
517 #[expect(
518 rustc::untranslatable_diagnostic,
519 reason = "cannot translate user-provided messages"
520 )]
521 let mut diag = Diag::new(dcx, level, self.msg_from_user.to_string());
522 diag.span(self.span);
523 diag
524 }
525}
526
527#[derive(Diagnostic)]
528pub(crate) enum EnvNotDefined<'a> {
529 #[diag(builtin_macros_env_not_defined)]
530 #[help(builtin_macros_cargo)]
531 CargoEnvVar {
532 #[primary_span]
533 span: Span,
534 var: Symbol,
535 var_expr: &'a rustc_ast::Expr,
536 },
537 #[diag(builtin_macros_env_not_defined)]
538 #[help(builtin_macros_custom)]
539 CustomEnvVar {
540 #[primary_span]
541 span: Span,
542 var: Symbol,
543 var_expr: &'a rustc_ast::Expr,
544 },
545}
546
547#[derive(Diagnostic)]
548#[diag(builtin_macros_env_not_unicode)]
549pub(crate) struct EnvNotUnicode {
550 #[primary_span]
551 pub(crate) span: Span,
552 pub(crate) var: Symbol,
553}
554
555#[derive(Diagnostic)]
556#[diag(builtin_macros_format_requires_string)]
557pub(crate) struct FormatRequiresString {
558 #[primary_span]
559 pub(crate) span: Span,
560}
561
562#[derive(Diagnostic)]
563#[diag(builtin_macros_format_duplicate_arg)]
564pub(crate) struct FormatDuplicateArg {
565 #[primary_span]
566 pub(crate) span: Span,
567 #[label(builtin_macros_label1)]
568 pub(crate) prev: Span,
569 #[label(builtin_macros_label2)]
570 pub(crate) duplicate: Span,
571 pub(crate) ident: Ident,
572}
573
574#[derive(Diagnostic)]
575#[diag(builtin_macros_format_positional_after_named)]
576pub(crate) struct PositionalAfterNamed {
577 #[primary_span]
578 #[label]
579 pub(crate) span: Span,
580 #[label(builtin_macros_named_args)]
581 pub(crate) args: Vec<Span>,
582}
583
584#[derive(Diagnostic)]
585#[diag(builtin_macros_format_string_invalid)]
586pub(crate) struct InvalidFormatString {
587 #[primary_span]
588 #[label]
589 pub(crate) span: Span,
590 pub(crate) desc: String,
591 pub(crate) label1: String,
592 #[subdiagnostic]
593 pub(crate) note_: Option<InvalidFormatStringNote>,
594 #[subdiagnostic]
595 pub(crate) label_: Option<InvalidFormatStringLabel>,
596 #[subdiagnostic]
597 pub(crate) sugg_: Option<InvalidFormatStringSuggestion>,
598}
599
600#[derive(Subdiagnostic)]
601#[note(builtin_macros_note)]
602pub(crate) struct InvalidFormatStringNote {
603 pub(crate) note: String,
604}
605
606#[derive(Subdiagnostic)]
607#[label(builtin_macros_second_label)]
608pub(crate) struct InvalidFormatStringLabel {
609 #[primary_span]
610 pub(crate) span: Span,
611 pub(crate) label: String,
612}
613
614#[derive(Subdiagnostic)]
615pub(crate) enum InvalidFormatStringSuggestion {
616 #[multipart_suggestion(
617 builtin_macros_format_use_positional,
618 style = "verbose",
619 applicability = "machine-applicable"
620 )]
621 UsePositional {
622 #[suggestion_part(code = "{len}")]
623 captured: Span,
624 len: String,
625 #[suggestion_part(code = ", {arg}")]
626 span: Span,
627 arg: String,
628 },
629 #[suggestion(
630 builtin_macros_format_remove_raw_ident,
631 code = "",
632 applicability = "machine-applicable"
633 )]
634 RemoveRawIdent {
635 #[primary_span]
636 span: Span,
637 },
638 #[suggestion(
639 builtin_macros_format_reorder_format_parameter,
640 code = "{replacement}",
641 style = "verbose",
642 applicability = "machine-applicable"
643 )]
644 ReorderFormatParameter {
645 #[primary_span]
646 span: Span,
647 replacement: String,
648 },
649}
650
651#[derive(Diagnostic)]
652#[diag(builtin_macros_format_no_arg_named)]
653#[note]
654#[note(builtin_macros_note2)]
655pub(crate) struct FormatNoArgNamed {
656 #[primary_span]
657 pub(crate) span: Span,
658 pub(crate) name: Symbol,
659}
660
661#[derive(Diagnostic)]
662#[diag(builtin_macros_format_unknown_trait)]
663#[note]
664pub(crate) struct FormatUnknownTrait<'a> {
665 #[primary_span]
666 pub(crate) span: Span,
667 pub(crate) ty: &'a str,
668 #[subdiagnostic]
669 pub(crate) suggs: Vec<FormatUnknownTraitSugg>,
670}
671
672#[derive(Subdiagnostic)]
673#[suggestion(
674 builtin_macros_suggestion,
675 code = "{fmt}",
676 style = "tool-only",
677 applicability = "maybe-incorrect"
678)]
679pub(crate) struct FormatUnknownTraitSugg {
680 #[primary_span]
681 pub span: Span,
682 pub fmt: &'static str,
683 pub trait_name: &'static str,
684}
685
686#[derive(Diagnostic)]
687#[diag(builtin_macros_format_unused_arg)]
688pub(crate) struct FormatUnusedArg {
689 #[primary_span]
690 #[label(builtin_macros_format_unused_arg)]
691 pub(crate) span: Span,
692 pub(crate) named: bool,
693}
694
695impl Subdiagnostic for FormatUnusedArg {
698 fn add_to_diag<G: EmissionGuarantee>(self, diag: &mut Diag<'_, G>) {
699 diag.arg("named", self.named);
700 let msg = diag.eagerly_translate(crate::fluent_generated::builtin_macros_format_unused_arg);
701 diag.remove_arg("named");
702 diag.span_label(self.span, msg);
703 }
704}
705
706#[derive(Diagnostic)]
707#[diag(builtin_macros_format_unused_args)]
708pub(crate) struct FormatUnusedArgs {
709 #[primary_span]
710 pub(crate) unused: Vec<Span>,
711 #[label]
712 pub(crate) fmt: Span,
713 #[subdiagnostic]
714 pub(crate) unused_labels: Vec<FormatUnusedArg>,
715}
716
717#[derive(Diagnostic)]
718#[diag(builtin_macros_format_pos_mismatch)]
719pub(crate) struct FormatPositionalMismatch {
720 #[primary_span]
721 pub(crate) span: MultiSpan,
722 pub(crate) n: usize,
723 pub(crate) desc: String,
724 #[subdiagnostic]
725 pub(crate) highlight: SingleLabelManySpans,
726}
727
728#[derive(Diagnostic)]
729#[diag(builtin_macros_format_redundant_args)]
730pub(crate) struct FormatRedundantArgs {
731 #[primary_span]
732 pub(crate) span: MultiSpan,
733 pub(crate) n: usize,
734
735 #[note]
736 pub(crate) note: MultiSpan,
737
738 #[subdiagnostic]
739 pub(crate) sugg: Option<FormatRedundantArgsSugg>,
740}
741
742#[derive(Subdiagnostic)]
743#[multipart_suggestion(builtin_macros_suggestion, applicability = "machine-applicable")]
744pub(crate) struct FormatRedundantArgsSugg {
745 #[suggestion_part(code = "")]
746 pub(crate) spans: Vec<Span>,
747}
748
749#[derive(Diagnostic)]
750#[diag(builtin_macros_test_case_non_item)]
751pub(crate) struct TestCaseNonItem {
752 #[primary_span]
753 pub(crate) span: Span,
754}
755
756#[derive(Diagnostic)]
757#[diag(builtin_macros_test_bad_fn)]
758pub(crate) struct TestBadFn {
759 #[primary_span]
760 pub(crate) span: Span,
761 #[label]
762 pub(crate) cause: Span,
763 pub(crate) kind: &'static str,
764}
765
766#[derive(Diagnostic)]
767#[diag(builtin_macros_asm_explicit_register_name)]
768pub(crate) struct AsmExplicitRegisterName {
769 #[primary_span]
770 pub(crate) span: Span,
771}
772
773#[derive(Diagnostic)]
774#[diag(builtin_macros_asm_mutually_exclusive)]
775pub(crate) struct AsmMutuallyExclusive {
776 #[primary_span]
777 pub(crate) spans: Vec<Span>,
778 pub(crate) opt1: &'static str,
779 pub(crate) opt2: &'static str,
780}
781
782#[derive(Diagnostic)]
783#[diag(builtin_macros_asm_pure_combine)]
784pub(crate) struct AsmPureCombine {
785 #[primary_span]
786 pub(crate) spans: Vec<Span>,
787}
788
789#[derive(Diagnostic)]
790#[diag(builtin_macros_asm_pure_no_output)]
791pub(crate) struct AsmPureNoOutput {
792 #[primary_span]
793 pub(crate) spans: Vec<Span>,
794}
795
796#[derive(Diagnostic)]
797#[diag(builtin_macros_asm_modifier_invalid)]
798pub(crate) struct AsmModifierInvalid {
799 #[primary_span]
800 pub(crate) span: Span,
801}
802
803#[derive(Diagnostic)]
804#[diag(builtin_macros_asm_attribute_not_supported)]
805pub(crate) struct AsmAttributeNotSupported {
806 #[primary_span]
807 pub(crate) span: Span,
808}
809
810#[derive(Diagnostic)]
811#[diag(builtin_macros_asm_duplicate_arg)]
812pub(crate) struct AsmDuplicateArg {
813 #[primary_span]
814 #[label(builtin_macros_arg)]
815 pub(crate) span: Span,
816 #[label]
817 pub(crate) prev: Span,
818 pub(crate) name: Symbol,
819}
820
821#[derive(Diagnostic)]
822#[diag(builtin_macros_asm_pos_after)]
823pub(crate) struct AsmPositionalAfter {
824 #[primary_span]
825 #[label(builtin_macros_pos)]
826 pub(crate) span: Span,
827 #[label(builtin_macros_named)]
828 pub(crate) named: Vec<Span>,
829 #[label(builtin_macros_explicit)]
830 pub(crate) explicit: Vec<Span>,
831}
832
833#[derive(Diagnostic)]
834#[diag(builtin_macros_asm_noreturn)]
835pub(crate) struct AsmNoReturn {
836 #[primary_span]
837 pub(crate) outputs_sp: Vec<Span>,
838}
839
840#[derive(Diagnostic)]
841#[diag(builtin_macros_asm_no_matched_argument_name)]
842pub(crate) struct AsmNoMatchedArgumentName {
843 pub(crate) name: String,
844 #[primary_span]
845 pub(crate) span: Span,
846}
847
848#[derive(Diagnostic)]
849#[diag(builtin_macros_asm_mayunwind)]
850pub(crate) struct AsmMayUnwind {
851 #[primary_span]
852 pub(crate) labels_sp: Vec<Span>,
853}
854
855pub(crate) struct AsmClobberNoReg {
856 pub(crate) spans: Vec<Span>,
857 pub(crate) clobbers: Vec<Span>,
858}
859
860impl<'a, G: EmissionGuarantee> Diagnostic<'a, G> for AsmClobberNoReg {
861 fn into_diag(self, dcx: DiagCtxtHandle<'a>, level: Level) -> Diag<'a, G> {
862 let lbl1 = dcx.eagerly_translate_to_string(
864 crate::fluent_generated::builtin_macros_asm_clobber_abi,
865 [].into_iter(),
866 );
867 let lbl2 = dcx.eagerly_translate_to_string(
868 crate::fluent_generated::builtin_macros_asm_clobber_outputs,
869 [].into_iter(),
870 );
871 Diag::new(dcx, level, crate::fluent_generated::builtin_macros_asm_clobber_no_reg)
872 .with_span(self.spans.clone())
873 .with_span_labels(self.clobbers, &lbl1)
874 .with_span_labels(self.spans, &lbl2)
875 }
876}
877
878#[derive(Diagnostic)]
879#[diag(builtin_macros_asm_opt_already_provided)]
880pub(crate) struct AsmOptAlreadyprovided {
881 #[primary_span]
882 #[label]
883 pub(crate) span: Span,
884 pub(crate) symbol: Symbol,
885 #[suggestion(code = "", applicability = "machine-applicable", style = "tool-only")]
886 pub(crate) span_with_comma: Span,
887}
888
889#[derive(Diagnostic)]
890#[diag(builtin_macros_asm_unsupported_option)]
891pub(crate) struct AsmUnsupportedOption {
892 #[primary_span]
893 #[label]
894 pub(crate) span: Span,
895 pub(crate) symbol: Symbol,
896 #[suggestion(code = "", applicability = "machine-applicable", style = "tool-only")]
897 pub(crate) span_with_comma: Span,
898 pub(crate) macro_name: &'static str,
899}
900
901#[derive(Diagnostic)]
902#[diag(builtin_macros_asm_unsupported_clobber_abi)]
903pub(crate) struct AsmUnsupportedClobberAbi {
904 #[primary_span]
905 pub(crate) spans: Vec<Span>,
906 pub(crate) macro_name: &'static str,
907}
908
909#[derive(Diagnostic)]
910#[diag(builtin_macros_test_runner_invalid)]
911pub(crate) struct TestRunnerInvalid {
912 #[primary_span]
913 pub(crate) span: Span,
914}
915
916#[derive(Diagnostic)]
917#[diag(builtin_macros_test_runner_nargs)]
918pub(crate) struct TestRunnerNargs {
919 #[primary_span]
920 pub(crate) span: Span,
921}
922
923#[derive(Diagnostic)]
924#[diag(builtin_macros_expected_comma_in_list)]
925pub(crate) struct ExpectedCommaInList {
926 #[primary_span]
927 pub span: Span,
928}
929
930#[derive(Diagnostic)]
931#[diag(builtin_macros_only_one_argument)]
932pub(crate) struct OnlyOneArgument<'a> {
933 #[primary_span]
934 pub span: Span,
935 pub name: &'a str,
936}
937
938#[derive(Diagnostic)]
939#[diag(builtin_macros_takes_no_arguments)]
940pub(crate) struct TakesNoArguments<'a> {
941 #[primary_span]
942 pub span: Span,
943 pub name: &'a str,
944}
945
946#[derive(Diagnostic)]
947#[diag(builtin_macros_proc_macro_attribute_only_usable_with_crate_type)]
948pub(crate) struct AttributeOnlyUsableWithCrateType<'a> {
949 #[primary_span]
950 pub span: Span,
951 pub path: &'a str,
952}
953
954#[derive(Diagnostic)]
955#[diag(builtin_macros_source_uitls_expected_item)]
956pub(crate) struct ExpectedItem<'a> {
957 #[primary_span]
958 pub span: Span,
959 pub token: &'a str,
960}
961
962#[derive(Diagnostic)]
963#[diag(builtin_macros_naked_functions_testing_attribute, code = E0736)]
964pub(crate) struct NakedFunctionTestingAttribute {
965 #[primary_span]
966 #[label(builtin_macros_naked_attribute)]
967 pub naked_span: Span,
968 #[label]
969 pub testing_span: Span,
970}
971
972#[derive(Diagnostic)]
973#[diag(builtin_macros_non_generic_pointee)]
974pub(crate) struct NonGenericPointee {
975 #[primary_span]
976 pub span: Span,
977}
978
979#[derive(Diagnostic)]
980#[diag(builtin_macros_expected_other)]
981pub(crate) struct AsmExpectedOther {
982 #[primary_span]
983 #[label(builtin_macros_expected_other)]
984 pub(crate) span: Span,
985 pub(crate) is_inline_asm: bool,
986}
987
988#[derive(Diagnostic)]
989#[diag(builtin_macros_cfg_select_no_matches)]
990pub(crate) struct CfgSelectNoMatches {
991 #[primary_span]
992 pub span: Span,
993}
994
995#[derive(Diagnostic)]
996#[diag(builtin_macros_cfg_select_unreachable)]
997pub(crate) struct CfgSelectUnreachable {
998 #[primary_span]
999 #[label(builtin_macros_label2)]
1000 pub span: Span,
1001
1002 #[label]
1003 pub wildcard_span: Span,
1004}