rustc_builtin_macros/
errors.rs

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
219#[derive(Diagnostic)]
220#[diag(builtin_macros_concat_bytes_invalid)]
221pub(crate) struct ConcatBytesInvalid {
222    #[primary_span]
223    pub(crate) span: Span,
224    pub(crate) lit_kind: &'static str,
225    #[subdiagnostic]
226    pub(crate) sugg: Option<ConcatBytesInvalidSuggestion>,
227    #[note(builtin_macros_c_str_note)]
228    pub(crate) cs_note: Option<()>,
229}
230
231#[derive(Subdiagnostic)]
232pub(crate) enum ConcatBytesInvalidSuggestion {
233    #[suggestion(
234        builtin_macros_byte_char,
235        code = "b{snippet}",
236        applicability = "machine-applicable"
237    )]
238    CharLit {
239        #[primary_span]
240        span: Span,
241        snippet: String,
242    },
243    #[suggestion(
244        builtin_macros_byte_str,
245        code = "b{snippet}",
246        applicability = "machine-applicable"
247    )]
248    StrLit {
249        #[primary_span]
250        span: Span,
251        snippet: String,
252    },
253    #[note(builtin_macros_c_str_note)]
254    #[suggestion(builtin_macros_c_str, code = "{as_bstr}", applicability = "machine-applicable")]
255    CStrLit {
256        #[primary_span]
257        span: Span,
258        as_bstr: String,
259    },
260    #[suggestion(
261        builtin_macros_number_array,
262        code = "[{snippet}]",
263        applicability = "machine-applicable"
264    )]
265    IntLit {
266        #[primary_span]
267        span: Span,
268        snippet: String,
269    },
270}
271
272#[derive(Diagnostic)]
273#[diag(builtin_macros_concat_bytes_oob)]
274pub(crate) struct ConcatBytesOob {
275    #[primary_span]
276    pub(crate) span: Span,
277}
278
279#[derive(Diagnostic)]
280#[diag(builtin_macros_concat_bytes_non_u8)]
281pub(crate) struct ConcatBytesNonU8 {
282    #[primary_span]
283    pub(crate) span: Span,
284}
285
286#[derive(Diagnostic)]
287#[diag(builtin_macros_concat_bytes_missing_literal)]
288#[note]
289pub(crate) struct ConcatBytesMissingLiteral {
290    #[primary_span]
291    pub(crate) spans: Vec<Span>,
292}
293
294#[derive(Diagnostic)]
295#[diag(builtin_macros_concat_bytes_array)]
296pub(crate) struct ConcatBytesArray {
297    #[primary_span]
298    pub(crate) span: Span,
299    #[note]
300    #[help]
301    pub(crate) bytestr: bool,
302}
303
304#[derive(Diagnostic)]
305#[diag(builtin_macros_concat_bytes_bad_repeat)]
306pub(crate) struct ConcatBytesBadRepeat {
307    #[primary_span]
308    pub(crate) span: Span,
309}
310
311#[derive(Diagnostic)]
312#[diag(builtin_macros_bad_derive_target, code = E0774)]
313pub(crate) struct BadDeriveTarget {
314    #[primary_span]
315    #[label]
316    pub(crate) span: Span,
317    #[label(builtin_macros_label2)]
318    pub(crate) item: Span,
319}
320
321#[derive(Diagnostic)]
322#[diag(builtin_macros_tests_not_support)]
323pub(crate) struct TestsNotSupport {}
324
325#[derive(Diagnostic)]
326#[diag(builtin_macros_unexpected_lit, code = E0777)]
327pub(crate) struct BadDeriveLit {
328    #[primary_span]
329    #[label]
330    pub(crate) span: Span,
331    #[subdiagnostic]
332    pub help: BadDeriveLitHelp,
333}
334
335#[derive(Subdiagnostic)]
336pub(crate) enum BadDeriveLitHelp {
337    #[help(builtin_macros_str_lit)]
338    StrLit { sym: Symbol },
339    #[help(builtin_macros_other)]
340    Other,
341}
342
343#[derive(Diagnostic)]
344#[diag(builtin_macros_derive_path_args_list)]
345pub(crate) struct DerivePathArgsList {
346    #[suggestion(code = "", applicability = "machine-applicable")]
347    #[primary_span]
348    pub(crate) span: Span,
349}
350
351#[derive(Diagnostic)]
352#[diag(builtin_macros_derive_path_args_value)]
353pub(crate) struct DerivePathArgsValue {
354    #[suggestion(code = "", applicability = "machine-applicable")]
355    #[primary_span]
356    pub(crate) span: Span,
357}
358
359#[derive(Diagnostic)]
360#[diag(builtin_macros_no_default_variant, code = E0665)]
361pub(crate) struct NoDefaultVariant {
362    #[primary_span]
363    pub(crate) span: Span,
364    #[label]
365    pub(crate) item_span: Span,
366    #[subdiagnostic]
367    pub(crate) suggs: Vec<NoDefaultVariantSugg>,
368}
369
370#[derive(Subdiagnostic)]
371#[suggestion(builtin_macros_suggestion, code = "#[default] ", applicability = "maybe-incorrect")]
372pub(crate) struct NoDefaultVariantSugg {
373    #[primary_span]
374    pub(crate) span: Span,
375}
376
377#[derive(Diagnostic)]
378#[diag(builtin_macros_multiple_defaults)]
379#[note]
380pub(crate) struct MultipleDefaults {
381    #[primary_span]
382    pub(crate) span: Span,
383    #[label]
384    pub(crate) first: Span,
385    #[label(builtin_macros_additional)]
386    pub additional: Vec<Span>,
387    #[subdiagnostic]
388    pub suggs: Vec<MultipleDefaultsSugg>,
389}
390
391#[derive(Subdiagnostic)]
392#[multipart_suggestion(
393    builtin_macros_suggestion,
394    applicability = "maybe-incorrect",
395    style = "tool-only"
396)]
397pub(crate) struct MultipleDefaultsSugg {
398    #[suggestion_part(code = "")]
399    pub(crate) spans: Vec<Span>,
400    pub(crate) ident: Ident,
401}
402
403#[derive(Diagnostic)]
404#[diag(builtin_macros_non_unit_default)]
405#[help]
406pub(crate) struct NonUnitDefault {
407    #[primary_span]
408    pub(crate) span: Span,
409    pub(crate) post: &'static str,
410}
411
412#[derive(Diagnostic)]
413#[diag(builtin_macros_non_exhaustive_default)]
414#[help]
415pub(crate) struct NonExhaustiveDefault {
416    #[primary_span]
417    pub(crate) span: Span,
418    #[label]
419    pub(crate) non_exhaustive: Span,
420}
421
422#[derive(Diagnostic)]
423#[diag(builtin_macros_multiple_default_attrs)]
424#[note]
425pub(crate) struct MultipleDefaultAttrs {
426    #[primary_span]
427    pub(crate) span: Span,
428    #[label]
429    pub(crate) first: Span,
430    #[label(builtin_macros_label_again)]
431    pub(crate) first_rest: Span,
432    #[help]
433    pub(crate) rest: MultiSpan,
434    pub(crate) only_one: bool,
435    #[subdiagnostic]
436    pub(crate) sugg: MultipleDefaultAttrsSugg,
437}
438
439#[derive(Subdiagnostic)]
440#[multipart_suggestion(
441    builtin_macros_help,
442    applicability = "machine-applicable",
443    style = "tool-only"
444)]
445pub(crate) struct MultipleDefaultAttrsSugg {
446    #[suggestion_part(code = "")]
447    pub(crate) spans: Vec<Span>,
448}
449
450#[derive(Diagnostic)]
451#[diag(builtin_macros_default_arg)]
452pub(crate) struct DefaultHasArg {
453    #[primary_span]
454    #[suggestion(code = "#[default]", style = "hidden", applicability = "maybe-incorrect")]
455    pub(crate) span: Span,
456}
457
458#[derive(Diagnostic)]
459#[diag(builtin_macros_derive_from_wrong_target)]
460#[note(builtin_macros_derive_from_usage_note)]
461pub(crate) struct DeriveFromWrongTarget<'a> {
462    #[primary_span]
463    pub(crate) span: MultiSpan,
464    pub(crate) kind: &'a str,
465}
466
467#[derive(Diagnostic)]
468#[diag(builtin_macros_derive_from_wrong_field_count)]
469#[note(builtin_macros_derive_from_usage_note)]
470pub(crate) struct DeriveFromWrongFieldCount {
471    #[primary_span]
472    pub(crate) span: MultiSpan,
473    pub(crate) multiple_fields: bool,
474}
475
476#[derive(Diagnostic)]
477#[diag(builtin_macros_derive_macro_call)]
478pub(crate) struct DeriveMacroCall {
479    #[primary_span]
480    pub(crate) span: Span,
481}
482
483#[derive(Diagnostic)]
484#[diag(builtin_macros_cannot_derive_union)]
485pub(crate) struct DeriveUnion {
486    #[primary_span]
487    pub(crate) span: Span,
488}
489
490#[derive(Diagnostic)]
491#[diag(builtin_macros_env_takes_args)]
492pub(crate) struct EnvTakesArgs {
493    #[primary_span]
494    pub(crate) span: Span,
495}
496
497pub(crate) struct EnvNotDefinedWithUserMessage {
498    pub(crate) span: Span,
499    pub(crate) msg_from_user: Symbol,
500}
501
502// Hand-written implementation to support custom user messages.
503impl<'a, G: EmissionGuarantee> Diagnostic<'a, G> for EnvNotDefinedWithUserMessage {
504    #[track_caller]
505    fn into_diag(self, dcx: DiagCtxtHandle<'a>, level: Level) -> Diag<'a, G> {
506        #[expect(
507            rustc::untranslatable_diagnostic,
508            reason = "cannot translate user-provided messages"
509        )]
510        let mut diag = Diag::new(dcx, level, self.msg_from_user.to_string());
511        diag.span(self.span);
512        diag
513    }
514}
515
516#[derive(Diagnostic)]
517pub(crate) enum EnvNotDefined<'a> {
518    #[diag(builtin_macros_env_not_defined)]
519    #[help(builtin_macros_cargo)]
520    CargoEnvVar {
521        #[primary_span]
522        span: Span,
523        var: Symbol,
524        var_expr: &'a rustc_ast::Expr,
525    },
526    #[diag(builtin_macros_env_not_defined)]
527    #[help(builtin_macros_cargo_typo)]
528    CargoEnvVarTypo {
529        #[primary_span]
530        span: Span,
531        var: Symbol,
532        suggested_var: Symbol,
533    },
534    #[diag(builtin_macros_env_not_defined)]
535    #[help(builtin_macros_custom)]
536    CustomEnvVar {
537        #[primary_span]
538        span: Span,
539        var: Symbol,
540        var_expr: &'a rustc_ast::Expr,
541    },
542}
543
544#[derive(Diagnostic)]
545#[diag(builtin_macros_env_not_unicode)]
546pub(crate) struct EnvNotUnicode {
547    #[primary_span]
548    pub(crate) span: Span,
549    pub(crate) var: Symbol,
550}
551
552#[derive(Diagnostic)]
553#[diag(builtin_macros_format_requires_string)]
554pub(crate) struct FormatRequiresString {
555    #[primary_span]
556    pub(crate) span: Span,
557}
558
559#[derive(Diagnostic)]
560#[diag(builtin_macros_format_duplicate_arg)]
561pub(crate) struct FormatDuplicateArg {
562    #[primary_span]
563    pub(crate) span: Span,
564    #[label(builtin_macros_label1)]
565    pub(crate) prev: Span,
566    #[label(builtin_macros_label2)]
567    pub(crate) duplicate: Span,
568    pub(crate) ident: Ident,
569}
570
571#[derive(Diagnostic)]
572#[diag(builtin_macros_format_positional_after_named)]
573pub(crate) struct PositionalAfterNamed {
574    #[primary_span]
575    #[label]
576    pub(crate) span: Span,
577    #[label(builtin_macros_named_args)]
578    pub(crate) args: Vec<Span>,
579}
580
581#[derive(Diagnostic)]
582#[diag(builtin_macros_format_string_invalid)]
583pub(crate) struct InvalidFormatString {
584    #[primary_span]
585    #[label]
586    pub(crate) span: Span,
587    pub(crate) desc: String,
588    pub(crate) label1: String,
589    #[subdiagnostic]
590    pub(crate) note_: Option<InvalidFormatStringNote>,
591    #[subdiagnostic]
592    pub(crate) label_: Option<InvalidFormatStringLabel>,
593    #[subdiagnostic]
594    pub(crate) sugg_: Option<InvalidFormatStringSuggestion>,
595}
596
597#[derive(Subdiagnostic)]
598#[note(builtin_macros_note)]
599pub(crate) struct InvalidFormatStringNote {
600    pub(crate) note: String,
601}
602
603#[derive(Subdiagnostic)]
604#[label(builtin_macros_second_label)]
605pub(crate) struct InvalidFormatStringLabel {
606    #[primary_span]
607    pub(crate) span: Span,
608    pub(crate) label: String,
609}
610
611#[derive(Subdiagnostic)]
612pub(crate) enum InvalidFormatStringSuggestion {
613    #[multipart_suggestion(
614        builtin_macros_format_use_positional,
615        style = "verbose",
616        applicability = "machine-applicable"
617    )]
618    UsePositional {
619        #[suggestion_part(code = "{len}")]
620        captured: Span,
621        len: String,
622        #[suggestion_part(code = ", {arg}")]
623        span: Span,
624        arg: String,
625    },
626    #[suggestion(
627        builtin_macros_format_remove_raw_ident,
628        code = "",
629        applicability = "machine-applicable"
630    )]
631    RemoveRawIdent {
632        #[primary_span]
633        span: Span,
634    },
635    #[suggestion(
636        builtin_macros_format_reorder_format_parameter,
637        code = "{replacement}",
638        style = "verbose",
639        applicability = "machine-applicable"
640    )]
641    ReorderFormatParameter {
642        #[primary_span]
643        span: Span,
644        replacement: String,
645    },
646}
647
648#[derive(Diagnostic)]
649#[diag(builtin_macros_format_no_arg_named)]
650#[note]
651#[note(builtin_macros_note2)]
652pub(crate) struct FormatNoArgNamed {
653    #[primary_span]
654    pub(crate) span: Span,
655    pub(crate) name: Symbol,
656}
657
658#[derive(Diagnostic)]
659#[diag(builtin_macros_format_unknown_trait)]
660#[note]
661pub(crate) struct FormatUnknownTrait<'a> {
662    #[primary_span]
663    pub(crate) span: Span,
664    pub(crate) ty: &'a str,
665    #[subdiagnostic]
666    pub(crate) suggs: Vec<FormatUnknownTraitSugg>,
667}
668
669#[derive(Subdiagnostic)]
670#[suggestion(
671    builtin_macros_suggestion,
672    code = "{fmt}",
673    style = "tool-only",
674    applicability = "maybe-incorrect"
675)]
676pub(crate) struct FormatUnknownTraitSugg {
677    #[primary_span]
678    pub span: Span,
679    pub fmt: &'static str,
680    pub trait_name: &'static str,
681}
682
683#[derive(Diagnostic)]
684#[diag(builtin_macros_format_unused_arg)]
685pub(crate) struct FormatUnusedArg {
686    #[primary_span]
687    #[label(builtin_macros_format_unused_arg)]
688    pub(crate) span: Span,
689    pub(crate) named: bool,
690}
691
692// Allow the singular form to be a subdiagnostic of the multiple-unused
693// form of diagnostic.
694impl Subdiagnostic for FormatUnusedArg {
695    fn add_to_diag<G: EmissionGuarantee>(self, diag: &mut Diag<'_, G>) {
696        diag.arg("named", self.named);
697        let msg = diag.eagerly_translate(crate::fluent_generated::builtin_macros_format_unused_arg);
698        diag.remove_arg("named");
699        diag.span_label(self.span, msg);
700    }
701}
702
703#[derive(Diagnostic)]
704#[diag(builtin_macros_format_unused_args)]
705pub(crate) struct FormatUnusedArgs {
706    #[primary_span]
707    pub(crate) unused: Vec<Span>,
708    #[label]
709    pub(crate) fmt: Span,
710    #[subdiagnostic]
711    pub(crate) unused_labels: Vec<FormatUnusedArg>,
712}
713
714#[derive(Diagnostic)]
715#[diag(builtin_macros_format_pos_mismatch)]
716pub(crate) struct FormatPositionalMismatch {
717    #[primary_span]
718    pub(crate) span: MultiSpan,
719    pub(crate) n: usize,
720    pub(crate) desc: String,
721    #[subdiagnostic]
722    pub(crate) highlight: SingleLabelManySpans,
723}
724
725#[derive(Diagnostic)]
726#[diag(builtin_macros_format_redundant_args)]
727pub(crate) struct FormatRedundantArgs {
728    #[primary_span]
729    pub(crate) span: MultiSpan,
730    pub(crate) n: usize,
731
732    #[note]
733    pub(crate) note: MultiSpan,
734
735    #[subdiagnostic]
736    pub(crate) sugg: Option<FormatRedundantArgsSugg>,
737}
738
739#[derive(Subdiagnostic)]
740#[multipart_suggestion(builtin_macros_suggestion, applicability = "machine-applicable")]
741pub(crate) struct FormatRedundantArgsSugg {
742    #[suggestion_part(code = "")]
743    pub(crate) spans: Vec<Span>,
744}
745
746#[derive(Diagnostic)]
747#[diag(builtin_macros_test_case_non_item)]
748pub(crate) struct TestCaseNonItem {
749    #[primary_span]
750    pub(crate) span: Span,
751}
752
753#[derive(Diagnostic)]
754#[diag(builtin_macros_test_bad_fn)]
755pub(crate) struct TestBadFn {
756    #[primary_span]
757    pub(crate) span: Span,
758    #[label]
759    pub(crate) cause: Span,
760    pub(crate) kind: &'static str,
761}
762
763#[derive(Diagnostic)]
764#[diag(builtin_macros_asm_explicit_register_name)]
765pub(crate) struct AsmExplicitRegisterName {
766    #[primary_span]
767    pub(crate) span: Span,
768}
769
770#[derive(Diagnostic)]
771#[diag(builtin_macros_asm_mutually_exclusive)]
772pub(crate) struct AsmMutuallyExclusive {
773    #[primary_span]
774    pub(crate) spans: Vec<Span>,
775    pub(crate) opt1: &'static str,
776    pub(crate) opt2: &'static str,
777}
778
779#[derive(Diagnostic)]
780#[diag(builtin_macros_asm_pure_combine)]
781pub(crate) struct AsmPureCombine {
782    #[primary_span]
783    pub(crate) spans: Vec<Span>,
784}
785
786#[derive(Diagnostic)]
787#[diag(builtin_macros_asm_pure_no_output)]
788pub(crate) struct AsmPureNoOutput {
789    #[primary_span]
790    pub(crate) spans: Vec<Span>,
791}
792
793#[derive(Diagnostic)]
794#[diag(builtin_macros_asm_modifier_invalid)]
795pub(crate) struct AsmModifierInvalid {
796    #[primary_span]
797    pub(crate) span: Span,
798}
799
800#[derive(Diagnostic)]
801#[diag(builtin_macros_asm_attribute_not_supported)]
802pub(crate) struct AsmAttributeNotSupported {
803    #[primary_span]
804    pub(crate) span: Span,
805}
806
807#[derive(Diagnostic)]
808#[diag(builtin_macros_asm_duplicate_arg)]
809pub(crate) struct AsmDuplicateArg {
810    #[primary_span]
811    #[label(builtin_macros_arg)]
812    pub(crate) span: Span,
813    #[label]
814    pub(crate) prev: Span,
815    pub(crate) name: Symbol,
816}
817
818#[derive(Diagnostic)]
819#[diag(builtin_macros_asm_pos_after)]
820pub(crate) struct AsmPositionalAfter {
821    #[primary_span]
822    #[label(builtin_macros_pos)]
823    pub(crate) span: Span,
824    #[label(builtin_macros_named)]
825    pub(crate) named: Vec<Span>,
826    #[label(builtin_macros_explicit)]
827    pub(crate) explicit: Vec<Span>,
828}
829
830#[derive(Diagnostic)]
831#[diag(builtin_macros_asm_noreturn)]
832pub(crate) struct AsmNoReturn {
833    #[primary_span]
834    pub(crate) outputs_sp: Vec<Span>,
835}
836
837#[derive(Diagnostic)]
838#[diag(builtin_macros_asm_no_matched_argument_name)]
839pub(crate) struct AsmNoMatchedArgumentName {
840    pub(crate) name: String,
841    #[primary_span]
842    pub(crate) span: Span,
843}
844
845#[derive(Diagnostic)]
846#[diag(builtin_macros_asm_mayunwind)]
847pub(crate) struct AsmMayUnwind {
848    #[primary_span]
849    pub(crate) labels_sp: Vec<Span>,
850}
851
852pub(crate) struct AsmClobberNoReg {
853    pub(crate) spans: Vec<Span>,
854    pub(crate) clobbers: Vec<Span>,
855}
856
857impl<'a, G: EmissionGuarantee> Diagnostic<'a, G> for AsmClobberNoReg {
858    fn into_diag(self, dcx: DiagCtxtHandle<'a>, level: Level) -> Diag<'a, G> {
859        // eager translation as `span_labels` takes `AsRef<str>`
860        let lbl1 = dcx.eagerly_translate_to_string(
861            crate::fluent_generated::builtin_macros_asm_clobber_abi,
862            [].into_iter(),
863        );
864        let lbl2 = dcx.eagerly_translate_to_string(
865            crate::fluent_generated::builtin_macros_asm_clobber_outputs,
866            [].into_iter(),
867        );
868        Diag::new(dcx, level, crate::fluent_generated::builtin_macros_asm_clobber_no_reg)
869            .with_span(self.spans.clone())
870            .with_span_labels(self.clobbers, &lbl1)
871            .with_span_labels(self.spans, &lbl2)
872    }
873}
874
875#[derive(Diagnostic)]
876#[diag(builtin_macros_asm_opt_already_provided)]
877pub(crate) struct AsmOptAlreadyprovided {
878    #[primary_span]
879    #[label]
880    pub(crate) span: Span,
881    pub(crate) symbol: Symbol,
882    #[suggestion(code = "", applicability = "machine-applicable", style = "tool-only")]
883    pub(crate) span_with_comma: Span,
884}
885
886#[derive(Diagnostic)]
887#[diag(builtin_macros_asm_unsupported_option)]
888pub(crate) struct AsmUnsupportedOption {
889    #[primary_span]
890    #[label]
891    pub(crate) span: Span,
892    pub(crate) symbol: Symbol,
893    #[suggestion(code = "", applicability = "machine-applicable", style = "tool-only")]
894    pub(crate) span_with_comma: Span,
895    pub(crate) macro_name: &'static str,
896}
897
898#[derive(Diagnostic)]
899#[diag(builtin_macros_asm_unsupported_clobber_abi)]
900pub(crate) struct AsmUnsupportedClobberAbi {
901    #[primary_span]
902    pub(crate) spans: Vec<Span>,
903    pub(crate) macro_name: &'static str,
904}
905
906#[derive(Diagnostic)]
907#[diag(builtin_macros_test_runner_invalid)]
908pub(crate) struct TestRunnerInvalid {
909    #[primary_span]
910    pub(crate) span: Span,
911}
912
913#[derive(Diagnostic)]
914#[diag(builtin_macros_test_runner_nargs)]
915pub(crate) struct TestRunnerNargs {
916    #[primary_span]
917    pub(crate) span: Span,
918}
919
920#[derive(Diagnostic)]
921#[diag(builtin_macros_expected_comma_in_list)]
922pub(crate) struct ExpectedCommaInList {
923    #[primary_span]
924    pub span: Span,
925}
926
927#[derive(Diagnostic)]
928#[diag(builtin_macros_only_one_argument)]
929pub(crate) struct OnlyOneArgument<'a> {
930    #[primary_span]
931    pub span: Span,
932    pub name: &'a str,
933}
934
935#[derive(Diagnostic)]
936#[diag(builtin_macros_takes_no_arguments)]
937pub(crate) struct TakesNoArguments<'a> {
938    #[primary_span]
939    pub span: Span,
940    pub name: &'a str,
941}
942
943#[derive(Diagnostic)]
944#[diag(builtin_macros_proc_macro_attribute_only_usable_with_crate_type)]
945pub(crate) struct AttributeOnlyUsableWithCrateType<'a> {
946    #[primary_span]
947    pub span: Span,
948    pub path: &'a str,
949}
950
951#[derive(Diagnostic)]
952#[diag(builtin_macros_source_utils_expected_item)]
953pub(crate) struct ExpectedItem<'a> {
954    #[primary_span]
955    pub span: Span,
956    pub token: &'a str,
957}
958
959#[derive(Diagnostic)]
960#[diag(builtin_macros_naked_functions_testing_attribute, code = E0736)]
961pub(crate) struct NakedFunctionTestingAttribute {
962    #[primary_span]
963    #[label(builtin_macros_naked_attribute)]
964    pub naked_span: Span,
965    #[label]
966    pub testing_span: Span,
967}
968
969#[derive(Diagnostic)]
970#[diag(builtin_macros_non_generic_pointee)]
971pub(crate) struct NonGenericPointee {
972    #[primary_span]
973    pub span: Span,
974}
975
976#[derive(Diagnostic)]
977#[diag(builtin_macros_expected_other)]
978pub(crate) struct AsmExpectedOther {
979    #[primary_span]
980    #[label(builtin_macros_expected_other)]
981    pub(crate) span: Span,
982    pub(crate) is_inline_asm: bool,
983}
984
985#[derive(Diagnostic)]
986#[diag(builtin_macros_cfg_select_no_matches)]
987pub(crate) struct CfgSelectNoMatches {
988    #[primary_span]
989    pub span: Span,
990}
991
992#[derive(Diagnostic)]
993#[diag(builtin_macros_cfg_select_unreachable)]
994pub(crate) struct CfgSelectUnreachable {
995    #[primary_span]
996    #[label(builtin_macros_label2)]
997    pub span: Span,
998
999    #[label]
1000    pub wildcard_span: Span,
1001}
1002
1003#[derive(Diagnostic)]
1004#[diag(builtin_macros_eii_extern_target_expected_macro)]
1005pub(crate) struct EiiExternTargetExpectedMacro {
1006    #[primary_span]
1007    pub span: Span,
1008}
1009
1010#[derive(Diagnostic)]
1011#[diag(builtin_macros_eii_extern_target_expected_list)]
1012pub(crate) struct EiiExternTargetExpectedList {
1013    #[primary_span]
1014    pub span: Span,
1015}
1016
1017#[derive(Diagnostic)]
1018#[diag(builtin_macros_eii_extern_target_expected_unsafe)]
1019pub(crate) struct EiiExternTargetExpectedUnsafe {
1020    #[primary_span]
1021    #[note]
1022    pub span: Span,
1023}
1024
1025#[derive(Diagnostic)]
1026#[diag(builtin_macros_eii_shared_macro_expected_function)]
1027pub(crate) struct EiiSharedMacroExpectedFunction {
1028    #[primary_span]
1029    pub span: Span,
1030    pub name: String,
1031}
1032
1033#[derive(Diagnostic)]
1034#[diag(builtin_macros_eii_only_once)]
1035pub(crate) struct EiiOnlyOnce {
1036    #[primary_span]
1037    pub span: Span,
1038    #[note]
1039    pub first_span: Span,
1040    pub name: String,
1041}
1042
1043#[derive(Diagnostic)]
1044#[diag(builtin_macros_eii_shared_macro_expected_max_one_argument)]
1045pub(crate) struct EiiMacroExpectedMaxOneArgument {
1046    #[primary_span]
1047    pub span: Span,
1048    pub name: String,
1049}