Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-ty/src/dyn_compatibility.rs')
| -rw-r--r-- | crates/hir-ty/src/dyn_compatibility.rs | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/crates/hir-ty/src/dyn_compatibility.rs b/crates/hir-ty/src/dyn_compatibility.rs index 34858212cb..9ee39b3abe 100644 --- a/crates/hir-ty/src/dyn_compatibility.rs +++ b/crates/hir-ty/src/dyn_compatibility.rs @@ -395,7 +395,7 @@ where } fn receiver_is_dispatchable<'db>( - db: &dyn HirDatabase, + db: &'db dyn HirDatabase, trait_: TraitId, func: FunctionId, sig: &EarlyBinder<'db, Binder<'db, rustc_type_ir::FnSig<DbInterner<'db>>>>, @@ -417,9 +417,7 @@ fn receiver_is_dispatchable<'db>( return true; } - let Some(&receiver_ty) = sig.inputs().skip_binder().first() else { - return false; - }; + let receiver_ty = interner.liberate_late_bound_regions(func.into(), sig.input(0)); let lang_items = interner.lang_items(); let traits = (lang_items.Unsize, lang_items.DispatchFromDyn); @@ -451,7 +449,7 @@ fn receiver_is_dispatchable<'db>( TraitRef::new(interner, unsize_did.into(), [self_param_ty, unsized_self_ty]); // U: Trait<Arg1, ..., ArgN> - let args = GenericArgs::for_item(interner, trait_.into(), |index, kind, _| { + let args = GenericArgs::for_item(interner, trait_.into(), |index, kind, _, _| { if index == 0 { unsized_self_ty.into() } else { mk_param(interner, index, kind) } }); let trait_predicate = TraitRef::new_from_args(interner, trait_.into(), args); @@ -487,9 +485,10 @@ fn receiver_for_self_ty<'db>( receiver_ty: Ty<'db>, self_ty: Ty<'db>, ) -> Ty<'db> { - let args = GenericArgs::for_item(interner, SolverDefId::FunctionId(func), |index, kind, _| { - if index == 0 { self_ty.into() } else { mk_param(interner, index, kind) } - }); + let args = + GenericArgs::for_item(interner, SolverDefId::FunctionId(func), |index, kind, _, _| { + if index == 0 { self_ty.into() } else { mk_param(interner, index, kind) } + }); EarlyBinder::bind(receiver_ty).instantiate(interner, args).skip_norm_wip() } |