Skip to content

Commit 62d5fb8

Browse files
Simplify
1 parent 69b3959 commit 62d5fb8

File tree

1 file changed

+22
-30
lines changed

1 file changed

+22
-30
lines changed

compiler/rustc_trait_selection/src/solve/fulfill/derive_errors.rs

+22-30
Original file line numberDiff line numberDiff line change
@@ -388,7 +388,8 @@ impl<'tcx> ProofTreeVisitor<'tcx> for BestObligation<'tcx> {
388388
(true, Ok(Certainty::Maybe(MaybeCause::Ambiguity))) | (false, Err(_)) => {}
389389
_ => return ControlFlow::Continue(()),
390390
}
391-
let pred_kind = goal.goal().predicate.kind();
391+
392+
let pred = goal.goal().predicate;
392393

393394
let candidates = self.non_trivial_candidates(goal);
394395
let candidate = match candidates.as_slice() {
@@ -410,20 +411,20 @@ impl<'tcx> ProofTreeVisitor<'tcx> for BestObligation<'tcx> {
410411

411412
// FIXME: Also, what about considering >1 layer up the stack? May be necessary
412413
// for normalizes-to.
413-
let child_mode = match pred_kind.skip_binder() {
414-
ty::PredicateKind::Clause(ty::ClauseKind::Trait(pred)) => {
415-
ChildMode::Trait(pred_kind.rebind(pred))
414+
let child_mode = match pred.kind().skip_binder() {
415+
ty::PredicateKind::Clause(ty::ClauseKind::Trait(trait_pred)) => {
416+
ChildMode::Trait(pred.kind().rebind(trait_pred))
416417
}
417-
ty::PredicateKind::Clause(ty::ClauseKind::HostEffect(pred)) => {
418-
ChildMode::Host(pred_kind.rebind(pred))
418+
ty::PredicateKind::Clause(ty::ClauseKind::HostEffect(host_pred)) => {
419+
ChildMode::Host(pred.kind().rebind(host_pred))
419420
}
420421
ty::PredicateKind::NormalizesTo(normalizes_to)
421422
if matches!(
422423
normalizes_to.alias.kind(tcx),
423424
ty::AliasTermKind::ProjectionTy | ty::AliasTermKind::ProjectionConst
424425
) =>
425426
{
426-
ChildMode::Trait(pred_kind.rebind(ty::TraitPredicate {
427+
ChildMode::Trait(pred.kind().rebind(ty::TraitPredicate {
427428
trait_ref: normalizes_to.alias.trait_ref(tcx),
428429
polarity: ty::PredicatePolarity::Positive,
429430
}))
@@ -457,10 +458,12 @@ impl<'tcx> ProofTreeVisitor<'tcx> for BestObligation<'tcx> {
457458
for nested_goal in nested_goals {
458459
trace!(nested_goal = ?(nested_goal.goal(), nested_goal.source(), nested_goal.result()));
459460

461+
let nested_pred = nested_goal.goal().predicate;
462+
460463
let make_obligation = |cause| Obligation {
461464
cause,
462465
param_env: nested_goal.goal().param_env,
463-
predicate: nested_goal.goal().predicate,
466+
predicate: nested_pred,
464467
recursion_depth: self.obligation.recursion_depth + 1,
465468
};
466469

@@ -510,28 +513,17 @@ impl<'tcx> ProofTreeVisitor<'tcx> for BestObligation<'tcx> {
510513

511514
// alias-relate may fail because the lhs or rhs can't be normalized,
512515
// and therefore is treated as rigid.
513-
if let Some(ty::PredicateKind::AliasRelate(lhs, rhs, _)) = pred_kind.no_bound_vars() {
514-
if let Some(obligation) = goal
515-
.infcx()
516-
.visit_proof_tree_at_depth(
517-
goal.goal().with(tcx, ty::ClauseKind::WellFormed(lhs.into())),
518-
goal.depth() + 1,
519-
self,
520-
)
521-
.break_value()
522-
{
523-
return ControlFlow::Break(obligation);
524-
} else if let Some(obligation) = goal
525-
.infcx()
526-
.visit_proof_tree_at_depth(
527-
goal.goal().with(tcx, ty::ClauseKind::WellFormed(rhs.into())),
528-
goal.depth() + 1,
529-
self,
530-
)
531-
.break_value()
532-
{
533-
return ControlFlow::Break(obligation);
534-
}
516+
if let Some(ty::PredicateKind::AliasRelate(lhs, rhs, _)) = pred.kind().no_bound_vars() {
517+
goal.infcx().visit_proof_tree_at_depth(
518+
goal.goal().with(tcx, ty::ClauseKind::WellFormed(lhs.into())),
519+
goal.depth() + 1,
520+
self,
521+
)?;
522+
goal.infcx().visit_proof_tree_at_depth(
523+
goal.goal().with(tcx, ty::ClauseKind::WellFormed(rhs.into())),
524+
goal.depth() + 1,
525+
self,
526+
)?;
535527
}
536528

537529
self.detect_error_in_higher_ranked_projection(goal)?;

0 commit comments

Comments
 (0)