Auto merge of #123471 - compiler-errors:match_projection_projections, r=oli-obk

Check def id before calling `match_projection_projections`

When I "inlined" `assemble_candidates_from_predicates` into `for_each_item_bound` in #120584, I forgot to copy over the check that actually made sure the def id of the candidate was equal to the def id of the obligation. This means that we normalize goal a bit too often even if it's not productive to do so.

This PR adds that def id check back.
Fixes #123448
This commit is contained in:
bors 2024-04-06 06:36:42 +00:00
commit 8d490e33ad
2 changed files with 41 additions and 0 deletions

View file

@ -793,6 +793,9 @@ fn assemble_candidates_from_trait_def<'cx, 'tcx>(
let Some(clause) = clause.as_projection_clause() else {
return ControlFlow::Continue(());
};
if clause.projection_def_id() != obligation.predicate.def_id {
return ControlFlow::Continue(());
}
let is_match =
selcx.infcx.probe(|_| selcx.match_projection_projections(obligation, clause, true));