| use std::io; | |
| use std::path::Path; | |
| use rustc_errors::codes::*; | |
| use rustc_macros::{Diagnostic, Subdiagnostic}; | |
| use rustc_span::{Span, Symbol}; | |
| use crate::ty::{Instance, Ty}; | |
| #[derive(Diagnostic)] | |
| #[diag("overflow while adding drop-check rules for `{$ty}`", code = E0320)] | |
| #[note("overflowed on `{$overflow_ty}`")] | |
| pub(crate) struct DropCheckOverflow<'tcx> { | |
| #[primary_span] | |
| pub span: Span, | |
| pub ty: Ty<'tcx>, | |
| pub overflow_ty: Ty<'tcx>, | |
| } | |
| #[derive(Diagnostic)] | |
| #[diag("failed to write file {$path}: {$error}")] | |
| pub(crate) struct FailedWritingFile<'a> { | |
| pub path: &'a Path, | |
| pub error: io::Error, | |
| } | |
| #[derive(Diagnostic)] | |
| #[diag("concrete type differs from previous defining opaque type use")] | |
| pub(crate) struct OpaqueHiddenTypeMismatch<'tcx> { | |
| pub self_ty: Ty<'tcx>, | |
| pub other_ty: Ty<'tcx>, | |
| #[primary_span] | |
| #[label("expected `{$self_ty}`, got `{$other_ty}`")] | |
| pub other_span: Span, | |
| #[subdiagnostic] | |
| pub sub: TypeMismatchReason, | |
| } | |
| #[derive(Subdiagnostic)] | |
| pub(crate) enum TypeMismatchReason { | |
| #[label("this expression supplies two conflicting concrete types for the same opaque type")] | |
| ConflictType { | |
| #[primary_span] | |
| span: Span, | |
| }, | |
| #[note("previous use here")] | |
| PreviousUse { | |
| #[primary_span] | |
| span: Span, | |
| }, | |
| } | |
| #[derive(Diagnostic)] | |
| #[diag("reached the recursion limit finding the struct tail for `{$ty}`")] | |
| #[help( | |
| "consider increasing the recursion limit by adding a `#![recursion_limit = \"{$suggested_limit}\"]`" | |
| )] | |
| pub(crate) struct RecursionLimitReached<'tcx> { | |
| #[primary_span] | |
| pub span: Span, | |
| pub ty: Ty<'tcx>, | |
| pub suggested_limit: rustc_data_structures::Limit, | |
| } | |
| #[derive(Diagnostic)] | |
| #[diag("reached the recursion limit while computing the size of `{$ty}`")] | |
| #[help( | |
| "consider increasing the recursion limit by adding a `#![recursion_limit = \"{$suggested_limit}\"]`" | |
| )] | |
| pub(crate) struct RecursionLimitReachedSizeSkeleton<'tcx> { | |
| #[primary_span] | |
| pub span: Span, | |
| pub ty: Ty<'tcx>, | |
| pub suggested_limit: rustc_data_structures::Limit, | |
| } | |
| #[derive(Diagnostic)] | |
| #[diag("constant evaluation of enum discriminant resulted in non-integer")] | |
| pub(crate) struct ConstEvalNonIntError { | |
| #[primary_span] | |
| pub span: Span, | |
| } | |
| #[derive(Diagnostic)] | |
| #[diag( | |
| "to use `strict_coherence` on this trait, the `with_negative_coherence` feature must be enabled" | |
| )] | |
| pub(crate) struct StrictCoherenceNeedsNegativeCoherence { | |
| #[primary_span] | |
| pub span: Span, | |
| #[label("due to this attribute")] | |
| pub attr_span: Span, | |
| } | |
| #[derive(Diagnostic)] | |
| #[diag("requires `{$name}` lang_item")] | |
| pub(crate) struct RequiresLangItem { | |
| #[primary_span] | |
| pub span: Span, | |
| pub name: Symbol, | |
| } | |
| #[derive(Diagnostic)] | |
| #[diag( | |
| "const parameter `{$ct}` is part of concrete type but not used in parameter list for the `impl Trait` type alias" | |
| )] | |
| pub(super) struct ConstNotUsedTraitAlias { | |
| pub ct: String, | |
| #[primary_span] | |
| pub span: Span, | |
| } | |
| #[derive(Diagnostic)] | |
| #[diag("erroneous constant encountered")] | |
| pub(crate) struct ErroneousConstant { | |
| #[primary_span] | |
| pub span: Span, | |
| } | |
| #[derive(Diagnostic)] | |
| #[diag("reached the type-length limit while instantiating `{$instance}`")] | |
| #[help("consider adding a `#![type_length_limit=\"{$type_length}\"]` attribute to your crate")] | |
| pub(crate) struct TypeLengthLimit<'tcx> { | |
| #[primary_span] | |
| pub span: Span, | |
| pub instance: Instance<'tcx>, | |
| pub type_length: usize, | |
| } | |
| #[derive(Diagnostic)] | |
| #[diag("maximum number of nodes exceeded in constant {$global_const_id}")] | |
| pub(crate) struct MaxNumNodesInValtree { | |
| #[primary_span] | |
| pub span: Span, | |
| pub global_const_id: String, | |
| } | |
| #[derive(Diagnostic)] | |
| #[diag("constant {$global_const_id} cannot be used as pattern")] | |
| #[note( | |
| "constants that reference mutable or external memory or that contain dangling references cannot be used as patterns" | |
| )] | |
| pub(crate) struct InvalidConstInValtree { | |
| #[primary_span] | |
| pub span: Span, | |
| pub global_const_id: String, | |
| } | |
| #[derive(Diagnostic)] | |
| #[diag("constant {$global_const_id} cannot be used as pattern")] | |
| #[note("constants whose type references itself cannot be used as patterns")] | |
| pub(crate) struct CyclicConstInValtree { | |
| #[primary_span] | |
| pub span: Span, | |
| pub global_const_id: String, | |
| } | |
| #[derive(Diagnostic)] | |
| #[diag("internal compiler error: reentrant incremental verify failure, suppressing message")] | |
| pub(crate) struct Reentrant; | |
| #[derive(Diagnostic)] | |
| #[diag("internal compiler error: encountered incremental compilation error with {$dep_node}")] | |
| #[note("please follow the instructions below to create a bug report with the provided information")] | |
| #[note("for incremental compilation bugs, having a reproduction is vital")] | |
| #[note( | |
| "an ideal reproduction consists of the code before and some patch that then triggers the bug when applied and compiled again" | |
| )] | |
| #[note("as a workaround, you can {$run_cmd} to allow your project to compile")] | |
| pub(crate) struct IncrementCompilation { | |
| pub run_cmd: String, | |
| pub dep_node: String, | |
| } | |
| #[derive(Diagnostic)] | |
| #[diag("multiple implementations of `#[{$name}]`")] | |
| pub struct DuplicateEiiImpls { | |
| pub name: Symbol, | |
| #[primary_span] | |
| #[label("first implemented here in crate `{$first_crate}`")] | |
| pub first_span: Span, | |
| pub first_crate: Symbol, | |
| #[label("also implemented here in crate `{$second_crate}`")] | |
| pub second_span: Span, | |
| pub second_crate: Symbol, | |
| #[note("in addition to these two, { $num_additional_crates -> | |
| [one] another implementation was found in crate {$additional_crate_names} | |
| *[other] more implementations were also found in the following crates: {$additional_crate_names} | |
| }")] | |
| pub additional_crates: Option<()>, | |
| pub num_additional_crates: usize, | |
| pub additional_crate_names: String, | |
| #[help( | |
| "an \"externally implementable item\" can only have a single implementation in the final artifact. When multiple implementations are found, also in different crates, they conflict" | |
| )] | |
| pub help: (), | |
| } |