diff options
| author | Michael Goulet <michael@errs.io> | 2023-07-03 22:35:28 +0000 |
|---|---|---|
| committer | Michael Goulet <michael@errs.io> | 2023-07-06 16:50:12 +0000 |
| commit | 018c3e2c092d73d18169729c4dde92c29924d9d8 (patch) | |
| tree | 77ae878065bc8298c6e569301fbe909cdb4d2759 | |
| parent | 52f738499534a2d048a418c37cf4639b8b235bdb (diff) | |
| download | rust-018c3e2c092d73d18169729c4dde92c29924d9d8.tar.gz rust-018c3e2c092d73d18169729c4dde92c29924d9d8.zip | |
Coercion doesn't need binders either
| -rw-r--r-- | compiler/rustc_hir_typeck/src/coercion.rs | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/compiler/rustc_hir_typeck/src/coercion.rs b/compiler/rustc_hir_typeck/src/coercion.rs index 29c0646a86e..108e20ed145 100644 --- a/compiler/rustc_hir_typeck/src/coercion.rs +++ b/compiler/rustc_hir_typeck/src/coercion.rs @@ -632,9 +632,8 @@ impl<'f, 'tcx> Coerce<'f, 'tcx> { while !queue.is_empty() { let obligation = queue.remove(0); debug!("coerce_unsized resolve step: {:?}", obligation); - let bound_predicate = obligation.predicate.kind(); - let trait_pred = match bound_predicate.skip_binder() { - ty::PredicateKind::Clause(ty::ClauseKind::Trait(trait_pred)) + let trait_pred = match obligation.predicate.kind().no_bound_vars() { + Some(ty::PredicateKind::Clause(ty::ClauseKind::Trait(trait_pred))) if traits.contains(&trait_pred.def_id()) => { if unsize_did == trait_pred.def_id() { @@ -652,20 +651,20 @@ impl<'f, 'tcx> Coerce<'f, 'tcx> { has_unsized_tuple_coercion = true; } } - bound_predicate.rebind(trait_pred) + trait_pred } _ => { coercion.obligations.push(obligation); continue; } }; - match selcx.poly_select(&obligation.with(selcx.tcx(), trait_pred)) { + match selcx.select(&obligation.with(selcx.tcx(), trait_pred)) { // Uncertain or unimplemented. Ok(None) => { if trait_pred.def_id() == unsize_did { let trait_pred = self.resolve_vars_if_possible(trait_pred); - let self_ty = trait_pred.skip_binder().self_ty(); - let unsize_ty = trait_pred.skip_binder().trait_ref.substs[1].expect_ty(); + let self_ty = trait_pred.self_ty(); + let unsize_ty = trait_pred.trait_ref.substs[1].expect_ty(); debug!("coerce_unsized: ambiguous unsize case for {:?}", trait_pred); match (self_ty.kind(), unsize_ty.kind()) { (&ty::Infer(ty::TyVar(v)), ty::Dynamic(..)) |
