Skip to content

[browser][coreCLR] Track disabled OOP runtime tests pending browser support #131321

Description

@radekdoulik

Summary

The CoreCLR browser-WASM out-of-process runtime-test work in
#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,
    #124219), including the
    newly exposed JIT/Directed/Convert/out_of_range_fp_to_int_conversions.

Re-enable checklist

Background and server GC

PR #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. 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.

  • 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

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.

  • 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 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)

Note

This issue was drafted with GitHub Copilot.

Metadata

Metadata

Assignees

Labels

arch-wasmWebAssembly architecturearea-Interop-coreclros-browserBrowser variant of arch-wasmtrackingThis issue is tracking the completion of other related issues.

Type

No type

Projects

  • Status
    No status

Relationships

None yet

Development

No branches or pull requests

Issue actions

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
[browser][coreCLR] Track disabled OOP runtime tests pending browser support · Issue #131321 · dotnet/runtime · GitHub
Skip to content

[browser][coreCLR] Track disabled OOP runtime tests pending browser support #131321

Description

@radekdoulik

Summary

The CoreCLR browser-WASM out-of-process runtime-test work in
#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,
    #124219), including the
    newly exposed JIT/Directed/Convert/out_of_range_fp_to_int_conversions.

Re-enable checklist

Background and server GC

PR #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. 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.

  • 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

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.

  • 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 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)

Note

This issue was drafted with GitHub Copilot.

Metadata

Metadata

Assignees

Labels

arch-wasmWebAssembly architecturearea-Interop-coreclros-browserBrowser variant of arch-wasmtrackingThis issue is tracking the completion of other related issues.

Type

No type

Projects

  • Status
    No status

Relationships

None yet

Development

No branches or pull requests

Issue actions

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' [browser][coreCLR] Track disabled OOP runtime tests pending browser support · Issue #131321 · dotnet/runtime · GitHub
Skip to content

[browser][coreCLR] Track disabled OOP runtime tests pending browser support #131321

Description

@radekdoulik

Summary

The CoreCLR browser-WASM out-of-process runtime-test work in
#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,
    #124219), including the
    newly exposed JIT/Directed/Convert/out_of_range_fp_to_int_conversions.

Re-enable checklist

Background and server GC

PR #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. 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.

  • 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

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.

  • 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 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)

Note

This issue was drafted with GitHub Copilot.

Metadata

Metadata

Assignees

Labels

arch-wasmWebAssembly architecturearea-Interop-coreclros-browserBrowser variant of arch-wasmtrackingThis issue is tracking the completion of other related issues.

Type

No type

Projects

  • Status
    No status

Relationships

None yet

Development

No branches or pull requests

Issue actions

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' [browser][coreCLR] Track disabled OOP runtime tests pending browser support · Issue #131321 · dotnet/runtime · GitHub
Skip to content

[browser][coreCLR] Track disabled OOP runtime tests pending browser support #131321

Description

@radekdoulik

Summary

The CoreCLR browser-WASM out-of-process runtime-test work in
#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,
    #124219), including the
    newly exposed JIT/Directed/Convert/out_of_range_fp_to_int_conversions.

Re-enable checklist

Background and server GC

PR #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. 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.

  • 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

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.

  • 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 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)

Note

This issue was drafted with GitHub Copilot.

Metadata

Metadata

Assignees

Labels

arch-wasmWebAssembly architecturearea-Interop-coreclros-browserBrowser variant of arch-wasmtrackingThis issue is tracking the completion of other related issues.

Type

No type

Projects

  • Status
    No status

Relationships

None yet

Development

No branches or pull requests

Issue actions

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' [browser][coreCLR] Track disabled OOP runtime tests pending browser support · Issue #131321 · dotnet/runtime · GitHub
Skip to content

[browser][coreCLR] Track disabled OOP runtime tests pending browser support #131321

Description

@radekdoulik

Summary

The CoreCLR browser-WASM out-of-process runtime-test work in
#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,
    #124219), including the
    newly exposed JIT/Directed/Convert/out_of_range_fp_to_int_conversions.

Re-enable checklist

Background and server GC

PR #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. 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.

  • 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

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.

  • 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 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)

Note

This issue was drafted with GitHub Copilot.

Metadata

Metadata

Assignees

Labels

arch-wasmWebAssembly architecturearea-Interop-coreclros-browserBrowser variant of arch-wasmtrackingThis issue is tracking the completion of other related issues.

Type

No type

Projects

  • Status
    No status

Relationships

None yet

Development

No branches or pull requests

Issue actions

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' [browser][coreCLR] Track disabled OOP runtime tests pending browser support · Issue #131321 · dotnet/runtime · GitHub
Skip to content

[browser][coreCLR] Track disabled OOP runtime tests pending browser support #131321

Description

@radekdoulik

Summary

The CoreCLR browser-WASM out-of-process runtime-test work in
#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,
    #124219), including the
    newly exposed JIT/Directed/Convert/out_of_range_fp_to_int_conversions.

Re-enable checklist

Background and server GC

PR #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. 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.

  • 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

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.

  • 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 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)

Note

This issue was drafted with GitHub Copilot.

Metadata

Metadata

Assignees

Labels

arch-wasmWebAssembly architecturearea-Interop-coreclros-browserBrowser variant of arch-wasmtrackingThis issue is tracking the completion of other related issues.

Type

No type

Projects

  • Status
    No status

Relationships

None yet

Development

No branches or pull requests

Issue actions

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' [browser][coreCLR] Track disabled OOP runtime tests pending browser support · Issue #131321 · dotnet/runtime · GitHub
Skip to content

[browser][coreCLR] Track disabled OOP runtime tests pending browser support #131321

Description

@radekdoulik

Summary

The CoreCLR browser-WASM out-of-process runtime-test work in
#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,
    #124219), including the
    newly exposed JIT/Directed/Convert/out_of_range_fp_to_int_conversions.

Re-enable checklist

Background and server GC

PR #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. 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.

  • 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

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.

  • 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 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)

Note

This issue was drafted with GitHub Copilot.

Metadata

Metadata

Assignees

Labels

arch-wasmWebAssembly architecturearea-Interop-coreclros-browserBrowser variant of arch-wasmtrackingThis issue is tracking the completion of other related issues.

Type

No type

Projects

  • Status
    No status

Relationships

None yet

Development

No branches or pull requests

Issue actions

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); [browser][coreCLR] Track disabled OOP runtime tests pending browser support · Issue #131321 · dotnet/runtime · GitHub
Skip to content

[browser][coreCLR] Track disabled OOP runtime tests pending browser support #131321

Description

@radekdoulik

Summary

The CoreCLR browser-WASM out-of-process runtime-test work in
#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,
    #124219), including the
    newly exposed JIT/Directed/Convert/out_of_range_fp_to_int_conversions.

Re-enable checklist

Background and server GC

PR #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. 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.

  • 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

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.

  • 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 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)

Note

This issue was drafted with GitHub Copilot.

Metadata

Metadata

Assignees

Labels

arch-wasmWebAssembly architecturearea-Interop-coreclros-browserBrowser variant of arch-wasmtrackingThis issue is tracking the completion of other related issues.

Type

No type

Projects

  • Status
    No status

Relationships

None yet

Development

No branches or pull requests

Issue actions