| // skip-filecheck | |
| // 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. | |
| // EMIT_MIR inline_cycle_generic.main.Inline.diff | |
| fn main() { | |
| <C as Call>::call(); | |
| } | |
| pub trait Call { | |
| fn call(); | |
| } | |
| pub struct A; | |
| pub struct B<T>(T); | |
| pub struct C; | |
| impl Call for A { | |
| #[inline] | |
| fn call() { | |
| <B<C> as Call>::call() | |
| } | |
| } | |
| impl<T: Call> Call for B<T> { | |
| #[inline] | |
| fn call() { | |
| <T as Call>::call() | |
| } | |
| } | |
| impl Call for C { | |
| #[inline] | |
| fn call() { | |
| <B<A> as Call>::call() | |
| } | |
| } |