diff options
| author | antoyo <antoyo@users.noreply.github.com> | 2025-05-11 09:50:58 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-05-11 09:50:58 -0400 |
| commit | d8e2d247388923bd2d775ec75ad218ac7cb77c19 (patch) | |
| tree | c385011095bc21a4cbd249fa64544e379f67c190 /tests | |
| parent | 3cffea796947a808fe56994b90341f143a9c7bf1 (diff) | |
| parent | f111416e43a36a1ee062a2194eae37c39d0f0be1 (diff) | |
| download | rust-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.rs | 53 |
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 +} |
