Enum rustc_middle::traits::ObligationCauseCode
source · [−]pub enum ObligationCauseCode<'tcx> {
Show 53 variants
MiscObligation,
SliceOrArrayElem,
TupleElem,
ProjectionWf(ProjectionTy<'tcx>),
ItemObligation(DefId),
BindingObligation(DefId, Span),
ReferenceOutlivesReferent(Ty<'tcx>),
ObjectTypeBound(Ty<'tcx>, Region<'tcx>),
ObjectCastObligation(Ty<'tcx>),
Coercion {
source: Ty<'tcx>,
target: Ty<'tcx>,
},
AssignmentLhsSized,
TupleInitializerSized,
StructInitializerSized,
VariableType(HirId),
SizedArgumentType(Option<Span>),
SizedReturnType,
SizedYieldType,
SizedBoxType,
InlineAsmSized,
RepeatVec(bool),
FieldSized {
adt_kind: AdtKind,
span: Span,
last: bool,
},
ConstSized,
SharedStatic,
BuiltinDerivedObligation(DerivedObligationCause<'tcx>),
ImplDerivedObligation(DerivedObligationCause<'tcx>),
DerivedObligation(DerivedObligationCause<'tcx>),
FunctionArgumentObligation {
arg_hir_id: HirId,
call_hir_id: HirId,
parent_code: Lrc<ObligationCauseCode<'tcx>>,
},
CompareImplConstObligation,
CompareImplMethodObligation {
impl_item_def_id: DefId,
trait_item_def_id: DefId,
},
CompareImplTypeObligation {
impl_item_def_id: DefId,
trait_item_def_id: DefId,
},
ExprAssignable,
MatchExpressionArm(Box<MatchExpressionArmCause<'tcx>>),
Pattern {
span: Option<Span>,
root_ty: Ty<'tcx>,
origin_expr: bool,
},
ConstPatternStructural,
IfExpression(Box<IfExpressionCause>),
IfExpressionWithNoElse,
MainFunctionType,
StartFunctionType,
IntrinsicType,
LetElse,
MethodReceiver,
UnifyReceiver(Box<UnifyReceiverContext<'tcx>>),
ReturnNoExpression,
ReturnValue(HirId),
ReturnType,
BlockTailExpression(HirId),
TrivialBound,
OpaqueType,
AwaitableExpr(Option<HirId>),
ForLoopIterator,
QuestionMark,
WellFormed(Option<WellFormedLoc>),
MatchImpl(ObligationCause<'tcx>, DefId),
}Variants
MiscObligation
Not well classified or should be obvious from the span.
SliceOrArrayElem
A slice or array is WF only if T: Sized.
TupleElem
A tuple is WF only if its middle elements are Sized.
ProjectionWf(ProjectionTy<'tcx>)
This is the trait reference from the given projection.
ItemObligation(DefId)
In an impl of trait X for type Y, type Y must
also implement all supertraits of X.
BindingObligation(DefId, Span)
Like ItemObligation, but with extra detail on the source of the obligation.
ReferenceOutlivesReferent(Ty<'tcx>)
A type like &'a T is WF only if T: 'a.
ObjectTypeBound(Ty<'tcx>, Region<'tcx>)
A type like Box<Foo<'a> + 'b> is WF only if 'b: 'a.
ObjectCastObligation(Ty<'tcx>)
Obligation incurred due to an object cast.
Coercion
Obligation incurred due to a coercion.
AssignmentLhsSized
Various cases where expressions must be Sized / Copy / etc.
L = X implies that L is Sized.
TupleInitializerSized
(x1, .., xn) must be Sized.
StructInitializerSized
S { ... } must be Sized.
VariableType(HirId)
Type of each variable must be Sized.
SizedArgumentType(Option<Span>)
Argument type must be Sized.
SizedReturnType
Return type must be Sized.
SizedYieldType
Yield type must be Sized.
SizedBoxType
Box expression result type must be Sized.
InlineAsmSized
Inline asm operand type must be Sized.
RepeatVec(bool)
[T, ..n] implies that T must be Copy.
If the function in the array repeat expression is a const fn,
display a help message suggesting to move the function call to a
new const item while saying that T doesn’t implement Copy.
FieldSized
Types of fields (other than the last, except for packed structs) in a struct must be sized.
ConstSized
Constant expressions must be sized.
SharedStatic
static items must have Sync type.
BuiltinDerivedObligation(DerivedObligationCause<'tcx>)
ImplDerivedObligation(DerivedObligationCause<'tcx>)
DerivedObligation(DerivedObligationCause<'tcx>)
FunctionArgumentObligation
Fields
arg_hir_id: HirIdThe node of the relevant argument in the function call.
call_hir_id: HirIdThe node of the function call.
parent_code: Lrc<ObligationCauseCode<'tcx>>The obligation introduced by this argument.
CompareImplConstObligation
Error derived when matching traits/impls; see ObligationCause for more details
CompareImplMethodObligation
Error derived when matching traits/impls; see ObligationCause for more details
CompareImplTypeObligation
Error derived when matching traits/impls; see ObligationCause for more details
ExprAssignable
Checking that this expression can be assigned where it needs to be
MatchExpressionArm(Box<MatchExpressionArmCause<'tcx>>)
Computing common supertype in the arms of a match expression
Pattern
Fields
root_ty: Ty<'tcx>The root expected type induced by a scrutinee or type expression.
origin_expr: boolWhether the Span came from an expression or a type expression.
Type error arising from type checking a pattern against an expected type.
ConstPatternStructural
Constants in patterns must have Structural type.
IfExpression(Box<IfExpressionCause>)
Computing common supertype in an if expression
IfExpressionWithNoElse
Computing common supertype of an if expression with no else counter-part
MainFunctionType
main has wrong type
StartFunctionType
start has wrong type
IntrinsicType
Intrinsic has wrong type
LetElse
A let else block does not diverge
MethodReceiver
Method receiver
UnifyReceiver(Box<UnifyReceiverContext<'tcx>>)
ReturnNoExpression
return with no expression
ReturnValue(HirId)
return with an expression
ReturnType
Return type of this function
BlockTailExpression(HirId)
Block implicit return
TrivialBound
#[feature(trivial_bounds)] is not enabled
OpaqueType
If X is the concrete type of an opaque type impl Y, then X must implement Y
AwaitableExpr(Option<HirId>)
ForLoopIterator
QuestionMark
WellFormed(Option<WellFormedLoc>)
Well-formed checking. If a WellFormedLoc is provided,
then it will be used to eprform HIR-based wf checking
after an error occurs, in order to generate a more precise error span.
This is purely for diagnostic purposes - it is always
correct to use MiscObligation instead, or to specify
WellFormed(None)
MatchImpl(ObligationCause<'tcx>, DefId)
From match_impl. The cause for us having to match an impl, and the DefId we are matching against.
Implementations
sourceimpl ObligationCauseCode<'_>
impl ObligationCauseCode<'_>
pub fn peel_derives(&self) -> &Self
Trait Implementations
sourceimpl<'tcx> Clone for ObligationCauseCode<'tcx>
impl<'tcx> Clone for ObligationCauseCode<'tcx>
sourcefn clone(&self) -> ObligationCauseCode<'tcx>
fn clone(&self) -> ObligationCauseCode<'tcx>
Returns a copy of the value. Read more
1.0.0 · sourcefn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from source. Read more
sourceimpl<'tcx> Debug for ObligationCauseCode<'tcx>
impl<'tcx> Debug for ObligationCauseCode<'tcx>
sourceimpl<'tcx> Hash for ObligationCauseCode<'tcx>
impl<'tcx> Hash for ObligationCauseCode<'tcx>
sourceimpl<'tcx, '__lifted> Lift<'__lifted> for ObligationCauseCode<'tcx>
impl<'tcx, '__lifted> Lift<'__lifted> for ObligationCauseCode<'tcx>
type Lifted = ObligationCauseCode<'__lifted>
fn lift_to_tcx(
self,
__tcx: TyCtxt<'__lifted>
) -> Option<ObligationCauseCode<'__lifted>>
sourceimpl<'tcx> PartialEq<ObligationCauseCode<'tcx>> for ObligationCauseCode<'tcx>
impl<'tcx> PartialEq<ObligationCauseCode<'tcx>> for ObligationCauseCode<'tcx>
sourcefn eq(&self, other: &ObligationCauseCode<'tcx>) -> bool
fn eq(&self, other: &ObligationCauseCode<'tcx>) -> bool
This method tests for self and other values to be equal, and is used
by ==. Read more
sourcefn ne(&self, other: &ObligationCauseCode<'tcx>) -> bool
fn ne(&self, other: &ObligationCauseCode<'tcx>) -> bool
This method tests for !=.
impl<'tcx> Eq for ObligationCauseCode<'tcx>
impl<'tcx> StructuralEq for ObligationCauseCode<'tcx>
impl<'tcx> StructuralPartialEq for ObligationCauseCode<'tcx>
Auto Trait Implementations
impl<'tcx> !RefUnwindSafe for ObligationCauseCode<'tcx>
impl<'tcx> !Send for ObligationCauseCode<'tcx>
impl<'tcx> !Sync for ObligationCauseCode<'tcx>
impl<'tcx> Unpin for ObligationCauseCode<'tcx>
impl<'tcx> !UnwindSafe for ObligationCauseCode<'tcx>
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcepub fn borrow_mut(&mut self) -> &mut T
pub fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<T> MaybeResult<T> for T
impl<T> MaybeResult<T> for T
sourceimpl<T> ToOwned for T where
T: Clone,
impl<T> ToOwned for T where
T: Clone,
type Owned = T
type Owned = T
The resulting type after obtaining ownership.
sourcepub fn to_owned(&self) -> T
pub fn to_owned(&self) -> T
Creates owned data from borrowed data, usually by cloning. Read more
sourcepub fn clone_into(&self, target: &mut T)
pub fn clone_into(&self, target: &mut T)
toowned_clone_into)Uses borrowed data to replace owned data, usually by cloning. Read more
impl<'a, T> Captures<'a> for T where
T: ?Sized,
Layout
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference’s “Type Layout” chapter for details on type layout guarantees.
Size: 48 bytes
Size for each variant:
MiscObligation: 0 bytesSliceOrArrayElem: 0 bytesTupleElem: 0 bytesProjectionWf: 23 bytesItemObligation: 11 bytesBindingObligation: 19 bytesReferenceOutlivesReferent: 15 bytesObjectTypeBound: 23 bytesObjectCastObligation: 15 bytesCoercion: 23 bytesAssignmentLhsSized: 0 bytesTupleInitializerSized: 0 bytesStructInitializerSized: 0 bytesVariableType: 11 bytesSizedArgumentType: 15 bytesSizedReturnType: 0 bytesSizedYieldType: 0 bytesSizedBoxType: 0 bytesInlineAsmSized: 0 bytesRepeatVec: 1 byteFieldSized: 11 bytesConstSized: 0 bytesSharedStatic: 0 bytesBuiltinDerivedObligation: 47 bytesImplDerivedObligation: 47 bytesDerivedObligation: 47 bytesFunctionArgumentObligation: 31 bytesCompareImplConstObligation: 0 bytesCompareImplMethodObligation: 19 bytesCompareImplTypeObligation: 19 bytesExprAssignable: 0 bytesMatchExpressionArm: 15 bytesPattern: 23 bytesConstPatternStructural: 0 bytesIfExpression: 15 bytesIfExpressionWithNoElse: 0 bytesMainFunctionType: 0 bytesStartFunctionType: 0 bytesIntrinsicType: 0 bytesLetElse: 0 bytesMethodReceiver: 0 bytesUnifyReceiver: 15 bytesReturnNoExpression: 0 bytesReturnValue: 11 bytesReturnType: 0 bytesBlockTailExpression: 11 bytesTrivialBound: 0 bytesOpaqueType: 0 bytesAwaitableExpr: 11 bytesForLoopIterator: 0 bytesQuestionMark: 0 bytesWellFormed: 11 bytesMatchImpl: 39 bytes