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