]> git.proxmox.com Git - rustc.git/blob - tests/mir-opt/inline/inline_diverging.rs
New upstream version 1.75.0+dfsg1
[rustc.git] / tests / mir-opt / inline / inline_diverging.rs
1 // Tests inlining of diverging calls.
2 //
3 // EMIT_MIR_FOR_EACH_PANIC_STRATEGY
4 // compile-flags: -Zinline-mir-hint-threshold=1000
5 #![crate_type = "lib"]
6
7 // EMIT_MIR inline_diverging.f.Inline.diff
8 pub fn f() {
9 // CHECK-LABEL: fn f(
10 // CHECK: (inlined sleep)
11 sleep();
12 }
13
14 // EMIT_MIR inline_diverging.g.Inline.diff
15 pub fn g(i: i32) -> u32 {
16 if i > 0 {
17 i as u32
18 } else {
19 // CHECK-LABEL: fn g(
20 // CHECK: (inlined panic)
21 panic();
22 }
23 }
24
25 // EMIT_MIR inline_diverging.h.Inline.diff
26 pub fn h() {
27 // CHECK-LABEL: fn h(
28 // CHECK: (inlined call_twice::<!, fn() -> ! {sleep}>)
29 // CHECK-NOT: inlined
30 call_twice(sleep);
31 }
32
33 #[inline(always)]
34 pub fn call_twice<R, F: Fn() -> R>(f: F) -> (R, R) {
35 let a = f();
36 let b = f();
37 (a, b)
38 }
39
40 #[inline(always)]
41 fn panic() -> ! {
42 panic!();
43 }
44
45 #[inline(always)]
46 fn sleep() -> ! {
47 loop {}
48 }