// Tests inlining of diverging calls. // // EMIT_MIR_FOR_EACH_PANIC_STRATEGY // compile-flags: -Zinline-mir-hint-threshold=1000 #![crate_type = "lib"] // EMIT_MIR inline_diverging.f.Inline.diff pub fn f() { sleep(); } // EMIT_MIR inline_diverging.g.Inline.diff pub fn g(i: i32) -> u32 { if i > 0 { i as u32 } else { panic(); } } // EMIT_MIR inline_diverging.h.Inline.diff pub fn h() { call_twice(sleep); } #[inline(always)] pub fn call_twice R>(f: F) -> (R, R) { let a = f(); let b = f(); (a, b) } #[inline(always)] fn panic() -> ! { panic!(); } #[inline(always)] fn sleep() -> ! { loop {} }