// skip-filecheck
//@ compile-flags: -C debuginfo=full
// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// Check that inliner handles various forms of recursion and doesn't fall into
// an infinite inlining cycle. The particular outcome of inlining is not
// crucial otherwise.
//
// Regression test for issue #78573.

fn main() {
    one();
    two();
}

// EMIT_MIR inline_cycle.one.Inline.diff
fn one() {
    <C as Call>::call();
}

pub trait Call {
    fn call();
}

pub struct A<T>(T);
pub struct B<T>(T);
pub struct C;

impl<T: Call> Call for A<T> {
    #[inline]
    fn call() {
        <B<T> as Call>::call()
    }
}

impl<T: Call> Call for B<T> {
    #[inline]
    fn call() {
        <T as Call>::call()
    }
}

impl Call for C {
    #[inline]
    fn call() {
        A::<C>::call()
    }
}

// EMIT_MIR inline_cycle.two.Inline.diff
fn two() {
    call(f);
}

#[inline]
fn call<F: FnOnce()>(f: F) {
    f();
}

#[inline]
fn f() {
    call(f);
}
