Uh oh!
There was an error while loading. Please reload this page.
Fix CanReadArrayOfAnySize timeout on checked coreclr by skipping the 2 GB case on non-release runtimes - #126006
Conversation
…aseRuntime condition Co-authored-by: danmoseley <6385855+danmoseley@users.noreply.github.com> Agent-Logs-Url: https://github.com/dotnet/runtime/sessions/185c955f-9d8a-4286-94bf-f0af9fc6b65f
There was a problem hiding this comment.
Pull request overview
This PR updates a resource-intensive System.Formats.Nrbf test to avoid timing out when executed on non-Release runtimes (notably Checked CoreCLR), where additional runtime validation makes the existing workload too slow.
Changes:
- Add
PlatformDetection.IsReleaseRuntimeto theConditionalTheorygatingEdgeCaseTests.CanReadArrayOfAnySize, skipping it on Checked/Debug runtimes.
adamsitnik
left a comment
There was a problem hiding this comment.
@copilot apply my suggestion, but make sure it builds and tests are passing before you push the commit
Uh oh!
There was an error while loading. Please reload this page.
…f ConditionalTheory Co-authored-by: adamsitnik <6011991+adamsitnik@users.noreply.github.com> Agent-Logs-Url: https://github.com/dotnet/runtime/sessions/127eb19e-8537-496a-aeb8-6a23a106f8cd
Head branch was pushed to by a user without write access
adamsitnik
left a comment
There was a problem hiding this comment.
LGTM, thank you @danmoseley !
[Theory] does not handle SkipTestException - it treats the throw as a test failure. [ConditionalTheory] wires up a custom test invoker that catches SkipTestException and reports the test as skipped. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This comment has been minimized.
This comment has been minimized.
Uh oh!
There was an error while loading. Please reload this page.
This comment has been minimized.
This comment has been minimized.
Uh oh!
There was an error while loading. Please reload this page.
🤖 Copilot Code Review — PR #126006Holistic AssessmentMotivation: The PR addresses a real, recurring CI timeout — Approach: Replacing the compile-time guard with a runtime skip is the right approach, and using Summary: ❌ Needs Changes. The skip condition uses Detailed Findings❌ Skip condition does not fire on checked coreclr x64 — the reported CI legThe condition at line 71: if(length==2147483591&&(!PlatformDetection.Is64BitProcess||PlatformDetection.SlowRuntimeTimeoutModifier!=1||!PlatformDetection.IsNetCore))On checked coreclr windows x64 (the failing CI leg):
Result:
if(IsReleaseRuntime)// false — it's Checkedreturn1;if(IsRiscV64Process)// false — it's x64returnIsDebugRuntime?10:2;elsereturnIsDebugRuntime?5:1;// IsDebugRuntime is false (Checked ≠ Debug) → returns 1The three runtime modes ( Note: Suggested fix — revert to if(length==2147483591&&(!PlatformDetection.Is64BitProcess||!PlatformDetection.IsReleaseRuntime||!PlatformDetection.IsNetCore))Or, if (This finding was independently confirmed by both Claude Opus 4.6 and GPT-5.4.) ✅ |
danmoseley
commented
Mar 26, 2026
@copilot address feedback |
danmoseley
commented
Mar 26, 2026
@copilot it needs to skip on all checked runtimes whatever bitness. See text above |
… of any bitness Agent-Logs-Url: https://github.com/dotnet/runtime/sessions/558ab2d2-fd9c-4914-a0aa-7032325fc90c Co-authored-by: danmoseley <6385855+danmoseley@users.noreply.github.com>
Head branch was pushed to by a user without write access
Fixed in ff355fb. |
danmoseley
commented
Mar 27, 2026
/ba-g one issue opened, the others "cffi_backend" already have issue |
EdgeCaseTests.CanReadArrayOfAnySizerepeatedly times out (~14+ min) on thechecked coreclr windows x64 ReleaseCI leg. The 2 GB array case (Array.MaxLength = 2,147,483,591) was previously gated by#if RELEASE && NET, enabling it for Release library builds. However, checked coreclr's extra assertions/validation make processing a 2 GB array prohibitively slow.Description
Instead of skipping all test cases on non-release runtimes, the fix adds a targeted in-method skip guard for only the 2 GB case. The
#if RELEASE && NETpreprocessor guard and[ConditionalTheory]with platform conditions are replaced with[ConditionalTheory](no parameters, to allowSkipTestExceptionto be treated as a skip rather than a failure) and a runtime check inside the method body:The smaller cases (100, 64_001, 127_000) continue to run on all platforms and runtime configurations. The 2 GB case is skipped only when:
!IsReleaseRuntime, which covers both checked and debug coreclr of any bitness), or!PlatformDetection.IsReleaseRuntimeis used instead ofSlowRuntimeTimeoutModifier != 1becauseSlowRuntimeTimeoutModifierreturns1for checked (non-release, non-debug) builds, meaning it would not correctly skip the 2 GB test case on checked runtimes.Using
[ConditionalTheory]without parameters (instead of plain[Theory]) ensures thatSkipTestExceptionis correctly treated as a skip rather than a test failure.Original prompt
This section details on the original issue you should resolve
<issue_title>System.Formats.Nrbf.Tests.EdgeCaseTests.CanReadArrayOfAnySize times out on checked coreclr</issue_title>
<issue_description>## Build Information
Build: https://dev.azure.com/dnceng-public/public/_build/results?buildId=1348315
Leg Name: Libraries Test Run checked coreclr windows x64 Release
Error Message
{ "ErrorMessage": ["CanReadArrayOfAnySize", "timed out"], "BuildRetry": false, "ExcludeConsoleLog": false }Description
System.Formats.Nrbf.Tests.EdgeCaseTests.CanReadArrayOfAnySizetimes out after 14+ minutes on thechecked coreclr windows x64 Releaseleg. The test runs as a long-running test until the Helix work item is killed.Helix log: https://helix.dot.net/api/2019-06-17/jobs/c6faf158-7c28-4acb-bec6-ddcc415ba5e5/workitems/System.Formats.Nrbf.Tests/console
Previous occurrence: #110285 (closed December 2024)
Pull request where observed: #125961 (codeflow update, unrelated to the failure)
Known issue validation
Build: 🔎https://dev.azure.com/dnceng-public/public/_build/results?buildId=1348315
Error message validated:
[CanReadArrayOfAnySize timed out]Result validation: ✅ Known issue matched with the provided build.
Validation performed at: 3/23/2026 11:03:41 PM UTC
Report
🔒 GitHub Advanced Security automatically protects Copilot coding agent pull requests. You can protect all pull requests by enabling Advanced Security for your repositories. Learn more about Advanced Security.