[browser][coreCLR] Track disabled OOP runtime tests pending browser support
- Dominant language
- C#
- Stars
- 18.3k
- Forks
- 5.6k
- PR merge metrics
- PR metrics pending
Description
## Summary
The CoreCLR browser-WASM out-of-process runtime-test work in
[#131110](https://github.com/dotnet/runtime/pull/131110) exposes tests that were
not previously run. After separating tests that need managed multithreading and
per-test native relinking, 46 suppression points still represent useful
coverage but need browser runtime functionality, host-side orchestration, test
adaptation, or practical execution performance.
This issue tracks those 46 suppression points. The count is for projects or
named test entries, not the number of underlying xUnit cases.
The following tests are intentionally left out:
- managed-multithreading tests, which are capability-gated by
`FeatureMultithreading`;
- per-test native relinking and UCO thunk relinking
([#123946](https://github.com/dotnet/runtime/issues/123946),
[#124219](https://github.com/dotnet/runtime/issues/124219)), including the
newly exposed `JIT/Directed/Convert/out_of_range_fp_to_int_conversions`.
## Re-enable checklist
### Background and server GC
PR [#127178](https://github.com/dotnet/runtime/pull/127178) intentionally
compiles background and server GC out of CoreCLR WebAssembly. These tests can
return only if that product decision changes and the corresponding mode works
with WebAssembly threads.
- [ ] `GC/Features/BackgroundGC/foregroundgc`
- [ ] `JIT/Methodical/Boxing/misc/concurgc_d`
- [ ] `JIT/Methodical/Boxing/misc/concurgc_r`
- [ ] `GC/API/NoGCRegion/Callback_Svr`
### Host-scheduled nested runs
These tests should not gain browser `Process.Start` support. Extend the
out-of-process host plan so the host launches each nested configuration or
crashing child, then imports its output and exit status. `ParallelCrashTester`
also requires managed multithreading.
- [ ] `baseservices/RuntimeConfiguration/TestConfigTester`
- [ ] `baseservices/exceptions/stackoverflow/stackoverflowtester`
- [ ] `baseservices/exceptions/unhandled/unhandledTester`
- [ ] `baseservices/exceptions/simple/ParallelCrashTester`
\n### WASM ReadyToRun host tooling
This work belongs with the WebAssembly R2R tracker
[#130524](https://github.com/dotnet/runtime/issues/130524). The checks must
operate on emitted WASM components from the host rather than asking browser
managed code to launch `dotnet` or `corerun`.
- [ ] `readytorun/coreroot_determinism`
- [ ] `readytorun/r2rdump/FrameworkTests/R2RDumpTests`
### WASM ReadyToRun execution
The expanded OOP coverage exposed two remaining runtime/toolchain disagreements.
Other browser R2R tests remain enabled after fixing composite-image layout and
eager-fixup lock ordering. This work belongs with
[#130524](https://github.com/dotnet/runtime/issues/130524).
- [ ] `readytorun/crossgen2/crossgen2smoke` - generic `ldtoken` reaches a
WebAssembly function-signature mismatch
- [ ] `readytorun/fieldlayout/fieldlayout` - Crossgen2 and browser CoreCLR
disagree on `Int128` aggregate size and alignment; the shipping correctness
fix is [#131421](https://github.com/dotnet/runtime/pull/131421)
### Browser runtime services and diagnostics
Re-enable these after browser CoreCLR supplies the registered-wait,
process-launch, diagnostic IPC/socket, or runtime-event behavior each test
validates. Self-process EventPipe tests must instead be adapted to browser's
JS/WebSocket diagnostic clients; the Process/PID-based managed
`DiagnosticsClient` path is unsupported.
- [ ] `JIT/Directed/debugging/debuginfo/tester` - JIT/interpreter IL and native
debug maps
- [ ] `tracing/eventlistener/EventListenerThreadPool` - ThreadPool registered
waits
- [ ] `tracing/eventpipe/applystartuphook/applystartuphook` - nested process
launch
- [ ] `tracing/eventpipe/diagnosticport/diagnosticport` - diagnostic IPC and
Unix-domain sockets
- [ ] `tracing/eventpipe/pauseonstart/pauseonstart` - diagnostic IPC and
Unix-domain sockets
- [ ] `tracing/eventpipe/processenvironment/processenvironment` - nested
process launch
- [ ] `tracing/eventpipe/eventsvalidation/ExceptionThrown_V1` - self-process
EventPipe collection
- [ ] `tracing/eventpipe/eventsvalidation/GCEvents` - self-process EventPipe
collection
- [ ] `tracing/eventpipe/eventsvalidation/GCFinalizers` - self-process EventPipe
collection
- [ ] `tracing/eventpipe/eventsvalidation/SampleProfilerSampleType` -
self-process EventPipe collection
- [ ] `tracing/eventpipe/randomizedallocationsampling/allocationsampling` -
randomized allocation-sampling EventPipe events
- [ ] `tracing/eventpipe/reverse/reverse` - nested process launch and diagnostic
IPC
- [ ] `tracing/eventpipe/reverseouter/reverseouter` - nested process launch
- [ ] `tracing/eventpipe/rundownvalidation/rundownvalidation` - self-process
EventPipe collection
- [ ] `tracing/eventpipe/simpleruntimeeventvalidation/simpleruntimeeventvalidation`
- self-process EventPipe collection
- [ ] `tracing/runtimeeventsource/runtimeeventsource` - expected runtime
configuration events
### WebAssembly managed-call ABI
The ABI stress harness currently rejects the browser's `PlatformID.Other` and
has no WebAssembly ABI model. Extend it with the WebAssembly ABI before
re-enabling these projects.
- [ ] `JIT/Stress/ABI/stubs_do`
- [ ] `JIT/Stress/ABI/pinvokes_d`
- [ ] `JIT/Stress/ABI/pinvokes_do`
- [ ] `JIT/Stress/ABI/tailcalls_d`
- [ ] `JIT/Stress/ABI/tailcalls_do`
### WebAssembly runtime invocation
Re-enable the binder tracing resolution-flow project after browser CoreCLR can
invoke its `AssemblyLoadContext.Resolving` path without a WebAssembly
function-signature mismatch.
- [ ] `Loader/binding/tracing/BinderTracingTest.ResolutionFlow`
### Optimizing JIT or equivalent performance
These tests assert optimizing-JIT behavior, count JIT-compiled methods, or run
workloads that are impractical on the interpreter. Re-enable them when a
WebAssembly JIT provides the intended behavior, or adapt their scale without
losing the regression coverage. WebAssembly JIT work is tracked by
[#121141](https://github.com/dotnet/runtime/issues/121141).
- [ ] `JIT/opt/Inline/tests/LotsOfInlines`
- [ ] `JIT/opt/Loops/TripCountOverflow`
- [ ] `JIT/jit64/regress/ddb/113574`
- [ ] `JIT/opt/ObjectStackAllocation/ObjectStackAllocationTests`
- [ ] `JIT/opt/Regressions/Regression2_Regressions`
- [ ] `readytorun/JittedMethodsCountingTest/JittedMethodsCountingTest`
### WebAssembly JIT and GCStress support
Both variants validate GC-pointer reporting for multi-register struct returns.
The `32Bit` and `64Bit` names describe managed field widths, not the target
architecture. Re-enable them when browser CoreCLR JIT supports
GCStress-on-direct-calls and after replacing the incidental
`ProcessStartInfo.Environment` struct-return trigger with a browser-safe
equivalent.
- [ ] `JIT/Regression/JitBlue/GitHub_23199/GitHub_23199_Target_32Bit`
- [ ] `JIT/Regression/JitBlue/GitHub_23199/GitHub_23199_Target_64Bit`
### Dynamic native-library loading
Static per-test relinking is insufficient for these tests. Define and
implement CoreCLR browser contracts for dynamic handles, ALC unmanaged-library
resolution, `CORE_LIBRARIES`, and path-based loading. Issue
[#123570](https://github.com/dotnet/runtime/issues/123570) tracks the related
Mono side-module gap.
- [ ] `Interop/NativeLibrary/API/NativeLibraryTests`
- [ ] `Interop/NativeLibrary/AssemblyLoadContext/ResolveUnmanagedDllTests`
- [ ] `Interop/NativeLibrary/MainProgramHandle/MainProgramHandleTests`
- [ ] `Loader/NativeLibs/FromNativePaths`
## Completion criteria
For each entry:
- remove or narrow the CoreCLR browser suppression;
- exercise the intended scenario rather than converting it to an unconditional
skip;
- pass under the relevant CoreCLR browser-WASM capability;
- preserve existing desktop, Mono, and WASI behavior.
If a prerequisite is explicitly rejected as a browser feature, document that
contract and move the corresponding entry to the permanent-exclusion list
instead of leaving it indefinitely ambiguous.
## Permanent exclusions not tracked here
The following 17 suppression points exercise contracts that do not apply to
the current browser runtime:
- Android/Java GC bridge: `Interop/GCBridge/BridgeTest`
- CoreCLR browser Server GC (disabled by design):
`GC/API/GC/GetTotalAllocatedBytesServerGC`
- Mono embedding API:
`Interop/MonoAPI/MonoMono/{InstallEHCallback,PInvokeDetach,Thunks}`
- Windows-only behavior: `FullPdbThrower`, threading regression `115178`, and
`TypeEquivalence/{istypeequivalent,simple}`
- PE native-image version resources:
`readytorun/tests/fileversionpreservation`
- RyuJIT SuperPMI collection: `JIT/superpmi/superpmicollect`
- browser-unsupported `ComWrappers`: `ComWrappersTests`,
`ComWrappersTestsBuiltInComDisabled`, and `WeakReferenceTest`
- browser-unsupported `AssemblyDependencyResolver`/hostpolicy probing:
`AssemblyDependencyResolverTests` and `MissingHostPolicyTests`
- physical CoreLib path: `SystemCoreLibDirectory.HostProvidedPath`; empty
`Assembly.Location` is expected on browser-WASM
([#52062](https://github.com/dotnet/runtime/issues/52062))
> [!NOTE]
> This issue was drafted with GitHub Copilot.
Contributor guide
Assessment
This issue has not been assessed yet.