Assert failure(PID 14856 [0x00003a08], Thread: 2656 [0x0a60]): !CREATE_CHECK_STRING(pMT && pMT->Validate())
CORECLR! Object::ValidateInner + 0x14B (0x7436d48b)
CORECLR! Object::Validate + 0x98 (0x7436d308)
CORECLR! WKS::GCHeap::Promote + 0x8F (0x746c0c1f)
CORECLR! GcEnumObject + 0x57 (0x744866c7)
CORECLR! EnumGcRefsX86 + 0xC70 (0x74298a50)
CORECLR! EECodeManager::EnumGcRefs + 0x114 (0x74297d94)
CORECLR! GcStackCrawlCallBack + 0x156 (0x74486936)
CORECLR! Thread::MakeStackwalkerCallback + 0x48 (0x743ad355)
CORECLR! Thread::StackWalkFramesEx + 0x16C (0x743ae72f)
CORECLR! Thread::StackWalkFrames + 0x15D (0x743ae53f)
File: E:\dotnet004\runtime\src\coreclr\vm\object.cpp:553
Image: E:\dotnet004\runtime\artifacts\tests\coreclr\windows.x86.Checked\Tests\Core_Root\corerun.exe
DOTNET_GCStress=0xC
DOTNET_JitStress=2
DOTNET_ReadyToRun=0
DOTNET_TieredCompilation=0
It may be necessary to run the test a few times (3-5 times, maybe more) before seeing the failure. I'd run it in a loop.
Perhaps some uninitialized data is involved, thus nondeterminism.
G_M31285_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IGpushebpmovebp,esppushedipushesipushebxsubesp,160mov gword ptr [ebp-0x9C],ecx ; GC ptr vars +{V00}mov bword ptr [ebp-0xA0],edx ; GC ptr vars +{V01}moveax, gword ptr [ebp+0x08] ; gcrRegs +[eax]vmovupsxmm0, xmmword ptr [ebp+0x24] ;; size=32 bbWeight=1 PerfScore 10.50G_M31285_IG02: ; bbWeight=1, gcVars=0000000000000900 {V00 V01}, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, gcvars, byref vxorps xmm3,xmm3,xmm3 ;; size=4 bbWeight=1 PerfScore 0.33G_M31285_IG03: ; bbWeight=1, extendvmovups xmmword ptr [ebp-0x50],xmm3 ;; size=5 bbWeight=1 PerfScore 1.00G_M31285_IG04: ; bbWeight=1, extendmov gword ptr [ebp+0x08],eax ;; size=3 bbWeight=1 PerfScore 1.00G_M31285_IG05: ; bbWeight=1, extendmovedx, gword ptr [eax+0x08] ; gcrRegs +[edx] ;; size=3 bbWeight=1 PerfScore 2.00G_M31285_IG06: ; bbWeight=1, extendmov gword ptr [ebp-0xA4],edx ; GC ptr vars +{V08} ;; size=6 bbWeight=1 PerfScore 1.00G_M31285_IG07: ; bbWeight=1, extendxorecx,ecx ;; size=2 bbWeight=1 PerfScore 0.25G_M31285_IG08: ; bbWeight=1, extendcmp dword ptr [edx+0x04],0 ;; size=4 bbWeight=1 PerfScore 3.00G_M31285_IG09: ; bbWeight=1, extendjle G_M31285_IG175 ;; size=6 bbWeight=1 PerfScore 1.00G_M31285_IG10: ; bbWeight=4, gcVars=0000000000000940 {V00 V01 V08}, gcrefRegs=00000004 {edx}, byrefRegs=00000000 {}, gcvars, byref ; gcrRegs -[eax]mov dword ptr [ebp-0x10],ecx ;; size=3 bbWeight=4 PerfScore 4.00G_M31285_IG11: ; bbWeight=4, extendmovebx, gword ptr [edx+4*ecx+0x08] ; gcrRegs +[ebx] ;; size=4 bbWeight=4 PerfScore 8.00G_M31285_IG12: ; bbWeight=4, extend vmovsd xmm4, qword ptr [ebx+0x04] ;; size=5 bbWeight=4 PerfScore 16.00G_M31285_IG13: ; bbWeight=4, extend vinsertps xmm4,xmm4, dword ptr [ebx+0x0C],40 ;; size=7 bbWeight=4 PerfScore 12.00G_M31285_IG14: ; bbWeight=4, extend vsubps xmm4,xmm4,xmm0 ;; size=4 bbWeight=4 PerfScore 12.00G_M31285_IG15: ; bbWeight=4, extend vdpps xmm5,xmm4,xmm4,127 ;; size=6 bbWeight=4 PerfScore 48.00G_M31285_IG16: ; bbWeight=4, extend vcvtss2sd xmm5,xmm5,xmm5 ;; size=4 bbWeight=4 PerfScore 16.00G_M31285_IG17: ; bbWeight=4, extend vsqrtsd xmm5,xmm5,xmm5 ;; size=4 bbWeight=4 PerfScore 48.00G_M31285_IG18: ; bbWeight=4, extend vmovsd qword ptr [ebp-0x98],xmm5 ;; size=8 bbWeight=4 PerfScore 4.00G_M31285_IG19: ; bbWeight=4, extend vcvtsd2ss xmm6,xmm6,xmm5 ;; size=4 bbWeight=4 PerfScore 16.00G_M31285_IG20: ; bbWeight=4, extend vxorps xmm7,xmm7,xmm7 ;; size=4 bbWeight=4 PerfScore 1.33G_M31285_IG21: ; bbWeight=4, extend vucomiss xmm6,xmm7 ;; size=4 bbWeight=4 PerfScore 8.00G_M31285_IG22: ; bbWeight=4, isz, extendjp SHORT G_M31285_IG24 ;; size=2 bbWeight=4 PerfScore 4.00G_M31285_IG23: ; bbWeight=4, isz, extendje SHORT G_M31285_IG27 ;; size=2 bbWeight=4 PerfScore 4.00G_M31285_IG24: ; bbWeight=2, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref ; gcrRegs -[edx]vmovssxmm7, dword ptr [@RWD00] ;; size=8 bbWeight=2 PerfScore 6.00G_M31285_IG25: ; bbWeight=2, extend vdivss xmm6,xmm7,xmm6 ;; size=4 bbWeight=2 PerfScore 20.00G_M31285_IG26: ; bbWeight=2, isz, extendjmp SHORT G_M31285_IG28 ;; size=2 bbWeight=2 PerfScore 4.00G_M31285_IG27: ; bbWeight=2, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byrefvmovssxmm6, dword ptr [@RWD04] ;; size=8 bbWeight=2 PerfScore 6.00G_M31285_IG28: ; bbWeight=4, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref vcvtss2sd xmm6,xmm6,xmm6 ;; size=4 bbWeight=4 PerfScore 16.00G_M31285_IG29: ; bbWeight=4, extend vcvtsd2ss xmm6,xmm6,xmm6 ;; size=4 bbWeight=4 PerfScore 16.00G_M31285_IG30: ; bbWeight=4, extendvbroadcastssxmm6,xmm6 ;; size=5 bbWeight=4 PerfScore 4.00G_M31285_IG31: ; bbWeight=4, extend vmulps xmm4,xmm6,xmm4 ;; size=4 bbWeight=4 PerfScore 12.00G_M31285_IG32: ; bbWeight=4, extendvmovups xmmword ptr [ebp-0x80],xmm4 ;; size=5 bbWeight=4 PerfScore 4.00G_M31285_IG33: ; bbWeight=4, extendxoreax,eax ;; size=2 bbWeight=4 PerfScore 1.00G_M31285_IG34: ; bbWeight=4, extendleaedi, bword ptr [ebp-0x28] ; byrRegs +[edi] ;; size=3 bbWeight=4 PerfScore 2.00G_M31285_IG35: ; bbWeight=4, extendmov dword ptr [edi],eax ;; size=2 bbWeight=4 PerfScore 4.00G_M31285_IG36: ; bbWeight=4, extendmovesi,20 ;; size=5 bbWeight=4 PerfScore 1.00G_M31285_IG37: ; bbWeight=4, gcrefRegs=00000008 {ebx}, byrefRegs=00000080 {edi}, byrefmov dword ptr [edi+esi],eax ;; size=3 bbWeight=4 PerfScore 4.00G_M31285_IG38: ; bbWeight=4, extendsubesi,4 ;; size=3 bbWeight=4 PerfScore 1.00G_M31285_IG39: ; bbWeight=4, isz, extendjne SHORT G_M31285_IG37 ;; size=2 bbWeight=4 PerfScore 4.00G_M31285_IG40: ; bbWeight=4, extendvmovups xmmword ptr [ebp+0x24],xmm0 ;; size=5 bbWeight=4 PerfScore 4.00G_M31285_IG41: ; bbWeight=4, extend vmovsd qword ptr [ebp-0x28],xmm0 <--- crash here on reporting untracked local to GC and seeing bad objectSince this is in the middle of SIMD instruction sequence, I wonder if this may be related to recent vectorizing optimizations for struct copying/initialization.
To repro run
runtime\artifacts\tests\coreclr\windows.x86.Checked\JIT\Performance\JIT.performance\JIT.performance.cmdwithremoving
DOTNET_JitStress=2changes the codegen considerably and makes the failure disappear, so it looks like it might be specific to JitStress.It may be necessary to run the test a few times (3-5 times, maybe more) before seeing the failure. I'd run it in a loop.
Perhaps some uninitialized data is involved, thus nondeterminism.
The actual failing instruction is:
Since this is in the middle of SIMD instruction sequence, I wonder if this may be related to recent vectorizing optimizations for struct copying/initialization.
Build Information
Build: https://dev.azure.com/dnceng-public/public/_build/results?buildId=685688
Build error leg or test failing: JIT.performance.0.1
Pull request: #102415
Error Message
Fill the error message using step by step known issues guidance.
{ "ErrorMessage": "Item 'JIT.performance' did not finish running", "ErrorPattern": "", "BuildRetry": false, "ExcludeConsoleLog": false }Known issue validation
Build: 🔎https://dev.azure.com/dnceng-public/public/_build/results?buildId=685688
Error message validated:
[Item 'JIT.performance' did not finish running]Result validation: ✅ Known issue matched with the provided build.
Validation performed at: 5/26/2024 12:59:42 AM UTC
Report
Summary