| use rustc_macros::{Diagnostic, LintDiagnostic}; |
| use rustc_middle::ty::{Instance, Ty}; |
| use rustc_span::{Span, Symbol}; |
| |
| #[derive(Diagnostic)] |
| #[diag("reached the recursion limit while instantiating `{$instance}`")] |
| pub(crate) struct RecursionLimit<'tcx> { |
| #[primary_span] |
| pub span: Span, |
| pub instance: Instance<'tcx>, |
| #[note("`{$def_path_str}` defined here")] |
| pub def_span: Span, |
| pub def_path_str: String, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag("missing optimized MIR for `{$instance}` in the crate `{$crate_name}`")] |
| pub(crate) struct NoOptimizedMir { |
| #[note( |
| "missing optimized MIR for this item (was the crate `{$crate_name}` compiled with `--emit=metadata`?)" |
| )] |
| pub span: Span, |
| pub crate_name: Symbol, |
| pub instance: String, |
| } |
| |
| #[derive(LintDiagnostic)] |
| #[diag("moving {$size} bytes")] |
| #[note( |
| "the current maximum size is {$limit}, but it can be customized with the move_size_limit attribute: `#![move_size_limit = \"...\"]`" |
| )] |
| pub(crate) struct LargeAssignmentsLint { |
| #[label("value moved from here")] |
| pub span: Span, |
| pub size: u64, |
| pub limit: u64, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag("symbol `{$symbol}` is already defined")] |
| pub(crate) struct SymbolAlreadyDefined { |
| #[primary_span] |
| pub span: Option<Span>, |
| pub symbol: String, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag("unexpected error occurred while dumping monomorphization stats: {$error}")] |
| pub(crate) struct CouldntDumpMonoStats { |
| pub error: String, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag("the above error was encountered while instantiating `{$kind} {$instance}`")] |
| pub(crate) struct EncounteredErrorWhileInstantiating<'tcx> { |
| #[primary_span] |
| pub span: Span, |
| pub kind: &'static str, |
| pub instance: Instance<'tcx>, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag("the above error was encountered while instantiating `global_asm`")] |
| pub(crate) struct EncounteredErrorWhileInstantiatingGlobalAsm { |
| #[primary_span] |
| pub span: Span, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag("using `fn main` requires the standard library")] |
| #[help( |
| "use `#![no_main]` to bypass the Rust generated entrypoint and declare a platform specific entrypoint yourself, usually with `#[no_mangle]`" |
| )] |
| pub(crate) struct StartNotFound; |
| |
| #[derive(Diagnostic)] |
| #[diag("this function {$is_call -> |
| [true] call |
| *[false] definition |
| } uses {$is_scalable -> |
| [true] scalable |
| *[false] SIMD |
| } vector type `{$ty}` which (with the chosen ABI) requires the `{$required_feature}` target feature, which is not enabled{$is_call -> |
| [true] {\" \"}in the caller |
| *[false] {\"\"} |
| }")] |
| #[help( |
| "consider enabling it globally (`-C target-feature=+{$required_feature}`) or locally (`#[target_feature(enable=\"{$required_feature}\")]`)" |
| )] |
| pub(crate) struct AbiErrorDisabledVectorType<'a> { |
| #[primary_span] |
| #[label( |
| "function {$is_call -> |
| [true] called |
| *[false] defined |
| } here" |
| )] |
| pub span: Span, |
| pub required_feature: &'a str, |
| pub ty: Ty<'a>, |
| /// Whether this is a problem at a call site or at a declaration. |
| pub is_call: bool, |
| /// Whether this is a problem with a fixed length vector or a scalable vector |
| pub is_scalable: bool, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag( |
| "this function {$is_call -> |
| [true] call |
| *[false] definition |
| } uses unsized type `{$ty}` which is not supported with the chosen ABI" |
| )] |
| #[help("only rustic ABIs support unsized parameters")] |
| pub(crate) struct AbiErrorUnsupportedUnsizedParameter<'a> { |
| #[primary_span] |
| #[label( |
| "function {$is_call -> |
| [true] called |
| *[false] defined |
| } here" |
| )] |
| pub span: Span, |
| pub ty: Ty<'a>, |
| /// Whether this is a problem at a call site or at a declaration. |
| pub is_call: bool, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag( |
| "this function {$is_call -> |
| [true] call |
| *[false] definition |
| } uses SIMD vector type `{$ty}` which is not currently supported with the chosen ABI" |
| )] |
| pub(crate) struct AbiErrorUnsupportedVectorType<'a> { |
| #[primary_span] |
| #[label( |
| "function {$is_call -> |
| [true] called |
| *[false] defined |
| } here" |
| )] |
| pub span: Span, |
| pub ty: Ty<'a>, |
| /// Whether this is a problem at a call site or at a declaration. |
| pub is_call: bool, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag("this function {$is_call -> |
| [true] call |
| *[false] definition |
| } uses ABI \"{$abi}\" which requires the `{$required_feature}` target feature, which is not enabled{$is_call -> |
| [true] {\" \"}in the caller |
| *[false] {\"\"} |
| }")] |
| #[help( |
| "consider enabling it globally (`-C target-feature=+{$required_feature}`) or locally (`#[target_feature(enable=\"{$required_feature}\")]`)" |
| )] |
| pub(crate) struct AbiRequiredTargetFeature<'a> { |
| #[primary_span] |
| #[label( |
| "function {$is_call -> |
| [true] called |
| *[false] defined |
| } here" |
| )] |
| pub span: Span, |
| pub required_feature: &'a str, |
| pub abi: &'a str, |
| /// Whether this is a problem at a call site or at a declaration. |
| pub is_call: bool, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag("static initializer forms a cycle involving `{$head}`")] |
| #[note("cyclic static initializers are not supported for target `{$target}`")] |
| pub(crate) struct StaticInitializerCyclic<'a> { |
| #[primary_span] |
| pub span: Span, |
| #[label("part of this cycle")] |
| pub labels: Vec<Span>, |
| pub head: &'a str, |
| pub target: &'a str, |
| } |