-
Notifications
You must be signed in to change notification settings - Fork 4.6k
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
Assertion failed 'child->OperIs(GT_AND) || child->OperIsCmpCompare()' during 'Lowering nodeinfo' #76566
Comments
Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch Issue Details// Found by Antigen
using System;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
public class TestClass
{
public struct S1
{
public struct S1_D1_F1
{
public struct S1_D2_F1
{
}
}
}
public struct S2
{
}
public struct S3
{
}
public struct S5
{
public struct S5_D1_F2
{
}
}
static int s_int_15 = 62;
bool bool_33 = true;
double double_37 = 2.03125;
int int_39 = -5;
string string_43 = "Y5JA1";
S1.S1_D1_F1.S1_D2_F1 s1_s1_d1_f1_s1_d2_f1_47 = new S1.S1_D1_F1.S1_D2_F1();
S2 s2_51 = new S2();
S5.S5_D1_F2 s5_s5_d1_f2_55 = new S5.S5_D1_F2();
[MethodImpl(MethodImplOptions.NoInlining)]
public int LeafMethod6()
{
unchecked
{
return int_39;
}
}
public S5.S5_D1_F2 Method1(out S1.S1_D1_F1.S1_D2_F1 p_s1_s1_d1_f1_s1_d2_f1_57, S2 p_s2_58, out double p_double_59, S3 p_s3_60)
{
unchecked
{
int int_67 = 62;
string string_71 = "1X";
ushort ushort_72 = 2;
S5.S5_D1_F2 s5_s5_d1_f2_87 = new S5.S5_D1_F2();
S5.S5_D1_F2 s5_s5_d1_f2_88 = s5_s5_d1_f2_87;
p_double_59 = 15/4;
switch (string_71 = 15+4+ string_43)
{
case "XCT":
{
switch (15<<4)
{
case 5:
{
break;
}
case 62:
{
break;
}
case -5:
{
break;
}
default:
{
switch (15>>4^ (s_int_15 -= int_67 <<= LeafMethod6())& int_67 + int_67& s_int_15 / 15|4)
{
case 1:
{
break;
}
case 2:
{
break;
}
case -2147483647:
{
break;
}
default:
{
break;
}
}
break;
}
}
break;
}
case "KW9":
{
break;
}
default:
{
while (bool_33&& 15!=4)
{
try
{
}
finally
{
while ((ushort_72 <<= int_39 >>= LeafMethod6())<= 15-4)
{
}
}
}
break;
}
}
return s5_s5_d1_f2_88;
}
}
public void Method0()
{
unchecked
{
S3 s3_166 = new S3();
s5_s5_d1_f2_55 = Method1(out s1_s1_d1_f1_s1_d2_f1_47, s2_51, out double_37, s3_166);
return;
}
}
public static void Main(string[] args)
{
new TestClass().Method0();
}
}
/*
--------- Test ---------
Environment:
set COMPlus_AltJitName=clrjit_universal_arm64_x64.dll
set COMPlus_AltJit=Method1
Assert failure(PID 27256 [0x00006a78], Thread: 59140 [0xe704]): Assertion failed 'child->OperIs(GT_AND) || child->OperIsCmpCompare()' in 'TestClass:Method1(byref,S2,byref,S3):S5_D1_F2:this' during 'Lowering nodeinfo' (IL size 198; hash 0x9d220244; Tier0-FullOpts)
File: D:\git\runtime\src\coreclr\jit\lowerarmarch.cpp Line: 2247
Image: D:\git\runtime\artifacts\tests\coreclr\windows.x64.Checked\tests\Core_Root\CoreRun.exe
*/
|
@dotnet/jit-contrib @a74nh |
Somehow, I cannot assign this to @a74nh, so I put it under @kunalspathak. |
For
and we fail in |
This is down to contained being quite generic, but the CompareChain being more specific in exactly what it allows. Maybe the fix is to just say if the child isn't AND or a compare, then just return false. |
Fix looks simple. Getting a patch through testing now. In addition, I was seeing another issue. With the same program, I get a segfault when I enable jit dumping. export COMPlus_JitDump=Method1
Full gdb backtrace:
I worked around the issue by:
No idea what this is doing, so I'll leave that for someone else. (does that require a new issue?) |
Fixed by #76662 |
The text was updated successfully, but these errors were encountered: