Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
bac1e70
Add wasm/CoreCLR libraries tests to outerloop CI
radekdoulik Jun 15, 2026
62638b9
Merge branch 'main' into radekdoulik/clr-wasm-librarytests-outerloop
radekdoulik Jun 16, 2026
4882ad6
Gate wasm/CoreCLR outerloop job on includeLinuxOuterloop
radekdoulik Jun 16, 2026
9d24122
Isolate slow [OuterLoop] wasm suites into solo Helix batches
radekdoulik Jun 16, 2026
c29e2c4
Extend wasm/CoreCLR outerloop timeouts for slow suites
radekdoulik Jun 16, 2026
29da29a
Run wasm/CoreCLR libraries outerloop with -testscope all
radekdoulik Jun 23, 2026
7666348
Gate thread-dependent [OuterLoop] tests for single-threaded wasm
radekdoulik Jun 23, 2026
e4d9eaf
Gate first CoreCLR-wasm outerloop CI failures; skip System.Linq.Paral…
radekdoulik Jun 23, 2026
9dc5226
Gate slow [OuterLoop] tests that time out on single-threaded wasm
radekdoulik Jun 23, 2026
94a3808
Gate xNodeBuilder OuterLoop suite that hangs CoreCLR wasm at shutdown
radekdoulik Jun 23, 2026
5de9f8d
Address PR review feedback on Helix batching and wasm timeouts
radekdoulik Jun 24, 2026
55d1518
Scope Frozen large-string OuterLoop tests to skip Browser only
radekdoulik Jun 24, 2026
151c242
Skip slow System.Text.Json Writing3MBBase64Bytes OuterLoop test on wasm
radekdoulik Jun 25, 2026
09f085d
Merge remote-tracking branch 'origin/main' into radekdoulik/clr-wasm-…
radekdoulik Jun 25, 2026
8e31710
Address PR review: int overflow + symmetric solo-name normalization
radekdoulik Jun 25, 2026
c05311e
Gate slow wasm-outerloop tests in System.Text.Json and System.Memory
radekdoulik Jun 28, 2026
ec29d64
Scope slow wasm test gates to CoreCLR via ActiveIssue #129973
radekdoulik Jun 29, 2026
2e29b2a
Use PlatformDetection.IsCoreCLR for the #129758 browser gate
radekdoulik Jun 29, 2026
942a6ce
Warn when ComputeBatchTimeout knobs are defaulted or clamped
radekdoulik Jun 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 44 additions & 0 deletions eng/pipelines/libraries/outerloop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -107,3 +107,47 @@ extends:
testScope: outerloop
creator: dotnet-bot
extraHelixArguments: /p:BuildTargetFramework=net481

