[ios-clr] Fix library test failures on Apple mobile platforms - #125439

Closed
kotlarmilos wants to merge 59 commits into
dotnet:mainfrom
kotlarmilos:improvement/ios-clr-library-tests
Closed

[ios-clr] Fix library test failures on Apple mobile platforms#125439
kotlarmilos wants to merge 59 commits into
dotnet:mainfrom
kotlarmilos:improvement/ios-clr-library-tests

Conversation

@kotlarmilos

@kotlarmiloskotlarmilos commented Mar 11, 2026

Copy link
Copy Markdown
Member

Description

This PR fixes CoreCLR library test failures on Apple mobile platforms (iOS, tvOS, MacCatalyst) across simulators and devices. It resolves a native crash in SystemNative_GetOSArchitecture where utsname.machine returns hardware model identifiers instead of CPU architecture strings on real devices, causing a debug assert to fire. It skips tests on iOS/tvOS where the diagnostics IPC socket is unreachable inside the app sandbox. It also removes stale ActiveIssue attributes, updates test skip conditions for platform-specific behavior, fixes ILLink descriptor configurations, increases CI pipeline timeouts.

CopilotAI review requested due to automatic review settings March 11, 2026 12:56
@kotlarmiloskotlarmilos self-assigned this Mar 11, 2026
@kotlarmiloskotlarmilos added this to the 11.0.0 milestone Mar 11, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR aims to address failing test runs on Apple mobile (iOS/tvOS) when using CoreCLR by re-enabling previously skipped coverage and adjusting test/build configuration so those tests can execute successfully.

Changes:

  • Removed Apple mobile/CoreCLR ActiveIssue skips across several library tests and removed some Apple mobile project exclusions.
  • Updated CustomAttributeDecoderTests to derive the expected System.Type assembly-qualified string from metadata (more resilient to trimming/ILLink differences).
  • Adjusted test build targets to allow preview features/runtime-async on Apple mobile targets.

Reviewed changes

Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.

Show a summary per file
FileDescription
src/libraries/tests.projRemoves Apple mobile/CoreCLR exclusions for specific test projects so they run again.
src/libraries/System.Runtime/tests/System.Runtime.Tests/System/Reflection/InvokeWithRefLikeArgs.csRe-enables a previously skipped Apple mobile/CoreCLR test (still guarded by Reflection.Emit support).
src/libraries/System.Runtime/tests/System.Globalization.Calendars.Tests/CalendarTestWithConfigSwitch/CalendarTests.csRe-enables a previously skipped Apple mobile/CoreCLR calendar parsing test.
src/libraries/System.Runtime.Loader/tests/RefEmitLoadContext/RefEmitLoadContextTest.csRe-enables a previously skipped Apple mobile/CoreCLR Reflection.Emit load-context test.
src/libraries/System.Reflection.MetadataLoadContext/tests/src/Tests/CustomAttributes/DllImportTests.csReorders ActiveIssue attributes (no behavioral code change).
src/libraries/System.Reflection.Metadata/tests/Metadata/Decoding/CustomAttributeDecoderTests.csMakes expected System.Type string match decoder output post-trimming and avoids using Type.GetType for enum underlying types.
src/libraries/System.Collections/tests/BitArray/BitArray_CtorTests.csRe-enables a previously skipped Apple mobile/CoreCLR BitArray clone test.
eng/testing/tests.targetsEnables preview features/runtime-async for Apple mobile targets by removing an exclusion.
Comments suppressed due to low confidence (2)

src/libraries/System.Runtime/tests/System.Globalization.Calendars.Tests/CalendarTestWithConfigSwitch/CalendarTests.cs:25

  • The test comment says the legacy behavior "On mobile, this does not throw", but after removing the Apple mobile skip this test will run on Apple mobile and still asserts a FormatException. Either update the comment to the specific platform(s) where it doesn’t throw (e.g., Android-only), or extend the skip/condition so the assertion matches actual mobile behavior.
 [Fact]
[SkipOnPlatform(TestPlatforms.Android, "Doesn't throw on mobile")]
public static void TestJapaneseCalendarDateParsing()
{
CultureInfo ciJapanese = new CultureInfo("ja-JP") { DateTimeFormat = { Calendar = new JapaneseCalendar() } };
DateTime dt = new DateTime(1970, 1, 1);
string eraName = dt.ToString("gg", ciJapanese);
// Legacy behavior which we used to throw when using a year number exceeding the era max year.
//
// On mobile, this does not throw, but instead produces a DateTime w/ 95/01/01
Assert.ThrowsAny<FormatException>(() => DateTime.Parse(eraName + " 70/1/1 0:00:00", ciJapanese));
}

src/libraries/System.Collections/tests/BitArray/BitArray_CtorTests.cs:280

  • Re-enabling this test on Apple mobile means it will allocate a BitArray of length int.MaxValue-30 (~256MB+), which is likely to OOM or heavily destabilize test runs on memory-constrained devices. Consider reducing the allocation size while still covering the clone path, or gating this test (e.g., OuterLoop / platform-conditional) for constrained environments.
 [Fact]
public static void Clone_LongLength_Works()
{
BitArray bitArray = new BitArray(int.MaxValue - 30);
BitArray clone = (BitArray)bitArray.Clone();
Assert.Equal(bitArray.Length, clone.Length);
}

You can also share your feedback on Copilot code review. Take the survey.

CopilotAI review requested due to automatic review settings March 13, 2026 07:55

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated no new comments.


You can also share your feedback on Copilot code review. Take the survey.

@kotlarmilos

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-ioslike

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@kotlarmiloskotlarmilos changed the title [ios-clr] Remove ActiveIssue references for Apple Mobile in various tests and update project exclusions[ios-clr] Remove ActiveIssue references for CoreCLR library tests on Apple mobileMar 16, 2026
@kotlarmiloskotlarmilos changed the title [ios-clr] Remove ActiveIssue references for CoreCLR library tests on Apple mobile[ios-clr] Remove ActiveIssue attribute for CoreCLR library tests on Apple mobileMar 16, 2026
@kotlarmiloskotlarmilos added os-ios Apple iOS area-Infrastructure-coreclr Only use for closed issues and removed area-System.Reflection labels Mar 16, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 40 out of 40 changed files in this pull request and generated 2 comments.

Comment threadsrc/libraries/Microsoft.VisualBasic.Core/tests/ErrObjectTests.cs Outdated
…remove Apple mobile specific checks; update AssemblyLoadContextTest to exclude MacCatalyst; remove unused ILLink descriptors; clean up AppleBuild.props by removing obsolete properties.
…milos/runtime into improvement/ios-clr-library-tests
CopilotAI review requested due to automatic review settings April 15, 2026 13:49

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 36 out of 37 changed files in this pull request and generated 3 comments.

@kotlarmilos

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-extra-platforms

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 36 out of 37 changed files in this pull request and generated 4 comments.

Comment on lines +15 to +18
// After ILLink/trimming, type references may point to System.Private.CoreLib
// instead of System.Runtime. Read the actual assembly reference from metadata
// so that expected values match what the decoder produces.
private static readonly string s_systemTypeString = GetSystemTypeStringFromMetadata();

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@sbomer if we were to set trim action to copy on the test assembly, would this still rewrite forwarders, or would it keep things?

