diff options
Diffstat (limited to 'tests/src/JIT/Regression/JitBlue/GitHub_23794/GitHub_23794.cs')
-rw-r--r-- | tests/src/JIT/Regression/JitBlue/GitHub_23794/GitHub_23794.cs | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/tests/src/JIT/Regression/JitBlue/GitHub_23794/GitHub_23794.cs b/tests/src/JIT/Regression/JitBlue/GitHub_23794/GitHub_23794.cs new file mode 100644 index 0000000000..bfa6fcc492 --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/GitHub_23794/GitHub_23794.cs @@ -0,0 +1,58 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +class Program +{ + [StructLayout(LayoutKind.Sequential)] + struct S + { + public uint i0; + public uint i1; + public uint i2; + public uint i3; + + public int i4; + public int i5; + } + + [StructLayout(LayoutKind.Sequential)] + struct S16 + { + public uint i0; + public uint i1; + public uint i2; + public uint i3; + } + + static int Main() + { + S s = new S(); + s.i0 = 0x12345678; + s.i1 = 0x87654321; + return Test(s); + } + + [MethodImpl(MethodImplOptions.NoInlining)] + static int Call(int r0, int r1, int r2, int r3, int r4, int r5, int r6, S16 s) + { + return (s.i0 == 0x12345678 && s.i1 == 0x87654321) ? 100 : 1; + } + + [MethodImpl(MethodImplOptions.NoInlining)] + static void Escape<T>(ref T t) + { + } + + [MethodImpl(MethodImplOptions.NoInlining)] + static int Test(S p) + { + S s = p; + Escape(ref s); + return Call(0, 1, 2, 3, 4, 5, 6, Unsafe.As<S, S16>(ref s)); + } +} |