Skip to content

Commit

Permalink
Remap RPITIT substs properly
Browse files Browse the repository at this point in the history
  • Loading branch information
compiler-errors committed Nov 1, 2022
1 parent a2037e3 commit 32dae91
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 0 deletions.
7 changes: 7 additions & 0 deletions compiler/rustc_trait_selection/src/traits/project.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down
24 changes: 24 additions & 0 deletions src/test/ui/impl-trait/in-trait/specialization-substs-remap.rs
Original file line number Diff line number Diff line change
@@ -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();
}

0 comments on commit 32dae91

Please sign in to comment.