`JIT/Methodical/tailcall/deep_gc_d` failing with assert `dwILOffsetWalk == dwILOffsetDebugInterface` with JitStress
Config:
export DOTNET_TieredCompilation=0
export DOTNET_EnableAVX2=0
export DOTNET_JitStress=1
Example run. cc @dotnet/jit-contrib
Build Information
Build: https://dev.azure.com/dnceng-public/public/_build/results?buildId=1092416&view=results Build error leg or test failing:
Error Message
Fill the error message using step by step known issues guidance.
{
"ErrorMessage": "dwILOffsetWalk == dwILOffsetDebugInterface",
"BuildRetry": false,
"ExcludeConsoleLog": false
}
Known issue validation
Build: :mag_right: https://dev.azure.com/dnceng-public/public/_build/results?buildId=1092416
Error message validated: [dwILOffsetWalk == dwILOffsetDebugInterface]
Result validation: :white_check_mark: Known issue matched with the provided build.
Validation performed at: 7/11/2025 9:24:57 PM UTC
Report
Summary
| 24-Hour Hit Count | 7-Day Hit Count | 1-Month Count |
|---|---|---|
| 0 | 0 | 0 |
Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch See info in area-owners.md if you want to be subscribed.
This assert was added in #116031. cc @davidwrighton
Assert failure(PID 6448 [0x00001930], Thread: 9400 [0x24b8]): dwILOffsetWalk == dwILOffsetDebugInterface
CORECLR! ValidateILOffset + 0x1DF (0x00007ffa`5089f80f)
CORECLR! ValidateILOffsets + 0x70D (0x00007ffa`508a000d)
CORECLR! UnsafeJitFunctionWorker + 0x374 (0x00007ffa`509491d4)
CORECLR! UnsafeJitFunction + 0x484 (0x00007ffa`50948c94)
CORECLR! MethodDesc::JitCompileCodeLocked + 0x1EC (0x00007ffa`50a1e6cc)
CORECLR! MethodDesc::JitCompileCodeLockedEventWrapper + 0x534 (0x00007ffa`50a1ef64)
CORECLR! MethodDesc::JitCompileCode + 0x4DE (0x00007ffa`50a1e3de)
CORECLR! MethodDesc::PrepareILBasedCode + 0x50C (0x00007ffa`50a20c9c)
CORECLR! MethodDesc::PrepareCode + 0xF3 (0x00007ffa`50a20733)
CORECLR! CodeVersionManager::PublishVersionableCodeIfNecessary + 0x4CF (0x00007ffa`508915af)
File: D:\a\_work\1\s\src\coreclr\vm\debugdebugger.cpp:1394
Image: C:\h\w\A8A00938\p\corerun.exe
Mismatch in IL offsets for 00007FF9F27E9018 at IP 00007FF9F25CA35C Native Offset 220:
Debug Interface IL Offset: 0
Walk IL Offsets IL Offset: 30
IL Offset: -2, Native Offset: 0, STACK_EMPTY
IL Offset: -1, Native Offset: 68, STACK_EMPTY
IL Offset: 0, Native Offset: 82, STACK_EMPTY
IL Offset: 12, Native Offset: 146, CALL_INSTRUCTION
IL Offset: 17, Native Offset: 156,
IL Offset: 22, Native Offset: 170, CALL_INSTRUCTION
IL Offset: 27, Native Offset: 180,
IL Offset: -3, Native Offset: 184, STACK_EMPTY
IL Offset: 30, Native Offset: 220, CALL_INSTRUCTION
IL Offset: -3, Native Offset: 261, STACK_EMPTY
IL Offset: -1, Native Offset: -1,
App Exit Code: -1073740286
Expected: 100
Actual: -1073740286
END EXECUTION - FAILED
FAILED
Tagging subscribers to this area: @steveisok, @dotnet/dotnet-diag See info in area-owners.md if you want to be subscribed.
This is not a significant issue. If this is the only failure in the stress suites we're seeing, you could consider disabling the call to the validation method on the stack.
I looked briefly and it looks like the old logic considers the last range of the IL mappings to be [184, 220) while the new logic considers the last range to be [184,261). Hence the old logic finds no mapping while the new logic does.
It's quite convoluted, but I get the impression that the intention of the old code is to ignore the CALL_INSTRUCTION mapping completely and that the new code is actually implementing the intention of the old code more properly.
I will do what @davidwrighton suggested and disable the validation for now since this is failing all our jitstress runs.
I marked this as disabled-test since the validation was disabled due to this issue.