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
487impl<'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
669impl 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 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}