Extract a standalone JIT regression test case from a given GitHub issue and save it under the JitBlue folder. Use this when asked to create or extract a JIT regression test from an issue.
🚨 Do NOT create a test when: the issue has no reproducible code and you cannot compose a minimal repro, the issue is a duplicate of an existing JIT regression test, or the bug is in libraries/runtime rather than the JIT compiler itself.
Extract a JIT regression test case from a GitHub issue into a properly structured test under src/tests/JIT/Regression_*/.
From the GitHub issue, extract:
Runtime_99391)DOTNET_* vars needed to reproduceFor a simple test using optimized compilation without debug information, add the source file directly to:
src/tests/JIT/Regression_ro_2/Runtime_<issue_number>.cs
Regression_ro_2/Regression_ro_2.csproj recursively includes sources in its directory. Do not edit its source list or create a project for the test. Use a Runtime_<issue_number>/ subdirectory only when keeping multiple related files together.
If the test needs its own project (see Step 4), use a separate directory outside the globbed source directories:
src/tests/JIT/Regression_2/Runtime_<issue_number>/
Create a Runtime_<issue_number>.cs file following these conventions:
Example:
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
using System;
using System.Runtime.CompilerServices;
using Xunit;
public class Runtime_<issue_number>
{
[Fact]
public static void TestEntryPoint()
{
// Test code that exercises the bug
// Use Assert.Equal, Assert.True, etc. for validation
}
}
Runtime_<issue_number>)[Fact] attribute, named TestEntryPoint()[MethodImpl(MethodImplOptions.NoInlining)] when preventing inlining is needed to reproduce// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
namespace Runtime_99391;
using System;
using System.Runtime.CompilerServices;
using System.Numerics;
using Xunit;
public class Runtime_99391
{
[Fact]
public static void TestEntryPoint()
{
Vector2 result2a = Vector2.Normalize(Value2);
Assert.Equal(new Vector2(0, 1), result2a);
}
private static Vector2 Value2
{
[MethodImpl(MethodImplOptions.NoInlining)]
get => new Vector2(0, 2);
}
}
A custom .csproj file is only required when:
DOTNET_JitStressModeNames)Otherwise, the source glob in Regression_ro_2.csproj includes the test automatically. Keep custom projects and their sources under src/tests/JIT/Regression_2/Runtime_<issue_number>/. Regression_2/Regression_2.csproj discovers those projects recursively without compiling their sources directly. Do not place them in source-glob directories such as src/tests/JIT/Regression_ro_2/, where they would also be compiled with the runner's settings.
If a custom .csproj file is needed, it should be located next to the test source file with the following name: Runtime_<issue_number>.csproj. Example:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Optimize>True</Optimize>
<DebugType>None</DebugType>
<!-- Needed for CLRTestEnvironmentVariable -->
<RequiresProcessIsolation>true</RequiresProcessIsolation>
</PropertyGroup>
<ItemGroup>
<Compile Include="$(MSBuildProjectName).cs" />
<CLRTestEnvironmentVariable Include="DOTNET_TieredCompilation" Value="0" />
</ItemGroup>
</Project>
.cs file under src/tests/JIT/Regression_ro_2/.src/tests/JIT/Regression_ro_2/ for simple tests, or src/tests/JIT/Regression_2/Runtime_* for tests with custom projects.