Skip to content

Commit

Permalink
Fix NRE in bulk memmove on x86 (dotnet#102171)
Browse files Browse the repository at this point in the history
  • Loading branch information
EgorBo authored May 14, 2024
1 parent bad00cf commit a71a85a
Show file tree
Hide file tree
Showing 3 changed files with 75 additions and 6 deletions.
8 changes: 2 additions & 6 deletions src/coreclr/jit/lower.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3591,12 +3591,8 @@ void Lowering::MoveCFGCallArgs(GenTreeCall* call)
for (CallArg& arg : call->gtArgs.EarlyArgs())
{
GenTree* node = arg.GetEarlyNode();
// Non-value nodes in early args are setup nodes for late args.
if (node->IsValue())
{
assert(node->OperIsPutArg() || node->OperIsFieldList());
MoveCFGCallArg(call, node);
}
assert(node->OperIsPutArg() || node->OperIsFieldList());
MoveCFGCallArg(call, node);
}

for (CallArg& arg : call->gtArgs.LateArgs())
Expand Down
65 changes: 65 additions & 0 deletions src/tests/JIT/Regression/JitBlue/Runtime_1102138/Runtime_102138.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

using System.Runtime.CompilerServices;
using Xunit;

// Generated by Fuzzlyn v1.6 on 2024-05-12 19:09:35
// Run on X86 Windows
// Seed: 9851999836185511275
// Reduced from 93.1 KiB to 0.8 KiB in 00:03:30
// Debug: Runs successfully
// Release: Throws 'System.NullReferenceException'

public class C0
{
}

public struct S0
{
public C0 F0;
public C0 F1;
}

public struct S1
{
public C0 F1;
public S0 F2;
public C0 F3;
}

public struct S2
{
public S1 F4;
}

public struct S3
{
public S2 F0;
}

public struct S5
{
public int F0;
}

public class Runtime_102138
{
public static S3 s_10;
public static byte[] s_11;

[Fact]
public static int TestEntryPoint()
{
var vr3 = new short[][][]{new short[][]{new short[]{0}}};
var vr8 = new S5();
s_10 = M8(vr8, ref s_11, vr3);
return 100;
}

public static ref S3 M8(S5 argThis, ref byte[] arg0, short[][][] arg1)
{
arg1[0] = new short[][]{new short[]{0}};
return ref s_10;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Optimize>True</Optimize>
</PropertyGroup>
<ItemGroup>
<Compile Include="$(MSBuildProjectName).cs" />
</ItemGroup>
</Project>

0 comments on commit a71a85a

Please sign in to comment.