Skip to content

[dotnet-linker] Gate the TypeMap workaround for dotnet/runtime#127504 on .NET 10 and earlier. Fixes #25275#26010

Open
rolfbjarne wants to merge 1 commit into
mainfrom
dev/rolf/issue-25275-workaround-remove-unconditional-typemap-919920
Open

[dotnet-linker] Gate the TypeMap workaround for dotnet/runtime#127504 on .NET 10 and earlier. Fixes #25275#26010
rolfbjarne wants to merge 1 commit into
mainfrom
dev/rolf/issue-25275-workaround-remove-unconditional-typemap-919920

Conversation

@rolfbjarne

@rolfbjarne rolfbjarne commented Jul 9, 2026

Copy link
Copy Markdown
Member

The unconditional (2-arg) TypeMapAttribute workaround for skipped "actual" types (NSOrderedSet, NSArray, NSDictionary, etc.) works around a bug in ILLink's TypeMapHandler (dotnet/runtime#127504): the conditional (3-arg) entries for these types are silently trimmed.

The runtime fix is only available in .NET 11+, so this gates the workaround to only apply when targeting .NET 10 or earlier (App.TargetFramework.Version.Major <= 10), mirroring the existing precedent in the same file. On .NET 11+ the conditional (3-arg) TypeMap entries are used, matching the non-workaround path.

Validation of the .NET 11 path (workaround disabled) is done via a separate, non-merged PR targeting the net11.0 branch.

Fixes #25275

🤖 Pull request created by Copilot

….NET 10 and earlier

The unconditional (2-arg) TypeMap workaround for skipped "actual" types
(NSOrderedSet, NSArray, NSDictionary, etc.) works around a bug in ILLink's
TypeMapHandler (dotnet/runtime#127504).

The runtime fix is only available in .NET 11+, so gate the workaround to only
apply when targeting .NET 10 or earlier. On .NET 11+ the conditional (3-arg)
TypeMap entries are used for these types, matching the non-workaround path.

Tracking issue: #25275

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@vs-mobiletools-engineering-service2

This comment has been minimized.

@vs-mobiletools-engineering-service2

This comment has been minimized.

@rolfbjarne rolfbjarne marked this pull request as ready for review July 10, 2026 11:19
Copilot AI review requested due to automatic review settings July 10, 2026 11:19
@rolfbjarne rolfbjarne enabled auto-merge (squash) July 10, 2026 11:20

Copilot AI 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 updates the dotnet-linker’s TypeMap workaround for dotnet/runtime#127504 so it only applies when targeting .NET 10 or earlier, allowing .NET 11+ builds to use the intended conditional (3-arg) TypeMap entries once the runtime fix is available.

Changes:

  • Gate the unconditional (2-arg) TypeMapAttribute workaround behind App.TargetFramework.Version.Major <= 10.
  • Avoid computing the skippedActualTypes set when the workaround is disabled.

Comment thread tools/dotnet-linker/Steps/TrimmableRegistrarStep.cs
@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
Collaborator

✅ API diff for current PR / commit

NET (empty diffs)

✅ API diff vs stable

NET (empty diffs)

ℹ️ Generator diff

Generator Diff: vsdrops (html) vsdrops (raw diff) gist (raw diff) - Please review changes)

Pipeline on Agent
Hash: e35c2fc1501737ab19b7d99ac9055cc6c50d3e48 [PR build]

@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
Collaborator

🚀 [CI Build #e35c2fc] Test results 🚀

Test results

✅ All tests passed on VSTS: test results.

🎉 All 199 tests passed 🎉

Tests counts

✅ assembly-processing: All 1 tests passed. Html Report (VSDrops) Download
✅ cecil: All 1 tests passed. Html Report (VSDrops) Download
✅ dotnettests (iOS): All 1 tests passed. Html Report (VSDrops) Download
✅ dotnettests (MacCatalyst): All 1 tests passed. Html Report (VSDrops) Download
✅ dotnettests (macOS): All 1 tests passed. Html Report (VSDrops) Download
✅ dotnettests (Multiple platforms): All 1 tests passed. Html Report (VSDrops) Download
✅ dotnettests (tvOS): All 1 tests passed. Html Report (VSDrops) Download
✅ framework: All 2 tests passed. Html Report (VSDrops) Download
✅ fsharp: All 4 tests passed. Html Report (VSDrops) Download
✅ generator: All 5 tests passed. Html Report (VSDrops) Download
✅ interdependent-binding-projects: All 4 tests passed. Html Report (VSDrops) Download
✅ introspection: All 4 tests passed. Html Report (VSDrops) Download
✅ linker (iOS): All 15 tests passed. Html Report (VSDrops) Download
✅ linker (MacCatalyst): All 15 tests passed. Html Report (VSDrops) Download
✅ linker (macOS): All 21 tests passed. Html Report (VSDrops) Download
✅ linker (tvOS): All 15 tests passed. Html Report (VSDrops) Download
✅ monotouch (iOS): All 18 tests passed. Html Report (VSDrops) Download
✅ monotouch (MacCatalyst): All 17 tests passed. Html Report (VSDrops) Download
✅ monotouch (macOS): All 18 tests passed. Html Report (VSDrops) Download
✅ monotouch (tvOS): All 18 tests passed. Html Report (VSDrops) Download
✅ msbuild: All 2 tests passed. Html Report (VSDrops) Download
✅ sharpie: All 1 tests passed. Html Report (VSDrops) Download
✅ windows: All 3 tests passed. Html Report (VSDrops) Download
✅ xcframework: All 4 tests passed. Html Report (VSDrops) Download
✅ xtro: All 1 tests passed. Html Report (VSDrops) Download

macOS tests

✅ Tests on macOS Monterey (12): All 5 tests passed. Html Report (VSDrops) Download
✅ Tests on macOS Ventura (13): All 5 tests passed. Html Report (VSDrops) Download
✅ Tests on macOS Sonoma (14): All 5 tests passed. Html Report (VSDrops) Download
✅ Tests on macOS Sequoia (15): All 5 tests passed. Html Report (VSDrops) Download
✅ Tests on macOS Tahoe (26): All 5 tests passed. Html Report (VSDrops) Download

Linux Build Verification

Linux build succeeded

Pipeline on Agent
Hash: e35c2fc1501737ab19b7d99ac9055cc6c50d3e48 [PR build]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Workaround] Remove unconditional TypeMap entries for skipped actual types when dotnet/runtime#127504 is fixed

3 participants