use rustc_macros::Diagnostic; use rustc_span::{Span, Symbol}; use crate::ty::Ty; #[derive(Diagnostic)] #[diag(middle_drop_check_overflow, code = "E0320")] #[note] pub struct DropCheckOverflow<'tcx> { #[primary_span] pub span: Span, pub ty: Ty<'tcx>, pub overflow_ty: Ty<'tcx>, } #[derive(Diagnostic)] #[diag(middle_opaque_hidden_type_mismatch)] pub struct OpaqueHiddenTypeMismatch<'tcx> { pub self_ty: Ty<'tcx>, pub other_ty: Ty<'tcx>, #[primary_span] #[label] pub other_span: Span, #[subdiagnostic] pub sub: TypeMismatchReason, } #[derive(Subdiagnostic)] pub enum TypeMismatchReason { #[label(middle_conflict_types)] ConflictType { #[primary_span] span: Span, }, #[note(middle_previous_use_here)] PreviousUse { #[primary_span] span: Span, }, } #[derive(Diagnostic)] #[diag(middle_limit_invalid)] pub struct LimitInvalid<'a> { #[primary_span] pub span: Span, #[label] pub value_span: Span, pub error_str: &'a str, } #[derive(Diagnostic)] #[diag(middle_recursion_limit_reached)] #[help] pub struct RecursionLimitReached<'tcx> { pub ty: Ty<'tcx>, pub suggested_limit: rustc_session::Limit, } #[derive(Diagnostic)] #[diag(middle_const_eval_non_int)] pub struct ConstEvalNonIntError { #[primary_span] pub span: Span, } #[derive(Diagnostic)] #[diag(middle_strict_coherence_needs_negative_coherence)] pub(crate) struct StrictCoherenceNeedsNegativeCoherence { #[primary_span] pub span: Span, #[label] pub attr_span: Option, } #[derive(Diagnostic)] #[diag(middle_requires_lang_item)] pub(crate) struct RequiresLangItem { #[primary_span] pub span: Option, pub name: Symbol, } #[derive(Diagnostic)] #[diag(middle_const_not_used_in_type_alias)] pub(super) struct ConstNotUsedTraitAlias { pub ct: String, #[primary_span] pub span: Span, }