-
Notifications
You must be signed in to change notification settings - Fork 4.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
ARM32 JIT: Assertion failed '!"NYI: odd sized struct in fgMorphMultiregStructArg"' during 'Morph - Global' #61168
Comments
Tagging subscribers to this area: @JulieLeeMSFT Issue DetailsDescriptionThe following program hits a NYI in the ARM32 JIT. Reproduction Steps// Generated by Fuzzlyn v1.5 on 2021-11-03 13:28:03
// Run on Arm Linux
// Seed: 6887874265338996715
// Reduced from 122.0 KiB to 0.4 KiB in 00:02:32
// Hits JIT assert in Debug:
// Assertion failed '!"NYI: odd sized struct in fgMorphMultiregStructArg"' in 'Program:Main(Fuzzlyn.ExecutionServer.IRuntime)' during 'Morph - Global' (IL size 20)
//
// File: /__w/1/s/src/coreclr/jit/morph.cpp Line: 4382
//
public struct S0
{
public byte F0;
public sbyte F1;
public bool F2;
public byte F3;
public byte F4;
public byte F5;
public sbyte F6;
}
public class Program
{
public static S0 s_4;
public static void Main()
{
ref S0 vr0 = ref s_4;
M35(vr0);
}
public static void M35(S0 arg0)
{
}
} Expected behaviorNo assert hit Actual behaviorAssert hit Regression?No response Known WorkaroundsNo response ConfigurationNo response Other informationcc @dotnet/jit-contrib
|
Failed again in: runtime-coreclr outerloop 20220523.2 Failed test:
Error message:
|
I can take a look at this one @kunalspathak |
Note: #70043 |
Failed again in: runtime-coreclr outerloop 20220531.2 Failed test:
Error message:
|
ARM32 ABI allows passing structs in register even when their sizes are not divisible by 4. This means we sometimes need to pass 3 bytes in the last register. The JIT would not handle this when the source was an arbitrary memory location (this would require multiple loads and shifts). The fix is to just force a copy into the local stack frame for this case. Fix dotnet#61168
* JIT ARM32: Fix odd sized structs from arbitrary sources ARM32 ABI allows passing structs in register even when their sizes are not divisible by 4. This means we sometimes need to pass 3 bytes in the last register. The JIT would not handle this when the source was an arbitrary memory location (this would require multiple loads and shifts). The fix is to just force a copy into the local stack frame for this case. Fix #61168 * Reenable ABI tests Fix #68837 Fix #70042
Description
The following program hits a NYI in the ARM32 JIT.
Reproduction Steps
Expected behavior
No assert hit
Actual behavior
Assert hit
Regression?
No response
Known Workarounds
No response
Configuration
No response
Other information
cc @dotnet/jit-contrib
The text was updated successfully, but these errors were encountered: