diff options
Diffstat (limited to 'tests/src/JIT/Directed/forceinlining/Recursion.cs')
-rw-r--r-- | tests/src/JIT/Directed/forceinlining/Recursion.cs | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/tests/src/JIT/Directed/forceinlining/Recursion.cs b/tests/src/JIT/Directed/forceinlining/Recursion.cs new file mode 100644 index 0000000000..e624a5d7c6 --- /dev/null +++ b/tests/src/JIT/Directed/forceinlining/Recursion.cs @@ -0,0 +1,45 @@ +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +using System; +using System.Runtime.CompilerServices; +using System.Diagnostics; + +public class P +{ + public static int Main() + { + bool pass = true; + + pass &= (F1(27) == 196418); + pass &= F3(375); + + if (pass) + { + Console.WriteLine("PASS"); + return 100; + } + + Console.WriteLine("FAIL"); + return -1; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static int F1(int k) + { + if (k < 3) return 1; + return F1(k - 1) + F1(k - 2); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool F2(int k) + { + return (k == 0) || !F3(k - 1); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool F3(int k) + { + return (k == 1) || !F2(k - 1); + } +} |