| //! Errors emitted by ty_utils | |
| use rustc_errors::codes::*; | |
| use rustc_macros::{Diagnostic, Subdiagnostic}; | |
| use rustc_middle::ty::{GenericArg, Ty}; | |
| use rustc_span::Span; | |
| #[derive(Diagnostic)] | |
| #[diag("overflow while checking whether `{$query_ty}` requires drop")] | |
| pub(crate) struct NeedsDropOverflow<'tcx> { | |
| pub query_ty: Ty<'tcx>, | |
| } | |
| #[derive(Diagnostic)] | |
| #[diag("overly complex generic constant")] | |
| #[help("consider moving this anonymous constant into a `const` function")] | |
| pub(crate) struct GenericConstantTooComplex { | |
| #[primary_span] | |
| pub span: Span, | |
| #[note("this operation may be supported in the future")] | |
| pub maybe_supported: bool, | |
| #[subdiagnostic] | |
| pub sub: GenericConstantTooComplexSub, | |
| } | |
| #[derive(Subdiagnostic)] | |
| pub(crate) enum GenericConstantTooComplexSub { | |
| #[label("borrowing is not supported in generic constants")] | |
| BorrowNotSupported(#[primary_span] Span), | |
| #[label("dereferencing or taking the address is not supported in generic constants")] | |
| AddressAndDerefNotSupported(#[primary_span] Span), | |
| #[label("array construction is not supported in generic constants")] | |
| ArrayNotSupported(#[primary_span] Span), | |
| #[label("blocks are not supported in generic constants")] | |
| BlockNotSupported(#[primary_span] Span), | |
| #[label("coercing the `never` type is not supported in generic constants")] | |
| NeverToAnyNotSupported(#[primary_span] Span), | |
| #[label("tuple construction is not supported in generic constants")] | |
| TupleNotSupported(#[primary_span] Span), | |
| #[label("indexing is not supported in generic constants")] | |
| IndexNotSupported(#[primary_span] Span), | |
| #[label("field access is not supported in generic constants")] | |
| FieldNotSupported(#[primary_span] Span), | |
| #[label("const blocks are not supported in generic constants")] | |
| ConstBlockNotSupported(#[primary_span] Span), | |
| #[label("struct/enum construction is not supported in generic constants")] | |
| AdtNotSupported(#[primary_span] Span), | |
| #[label("pointer casts are not allowed in generic constants")] | |
| PointerNotSupported(#[primary_span] Span), | |
| #[label("coroutine control flow is not allowed in generic constants")] | |
| YieldNotSupported(#[primary_span] Span), | |
| #[label("loops and loop control flow are not supported in generic constants")] | |
| LoopNotSupported(#[primary_span] Span), | |
| #[label("unsupported binary operation in generic constants")] | |
| BinaryNotSupported(#[primary_span] Span), | |
| #[label(".use is not allowed in generic constants")] | |
| ByUseNotSupported(#[primary_span] Span), | |
| #[label( | |
| "unsupported operation in generic constants, short-circuiting operations would imply control flow" | |
| )] | |
| LogicalOpNotSupported(#[primary_span] Span), | |
| #[label("assignment is not supported in generic constants")] | |
| AssignNotSupported(#[primary_span] Span), | |
| #[label("closures and function keywords are not supported in generic constants")] | |
| ClosureAndReturnNotSupported(#[primary_span] Span), | |
| #[label("control flow is not supported in generic constants")] | |
| ControlFlowNotSupported(#[primary_span] Span), | |
| #[label("assembly is not supported in generic constants")] | |
| InlineAsmNotSupported(#[primary_span] Span), | |
| #[label("unsupported operation in generic constants")] | |
| OperationNotSupported(#[primary_span] Span), | |
| } | |
| #[derive(Diagnostic)] | |
| #[diag( | |
| "monomorphising SIMD type `{$ty}` with a non-primitive-scalar (integer/float/pointer) element type `{$e_ty}`" | |
| )] | |
| pub(crate) struct NonPrimitiveSimdType<'tcx> { | |
| pub ty: Ty<'tcx>, | |
| pub e_ty: Ty<'tcx>, | |
| } | |
| #[derive(Diagnostic)] | |
| #[diag("non-defining opaque type use in defining scope")] | |
| pub(crate) struct DuplicateArg<'tcx> { | |
| pub arg: GenericArg<'tcx>, | |
| #[primary_span] | |
| #[label("generic argument `{$arg}` used twice")] | |
| pub span: Span, | |
| #[note("for this opaque type")] | |
| pub opaque_span: Span, | |
| } | |
| #[derive(Diagnostic)] | |
| #[diag("non-defining opaque type use in defining scope", code = E0792)] | |
| pub(crate) struct NotParam<'tcx> { | |
| pub arg: GenericArg<'tcx>, | |
| #[primary_span] | |
| #[label("argument `{$arg}` is not a generic parameter")] | |
| pub span: Span, | |
| #[note("for this opaque type")] | |
| pub opaque_span: Span, | |
| } |