Skip to content

Add browser WASM R2R test leg #133305

Description

@jkotas

Goal

Maintain continuous browser-wasm ReadyToRun runtime-test coverage without blocking unrelated pull requests while known product failures remain.

Current status

The restored lane remains visible in the default pipeline. While it is non-blocking, failures must still be inspected from Helix work-item status and both Azure DevOps test runs; the submission job result alone is not sufficient.

Final PR validation

The restored default runtime pipeline was validated on #133463 at commit 040c3069cc76d3261b7fedd7e1598757ae8f6f19 in Azure DevOps build 1588519:

  • The R2R_CG2 browser wasm checked job completed succeededWithIssues, as intended for a non-blocking lane.
  • Helix job 870b56d5-d077-41e1-9e9f-22ff41e50ddb completed with 0 failed work items.
  • Test run 43844474 published 3813 total, 3328 passed, and 0 failed tests.

A preceding branch census exposed later failures that the fresh-main run's earlier aborts had masked. Those were also narrowed:

Later PR-head census

Build 1589007 at 452dea3aba16d97244508b8a0fef4643de8dd26e exposed 13 additional or still-active test-result failures hidden behind completed Helix work items:

Failure Handling
StructABI invalid f64.reinterpret_i64 operand Out-of-process project R2R exclusion, #133502
more_tailcalls memory access out of bounds Pre-existing limitation tracked by #131890; out-of-process project R2R exclusion
InterpreterTester.TestPInvoke uncaught missing-library failure Guard only this subtest, #131811
badcodeinsidefinally_d/r returns null from GetObj Type-level ActiveIssue, #133504
Runtime_101046 incorrect native small-integer sign extension Out-of-process project R2R exclusion, #133506
github60486 duplicate stack frames Method-level ActiveIssue, #133505
AssemblyOnDisk, ByRefLocals, GenericVirtualMethod, CollectibleStatics Empty Assembly.Location treated as unavailable file-backed setup
Regression4 Empty Assembly.Location treated as unavailable file-backed setup
UnrollEqualsStartsWith preemptive-GC OBJECTREF assertion Method-level ActiveIssue, #133219

These changes are included in #133463 at 67535696f88.

The final PR head 67535696f88a709f322896c0b608821659acb30a was validated in build 1589161:

  • coreclr Pri0 Runtime Tests Run R2R_CG2 browser wasm checked completed successfully.
  • Test run 43866592 reported 3815 total, 3340 passed, 475 not executed, 0 failed, and 0 unanalyzed.

Fresh main census

Build 1588226 produced two browser-wasm R2R test runs:

Run Total Passed Failed Not executed Unanalyzed
R2R-CG2 browser wasm Checked no_tiered_compilation 2218 1798 7 413 7
R2R-CG2 browser wasm Checked 2218 1794 7 417 7

Helix reported 14 failed work items. The shared monitor surfaced only 10; JIT.opt, Regression_3, Regression_6, and Regression_PdbOnly_r_3 also failed and had to be found from the Helix job itself. Seven per-test failures were published even though their containing merged-runner work items did not appear in the monitor failure list.

Failed Helix work items

Work item Exact failing test/signature Tracking Exclusion
Directed_do tailcall/mutual_recursion, SIGSEGV / exit 139 after FifthMethod #133464 Child project R2RIncompatible on wasm CoreCLR
Directed_ro _Arrayscomplex3, null function or function signature mismatch #133307 Method-level ActiveIssue
JIT.opt NonVoidThrowHelper, OBJECTREF being accessed while thread is in preemptive GC mode #133219 / fix #133269 Method-level ActiveIssue
Loader ComplexHierarchyPositive, generic static-interface dispatch signature mismatch #133466 Method-level ActiveIssue
Methodical_d1, Methodical_do, Methodical_r1, Methodical_ro throwinfinally_50, RuntimeError: unreachable #133465 Method-level ActiveIssue
Methodical_d2, Methodical_r2 lcs_gcref, multidimensional-array signature mismatch #133307 Method-level ActiveIssue
Methodical_others module construction fails: parameter count 4002 #132855 / fix #132865 Merged assembly R2RIncompatible on wasm CoreCLR; failure occurs before test dispatch
Regression_3 DevDiv_902271, GetGCStaticBase memory access out of bounds #133467 Child IL project R2RIncompatible on wasm CoreCLR
Regression_6 b68872, first-pass ExInfo collision at exceptionhandling.cpp:4273 #133468 Child IL project R2RIncompatible on wasm CoreCLR
Regression_PdbOnly_r_3 module construction fails: parameter count 8194 #132855 / fix #132865 Merged assembly R2RIncompatible on wasm CoreCLR; failure occurs before test dispatch

Failed tests hidden from the work-item summary

Test Exact signature Tracking Exclusion
Runtime_76273 AssemblyLoadContext.LoadFromAssemblyPath: path is empty Applicability, not a product failure Return successfully when Assembly.Location is empty; run the full scenario when files exist
GitHub_22888 Path.Combine: Assembly.Location produced a null directory Applicability, not a product failure Return successfully when Assembly.Location is empty; run the full scenario when files exist
InterpreterTester InterpreterTest.TestMdArray, signature mismatch #133307 Guard only the TestMdArray subtest; all other interpreter tests remain active
Runtime_101046 native small-integer return produces exit 101 #131811 Child IL project R2RIncompatible on wasm CoreCLR
bestfit, bestfit_1, bestfit-finalize RuntimeError: unreachable after reaching steady state #133469 Each child project R2RIncompatible on wasm CoreCLR

Revalidated non-failures

Open fixes and infrastructure dependencies

Issue Fix PR Current status
#132855, >1,000 wasm parameters #132865 Open
#133219, cooperative GC mode after R2R catch resumption #133269 Open
#133303, TypeMapApp compile/load failure - Open; Interop preflight remains narrowly excluded
#133307, generic MD-array signature mismatch - Open
#133491, shared Wasm R2R unboxing stub target/adapter dependencies #133516 Draft is based on the earlier fallback approach; update to preserve shared U/UG/UM stubs with per-target M + I dependencies and the runtime availability guard
#131886, Runtime_79354 portable entry point - Open
Runtime-test call-helper generator alignment #133419 Open; not required for this restoration
SDK crossgen2 resolution #133413 Open with NO-MERGE; not treated as landed or ready

Non-blocking and blocking criteria

The default browser-wasm R2R lane is intentionally non-blocking while these active exclusions remain. It should continue to run on the same path triggers as the original lane and publish normal Helix/test-result evidence.

Promote it to blocking only after:

  1. Two consecutive current-main runs report zero failed Helix work items.
  2. Both the default and no_tiered_compilation test runs report zero failed tests, including failures hidden by merged-runner exit behavior.
  3. Every exclusion added for this restoration has either been removed by a product fix or explicitly accepted as a longer-term platform limitation with its own tracker.
  4. The shared Helix monitor can be re-enabled for the lane without turning known or hidden failures into unrelated PR noise.

Note

This tracking update was generated with GitHub Copilot.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

  • Status
    No status

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions