-
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
Assert failure: Compiler optimization assumption invalid: FAILED: pMgr != 0 #70259
Comments
Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch Issue DetailsPipeline: runtime-coreclr libraries-jitstress
Looks like a VSD assert. @dotnet/jit-contrib JIT issue?
|
This looks like JIT stress issue. JIT stress converted delegate call to tailcall. This conversion is not valid when the delegate points to virtual interface method. |
@jakobbotsch Related to #69941? #70033? |
Probably #70033, though it is curious that this seemingly used to work. Maybe something rotted in the period that the JIT helper was not being used. |
What exactly do you mean by virtual interface method here? Do you mean any call that may go through VSD? |
Here is what is happening based on the crash dump:
These delegates pointing to VSD stubs are very rare. It is quite possible that it was broken for a long time and we just got lucky that the JIT stress did not hit it before. |
I see, thanks for the example. In practice does this mean that tail prefixed delegate calls cannot be done through the old mechanism? |
Right. It may be possible to fix up the x86 |
The other half of why we may not have seen this before is that |
It is rare but possible to have delegates that point to VSD stubs. Since VSD stubs on x86 may disassemble the call-site we cannot allow tail calling these with the old mechanism. Fix dotnet#70259
) * Always use portable tailcalling mechanism for delegate tailcalls It is rare but possible to have delegates that point to VSD stubs. Since VSD stubs on x86 may disassemble the call-site we cannot allow tail calling these with the old mechanism. Fix #70259 * Add regression test * Calm down the test Tailcall through built-in delegates is best-effort. Instantiating stubs may break the chain and on ARM32 so may wrapper delegate stubs. The latter happens for this particular test. Change the test so that it is just verifying we do not hit the assert. * Disable regression test on Mono * Clean up some ildasm output
Pipeline: runtime-coreclr libraries-jitstress
Configs:
Also in LibraryImportGenerator.Unit.Tests, same configs.
https://dev.azure.com/dnceng/public/_build/results?buildId=1807559&view=ms.vss-test-web.build-test-results-tab
Looks like a VSD assert.
@dotnet/jit-contrib JIT issue?
The text was updated successfully, but these errors were encountered: