You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[wasm][R2R] GC/API/GC/GetGeneration: objects stay in generation 0 after GC.Collect #134803
On browser-wasm CoreCLR with ReadyToRun (RunCrossGen2=1), GC/API/GC/GetGeneration fails. After GC.Collect() the tested objects are still reported as generation 0, so ObjectTest and arrayTest fail:
That matches the reason the test already skips under the interpreter ("Interpreter reports locals as pinned, causing generation demotion that this test does not expect"). The test used to be skipped on every wasm run, because the runtime-test InterpreterActive mode was always true on wasm. #134767 changes InterpreterActive to mean "code runs in the interpreter" (no JIT and not ReadyToRun-compiled), so wasm R2R now runs it.
Skipped (interpreter): browser-wasm CoreCLR without R2R.
Passes: maccatalyst-arm64 CoreCLR Release ReadyToRun (no JIT), android-arm64 CoreCLR, and desktop CoreCLR.
The root cause isn't known. Candidates are part of the call path still running in the interpreter under wasm R2R, or conservative or pinned stack reporting for wasm R2R frames.
Closing as expected behavior. As @AndyAyersMS noted, WebAssembly reports stack roots as pinned, so GetGeneration's generation-promotion checks can't hold there, with or without ReadyToRun. #134767 now skips the test on Browser/Wasi permanently (SkipOnPlatform, linking here for context) instead of quarantining it. It keeps running where the test's own code is compiled, including Apple mobile ReadyToRun.
Description
On browser-wasm CoreCLR with ReadyToRun (
RunCrossGen2=1),GC/API/GC/GetGenerationfails. AfterGC.Collect()the tested objects are still reported as generation 0, soObjectTestandarrayTestfail:That matches the reason the test already skips under the interpreter ("Interpreter reports locals as pinned, causing generation demotion that this test does not expect"). The test used to be skipped on every wasm run, because the runtime-test
InterpreterActivemode was always true on wasm. #134767 changesInterpreterActiveto mean "code runs in the interpreter" (no JIT and not ReadyToRun-compiled), so wasm R2R now runs it.Configuration
TEST_READY_TO_RUN_MODE=1).The root cause isn't known. Candidates are part of the call path still running in the interpreter under wasm R2R, or conservative or pinned stack reporting for wasm R2R frames.
Note
This issue was drafted with GitHub Copilot.