#![feature(specialization)]

// Regression test for a specialization-related ICE (#39448).

trait A: Sized {
    fn foo(self, _: Self) -> Self {
        self
    }
}

impl A for u8 {}
impl A for u16 {}

impl FromA<u8> for u16 {
    fn from(x: u8) -> u16 {
        x as u16
    }
}

trait FromA<T> {
    fn from(T) -> Self;
}

impl<T: A, U: A + FromA<T>> FromA<T> for U {
    default fn from(x: T) -> Self {
        ToA::to(x)
    }
}

trait ToA<T> {
    fn to(self) -> T;
}

impl<T, U> ToA<U> for T
where
    U: FromA<T>,
{
    fn to(self) -> U {
        U::from(self)
    }
}

#[allow(dead_code)]
fn foo<T: A, U: A>(x: T, y: U) -> U {
    x.foo(y.to()).to() //~ ERROR overflow evaluating the requirement
}

fn main() {
    let z = foo(8u8, 1u16);
}
