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