about summary refs log tree commit diff
path: root/tests
diff options
context:
space:
mode:
authorantoyo <antoyo@users.noreply.github.com>2025-05-11 09:50:58 -0400
committerGitHub <noreply@github.com>2025-05-11 09:50:58 -0400
commitd8e2d247388923bd2d775ec75ad218ac7cb77c19 (patch)
treec385011095bc21a4cbd249fa64544e379f67c190 /tests
parent3cffea796947a808fe56994b90341f143a9c7bf1 (diff)
parentf111416e43a36a1ee062a2194eae37c39d0f0be1 (diff)
downloadrust-d8e2d247388923bd2d775ec75ad218ac7cb77c19.tar.gz
rust-d8e2d247388923bd2d775ec75ad218ac7cb77c19.zip
Merge pull request #666 from FractalFir/master
Fixed a recursive inling bug, added a test for it
Diffstat (limited to 'tests')
-rw-r--r--tests/run/always_inline.rs53
1 files changed, 53 insertions, 0 deletions
diff --git a/tests/run/always_inline.rs b/tests/run/always_inline.rs
new file mode 100644
index 00000000000..ebd741ee090
--- /dev/null
+++ b/tests/run/always_inline.rs
@@ -0,0 +1,53 @@
+// Compiler:
+//
+// Run-time:
+//   status: 0
+
+#![feature(no_core)]
+#![no_std]
+#![no_core]
+#![no_main]
+
+extern crate mini_core;
+use mini_core::*;
+
+#[inline(always)]
+fn fib(n: u8) -> u8 {
+    if n == 0 {
+        return 1;
+    }
+    if n == 1 {
+        return 1;
+    }
+    fib(n - 1) + fib(n - 2)
+}
+
+#[inline(always)]
+fn fib_b(n: u8) -> u8 {
+    if n == 0 {
+        return 1;
+    }
+    if n == 1 {
+        return 1;
+    }
+    fib_a(n - 1) + fib_a(n - 2)
+}
+
+#[inline(always)]
+fn fib_a(n: u8) -> u8 {
+    if n == 0 {
+        return 1;
+    }
+    if n == 1 {
+        return 1;
+    }
+    fib_b(n - 1) + fib_b(n - 2)
+}
+
+#[no_mangle]
+extern "C" fn main(argc: i32, _argv: *const *const u8) -> i32 {
+    if fib(2) != fib_a(2) {
+        intrinsics::abort();
+    }
+    0
+}