Remap RPITIT substs properly

This commit is contained in:
Michael Goulet 2022-11-01 01:36:50 +00:00
parent a2037e3012
commit 32dae918a1
2 changed files with 31 additions and 0 deletions

View File

@ -2260,6 +2260,13 @@ fn confirm_impl_trait_in_trait_candidate<'tcx>(
// since `data.substs` are the impl substs.
let impl_fn_substs =
obligation.predicate.substs.rebase_onto(tcx, tcx.parent(trait_fn_def_id), data.substs);
let impl_fn_substs = translate_substs(
selcx.infcx(),
obligation.param_env,
data.impl_def_id,
impl_fn_substs,
leaf_def.defining_node,
);
if !check_substs_compatible(tcx, &leaf_def.item, impl_fn_substs) {
let err = tcx.ty_error_with_message(

View File

@ -0,0 +1,24 @@
// check-pass
#![feature(specialization)]
#![feature(return_position_impl_trait_in_trait)]
#![allow(incomplete_features)]
trait Foo {
fn bar(&self) -> impl Sized;
}
impl<U> Foo for U
where
U: Copy,
{
fn bar(&self) -> U {
*self
}
}
impl Foo for i32 {}
fn main() {
let _: i32 = 1i32.bar();
}