2020-11-08 18:00:00 -06:00
|
|
|
// Tests inlining of diverging calls.
|
|
|
|
//
|
2023-06-08 02:18:34 -05:00
|
|
|
// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
|
2020-11-08 18:00:00 -06:00
|
|
|
#![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: Fn() -> R>(f: F) -> (R, R) {
|
|
|
|
let a = f();
|
|
|
|
let b = f();
|
|
|
|
(a, b)
|
|
|
|
}
|
|
|
|
|
|
|
|
#[inline(always)]
|
|
|
|
fn panic() -> ! {
|
|
|
|
panic!();
|
|
|
|
}
|
|
|
|
|
|
|
|
#[inline(always)]
|
|
|
|
fn sleep() -> ! {
|
|
|
|
loop {}
|
|
|
|
}
|