Rollup merge of #113985 - compiler-errors:issue-113951, r=estebank
Use erased self type when autoderefing for trait error suggestion Let's not try to pass something from `skip_binder` into autoderef. Fixes #113951
This commit is contained in:
commit
15c723433f
3 changed files with 52 additions and 7 deletions
|
@ -777,18 +777,14 @@ impl<'tcx> TypeErrCtxtExt<'tcx> for TypeErrCtxt<'_, 'tcx> {
|
|||
real_trait_pred = parent_trait_pred;
|
||||
}
|
||||
|
||||
let real_ty = real_trait_pred.self_ty();
|
||||
// We `erase_late_bound_regions` here because `make_subregion` does not handle
|
||||
// `ReLateBound`, and we don't particularly care about the regions.
|
||||
if !self.can_eq(
|
||||
obligation.param_env,
|
||||
self.tcx.erase_late_bound_regions(real_ty),
|
||||
arg_ty,
|
||||
) {
|
||||
let real_ty = self.tcx.erase_late_bound_regions(real_trait_pred.self_ty());
|
||||
if !self.can_eq(obligation.param_env, real_ty, arg_ty) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if let ty::Ref(region, base_ty, mutbl) = *real_ty.skip_binder().kind() {
|
||||
if let ty::Ref(region, base_ty, mutbl) = *real_ty.kind() {
|
||||
let autoderef = (self.autoderef_steps)(base_ty);
|
||||
if let Some(steps) =
|
||||
autoderef.into_iter().enumerate().find_map(|(steps, (ty, obligations))| {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue