diff options
| author | bors <bors@rust-lang.org> | 2022-08-30 08:29:42 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2022-08-30 08:29:42 +0000 |
| commit | 0631ea5d73f4a3199c776687b12c20c50a91f0d2 (patch) | |
| tree | 59e751484047303e15b3c32cf0b545eac02e59af /compiler/rustc_trait_selection/src | |
| parent | a0d07093f80a0206f42d3dbada66212eda52b694 (diff) | |
| parent | ec95a929044afad3cfad99231378a27870a9e28c (diff) | |
| download | rust-0631ea5d73f4a3199c776687b12c20c50a91f0d2.tar.gz rust-0631ea5d73f4a3199c776687b12c20c50a91f0d2.zip | |
Auto merge of #101183 - Dylan-DPC:rollup-6kewixv, r=Dylan-DPC
Rollup of 9 pull requests
Successful merges:
- #95376 (Add `vec::Drain{,Filter}::keep_rest`)
- #100092 (Fall back when relating two opaques by substs in MIR typeck)
- #101019 (Suggest returning closure as `impl Fn`)
- #101022 (Erase late bound regions before comparing types in `suggest_dereferences`)
- #101101 (interpret: make read-pointer-as-bytes a CTFE-only error with extra information)
- #101123 (Remove `register_attr` feature)
- #101175 (Don't --bless in pre-push hook)
- #101176 (rustdoc: remove unused CSS selectors for `.table-display`)
- #101180 (Add another MaybeUninit array test with const)
Failed merges:
r? `@ghost`
`@rustbot` modify labels: rollup
Diffstat (limited to 'compiler/rustc_trait_selection/src')
| -rw-r--r-- | compiler/rustc_trait_selection/src/traits/error_reporting/suggestions.rs | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/compiler/rustc_trait_selection/src/traits/error_reporting/suggestions.rs b/compiler/rustc_trait_selection/src/traits/error_reporting/suggestions.rs index a93f9ec0397..54f01577c5e 100644 --- a/compiler/rustc_trait_selection/src/traits/error_reporting/suggestions.rs +++ b/compiler/rustc_trait_selection/src/traits/error_reporting/suggestions.rs @@ -690,13 +690,17 @@ impl<'a, 'tcx> InferCtxtExt<'tcx> for InferCtxt<'a, 'tcx> { real_trait_pred = parent_trait_pred; } - // Skipping binder here, remapping below - let real_ty = real_trait_pred.self_ty().skip_binder(); - if self.can_eq(obligation.param_env, real_ty, arg_ty).is_err() { + 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) + .is_err() + { continue; } - if let ty::Ref(region, base_ty, mutbl) = *real_ty.kind() { + if let ty::Ref(region, base_ty, mutbl) = *real_ty.skip_binder().kind() { let mut autoderef = Autoderef::new( self, obligation.param_env, |
