Repository navigation
Fix cDAC stress comparison of stack byrefs - #135124
max-charlamb wants to merge 1 commit into
Conversation
Report live-stack interiors only to the diagnostic collector and remove asymmetric cDAC filtering. Add prestub Span and out-bool regression coverage while preserving real GC behavior. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 593f81fe-227d-480b-9da0-38ddeea24fd9
|
Azure Pipelines: Successfully started running 5 pipeline(s). 11 pipeline(s) were filtered out due to trigger conditions. There may be pipelines that require an authorized user to comment /azp run to run. |
|
Tagging subscribers to this area: @steveisok, @tommcdon, @dotnet/dotnet-diag |
|
I traced this against main (44253fe) and agree with the root cause. On x86, a The CI failures match this. I read the Helix consoles of builds 1629310, 1632709, 1630078 and 1630648. All 20 failing verifications are The fix looks right to me. The bypass compares against the file-static collector callback, is compiled only under Two requests:
A three-way merge check against main at dcc404c shows no conflicts; I have not built or tested the merged tree. Current main includes #135112 and #135890; #135890 touches The only CI run is from 2026-10-02. All six This addresses #135086, which is still open and failing on PRs: on 2026-10-17 its Known Build Error report showed 38 hits in 7 days and 93 in a month. |
|
closing in favor of #136089 |
Summary
Fix the cDAC stress oracle's asymmetric handling of interior references into the live stack.
PromoteCarefullynormally excludes ordinary stack byrefs from native GC callbacks. Embedded byrefs in byref-like arguments can instead be reported directly. The stress harness filtered stack interiors only from the cDAC side, producing falsePrestubMethodFramemismatches for stack-backed Spans on Windows x86. The cDAC had reported the reference correctly.Rather than filter both sides and lose coverage, retain raw stack-byref reporting:
PromoteCarefullyto report live-stack interiors only to the private stress collector callback.ByRefArgumentsto both stress theories, covering stack/heap Spans and an ordinaryout bool. Lazy signature resolution triggers allocations while the prestub is live; the receiver also allocates and runs a real GC.Real GC callbacks keep their existing behavior. The hook is guarded by
CDAC_STRESSand excluded from DAC builds; it does not changeScanContextor the GC/EE interface. This PR is independent of the transition-frame unwind fix in #135112.Validation
NotYetLoadedArgType(4,656),CallSignatures(5,220), andBasicAlloc(4,620).The full stress suite and non-x86 execution have not been run locally.
Resolves #135086
Note
This PR description and code were prepared with GitHub Copilot.