From 5b3626ef3a431d68a458f99535e8e5fc52432def Mon Sep 17 00:00:00 2001 From: Pat Gavlin Date: Wed, 19 Apr 2017 13:38:05 -0700 Subject: [PATCH] Add a regression test. Commit migrated from https://github.com/dotnet/coreclr/commit/27ba7c94b06f01d4702c0f54c196cc2028af3b75 --- .../JitBlue/GitHub_10940/GitHub_10940.cs | 58 ++++++++++++++++++++++ .../JitBlue/GitHub_10940/GitHub_10940.csproj | 42 ++++++++++++++++ 2 files changed, 100 insertions(+) create mode 100644 src/coreclr/tests/src/JIT/Regression/JitBlue/GitHub_10940/GitHub_10940.cs create mode 100644 src/coreclr/tests/src/JIT/Regression/JitBlue/GitHub_10940/GitHub_10940.csproj diff --git a/src/coreclr/tests/src/JIT/Regression/JitBlue/GitHub_10940/GitHub_10940.cs b/src/coreclr/tests/src/JIT/Regression/JitBlue/GitHub_10940/GitHub_10940.cs new file mode 100644 index 0000000..2a72bd8 --- /dev/null +++ b/src/coreclr/tests/src/JIT/Regression/JitBlue/GitHub_10940/GitHub_10940.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.Runtime.CompilerServices; + +// This test checks whether or not the JIT properly spills side effects in the importer when dumping multi-reg values +// to temps. If the JIT does not do so correctly, the calls to GetString() and GetDecimal() will be reordered and the +// test will fail with exit code 0; if it does do so correctly, the calls will not be reordered and the test will +// pass. + +class Test +{ + abstract class ValueSourceBase + { + public abstract string GetString(); + public abstract decimal GetDecimal(); + public abstract int GetReturnValue(); + } + + class ValueSource : ValueSourceBase + { + int rv; + + public override string GetString() + { + rv = 0; + return ""; + } + + public override decimal GetDecimal() + { + rv = 100; + return 0; + } + + public override int GetReturnValue() + { + return rv; + } + } + + Test(string s, decimal d) + { + } + + [MethodImpl(MethodImplOptions.NoInlining)] + static int M(ValueSourceBase vs) + { + new Test(vs.GetString(), vs.GetDecimal()); + return vs.GetReturnValue(); + } + + static int Main() + { + return M(new ValueSource()); + } +} diff --git a/src/coreclr/tests/src/JIT/Regression/JitBlue/GitHub_10940/GitHub_10940.csproj b/src/coreclr/tests/src/JIT/Regression/JitBlue/GitHub_10940/GitHub_10940.csproj new file mode 100644 index 0000000..ef69a3b --- /dev/null +++ b/src/coreclr/tests/src/JIT/Regression/JitBlue/GitHub_10940/GitHub_10940.csproj @@ -0,0 +1,42 @@ + + + + + Debug + AnyCPU + $(MSBuildProjectName) + 2.0 + {95DFC527-4DC1-495E-97D7-E94EE1F7140D} + Exe + Properties + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages + ..\..\ + + 7a9bfb7d + + + + + + + + + False + + + + + True + + + + + + + + + + + -- 2.7.4