rustc_builtin_macros/
errors.rs

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