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