# WebAssembly CoreCLR - run the library test suites on Chrome with the slow
# [OuterLoop] tests enabled. Uses -testscope all (not outerloop) on purpose:
# the outerloop scope adds a '-trait category=OuterLoop' include filter, and the
# wasm test host (xharness) treats a matching include as "always run", short-
# circuiting the '-notrait category=failing' exclude. That leaks [OuterLoop]
# tests from classes disabled via [ConditionalClass] (e.g. on
# IsMultithreadingSupported) onto single-threaded wasm, where they block the
# one thread and hang the job. -testscope all carries no OuterLoop include, so
# the failing-tagged classes are skipped as intended; it also covers the slow
# suites' innerloop tests.
# Gated on includeLinuxOuterloop (browser_wasm builds on a Linux host) so the
# wasm suites run in the umbrella and -linux outerloop definitions only, not in
# every platform-split (-windows/-osx) outerloop definition.
- ${{ if eq(variables['includeLinuxOuterloop'], true) }}:
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
jobTemplate: /eng/pipelines/common/global-build-job.yml
helixQueuesTemplate: /eng/pipelines/libraries/helix-queues-setup.yml
buildConfig: Release
runtimeFlavor: coreclr
platforms:
- browser_wasm
jobParameters:
testScope: all
nameSuffix: LibraryTestsCoreCLR
buildArgs: -s clr+libs+host+packs+libs.tests -c $(_BuildConfig) -testscope all /p:ArchiveTests=true /p:BrowserHost=$(_hostedOs) /p:InstallChromeForTests=true /p:AotHostArchitecture=x64 /p:AotHostOS=$(_hostedOS) /maxcpucount:1
# This lane runs the slow suites with a 04:00:00 per-suite xharness
# timeout and a per-batch Helix cap of 300 min (see
# eng/testing/tests.wasm.targets and src/libraries/sendtohelix-browser.targets).
# The job waits synchronously for the slowest batch, so it must outlast that
# batch plus build/queue overhead.
timeoutInMinutes: 600
includeAllPlatforms: ${{ variables['isRollingBuild'] }}
# extra steps, run tests
postBuildSteps:
- template: /eng/pipelines/libraries/helix.yml
parameters:
scenarios:
- WasmTestOnChrome
testScope: all
creator: dotnet-bot
testRunNamePrefixSuffix: CoreCLR_$(_BuildConfig)
extraHelixArguments: /p:BrowserHost=$(_hostedOs)
6 changes: 6 additions & 0 deletions eng/testing/tests.wasm.targets
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,12 @@
<_ShellCommandSeparator Condition="'$(OS)' == 'Windows_NT'">&amp;&amp;</_ShellCommandSeparator>
<_ShellCommandSeparator Condition="'$(OS)' != 'Windows_NT'">&amp;&amp;</_ShellCommandSeparator>
<XUnitUseRandomizedTestOrderer Condition="'$(XUnitUseRandomizedTestOrderer)' == '' and '$(IsTestProject)' == 'true'">true</XUnitUseRandomizedTestOrderer>
<!-- Outerloop wasm/CoreCLR runs the slow [OuterLoop] suites; give each suite a much larger
per-suite xharness timeout so a long suite is not killed mid-run (xharness exit code 71).
Innerloop keeps the existing 01:30:00 (CoreCLR) / 00:30:00 budgets. Keep this in sync with
the per-batch and AzDO job timeouts in src/libraries/sendtohelix-browser.targets and
eng/pipelines/libraries/outerloop.yml (suite <= batch <= job). -->
<WasmXHarnessTestsTimeout Condition="'$(WasmXHarnessTestsTimeout)' == '' and '$(RuntimeFlavor)' == 'CoreCLR' and ('$(TestScope)' == 'outerloop' or '$(TestScope)' == 'all')">04:00:00</WasmXHarnessTestsTimeout>
<WasmXHarnessTestsTimeout Condition="'$(WasmXHarnessTestsTimeout)' == '' and '$(RuntimeFlavor)' == 'CoreCLR'">01:30:00</WasmXHarnessTestsTimeout>
<WasmXHarnessTestsTimeout Condition="'$(WasmXHarnessTestsTimeout)' == ''">00:30:00</WasmXHarnessTestsTimeout>
<RunWorkingDirectory>$(BundleDir)</RunWorkingDirectory>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -565,6 +565,10 @@ public async Task BrowserHttpHandler_StreamingRequest_CancelRequest(bool cancelA

[OuterLoop]
[ConditionalFact(typeof(PlatformDetection), nameof(PlatformDetection.IsBrowser))]
// Browser+CoreCLR currently surfaces a TaskCanceledException (100s HttpClient.Timeout)
// instead of the expected HttpRequestException ("TypeError: Failed to fetch"); the
// CoreCLR-wasm streaming-request-over-HTTP/1 path differs from Mono-wasm (which passes).
[ActiveIssue("https://github.com/dotnet/runtime/issues/129758", typeof(PlatformDetection), nameof(PlatformDetection.IsCoreCLR))]
public async Task BrowserHttpHandler_StreamingRequest_Http1Fails()
{
var WebAssemblyEnableStreamingRequestKey = new HttpRequestOptionsKey<bool>("WebAssemblyEnableStreamingRequest");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -422,6 +422,7 @@ public void ContainsKey_WithNonAscii(int percentageWithNonAscii)

[Fact]
[OuterLoop]
[ActiveIssue("https://github.com/dotnet/runtime/issues/129973", typeof(PlatformDetection), nameof(PlatformDetection.IsBrowser), nameof(PlatformDetection.IsCoreCLR))]
public void ToFrozenDictionary_WithExtremelyLargeStrings()
{
// Test case with extremely large strings that exceed length bucket boundaries.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -379,6 +379,7 @@ public void Contains_WithNonAscii(int percentageWithNonAscii)

[Fact]
[OuterLoop]
[ActiveIssue("https://github.com/dotnet/runtime/issues/129973", typeof(PlatformDetection), nameof(PlatformDetection.IsBrowser), nameof(PlatformDetection.IsCoreCLR))]
public void ToFrozenSet_WithExtremelyLargeStrings()
{
// Test case with extremely large strings that exceed length bucket boundaries.
Expand Down
1 change: 1 addition & 0 deletions src/libraries/System.Console/tests/WindowAndCursorProps.cs
Original file line number Diff line number Diff line change
Expand Up @@ -312,6 +312,7 @@ public void BeepWithFrequency_Unix_ThrowsPlatformNotSupportedException()

[Fact]
[OuterLoop] // clears the screen, not very inner-loop friendly
[SkipOnPlatform(TestPlatforms.Browser, "Console.Clear is not supported on Browser")]
public static void Clear_Invoke_Success()
{
if (!OperatingSystem.IsWindows() || (!Console.IsInputRedirected && !Console.IsOutputRedirected))
Expand Down
3 changes: 3 additions & 0 deletions src/libraries/System.Linq.Expressions/tests/CompilerTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@ public static class CompilerTests
[Theory]
[ClassData(typeof(CompilationTypes))]
[OuterLoop("Takes over a minute to complete")]
// Compiling a 10,000-deep expression tree takes hours on the single-threaded wasm
// interpreter, exceeding the test timeout. Still covered on Mono and other platforms.
[ActiveIssue("https://github.com/dotnet/runtime/issues/129973", typeof(PlatformDetection), nameof(PlatformDetection.IsBrowser), nameof(PlatformDetection.IsCoreCLR))]
public static void CompileDeepTree_NoStackOverflow(bool useInterpreter)
{
var e = (Expression)Expression.Constant(0);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -603,7 +603,7 @@ public static void Min_OperationCanceledException_PreCanceled(Labeled<Func<Paral
AssertThrows.AlreadyCanceled(source => operation.Item(source, () => { }).Min());
}

[Theory]
[ConditionalTheory(typeof(PlatformDetection), nameof(PlatformDetection.IsMultithreadingSupported))] // Observing "eventual" cancellation requires concurrent workers; unsupported on single-threaded platforms.
[ActiveIssue("https://github.com/dotnet/runtime/issues/22626", TestPlatforms.Linux)]
[MemberData(nameof(UnaryCancelingOperators))]
[MemberData(nameof(BinaryCancelingOperators))]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ public static void DegreeOfParallelism(Labeled<ParallelQuery<int>> labeled, int
Assert.Equal(Functions.SumRange(0, count), labeled.Item.WithDegreeOfParallelism(degree).Sum());
}

[Theory]
[ConditionalTheory(typeof(PlatformDetection), nameof(PlatformDetection.IsMultithreadingSupported))] // Coordinates work across threads via a Barrier; deadlocks/fails on single-threaded platforms.
[MemberData(nameof(DegreeData), new[] { 1, 4, 32 }, new int[] { /* same as count */ })]
[OuterLoop]
public static void DegreeOfParallelism_Barrier(Labeled<ParallelQuery<int>> labeled, int count, int degree)
Expand All @@ -59,7 +59,7 @@ public static void DegreeOfParallelism_Barrier(Labeled<ParallelQuery<int>> label
}
}

[Theory]
[ConditionalTheory(typeof(PlatformDetection), nameof(PlatformDetection.IsMultithreadingSupported))] // Pipelined enumeration relies on concurrent producer threads; unsupported on single-threaded platforms.
[MemberData(nameof(DegreeData), new int[] { /* Sources.OuterLoopCount */ }, new[] { 1, 4, 64, 128 })]
[OuterLoop]
public static void DegreeOfParallelism_Pipelining(Labeled<ParallelQuery<int>> labeled, int count, int degree)
Expand All @@ -74,7 +74,7 @@ public static void DegreeOfParallelism_Pipelining(Labeled<ParallelQuery<int>> la
}
}

[Theory]
[ConditionalTheory(typeof(PlatformDetection), nameof(PlatformDetection.IsMultithreadingSupported))] // Pipelined enumeration relies on concurrent producer threads; unsupported on single-threaded platforms.
[MemberData(nameof(DegreeData), new[] { 1, 4 }, new int[] { /* same as count */ })]
[MemberData(nameof(DegreeData), new[] { 32 }, new[] { 4 })]
[OuterLoop]
Expand Down
4 changes: 2 additions & 2 deletions src/libraries/System.Linq.Parallel/tests/ExchangeTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ public static void Partitioning_Default(Labeled<ParallelQuery<int>> labeled, int
}
}

[Theory]
[ConditionalTheory] // Delegates to Partitioning_Default, which skips (SkipTestException) when multithreading is unavailable.
[OuterLoop]
[MemberData(nameof(PartitioningData), new int[] { /* Sources.OuterLoopCount */ })]
public static void Partitioning_Default_Longrunning(Labeled<ParallelQuery<int>> labeled, int count, int partitions)
Expand All @@ -129,7 +129,7 @@ public static void Partitioning_Striped(Labeled<ParallelQuery<int>> labeled, int
}
}

[Theory]
[ConditionalTheory] // Delegates to Partitioning_Striped, which skips (SkipTestException) when multithreading is unavailable.
[OuterLoop]
[MemberData(nameof(PartitioningData), new int[] { /* Sources.OuterLoopCount */ })]
public static void Partitioning_Striped_Longrunning(Labeled<ParallelQuery<int>> labeled, int count, int partitions)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,15 @@
<!-- https://github.com/dotnet/runtime/issues/126862 -->
<EnableTrimAnalyzer>false</EnableTrimAnalyzer>
</PropertyGroup>
<!-- The full [OuterLoop] combinatorial matrix expands to ~195k cases on a single-threaded
wasm browser session: it produces a ~72 MB test-results file that exceeds xharness's
30 MB upload limit and grows the wasm heap to ~1.3 GB, crashing the browser tab at
teardown. PLINQ has no real parallelism on a single thread, so this OuterLoop coverage
adds little value here. Skip OuterLoop for this suite on the wasm/CoreCLR outerloop lane
only; its innerloop tests still run and all other lanes are unaffected. -->
<PropertyGroup Condition="'$(TargetOS)' == 'browser' and '$(RuntimeFlavor)' == 'CoreCLR' and ('$(TestScope)' == 'all' or '$(TestScope)' == 'outerloop')">
<WithoutCategories>$(WithoutCategories);OuterLoop</WithoutCategories>
</PropertyGroup>
<ItemGroup>
<Compile Include="$(CommonTestPath)System\Diagnostics\Tracing\TestEventListener.cs"
Link="Common\System\Diagnostics\Tracing\TestEventListener.cs" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ public static IEnumerable<object[]> ProducerBlocked_Data()
//
// To specifically verify this test, it was checked that the Async channels were blocked in TryEnqueChunk before Dispose() was called
// -> this was verified manually, but is not simple to automate
[Theory]
[ConditionalTheory(typeof(PlatformDetection), nameof(PlatformDetection.IsMultithreadingSupported))] // Exercises blocked producer/consumer threads on the async channel; unsupported on single-threaded platforms.
[OuterLoop] // explicit timeouts / delays
[MemberData(nameof(ProducerBlocked_Data))]
public static void WithCancellation_DisposedEnumerator_ChannelCancellation_ProducerBlocked(Labeled<ParallelQuery<int>> labeled, int count)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -354,6 +354,7 @@ public static void GetBytes_Encoding_ReadOnlySequence_IBufferWriter_SingleSegmen
[Fact]
[OuterLoop] // this test takes ~10 seconds on modern hardware since it operates over GBs of data
[ActiveIssue("https://github.com/dotnet/runtime/issues/79883", TestRuntimes.Mono)]
[ActiveIssue("https://github.com/dotnet/runtime/issues/129973", typeof(PlatformDetection), nameof(PlatformDetection.IsBrowser), nameof(PlatformDetection.IsCoreCLR))]
public static void GetBytes_Encoding_ReadOnlySequence_IBufferWriter_LargeMultiSegment()
{
ReadOnlySequence<char> sequence = GetLargeRepeatingReadOnlySequence<char>(AllScalarsAsUtf16, 1500); // ~ 3.2bn chars of UTF-16 input
Expand Down Expand Up @@ -509,6 +510,7 @@ public static void GetChars_Encoding_ReadOnlySequence_IBufferWriter_SingleSegmen

[Fact]
[OuterLoop] // this test takes ~10 seconds on modern hardware since it operates over GBs of data
[ActiveIssue("https://github.com/dotnet/runtime/issues/129973", typeof(PlatformDetection), nameof(PlatformDetection.IsBrowser), nameof(PlatformDetection.IsCoreCLR))]
public static void GetChars_Encoding_ReadOnlySequence_IBufferWriter_LargeMultiSegment()
{
ReadOnlySequence<byte> sequence = GetLargeRepeatingReadOnlySequence<byte>(AllScalarsAsUtf8, 1500); // ~ 6.5bn bytes of UTF-8 input
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1123,7 +1123,7 @@ await IgnoreExceptions(async () =>

[Fact]
[OuterLoop]
[SkipOnPlatform(TestPlatforms.Android, "Synchronous Send is not supported on Android")]
[SkipOnPlatform(TestPlatforms.Android | TestPlatforms.Browser, "Synchronous Send is not supported on Android or Browser")]
public async Task Send_TimeoutRequestContent_Throws()
{
var semaphore = new SemaphoreSlim(0);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -372,6 +372,7 @@ public Task RequestDuration_Success_Recorded(string method, HttpStatusCode statu

[OuterLoop("Uses external server.")]
[ConditionalFact]
[SkipOnPlatform(TestPlatforms.Browser, "NameResolution (System.Net.Dns) is not supported on Browser")]
public async Task ExternalServer_DurationMetrics_Recorded()
{
if (UseVersion == HttpVersion.Version30)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ public static void Proxy_Roundtrips()
}

[OuterLoop]
[SkipOnPlatform(TestPlatforms.Browser, "Proxy not supported on browser")]
[ConditionalTheory(typeof(ClientWebSocketOptionsTests), nameof(WebSocketsSupported)), MemberData(nameof(EchoServers))]
public async Task Proxy_SetNull_ConnectsSuccessfully(Uri server)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,11 @@ public partial class XNodeBuilderFunctionalTests : TestModule
// Test Module
[Fact]
[OuterLoop]
// This ModuleCore entry point runs the full XNodeBuilder writer suite. On wasm the runtime
// fails to shut down cleanly after it completes, so the test harness hangs until it times
// out. It is [OuterLoop], so it never ran on single-threaded wasm before; gate it off
// CoreCLR Browser (Mono keeps running) to keep the lane green while preserving coverage elsewhere.
[ActiveIssue("https://github.com/dotnet/runtime/issues/129973", typeof(PlatformDetection), nameof(PlatformDetection.IsBrowser), nameof(PlatformDetection.IsCoreCLR))]
public static void RunTests()
{
TestInput.CommandLine = "";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -297,7 +297,7 @@ private class TestObject
}

[OuterLoop]
[ConditionalFact(typeof(PlatformDetection), nameof(PlatformDetection.IsPreciseGcSupported))]
[ConditionalFact(typeof(PlatformDetection), nameof(PlatformDetection.IsPreciseGcSupported), nameof(PlatformDetection.IsMultithreadingSupported))] // Races finalization across threads; meaningless on single-threaded platforms.
public static void WaitForPendingFinalizersRaces()
{
Task.Run(Test);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ public static void TaskWait_MaxInt32()
}

//EH
[Fact]
[ConditionalFact(typeof(PlatformDetection), nameof(PlatformDetection.IsMultithreadingSupported))]
[OuterLoop]
public static void TaskContinuation()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -262,7 +262,7 @@ public static void GetResult_Completed_Success()
}

[OuterLoop]
[Fact]
[ConditionalFact(typeof(PlatformDetection), nameof(PlatformDetection.IsMultithreadingSupported))]
public static void GetResult_NotCompleted_BlocksUntilCompletion()
{
var tcs = new TaskCompletionSource<bool>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ public void WaitUntilCompleteTechnique(bool hasReturnType)
Assert.False(asyncResult.CompletedSynchronously, "Should not have completed synchronously.");
}

[Theory]
[ConditionalTheory(typeof(PlatformDetection), nameof(PlatformDetection.IsMultithreadingSupported))]
[OuterLoop]
[InlineData(true)]
[InlineData(false)]
Expand All @@ -89,7 +89,7 @@ public void PollUntilCompleteTechnique(bool hasReturnType)
Assert.False(asyncResult.CompletedSynchronously, "Should not have completed synchronously.");
}

[Theory]
[ConditionalTheory(typeof(PlatformDetection), nameof(PlatformDetection.IsMultithreadingSupported))]
[OuterLoop]
[InlineData(true)]
[InlineData(false)]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ public static class TaskSchedulerTests
{
// Just ensure we eventually complete when many blocked tasks are created.
[OuterLoop]
[Fact]
[ConditionalFact(typeof(PlatformDetection), nameof(PlatformDetection.IsMultithreadingSupported))]
public static void RunBlockedInjectionTest()
{
Debug.WriteLine("* RunBlockedInjectionTest() -- if it deadlocks, it failed");
Expand Down Expand Up @@ -209,7 +209,7 @@ public static void RunBuggySchedulerTests()
}
}

[Fact]
[ConditionalFact(typeof(PlatformDetection), nameof(PlatformDetection.IsMultithreadingSupported))]
[OuterLoop]
[ActiveIssue("https://github.com/dotnet/runtime/issues/89921", typeof(PlatformDetection), nameof(PlatformDetection.IsAlpine), nameof(PlatformDetection.IsMonoRuntime))]
public static void RunSynchronizationContextTaskSchedulerTests()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ public void Timer_FiresOnlyOnce_OnDueTime_With_InfinitePeriod()
}

[OuterLoop("Waits seconds")]
[Fact]
[ConditionalFact(typeof(PlatformDetection), nameof(PlatformDetection.IsMultithreadingSupported))] // blocking waits and timer firing require threads, unavailable on single-threaded platforms
public void Timer_ChangeToDelete_DoesntFire()
{
RetryHelper.Execute(() =>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ public static void BitStackPushPop(int bitLength)
[OuterLoop]
[InlineData(3_200_000)]
[InlineData(int.MaxValue / 32 + 1)] // 67_108_864
[ActiveIssue("https://github.com/dotnet/runtime/issues/129973", typeof(PlatformDetection), nameof(PlatformDetection.IsBrowser), nameof(PlatformDetection.IsCoreCLR))]
public static void BitStackPushPopLarge(int bitLength)
{
BitStack bitStack = default;
Expand Down
Loading