Skip to content

[release/10.0] Fix LoadExactInterfaceMap for sub-interfaces with complex type arguments under special marker parents#124835

Merged
JulieLeeMSFT merged 4 commits intorelease/10.0from
backport/pr-124684-to-release/10.0
Mar 4, 2026
Merged

[release/10.0] Fix LoadExactInterfaceMap for sub-interfaces with complex type arguments under special marker parents#124835
JulieLeeMSFT merged 4 commits intorelease/10.0from
backport/pr-124684-to-release/10.0

Conversation

@github-actions
Copy link
Contributor

@github-actions github-actions bot commented Feb 25, 2026

Backport of #124684 to release/10.0

/cc @davidwrighton

Customer Impact

  • Customer reported
  • Found internally

The earlier fix for #123254 did not fix all possible cases where the incorrect type would be loaded. This fix fills out the special case matrix some more, and I believe should fix all the issues found.

Regression

  • Yes
  • No

This issue was introduced with PR #120712, and mitigated somewhat with PR #123520. This fix builds on that fix to fix additional issues found by @reduckted.

Testing

The fix includes a fairly large test suite covering possible ways type loading could fail around this fix. It was missed previously in the previous small fix as the importance of comparing the fully loaded, and partially loaded interface maps on the generic type definition was missed during test development. This fix has also been tested by delivering a hotfixed build to @reduckted which which he was able to verify fixed the issues he had seen in production as well as in testing.

Risk

Low. Its filling out more special cases in the new codepaths added in PR #123520.

IMPORTANT: If this backport is for a servicing release, please verify that:

  • For .NET 8 and .NET 9: The PR target branch is release/X.0-staging, not release/X.0.
  • For .NET 10+: The PR target branch is release/X.0 (no -staging suffix).

Package authoring no longer needed in .NET 9

IMPORTANT: Starting with .NET 9, you no longer need to edit a NuGet package's csproj to enable building and bump the version.
Keep in mind that we still need package authoring in .NET 8 and older versions.

davidwrighton and others added 4 commits February 25, 2026 00:47
…nts under special marker parents

When pNewIntfMT is a special marker type and its sub-interface has an
exact instantiation containing complex type arguments (e.g. IList(Of T)
rather than bare T), the previous code would fall through to case 4
which checked EligibleForSpecialMarkerTypeUsage against pMT. This could
incorrectly treat the sub-interface as an exact match when it still
contains unresolved generic variables.

Split old case 4 into three new cases:
- Case 4: pNewIntfMT is a special marker type and the sub-interface's
  instantiation is eligible for special marker usage relative to
  pNewIntfMT (e.g. ILayer1(Of T) where T matches). Insert the marker.
- Case 5: pNewIntfMT is a special marker type but the sub-interface has
  generic variables that don't match (e.g. ILayer1(Of IList(Of T))).
  Trigger retry with exact interfaces since full substitution is needed.
- Case 6: The sub-interface is fully concrete or pNewIntfMT is not a
  special marker. Fall through to the existing pMT-based eligibility
  check.

Add regression tests covering all 8 combinations of pre-loading the
3 interface layers.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
@davidwrighton davidwrighton added the Servicing-consider Issue for next servicing release review label Mar 2, 2026
Copy link
Member

@JulieLeeMSFT JulieLeeMSFT left a comment

Choose a reason for hiding this comment

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

LGTM.

@JulieLeeMSFT JulieLeeMSFT added Servicing-approved Approved for servicing release and removed Servicing-consider Issue for next servicing release review labels Mar 3, 2026
@JulieLeeMSFT JulieLeeMSFT added this to the 10.0.x milestone Mar 3, 2026
@JulieLeeMSFT JulieLeeMSFT merged commit eaa1254 into release/10.0 Mar 4, 2026
111 of 114 checks passed
@JulieLeeMSFT JulieLeeMSFT deleted the backport/pr-124684-to-release/10.0 branch March 4, 2026 01:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area-TypeSystem-coreclr Servicing-approved Approved for servicing release

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants