Fix CanReadArrayOfAnySize timeout on checked coreclr by skipping the 2 GB case on non-release runtimes#126006
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
…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.
This comment has been minimized.
This comment has been minimized.
🤖 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 Checked
return 1;
if (IsRiscV64Process) // false — it's x64
return IsDebugRuntime ? 10 : 2;
else
return IsDebugRuntime ? 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.) ✅
|
|
@copilot address feedback |
|
@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. |
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.