mirror of
https://github.com/rust-lang/rust.git
synced 2025-02-17 17:33:07 +00:00
Reuse existing shared Lrc for MatchImpl parent
This is hopefully a small performance win for the hot path.
This commit is contained in:
parent
4aed1abb70
commit
905beab38e
@ -33,7 +33,7 @@ impl<'a, 'tcx> NiceRegionError<'a, 'tcx> {
|
|||||||
ObligationCauseCode::MatchImpl(parent, impl_def_id) => (parent, impl_def_id),
|
ObligationCauseCode::MatchImpl(parent, impl_def_id) => (parent, impl_def_id),
|
||||||
_ => return None,
|
_ => return None,
|
||||||
};
|
};
|
||||||
let binding_span = match **parent {
|
let binding_span = match parent.code {
|
||||||
ObligationCauseCode::BindingObligation(_def_id, binding_span) => binding_span,
|
ObligationCauseCode::BindingObligation(_def_id, binding_span) => binding_span,
|
||||||
_ => return None,
|
_ => return None,
|
||||||
};
|
};
|
||||||
|
@ -189,7 +189,7 @@ impl<'a, 'tcx> NiceRegionError<'a, 'tcx> {
|
|||||||
}
|
}
|
||||||
if let SubregionOrigin::Subtype(box TypeTrace { cause, .. }) = &sub_origin {
|
if let SubregionOrigin::Subtype(box TypeTrace { cause, .. }) = &sub_origin {
|
||||||
let code = match &cause.code {
|
let code = match &cause.code {
|
||||||
ObligationCauseCode::MatchImpl(parent, ..) => &**parent,
|
ObligationCauseCode::MatchImpl(parent, ..) => &parent.code,
|
||||||
_ => &cause.code,
|
_ => &cause.code,
|
||||||
};
|
};
|
||||||
if let ObligationCauseCode::ItemObligation(item_def_id) = *code {
|
if let ObligationCauseCode::ItemObligation(item_def_id) = *code {
|
||||||
|
@ -340,7 +340,7 @@ pub enum ObligationCauseCode<'tcx> {
|
|||||||
WellFormed(Option<WellFormedLoc>),
|
WellFormed(Option<WellFormedLoc>),
|
||||||
|
|
||||||
/// From `match_impl`. The cause for us having to match an impl, and the DefId we are matching against.
|
/// From `match_impl`. The cause for us having to match an impl, and the DefId we are matching against.
|
||||||
MatchImpl(Lrc<ObligationCauseCode<'tcx>>, DefId),
|
MatchImpl(ObligationCause<'tcx>, DefId),
|
||||||
}
|
}
|
||||||
|
|
||||||
/// The 'location' at which we try to perform HIR-based wf checking.
|
/// The 'location' at which we try to perform HIR-based wf checking.
|
||||||
|
@ -2025,7 +2025,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
|
|||||||
let cause = ObligationCause::new(
|
let cause = ObligationCause::new(
|
||||||
obligation.cause.span,
|
obligation.cause.span,
|
||||||
obligation.cause.body_id,
|
obligation.cause.body_id,
|
||||||
ObligationCauseCode::MatchImpl(Lrc::new(obligation.cause.code.clone()), impl_def_id),
|
ObligationCauseCode::MatchImpl(obligation.cause.clone(), impl_def_id),
|
||||||
);
|
);
|
||||||
|
|
||||||
let InferOk { obligations, .. } = self
|
let InferOk { obligations, .. } = self
|
||||||
|
Loading…
Reference in New Issue
Block a user