Remap RPITIT substs properly
This commit is contained in:
parent
a2037e3012
commit
32dae918a1
2 changed files with 31 additions and 0 deletions
|
@ -2260,6 +2260,13 @@ fn confirm_impl_trait_in_trait_candidate<'tcx>(
|
||||||
// since `data.substs` are the impl substs.
|
// since `data.substs` are the impl substs.
|
||||||
let impl_fn_substs =
|
let impl_fn_substs =
|
||||||
obligation.predicate.substs.rebase_onto(tcx, tcx.parent(trait_fn_def_id), data.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) {
|
if !check_substs_compatible(tcx, &leaf_def.item, impl_fn_substs) {
|
||||||
let err = tcx.ty_error_with_message(
|
let err = tcx.ty_error_with_message(
|
||||||
|
|
|
@ -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();
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue