// Regression test for #77653 // When monomorphizing `f` we need to prove `dyn Derived<()>: Base<()>`. This // requires us to normalize the `Base<<() as Proj>::S>` to `Base<()>` when // comparing the supertrait `Derived<()>` to the expected trait. //@ build-pass trait Proj { type S; } impl Proj for () { type S = (); } impl Proj for i32 { type S = i32; } trait Base { fn is_base(&self); } trait Derived: Base + Base<()> { fn is_derived(&self); } fn f(obj: &dyn Derived

) { obj.is_derived(); Base::::is_base(obj); Base::<()>::is_base(obj); } fn main() { let x: fn(_) = f::<()>; let x: fn(_) = f::; }