(I'm not a fan of this extra complexity)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Moving to #127059

@kotlarmilos

Copy link
Copy Markdown
MemberAuthor

This PR is too broad, splitting it into smaller more focused PRs instead

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Infrastructure-coreclrOnly use for closed issueslinkable-frameworkIssues associated with delivering a linker friendly frameworkos-iosApple iOS

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

6 participants

@kotlarmilos@vitek-karas@akoeplinger@jkotas@MichalStrehovsky
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n 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;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

[ios-clr] Fix library test failures on Apple mobile platforms - #125439

Closed
kotlarmilos wants to merge 59 commits into
dotnet:mainfrom
kotlarmilos:improvement/ios-clr-library-tests
Closed

[ios-clr] Fix library test failures on Apple mobile platforms#125439
kotlarmilos wants to merge 59 commits into
dotnet:mainfrom
kotlarmilos:improvement/ios-clr-library-tests

Conversation

@kotlarmilos

@kotlarmiloskotlarmilos commented Mar 11, 2026

Copy link
Copy Markdown
Member

Description

This PR fixes CoreCLR library test failures on Apple mobile platforms (iOS, tvOS, MacCatalyst) across simulators and devices. It resolves a native crash in SystemNative_GetOSArchitecture where utsname.machine returns hardware model identifiers instead of CPU architecture strings on real devices, causing a debug assert to fire. It skips tests on iOS/tvOS where the diagnostics IPC socket is unreachable inside the app sandbox. It also removes stale ActiveIssue attributes, updates test skip conditions for platform-specific behavior, fixes ILLink descriptor configurations, increases CI pipeline timeouts.

CopilotAI review requested due to automatic review settings March 11, 2026 12:56
@kotlarmiloskotlarmilos self-assigned this Mar 11, 2026
@kotlarmiloskotlarmilos added this to the 11.0.0 milestone Mar 11, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR aims to address failing test runs on Apple mobile (iOS/tvOS) when using CoreCLR by re-enabling previously skipped coverage and adjusting test/build configuration so those tests can execute successfully.

Changes:

  • Removed Apple mobile/CoreCLR ActiveIssue skips across several library tests and removed some Apple mobile project exclusions.
  • Updated CustomAttributeDecoderTests to derive the expected System.Type assembly-qualified string from metadata (more resilient to trimming/ILLink differences).
  • Adjusted test build targets to allow preview features/runtime-async on Apple mobile targets.

Reviewed changes

Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.

Show a summary per file
FileDescription
src/libraries/tests.projRemoves Apple mobile/CoreCLR exclusions for specific test projects so they run again.
src/libraries/System.Runtime/tests/System.Runtime.Tests/System/Reflection/InvokeWithRefLikeArgs.csRe-enables a previously skipped Apple mobile/CoreCLR test (still guarded by Reflection.Emit support).
src/libraries/System.Runtime/tests/System.Globalization.Calendars.Tests/CalendarTestWithConfigSwitch/CalendarTests.csRe-enables a previously skipped Apple mobile/CoreCLR calendar parsing test.
src/libraries/System.Runtime.Loader/tests/RefEmitLoadContext/RefEmitLoadContextTest.csRe-enables a previously skipped Apple mobile/CoreCLR Reflection.Emit load-context test.
src/libraries/System.Reflection.MetadataLoadContext/tests/src/Tests/CustomAttributes/DllImportTests.csReorders ActiveIssue attributes (no behavioral code change).
src/libraries/System.Reflection.Metadata/tests/Metadata/Decoding/CustomAttributeDecoderTests.csMakes expected System.Type string match decoder output post-trimming and avoids using Type.GetType for enum underlying types.
src/libraries/System.Collections/tests/BitArray/BitArray_CtorTests.csRe-enables a previously skipped Apple mobile/CoreCLR BitArray clone test.
eng/testing/tests.targetsEnables preview features/runtime-async for Apple mobile targets by removing an exclusion.
Comments suppressed due to low confidence (2)

src/libraries/System.Runtime/tests/System.Globalization.Calendars.Tests/CalendarTestWithConfigSwitch/CalendarTests.cs:25

  • The test comment says the legacy behavior "On mobile, this does not throw", but after removing the Apple mobile skip this test will run on Apple mobile and still asserts a FormatException. Either update the comment to the specific platform(s) where it doesn’t throw (e.g., Android-only), or extend the skip/condition so the assertion matches actual mobile behavior.
 [Fact]
[SkipOnPlatform(TestPlatforms.Android, "Doesn't throw on mobile")]
public static void TestJapaneseCalendarDateParsing()
{
CultureInfo ciJapanese = new CultureInfo("ja-JP") { DateTimeFormat = { Calendar = new JapaneseCalendar() } };
DateTime dt = new DateTime(1970, 1, 1);
string eraName = dt.ToString("gg", ciJapanese);
// Legacy behavior which we used to throw when using a year number exceeding the era max year.
//
// On mobile, this does not throw, but instead produces a DateTime w/ 95/01/01
Assert.ThrowsAny<FormatException>(() => DateTime.Parse(eraName + " 70/1/1 0:00:00", ciJapanese));
}

src/libraries/System.Collections/tests/BitArray/BitArray_CtorTests.cs:280

  • Re-enabling this test on Apple mobile means it will allocate a BitArray of length int.MaxValue-30 (~256MB+), which is likely to OOM or heavily destabilize test runs on memory-constrained devices. Consider reducing the allocation size while still covering the clone path, or gating this test (e.g., OuterLoop / platform-conditional) for constrained environments.
 [Fact]
public static void Clone_LongLength_Works()
{
BitArray bitArray = new BitArray(int.MaxValue - 30);
BitArray clone = (BitArray)bitArray.Clone();
Assert.Equal(bitArray.Length, clone.Length);
}

You can also share your feedback on Copilot code review. Take the survey.

CopilotAI review requested due to automatic review settings March 13, 2026 07:55

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated no new comments.


You can also share your feedback on Copilot code review. Take the survey.

@kotlarmilos

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-ioslike

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@kotlarmiloskotlarmilos changed the title [ios-clr] Remove ActiveIssue references for Apple Mobile in various tests and update project exclusions[ios-clr] Remove ActiveIssue references for CoreCLR library tests on Apple mobileMar 16, 2026
@kotlarmiloskotlarmilos changed the title [ios-clr] Remove ActiveIssue references for CoreCLR library tests on Apple mobile[ios-clr] Remove ActiveIssue attribute for CoreCLR library tests on Apple mobileMar 16, 2026
@kotlarmiloskotlarmilos added os-ios Apple iOS area-Infrastructure-coreclr Only use for closed issues and removed area-System.Reflection labels Mar 16, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 40 out of 40 changed files in this pull request and generated 2 comments.

Comment threadsrc/libraries/Microsoft.VisualBasic.Core/tests/ErrObjectTests.cs Outdated
…remove Apple mobile specific checks; update AssemblyLoadContextTest to exclude MacCatalyst; remove unused ILLink descriptors; clean up AppleBuild.props by removing obsolete properties.
…milos/runtime into improvement/ios-clr-library-tests
CopilotAI review requested due to automatic review settings April 15, 2026 13:49

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 36 out of 37 changed files in this pull request and generated 3 comments.

@kotlarmilos

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-extra-platforms

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 36 out of 37 changed files in this pull request and generated 4 comments.

Comment on lines +15 to +18
// After ILLink/trimming, type references may point to System.Private.CoreLib
// instead of System.Runtime. Read the actual assembly reference from metadata
// so that expected values match what the decoder produces.
private static readonly string s_systemTypeString = GetSystemTypeStringFromMetadata();

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@sbomer if we were to set trim action to copy on the test assembly, would this still rewrite forwarders, or would it keep things?

(I'm not a fan of this extra complexity)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Moving to #127059

@kotlarmilos

Copy link
Copy Markdown
MemberAuthor

This PR is too broad, splitting it into smaller more focused PRs instead

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Infrastructure-coreclrOnly use for closed issueslinkable-frameworkIssues associated with delivering a linker friendly frameworkos-iosApple iOS

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

6 participants

@kotlarmilos@vitek-karas@akoeplinger@jkotas@MichalStrehovsky
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[ios-clr] Fix library test failures on Apple mobile platforms - #125439

Closed
kotlarmilos wants to merge 59 commits into
dotnet:mainfrom
kotlarmilos:improvement/ios-clr-library-tests
Closed

[ios-clr] Fix library test failures on Apple mobile platforms#125439
kotlarmilos wants to merge 59 commits into
dotnet:mainfrom
kotlarmilos:improvement/ios-clr-library-tests

Conversation

@kotlarmilos

@kotlarmiloskotlarmilos commented Mar 11, 2026

Copy link
Copy Markdown
Member

Description

This PR fixes CoreCLR library test failures on Apple mobile platforms (iOS, tvOS, MacCatalyst) across simulators and devices. It resolves a native crash in SystemNative_GetOSArchitecture where utsname.machine returns hardware model identifiers instead of CPU architecture strings on real devices, causing a debug assert to fire. It skips tests on iOS/tvOS where the diagnostics IPC socket is unreachable inside the app sandbox. It also removes stale ActiveIssue attributes, updates test skip conditions for platform-specific behavior, fixes ILLink descriptor configurations, increases CI pipeline timeouts.

CopilotAI review requested due to automatic review settings March 11, 2026 12:56
@kotlarmiloskotlarmilos self-assigned this Mar 11, 2026
@kotlarmiloskotlarmilos added this to the 11.0.0 milestone Mar 11, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR aims to address failing test runs on Apple mobile (iOS/tvOS) when using CoreCLR by re-enabling previously skipped coverage and adjusting test/build configuration so those tests can execute successfully.

Changes:

  • Removed Apple mobile/CoreCLR ActiveIssue skips across several library tests and removed some Apple mobile project exclusions.
  • Updated CustomAttributeDecoderTests to derive the expected System.Type assembly-qualified string from metadata (more resilient to trimming/ILLink differences).
  • Adjusted test build targets to allow preview features/runtime-async on Apple mobile targets.

Reviewed changes

Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.

Show a summary per file
FileDescription
src/libraries/tests.projRemoves Apple mobile/CoreCLR exclusions for specific test projects so they run again.
src/libraries/System.Runtime/tests/System.Runtime.Tests/System/Reflection/InvokeWithRefLikeArgs.csRe-enables a previously skipped Apple mobile/CoreCLR test (still guarded by Reflection.Emit support).
src/libraries/System.Runtime/tests/System.Globalization.Calendars.Tests/CalendarTestWithConfigSwitch/CalendarTests.csRe-enables a previously skipped Apple mobile/CoreCLR calendar parsing test.
src/libraries/System.Runtime.Loader/tests/RefEmitLoadContext/RefEmitLoadContextTest.csRe-enables a previously skipped Apple mobile/CoreCLR Reflection.Emit load-context test.
src/libraries/System.Reflection.MetadataLoadContext/tests/src/Tests/CustomAttributes/DllImportTests.csReorders ActiveIssue attributes (no behavioral code change).
src/libraries/System.Reflection.Metadata/tests/Metadata/Decoding/CustomAttributeDecoderTests.csMakes expected System.Type string match decoder output post-trimming and avoids using Type.GetType for enum underlying types.
src/libraries/System.Collections/tests/BitArray/BitArray_CtorTests.csRe-enables a previously skipped Apple mobile/CoreCLR BitArray clone test.
eng/testing/tests.targetsEnables preview features/runtime-async for Apple mobile targets by removing an exclusion.
Comments suppressed due to low confidence (2)

src/libraries/System.Runtime/tests/System.Globalization.Calendars.Tests/CalendarTestWithConfigSwitch/CalendarTests.cs:25

  • The test comment says the legacy behavior "On mobile, this does not throw", but after removing the Apple mobile skip this test will run on Apple mobile and still asserts a FormatException. Either update the comment to the specific platform(s) where it doesn’t throw (e.g., Android-only), or extend the skip/condition so the assertion matches actual mobile behavior.
 [Fact]
[SkipOnPlatform(TestPlatforms.Android, "Doesn't throw on mobile")]
public static void TestJapaneseCalendarDateParsing()
{
CultureInfo ciJapanese = new CultureInfo("ja-JP") { DateTimeFormat = { Calendar = new JapaneseCalendar() } };
DateTime dt = new DateTime(1970, 1, 1);
string eraName = dt.ToString("gg", ciJapanese);
// Legacy behavior which we used to throw when using a year number exceeding the era max year.
//
// On mobile, this does not throw, but instead produces a DateTime w/ 95/01/01
Assert.ThrowsAny<FormatException>(() => DateTime.Parse(eraName + " 70/1/1 0:00:00", ciJapanese));
}

src/libraries/System.Collections/tests/BitArray/BitArray_CtorTests.cs:280

  • Re-enabling this test on Apple mobile means it will allocate a BitArray of length int.MaxValue-30 (~256MB+), which is likely to OOM or heavily destabilize test runs on memory-constrained devices. Consider reducing the allocation size while still covering the clone path, or gating this test (e.g., OuterLoop / platform-conditional) for constrained environments.
 [Fact]
public static void Clone_LongLength_Works()
{
BitArray bitArray = new BitArray(int.MaxValue - 30);
BitArray clone = (BitArray)bitArray.Clone();
Assert.Equal(bitArray.Length, clone.Length);
}

You can also share your feedback on Copilot code review. Take the survey.

CopilotAI review requested due to automatic review settings March 13, 2026 07:55

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated no new comments.


You can also share your feedback on Copilot code review. Take the survey.

@kotlarmilos

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-ioslike

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@kotlarmiloskotlarmilos changed the title [ios-clr] Remove ActiveIssue references for Apple Mobile in various tests and update project exclusions[ios-clr] Remove ActiveIssue references for CoreCLR library tests on Apple mobileMar 16, 2026
@kotlarmiloskotlarmilos changed the title [ios-clr] Remove ActiveIssue references for CoreCLR library tests on Apple mobile[ios-clr] Remove ActiveIssue attribute for CoreCLR library tests on Apple mobileMar 16, 2026
@kotlarmiloskotlarmilos added os-ios Apple iOS area-Infrastructure-coreclr Only use for closed issues and removed area-System.Reflection labels Mar 16, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 40 out of 40 changed files in this pull request and generated 2 comments.

Comment threadsrc/libraries/Microsoft.VisualBasic.Core/tests/ErrObjectTests.cs Outdated
…remove Apple mobile specific checks; update AssemblyLoadContextTest to exclude MacCatalyst; remove unused ILLink descriptors; clean up AppleBuild.props by removing obsolete properties.
…milos/runtime into improvement/ios-clr-library-tests
CopilotAI review requested due to automatic review settings April 15, 2026 13:49

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 36 out of 37 changed files in this pull request and generated 3 comments.

@kotlarmilos

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-extra-platforms

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 36 out of 37 changed files in this pull request and generated 4 comments.

Comment on lines +15 to +18
// After ILLink/trimming, type references may point to System.Private.CoreLib
// instead of System.Runtime. Read the actual assembly reference from metadata
// so that expected values match what the decoder produces.
private static readonly string s_systemTypeString = GetSystemTypeStringFromMetadata();

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@sbomer if we were to set trim action to copy on the test assembly, would this still rewrite forwarders, or would it keep things?

(I'm not a fan of this extra complexity)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Moving to #127059

@kotlarmilos

Copy link
Copy Markdown
MemberAuthor

This PR is too broad, splitting it into smaller more focused PRs instead

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Infrastructure-coreclrOnly use for closed issueslinkable-frameworkIssues associated with delivering a linker friendly frameworkos-iosApple iOS

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

6 participants

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

[ios-clr] Fix library test failures on Apple mobile platforms - #125439

Closed
kotlarmilos wants to merge 59 commits into
dotnet:mainfrom
kotlarmilos:improvement/ios-clr-library-tests
Closed

[ios-clr] Fix library test failures on Apple mobile platforms#125439
kotlarmilos wants to merge 59 commits into
dotnet:mainfrom
kotlarmilos:improvement/ios-clr-library-tests

Conversation

@kotlarmilos

@kotlarmiloskotlarmilos commented Mar 11, 2026

Copy link
Copy Markdown
Member

Description

This PR fixes CoreCLR library test failures on Apple mobile platforms (iOS, tvOS, MacCatalyst) across simulators and devices. It resolves a native crash in SystemNative_GetOSArchitecture where utsname.machine returns hardware model identifiers instead of CPU architecture strings on real devices, causing a debug assert to fire. It skips tests on iOS/tvOS where the diagnostics IPC socket is unreachable inside the app sandbox. It also removes stale ActiveIssue attributes, updates test skip conditions for platform-specific behavior, fixes ILLink descriptor configurations, increases CI pipeline timeouts.

CopilotAI review requested due to automatic review settings March 11, 2026 12:56
@kotlarmiloskotlarmilos self-assigned this Mar 11, 2026
@kotlarmiloskotlarmilos added this to the 11.0.0 milestone Mar 11, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR aims to address failing test runs on Apple mobile (iOS/tvOS) when using CoreCLR by re-enabling previously skipped coverage and adjusting test/build configuration so those tests can execute successfully.

Changes:

  • Removed Apple mobile/CoreCLR ActiveIssue skips across several library tests and removed some Apple mobile project exclusions.
  • Updated CustomAttributeDecoderTests to derive the expected System.Type assembly-qualified string from metadata (more resilient to trimming/ILLink differences).
  • Adjusted test build targets to allow preview features/runtime-async on Apple mobile targets.

Reviewed changes

Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.

Show a summary per file
FileDescription
src/libraries/tests.projRemoves Apple mobile/CoreCLR exclusions for specific test projects so they run again.
src/libraries/System.Runtime/tests/System.Runtime.Tests/System/Reflection/InvokeWithRefLikeArgs.csRe-enables a previously skipped Apple mobile/CoreCLR test (still guarded by Reflection.Emit support).
src/libraries/System.Runtime/tests/System.Globalization.Calendars.Tests/CalendarTestWithConfigSwitch/CalendarTests.csRe-enables a previously skipped Apple mobile/CoreCLR calendar parsing test.
src/libraries/System.Runtime.Loader/tests/RefEmitLoadContext/RefEmitLoadContextTest.csRe-enables a previously skipped Apple mobile/CoreCLR Reflection.Emit load-context test.
src/libraries/System.Reflection.MetadataLoadContext/tests/src/Tests/CustomAttributes/DllImportTests.csReorders ActiveIssue attributes (no behavioral code change).
src/libraries/System.Reflection.Metadata/tests/Metadata/Decoding/CustomAttributeDecoderTests.csMakes expected System.Type string match decoder output post-trimming and avoids using Type.GetType for enum underlying types.
src/libraries/System.Collections/tests/BitArray/BitArray_CtorTests.csRe-enables a previously skipped Apple mobile/CoreCLR BitArray clone test.
eng/testing/tests.targetsEnables preview features/runtime-async for Apple mobile targets by removing an exclusion.
Comments suppressed due to low confidence (2)

src/libraries/System.Runtime/tests/System.Globalization.Calendars.Tests/CalendarTestWithConfigSwitch/CalendarTests.cs:25

  • The test comment says the legacy behavior "On mobile, this does not throw", but after removing the Apple mobile skip this test will run on Apple mobile and still asserts a FormatException. Either update the comment to the specific platform(s) where it doesn’t throw (e.g., Android-only), or extend the skip/condition so the assertion matches actual mobile behavior.
 [Fact]
[SkipOnPlatform(TestPlatforms.Android, "Doesn't throw on mobile")]
public static void TestJapaneseCalendarDateParsing()
{
CultureInfo ciJapanese = new CultureInfo("ja-JP") { DateTimeFormat = { Calendar = new JapaneseCalendar() } };
DateTime dt = new DateTime(1970, 1, 1);
string eraName = dt.ToString("gg", ciJapanese);
// Legacy behavior which we used to throw when using a year number exceeding the era max year.
//
// On mobile, this does not throw, but instead produces a DateTime w/ 95/01/01
Assert.ThrowsAny<FormatException>(() => DateTime.Parse(eraName + " 70/1/1 0:00:00", ciJapanese));
}

src/libraries/System.Collections/tests/BitArray/BitArray_CtorTests.cs:280

  • Re-enabling this test on Apple mobile means it will allocate a BitArray of length int.MaxValue-30 (~256MB+), which is likely to OOM or heavily destabilize test runs on memory-constrained devices. Consider reducing the allocation size while still covering the clone path, or gating this test (e.g., OuterLoop / platform-conditional) for constrained environments.
 [Fact]
public static void Clone_LongLength_Works()
{
BitArray bitArray = new BitArray(int.MaxValue - 30);
BitArray clone = (BitArray)bitArray.Clone();
Assert.Equal(bitArray.Length, clone.Length);
}

You can also share your feedback on Copilot code review. Take the survey.

CopilotAI review requested due to automatic review settings March 13, 2026 07:55

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated no new comments.


You can also share your feedback on Copilot code review. Take the survey.

@kotlarmilos

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-ioslike

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@kotlarmiloskotlarmilos changed the title [ios-clr] Remove ActiveIssue references for Apple Mobile in various tests and update project exclusions[ios-clr] Remove ActiveIssue references for CoreCLR library tests on Apple mobileMar 16, 2026
@kotlarmiloskotlarmilos changed the title [ios-clr] Remove ActiveIssue references for CoreCLR library tests on Apple mobile[ios-clr] Remove ActiveIssue attribute for CoreCLR library tests on Apple mobileMar 16, 2026
@kotlarmiloskotlarmilos added os-ios Apple iOS area-Infrastructure-coreclr Only use for closed issues and removed area-System.Reflection labels Mar 16, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 40 out of 40 changed files in this pull request and generated 2 comments.

Comment threadsrc/libraries/Microsoft.VisualBasic.Core/tests/ErrObjectTests.cs Outdated
…remove Apple mobile specific checks; update AssemblyLoadContextTest to exclude MacCatalyst; remove unused ILLink descriptors; clean up AppleBuild.props by removing obsolete properties.
…milos/runtime into improvement/ios-clr-library-tests
CopilotAI review requested due to automatic review settings April 15, 2026 13:49

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 36 out of 37 changed files in this pull request and generated 3 comments.

@kotlarmilos

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-extra-platforms

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 36 out of 37 changed files in this pull request and generated 4 comments.

Comment on lines +15 to +18
// After ILLink/trimming, type references may point to System.Private.CoreLib
// instead of System.Runtime. Read the actual assembly reference from metadata
// so that expected values match what the decoder produces.
private static readonly string s_systemTypeString = GetSystemTypeStringFromMetadata();

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@sbomer if we were to set trim action to copy on the test assembly, would this still rewrite forwarders, or would it keep things?

(I'm not a fan of this extra complexity)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Moving to #127059

@kotlarmilos

Copy link
Copy Markdown
MemberAuthor

This PR is too broad, splitting it into smaller more focused PRs instead

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Infrastructure-coreclrOnly use for closed issueslinkable-frameworkIssues associated with delivering a linker friendly frameworkos-iosApple iOS

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

6 participants

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

[ios-clr] Fix library test failures on Apple mobile platforms - #125439

Closed
kotlarmilos wants to merge 59 commits into
dotnet:mainfrom
kotlarmilos:improvement/ios-clr-library-tests
Closed

[ios-clr] Fix library test failures on Apple mobile platforms#125439
kotlarmilos wants to merge 59 commits into
dotnet:mainfrom
kotlarmilos:improvement/ios-clr-library-tests

Conversation

@kotlarmilos

@kotlarmiloskotlarmilos commented Mar 11, 2026

Copy link
Copy Markdown
Member

Description

This PR fixes CoreCLR library test failures on Apple mobile platforms (iOS, tvOS, MacCatalyst) across simulators and devices. It resolves a native crash in SystemNative_GetOSArchitecture where utsname.machine returns hardware model identifiers instead of CPU architecture strings on real devices, causing a debug assert to fire. It skips tests on iOS/tvOS where the diagnostics IPC socket is unreachable inside the app sandbox. It also removes stale ActiveIssue attributes, updates test skip conditions for platform-specific behavior, fixes ILLink descriptor configurations, increases CI pipeline timeouts.

CopilotAI review requested due to automatic review settings March 11, 2026 12:56
@kotlarmiloskotlarmilos self-assigned this Mar 11, 2026
@kotlarmiloskotlarmilos added this to the 11.0.0 milestone Mar 11, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR aims to address failing test runs on Apple mobile (iOS/tvOS) when using CoreCLR by re-enabling previously skipped coverage and adjusting test/build configuration so those tests can execute successfully.

Changes:

  • Removed Apple mobile/CoreCLR ActiveIssue skips across several library tests and removed some Apple mobile project exclusions.
  • Updated CustomAttributeDecoderTests to derive the expected System.Type assembly-qualified string from metadata (more resilient to trimming/ILLink differences).
  • Adjusted test build targets to allow preview features/runtime-async on Apple mobile targets.

Reviewed changes

Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.

Show a summary per file
FileDescription
src/libraries/tests.projRemoves Apple mobile/CoreCLR exclusions for specific test projects so they run again.
src/libraries/System.Runtime/tests/System.Runtime.Tests/System/Reflection/InvokeWithRefLikeArgs.csRe-enables a previously skipped Apple mobile/CoreCLR test (still guarded by Reflection.Emit support).
src/libraries/System.Runtime/tests/System.Globalization.Calendars.Tests/CalendarTestWithConfigSwitch/CalendarTests.csRe-enables a previously skipped Apple mobile/CoreCLR calendar parsing test.
src/libraries/System.Runtime.Loader/tests/RefEmitLoadContext/RefEmitLoadContextTest.csRe-enables a previously skipped Apple mobile/CoreCLR Reflection.Emit load-context test.
src/libraries/System.Reflection.MetadataLoadContext/tests/src/Tests/CustomAttributes/DllImportTests.csReorders ActiveIssue attributes (no behavioral code change).
src/libraries/System.Reflection.Metadata/tests/Metadata/Decoding/CustomAttributeDecoderTests.csMakes expected System.Type string match decoder output post-trimming and avoids using Type.GetType for enum underlying types.
src/libraries/System.Collections/tests/BitArray/BitArray_CtorTests.csRe-enables a previously skipped Apple mobile/CoreCLR BitArray clone test.
eng/testing/tests.targetsEnables preview features/runtime-async for Apple mobile targets by removing an exclusion.
Comments suppressed due to low confidence (2)

src/libraries/System.Runtime/tests/System.Globalization.Calendars.Tests/CalendarTestWithConfigSwitch/CalendarTests.cs:25

  • The test comment says the legacy behavior "On mobile, this does not throw", but after removing the Apple mobile skip this test will run on Apple mobile and still asserts a FormatException. Either update the comment to the specific platform(s) where it doesn’t throw (e.g., Android-only), or extend the skip/condition so the assertion matches actual mobile behavior.
 [Fact]
[SkipOnPlatform(TestPlatforms.Android, "Doesn't throw on mobile")]
public static void TestJapaneseCalendarDateParsing()
{
CultureInfo ciJapanese = new CultureInfo("ja-JP") { DateTimeFormat = { Calendar = new JapaneseCalendar() } };
DateTime dt = new DateTime(1970, 1, 1);
string eraName = dt.ToString("gg", ciJapanese);
// Legacy behavior which we used to throw when using a year number exceeding the era max year.
//
// On mobile, this does not throw, but instead produces a DateTime w/ 95/01/01
Assert.ThrowsAny<FormatException>(() => DateTime.Parse(eraName + " 70/1/1 0:00:00", ciJapanese));
}

src/libraries/System.Collections/tests/BitArray/BitArray_CtorTests.cs:280

  • Re-enabling this test on Apple mobile means it will allocate a BitArray of length int.MaxValue-30 (~256MB+), which is likely to OOM or heavily destabilize test runs on memory-constrained devices. Consider reducing the allocation size while still covering the clone path, or gating this test (e.g., OuterLoop / platform-conditional) for constrained environments.
 [Fact]
public static void Clone_LongLength_Works()
{
BitArray bitArray = new BitArray(int.MaxValue - 30);
BitArray clone = (BitArray)bitArray.Clone();
Assert.Equal(bitArray.Length, clone.Length);
}

You can also share your feedback on Copilot code review. Take the survey.

CopilotAI review requested due to automatic review settings March 13, 2026 07:55

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated no new comments.


You can also share your feedback on Copilot code review. Take the survey.

@kotlarmilos

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-ioslike

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@kotlarmiloskotlarmilos changed the title [ios-clr] Remove ActiveIssue references for Apple Mobile in various tests and update project exclusions[ios-clr] Remove ActiveIssue references for CoreCLR library tests on Apple mobileMar 16, 2026
@kotlarmiloskotlarmilos changed the title [ios-clr] Remove ActiveIssue references for CoreCLR library tests on Apple mobile[ios-clr] Remove ActiveIssue attribute for CoreCLR library tests on Apple mobileMar 16, 2026
@kotlarmiloskotlarmilos added os-ios Apple iOS area-Infrastructure-coreclr Only use for closed issues and removed area-System.Reflection labels Mar 16, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 40 out of 40 changed files in this pull request and generated 2 comments.

Comment threadsrc/libraries/Microsoft.VisualBasic.Core/tests/ErrObjectTests.cs Outdated
…remove Apple mobile specific checks; update AssemblyLoadContextTest to exclude MacCatalyst; remove unused ILLink descriptors; clean up AppleBuild.props by removing obsolete properties.
…milos/runtime into improvement/ios-clr-library-tests
CopilotAI review requested due to automatic review settings April 15, 2026 13:49

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 36 out of 37 changed files in this pull request and generated 3 comments.

@kotlarmilos

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-extra-platforms

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 36 out of 37 changed files in this pull request and generated 4 comments.

Comment on lines +15 to +18
// After ILLink/trimming, type references may point to System.Private.CoreLib
// instead of System.Runtime. Read the actual assembly reference from metadata
// so that expected values match what the decoder produces.
private static readonly string s_systemTypeString = GetSystemTypeStringFromMetadata();

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@sbomer if we were to set trim action to copy on the test assembly, would this still rewrite forwarders, or would it keep things?

(I'm not a fan of this extra complexity)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Moving to #127059

@kotlarmilos

Copy link
Copy Markdown
MemberAuthor

This PR is too broad, splitting it into smaller more focused PRs instead

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Infrastructure-coreclrOnly use for closed issueslinkable-frameworkIssues associated with delivering a linker friendly frameworkos-iosApple iOS

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

6 participants

@kotlarmilos@vitek-karas@akoeplinger@jkotas@MichalStrehovsky
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[ios-clr] Fix library test failures on Apple mobile platforms - #125439

Closed
kotlarmilos wants to merge 59 commits into
dotnet:mainfrom
kotlarmilos:improvement/ios-clr-library-tests
Closed

[ios-clr] Fix library test failures on Apple mobile platforms#125439
kotlarmilos wants to merge 59 commits into
dotnet:mainfrom
kotlarmilos:improvement/ios-clr-library-tests

Conversation

@kotlarmilos

@kotlarmiloskotlarmilos commented Mar 11, 2026

Copy link
Copy Markdown
Member

Description

This PR fixes CoreCLR library test failures on Apple mobile platforms (iOS, tvOS, MacCatalyst) across simulators and devices. It resolves a native crash in SystemNative_GetOSArchitecture where utsname.machine returns hardware model identifiers instead of CPU architecture strings on real devices, causing a debug assert to fire. It skips tests on iOS/tvOS where the diagnostics IPC socket is unreachable inside the app sandbox. It also removes stale ActiveIssue attributes, updates test skip conditions for platform-specific behavior, fixes ILLink descriptor configurations, increases CI pipeline timeouts.

CopilotAI review requested due to automatic review settings March 11, 2026 12:56
@kotlarmiloskotlarmilos self-assigned this Mar 11, 2026
@kotlarmiloskotlarmilos added this to the 11.0.0 milestone Mar 11, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR aims to address failing test runs on Apple mobile (iOS/tvOS) when using CoreCLR by re-enabling previously skipped coverage and adjusting test/build configuration so those tests can execute successfully.

Changes:

  • Removed Apple mobile/CoreCLR ActiveIssue skips across several library tests and removed some Apple mobile project exclusions.
  • Updated CustomAttributeDecoderTests to derive the expected System.Type assembly-qualified string from metadata (more resilient to trimming/ILLink differences).
  • Adjusted test build targets to allow preview features/runtime-async on Apple mobile targets.

Reviewed changes

Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.

Show a summary per file
FileDescription
src/libraries/tests.projRemoves Apple mobile/CoreCLR exclusions for specific test projects so they run again.
src/libraries/System.Runtime/tests/System.Runtime.Tests/System/Reflection/InvokeWithRefLikeArgs.csRe-enables a previously skipped Apple mobile/CoreCLR test (still guarded by Reflection.Emit support).
src/libraries/System.Runtime/tests/System.Globalization.Calendars.Tests/CalendarTestWithConfigSwitch/CalendarTests.csRe-enables a previously skipped Apple mobile/CoreCLR calendar parsing test.
src/libraries/System.Runtime.Loader/tests/RefEmitLoadContext/RefEmitLoadContextTest.csRe-enables a previously skipped Apple mobile/CoreCLR Reflection.Emit load-context test.
src/libraries/System.Reflection.MetadataLoadContext/tests/src/Tests/CustomAttributes/DllImportTests.csReorders ActiveIssue attributes (no behavioral code change).
src/libraries/System.Reflection.Metadata/tests/Metadata/Decoding/CustomAttributeDecoderTests.csMakes expected System.Type string match decoder output post-trimming and avoids using Type.GetType for enum underlying types.
src/libraries/System.Collections/tests/BitArray/BitArray_CtorTests.csRe-enables a previously skipped Apple mobile/CoreCLR BitArray clone test.
eng/testing/tests.targetsEnables preview features/runtime-async for Apple mobile targets by removing an exclusion.
Comments suppressed due to low confidence (2)

src/libraries/System.Runtime/tests/System.Globalization.Calendars.Tests/CalendarTestWithConfigSwitch/CalendarTests.cs:25

  • The test comment says the legacy behavior "On mobile, this does not throw", but after removing the Apple mobile skip this test will run on Apple mobile and still asserts a FormatException. Either update the comment to the specific platform(s) where it doesn’t throw (e.g., Android-only), or extend the skip/condition so the assertion matches actual mobile behavior.
 [Fact]
[SkipOnPlatform(TestPlatforms.Android, "Doesn't throw on mobile")]
public static void TestJapaneseCalendarDateParsing()
{
CultureInfo ciJapanese = new CultureInfo("ja-JP") { DateTimeFormat = { Calendar = new JapaneseCalendar() } };
DateTime dt = new DateTime(1970, 1, 1);
string eraName = dt.ToString("gg", ciJapanese);
// Legacy behavior which we used to throw when using a year number exceeding the era max year.
//
// On mobile, this does not throw, but instead produces a DateTime w/ 95/01/01
Assert.ThrowsAny<FormatException>(() => DateTime.Parse(eraName + " 70/1/1 0:00:00", ciJapanese));
}

src/libraries/System.Collections/tests/BitArray/BitArray_CtorTests.cs:280

  • Re-enabling this test on Apple mobile means it will allocate a BitArray of length int.MaxValue-30 (~256MB+), which is likely to OOM or heavily destabilize test runs on memory-constrained devices. Consider reducing the allocation size while still covering the clone path, or gating this test (e.g., OuterLoop / platform-conditional) for constrained environments.
 [Fact]
public static void Clone_LongLength_Works()
{
BitArray bitArray = new BitArray(int.MaxValue - 30);
BitArray clone = (BitArray)bitArray.Clone();
Assert.Equal(bitArray.Length, clone.Length);
}

You can also share your feedback on Copilot code review. Take the survey.

CopilotAI review requested due to automatic review settings March 13, 2026 07:55

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated no new comments.


You can also share your feedback on Copilot code review. Take the survey.

@kotlarmilos

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-ioslike

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@kotlarmiloskotlarmilos changed the title [ios-clr] Remove ActiveIssue references for Apple Mobile in various tests and update project exclusions[ios-clr] Remove ActiveIssue references for CoreCLR library tests on Apple mobileMar 16, 2026
@kotlarmiloskotlarmilos changed the title [ios-clr] Remove ActiveIssue references for CoreCLR library tests on Apple mobile[ios-clr] Remove ActiveIssue attribute for CoreCLR library tests on Apple mobileMar 16, 2026
@kotlarmiloskotlarmilos added os-ios Apple iOS area-Infrastructure-coreclr Only use for closed issues and removed area-System.Reflection labels Mar 16, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 40 out of 40 changed files in this pull request and generated 2 comments.

Comment threadsrc/libraries/Microsoft.VisualBasic.Core/tests/ErrObjectTests.cs Outdated
…remove Apple mobile specific checks; update AssemblyLoadContextTest to exclude MacCatalyst; remove unused ILLink descriptors; clean up AppleBuild.props by removing obsolete properties.
…milos/runtime into improvement/ios-clr-library-tests
CopilotAI review requested due to automatic review settings April 15, 2026 13:49

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 36 out of 37 changed files in this pull request and generated 3 comments.

@kotlarmilos

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-extra-platforms

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 36 out of 37 changed files in this pull request and generated 4 comments.

Comment on lines +15 to +18
// After ILLink/trimming, type references may point to System.Private.CoreLib
// instead of System.Runtime. Read the actual assembly reference from metadata
// so that expected values match what the decoder produces.
private static readonly string s_systemTypeString = GetSystemTypeStringFromMetadata();

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@sbomer if we were to set trim action to copy on the test assembly, would this still rewrite forwarders, or would it keep things?

(I'm not a fan of this extra complexity)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Moving to #127059

@kotlarmilos

Copy link
Copy Markdown
MemberAuthor

This PR is too broad, splitting it into smaller more focused PRs instead

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Infrastructure-coreclrOnly use for closed issueslinkable-frameworkIssues associated with delivering a linker friendly frameworkos-iosApple iOS

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

6 participants

@kotlarmilos@vitek-karas@akoeplinger@jkotas@MichalStrehovsky
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[ios-clr] Fix library test failures on Apple mobile platforms - #125439

Closed
kotlarmilos wants to merge 59 commits into
dotnet:mainfrom
kotlarmilos:improvement/ios-clr-library-tests
Closed

[ios-clr] Fix library test failures on Apple mobile platforms#125439
kotlarmilos wants to merge 59 commits into
dotnet:mainfrom
kotlarmilos:improvement/ios-clr-library-tests

Conversation

@kotlarmilos

@kotlarmiloskotlarmilos commented Mar 11, 2026

Copy link
Copy Markdown
Member

Description

This PR fixes CoreCLR library test failures on Apple mobile platforms (iOS, tvOS, MacCatalyst) across simulators and devices. It resolves a native crash in SystemNative_GetOSArchitecture where utsname.machine returns hardware model identifiers instead of CPU architecture strings on real devices, causing a debug assert to fire. It skips tests on iOS/tvOS where the diagnostics IPC socket is unreachable inside the app sandbox. It also removes stale ActiveIssue attributes, updates test skip conditions for platform-specific behavior, fixes ILLink descriptor configurations, increases CI pipeline timeouts.

CopilotAI review requested due to automatic review settings March 11, 2026 12:56
@kotlarmiloskotlarmilos self-assigned this Mar 11, 2026
@kotlarmiloskotlarmilos added this to the 11.0.0 milestone Mar 11, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR aims to address failing test runs on Apple mobile (iOS/tvOS) when using CoreCLR by re-enabling previously skipped coverage and adjusting test/build configuration so those tests can execute successfully.

Changes:

  • Removed Apple mobile/CoreCLR ActiveIssue skips across several library tests and removed some Apple mobile project exclusions.
  • Updated CustomAttributeDecoderTests to derive the expected System.Type assembly-qualified string from metadata (more resilient to trimming/ILLink differences).
  • Adjusted test build targets to allow preview features/runtime-async on Apple mobile targets.

Reviewed changes

Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.

Show a summary per file
FileDescription
src/libraries/tests.projRemoves Apple mobile/CoreCLR exclusions for specific test projects so they run again.
src/libraries/System.Runtime/tests/System.Runtime.Tests/System/Reflection/InvokeWithRefLikeArgs.csRe-enables a previously skipped Apple mobile/CoreCLR test (still guarded by Reflection.Emit support).
src/libraries/System.Runtime/tests/System.Globalization.Calendars.Tests/CalendarTestWithConfigSwitch/CalendarTests.csRe-enables a previously skipped Apple mobile/CoreCLR calendar parsing test.
src/libraries/System.Runtime.Loader/tests/RefEmitLoadContext/RefEmitLoadContextTest.csRe-enables a previously skipped Apple mobile/CoreCLR Reflection.Emit load-context test.
src/libraries/System.Reflection.MetadataLoadContext/tests/src/Tests/CustomAttributes/DllImportTests.csReorders ActiveIssue attributes (no behavioral code change).
src/libraries/System.Reflection.Metadata/tests/Metadata/Decoding/CustomAttributeDecoderTests.csMakes expected System.Type string match decoder output post-trimming and avoids using Type.GetType for enum underlying types.
src/libraries/System.Collections/tests/BitArray/BitArray_CtorTests.csRe-enables a previously skipped Apple mobile/CoreCLR BitArray clone test.
eng/testing/tests.targetsEnables preview features/runtime-async for Apple mobile targets by removing an exclusion.
Comments suppressed due to low confidence (2)

src/libraries/System.Runtime/tests/System.Globalization.Calendars.Tests/CalendarTestWithConfigSwitch/CalendarTests.cs:25

  • The test comment says the legacy behavior "On mobile, this does not throw", but after removing the Apple mobile skip this test will run on Apple mobile and still asserts a FormatException. Either update the comment to the specific platform(s) where it doesn’t throw (e.g., Android-only), or extend the skip/condition so the assertion matches actual mobile behavior.
 [Fact]
[SkipOnPlatform(TestPlatforms.Android, "Doesn't throw on mobile")]
public static void TestJapaneseCalendarDateParsing()
{
CultureInfo ciJapanese = new CultureInfo("ja-JP") { DateTimeFormat = { Calendar = new JapaneseCalendar() } };
DateTime dt = new DateTime(1970, 1, 1);
string eraName = dt.ToString("gg", ciJapanese);
// Legacy behavior which we used to throw when using a year number exceeding the era max year.
//
// On mobile, this does not throw, but instead produces a DateTime w/ 95/01/01
Assert.ThrowsAny<FormatException>(() => DateTime.Parse(eraName + " 70/1/1 0:00:00", ciJapanese));
}

src/libraries/System.Collections/tests/BitArray/BitArray_CtorTests.cs:280

  • Re-enabling this test on Apple mobile means it will allocate a BitArray of length int.MaxValue-30 (~256MB+), which is likely to OOM or heavily destabilize test runs on memory-constrained devices. Consider reducing the allocation size while still covering the clone path, or gating this test (e.g., OuterLoop / platform-conditional) for constrained environments.
 [Fact]
public static void Clone_LongLength_Works()
{
BitArray bitArray = new BitArray(int.MaxValue - 30);
BitArray clone = (BitArray)bitArray.Clone();
Assert.Equal(bitArray.Length, clone.Length);
}

You can also share your feedback on Copilot code review. Take the survey.

CopilotAI review requested due to automatic review settings March 13, 2026 07:55

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated no new comments.


You can also share your feedback on Copilot code review. Take the survey.

@kotlarmilos

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-ioslike

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@kotlarmiloskotlarmilos changed the title [ios-clr] Remove ActiveIssue references for Apple Mobile in various tests and update project exclusions[ios-clr] Remove ActiveIssue references for CoreCLR library tests on Apple mobileMar 16, 2026
@kotlarmiloskotlarmilos changed the title [ios-clr] Remove ActiveIssue references for CoreCLR library tests on Apple mobile[ios-clr] Remove ActiveIssue attribute for CoreCLR library tests on Apple mobileMar 16, 2026
@kotlarmiloskotlarmilos added os-ios Apple iOS area-Infrastructure-coreclr Only use for closed issues and removed area-System.Reflection labels Mar 16, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 40 out of 40 changed files in this pull request and generated 2 comments.

Comment threadsrc/libraries/Microsoft.VisualBasic.Core/tests/ErrObjectTests.cs Outdated
…remove Apple mobile specific checks; update AssemblyLoadContextTest to exclude MacCatalyst; remove unused ILLink descriptors; clean up AppleBuild.props by removing obsolete properties.
…milos/runtime into improvement/ios-clr-library-tests
CopilotAI review requested due to automatic review settings April 15, 2026 13:49

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 36 out of 37 changed files in this pull request and generated 3 comments.

@kotlarmilos

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-extra-platforms

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 36 out of 37 changed files in this pull request and generated 4 comments.

Comment on lines +15 to +18
// After ILLink/trimming, type references may point to System.Private.CoreLib
// instead of System.Runtime. Read the actual assembly reference from metadata
// so that expected values match what the decoder produces.
private static readonly string s_systemTypeString = GetSystemTypeStringFromMetadata();

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@sbomer if we were to set trim action to copy on the test assembly, would this still rewrite forwarders, or would it keep things?

(I'm not a fan of this extra complexity)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Moving to #127059

@kotlarmilos

Copy link
Copy Markdown
MemberAuthor

This PR is too broad, splitting it into smaller more focused PRs instead

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Infrastructure-coreclrOnly use for closed issueslinkable-frameworkIssues associated with delivering a linker friendly frameworkos-iosApple iOS

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

6 participants

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

[ios-clr] Fix library test failures on Apple mobile platforms - #125439

Closed
kotlarmilos wants to merge 59 commits into
dotnet:mainfrom
kotlarmilos:improvement/ios-clr-library-tests
Closed

[ios-clr] Fix library test failures on Apple mobile platforms#125439
kotlarmilos wants to merge 59 commits into
dotnet:mainfrom
kotlarmilos:improvement/ios-clr-library-tests

Conversation

@kotlarmilos

@kotlarmiloskotlarmilos commented Mar 11, 2026

Copy link
Copy Markdown
Member

Description

This PR fixes CoreCLR library test failures on Apple mobile platforms (iOS, tvOS, MacCatalyst) across simulators and devices. It resolves a native crash in SystemNative_GetOSArchitecture where utsname.machine returns hardware model identifiers instead of CPU architecture strings on real devices, causing a debug assert to fire. It skips tests on iOS/tvOS where the diagnostics IPC socket is unreachable inside the app sandbox. It also removes stale ActiveIssue attributes, updates test skip conditions for platform-specific behavior, fixes ILLink descriptor configurations, increases CI pipeline timeouts.

CopilotAI review requested due to automatic review settings March 11, 2026 12:56
@kotlarmiloskotlarmilos self-assigned this Mar 11, 2026
@kotlarmiloskotlarmilos added this to the 11.0.0 milestone Mar 11, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR aims to address failing test runs on Apple mobile (iOS/tvOS) when using CoreCLR by re-enabling previously skipped coverage and adjusting test/build configuration so those tests can execute successfully.

Changes:

  • Removed Apple mobile/CoreCLR ActiveIssue skips across several library tests and removed some Apple mobile project exclusions.
  • Updated CustomAttributeDecoderTests to derive the expected System.Type assembly-qualified string from metadata (more resilient to trimming/ILLink differences).
  • Adjusted test build targets to allow preview features/runtime-async on Apple mobile targets.

Reviewed changes

Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.

Show a summary per file
FileDescription
src/libraries/tests.projRemoves Apple mobile/CoreCLR exclusions for specific test projects so they run again.
src/libraries/System.Runtime/tests/System.Runtime.Tests/System/Reflection/InvokeWithRefLikeArgs.csRe-enables a previously skipped Apple mobile/CoreCLR test (still guarded by Reflection.Emit support).
src/libraries/System.Runtime/tests/System.Globalization.Calendars.Tests/CalendarTestWithConfigSwitch/CalendarTests.csRe-enables a previously skipped Apple mobile/CoreCLR calendar parsing test.
src/libraries/System.Runtime.Loader/tests/RefEmitLoadContext/RefEmitLoadContextTest.csRe-enables a previously skipped Apple mobile/CoreCLR Reflection.Emit load-context test.
src/libraries/System.Reflection.MetadataLoadContext/tests/src/Tests/CustomAttributes/DllImportTests.csReorders ActiveIssue attributes (no behavioral code change).
src/libraries/System.Reflection.Metadata/tests/Metadata/Decoding/CustomAttributeDecoderTests.csMakes expected System.Type string match decoder output post-trimming and avoids using Type.GetType for enum underlying types.
src/libraries/System.Collections/tests/BitArray/BitArray_CtorTests.csRe-enables a previously skipped Apple mobile/CoreCLR BitArray clone test.
eng/testing/tests.targetsEnables preview features/runtime-async for Apple mobile targets by removing an exclusion.
Comments suppressed due to low confidence (2)

src/libraries/System.Runtime/tests/System.Globalization.Calendars.Tests/CalendarTestWithConfigSwitch/CalendarTests.cs:25

  • The test comment says the legacy behavior "On mobile, this does not throw", but after removing the Apple mobile skip this test will run on Apple mobile and still asserts a FormatException. Either update the comment to the specific platform(s) where it doesn’t throw (e.g., Android-only), or extend the skip/condition so the assertion matches actual mobile behavior.
 [Fact]
[SkipOnPlatform(TestPlatforms.Android, "Doesn't throw on mobile")]
public static void TestJapaneseCalendarDateParsing()
{
CultureInfo ciJapanese = new CultureInfo("ja-JP") { DateTimeFormat = { Calendar = new JapaneseCalendar() } };
DateTime dt = new DateTime(1970, 1, 1);
string eraName = dt.ToString("gg", ciJapanese);
// Legacy behavior which we used to throw when using a year number exceeding the era max year.
//
// On mobile, this does not throw, but instead produces a DateTime w/ 95/01/01
Assert.ThrowsAny<FormatException>(() => DateTime.Parse(eraName + " 70/1/1 0:00:00", ciJapanese));
}

src/libraries/System.Collections/tests/BitArray/BitArray_CtorTests.cs:280

  • Re-enabling this test on Apple mobile means it will allocate a BitArray of length int.MaxValue-30 (~256MB+), which is likely to OOM or heavily destabilize test runs on memory-constrained devices. Consider reducing the allocation size while still covering the clone path, or gating this test (e.g., OuterLoop / platform-conditional) for constrained environments.
 [Fact]
public static void Clone_LongLength_Works()
{
BitArray bitArray = new BitArray(int.MaxValue - 30);
BitArray clone = (BitArray)bitArray.Clone();
Assert.Equal(bitArray.Length, clone.Length);
}

You can also share your feedback on Copilot code review. Take the survey.

CopilotAI review requested due to automatic review settings March 13, 2026 07:55

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated no new comments.


You can also share your feedback on Copilot code review. Take the survey.

@kotlarmilos

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-ioslike

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@kotlarmiloskotlarmilos changed the title [ios-clr] Remove ActiveIssue references for Apple Mobile in various tests and update project exclusions[ios-clr] Remove ActiveIssue references for CoreCLR library tests on Apple mobileMar 16, 2026
@kotlarmiloskotlarmilos changed the title [ios-clr] Remove ActiveIssue references for CoreCLR library tests on Apple mobile[ios-clr] Remove ActiveIssue attribute for CoreCLR library tests on Apple mobileMar 16, 2026
@kotlarmiloskotlarmilos added os-ios Apple iOS area-Infrastructure-coreclr Only use for closed issues and removed area-System.Reflection labels Mar 16, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 40 out of 40 changed files in this pull request and generated 2 comments.

Comment threadsrc/libraries/Microsoft.VisualBasic.Core/tests/ErrObjectTests.cs Outdated
…remove Apple mobile specific checks; update AssemblyLoadContextTest to exclude MacCatalyst; remove unused ILLink descriptors; clean up AppleBuild.props by removing obsolete properties.
…milos/runtime into improvement/ios-clr-library-tests
CopilotAI review requested due to automatic review settings April 15, 2026 13:49

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 36 out of 37 changed files in this pull request and generated 3 comments.

@kotlarmilos

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-extra-platforms

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 36 out of 37 changed files in this pull request and generated 4 comments.

Comment on lines +15 to +18
// After ILLink/trimming, type references may point to System.Private.CoreLib
// instead of System.Runtime. Read the actual assembly reference from metadata
// so that expected values match what the decoder produces.
private static readonly string s_systemTypeString = GetSystemTypeStringFromMetadata();

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@sbomer if we were to set trim action to copy on the test assembly, would this still rewrite forwarders, or would it keep things?

(I'm not a fan of this extra complexity)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Moving to #127059

@kotlarmilos

Copy link
Copy Markdown
MemberAuthor

This PR is too broad, splitting it into smaller more focused PRs instead

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Infrastructure-coreclrOnly use for closed issueslinkable-frameworkIssues associated with delivering a linker friendly frameworkos-iosApple iOS

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

6 participants

@kotlarmilos@vitek-karas@akoeplinger@jkotas@MichalStrehovsky