summaryrefslogtreecommitdiffstats
path: root/src/test/mir-opt/inline/inline_diverging.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/mir-opt/inline/inline_diverging.rs')
-rw-r--r--src/test/mir-opt/inline/inline_diverging.rs40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/test/mir-opt/inline/inline_diverging.rs b/src/test/mir-opt/inline/inline_diverging.rs
new file mode 100644
index 000000000..ae6f814c2
--- /dev/null
+++ b/src/test/mir-opt/inline/inline_diverging.rs
@@ -0,0 +1,40 @@
+// Tests inlining of diverging calls.
+//
+// ignore-wasm32-bare compiled with panic=abort by default
+#![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 {}
+}