Fix crossgen2 crash on Apple mobile for InstantiatedType token resolution in async methods - #125444

Merged
kotlarmilos merged 1 commit into
dotnet:mainfrom
kotlarmilos:fix/crossgen2-async-instantiated-type
Mar 12, 2026
Merged

Fix crossgen2 crash on Apple mobile for InstantiatedType token resolution in async methods#125444
kotlarmilos merged 1 commit into
dotnet:mainfrom
kotlarmilos:fix/crossgen2-async-instantiated-type

Conversation

@kotlarmilos

@kotlarmiloskotlarmilos commented Mar 11, 2026

Copy link
Copy Markdown
Member

Fixes a regression introduced in #124203 where crossgen2 crashes with NotImplementedException: Unsupported token resolution for Internal.TypeSystem.InstantiatedType when compiling async methods that reference generic type instantiations (e.g., CallStruct1M0<T>) on Apple mobile platforms.

Problem

The GetModuleTokenForType local function in HandleToModuleToken handles SignatureMethodVariable, ParameterizedType, and EcmaType, but does not handle InstantiatedType. When async resumption stubs resolve tokens for instantiated generic types, the code falls through to the default case and throws.

Affected jobs in runtime-extra-platforms pipeline:

  • iossimulator-arm64 Release AllSubsets_CoreCLR_RuntimeTests
  • iossimulator-x64 Release AllSubsets_CoreCLR_RuntimeTests
  • tvossimulator-arm64 Release AllSubsets_CoreCLR_RuntimeTests

Failed build:https://dev.azure.com/dnceng-public/public/_build/results?buildId=1329675&view=results

…tion in async methods
Add a TypeDesc case to GetModuleTokenForType to handle InstantiatedType
and other non-EcmaType TypeDesc variants by delegating to the existing
ModuleTokenResolver.GetModuleTokenForType.
Fixes a regression from dotnet#124203 where async resumption stubs referencing
generic type instantiations (e.g., CallStruct1M0<T>) crash with
NotImplementedException on Apple simulator CoreCLR RuntimeTests.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings March 11, 2026 14:15
@kotlarmiloskotlarmilos added the os-ios Apple iOS label Mar 11, 2026
@kotlarmiloskotlarmilos added this to the 11.0.0 milestone Mar 11, 2026
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to 'os-ios': @vitek-karas, @kotlarmilos, @steveisok, @akoeplinger
See info in area-owners.md if you want to be subscribed.

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

Extends ReadyToRun JIT interface token remapping to handle additional TypeDesc cases when compiling synthesized (non-ECMA-backed) method bodies, enabling module/token resolution via the existing ModuleTokenResolver.

Changes:

  • Add a TypeDesc switch arm in HandleToModuleToken’s faux-MethodIL token remapping to resolve module tokens through _compilation.NodeFactory.Resolver.

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

@davidwrighton

Copy link
Copy Markdown
Member

@jtschuster@kotlarmilos please update the tests so that we hit this scenario on normal crossgen2 outerloop run.

@jtschuster

Copy link
Copy Markdown
Member

@jtschuster@kotlarmilos please update the tests so that we hit this scenario on normal crossgen2 outerloop run.

Filed #125453 to track, working on a test now.

@kotlarmilos
kotlarmilos merged commit 92969f4 into dotnet:mainMar 12, 2026
115 of 116 checks passed
@jtschuster

Copy link
Copy Markdown
Member

It looks like we don't have any pipelines that run the test with corelib in the version bubble, but ios builds do. We'll have to add more jobs to a pipeline with the --large_version_bubble flag to run.

The repro also shows this isn't quite enough to fix the issue. We should disable compiling async methods completely in composite mode rather than just not emit them. I'll send out a PR soon.

CopilotAI pushed a commit that referenced this pull request Mar 13, 2026
…tion in async methods (#125444)
Fixes a regression introduced in #124203 where crossgen2 crashes with
`NotImplementedException: Unsupported token resolution for
Internal.TypeSystem.InstantiatedType` when compiling async methods that
reference generic type instantiations (e.g., `CallStruct1M0<T>`) on
Apple mobile platforms.
## Problem
The `GetModuleTokenForType` local function in `HandleToModuleToken`
handles `SignatureMethodVariable`, `ParameterizedType`, and `EcmaType`,
but does not handle `InstantiatedType`. When async resumption stubs
resolve tokens for instantiated generic types, the code falls through to
the `default` case and throws.
Affected jobs in `runtime-extra-platforms` pipeline:
- `iossimulator-arm64 Release AllSubsets_CoreCLR_RuntimeTests`
- `iossimulator-x64 Release AllSubsets_CoreCLR_RuntimeTests`
- `tvossimulator-arm64 Release AllSubsets_CoreCLR_RuntimeTests`
**Failed build:**
https://dev.azure.com/dnceng-public/public/_build/results?buildId=1329675&view=results
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
jtschuster added a commit that referenced this pull request Mar 16, 2026
We don't have pipeline legs that build coreclr tests with the framework
in the coreclr tests. This would have caught the issue from
#125444 in the crossgen2 pipeline.
It looks like the change in that PR didn't fully fix the issue but just
kicked the can down for a later exception to throw.
Add a job to `runtime-coreclr crossgen2-composite` to build the tests
including the framework libraries.
In composite mode, skip compiling all async methods rather than just not
emitting them.
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Apr 12, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@kotlarmilos@davidwrighton@jtschuster@jkotas
, '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

Fix crossgen2 crash on Apple mobile for InstantiatedType token resolution in async methods - #125444

Merged
kotlarmilos merged 1 commit into
dotnet:mainfrom
kotlarmilos:fix/crossgen2-async-instantiated-type
Mar 12, 2026
Merged

Fix crossgen2 crash on Apple mobile for InstantiatedType token resolution in async methods#125444
kotlarmilos merged 1 commit into
dotnet:mainfrom
kotlarmilos:fix/crossgen2-async-instantiated-type

Conversation

@kotlarmilos

@kotlarmiloskotlarmilos commented Mar 11, 2026

Copy link
Copy Markdown
Member

Fixes a regression introduced in #124203 where crossgen2 crashes with NotImplementedException: Unsupported token resolution for Internal.TypeSystem.InstantiatedType when compiling async methods that reference generic type instantiations (e.g., CallStruct1M0<T>) on Apple mobile platforms.

Problem

The GetModuleTokenForType local function in HandleToModuleToken handles SignatureMethodVariable, ParameterizedType, and EcmaType, but does not handle InstantiatedType. When async resumption stubs resolve tokens for instantiated generic types, the code falls through to the default case and throws.

Affected jobs in runtime-extra-platforms pipeline:

  • iossimulator-arm64 Release AllSubsets_CoreCLR_RuntimeTests
  • iossimulator-x64 Release AllSubsets_CoreCLR_RuntimeTests
  • tvossimulator-arm64 Release AllSubsets_CoreCLR_RuntimeTests

Failed build:https://dev.azure.com/dnceng-public/public/_build/results?buildId=1329675&view=results

…tion in async methods
Add a TypeDesc case to GetModuleTokenForType to handle InstantiatedType
and other non-EcmaType TypeDesc variants by delegating to the existing
ModuleTokenResolver.GetModuleTokenForType.
Fixes a regression from dotnet#124203 where async resumption stubs referencing
generic type instantiations (e.g., CallStruct1M0<T>) crash with
NotImplementedException on Apple simulator CoreCLR RuntimeTests.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings March 11, 2026 14:15
@kotlarmiloskotlarmilos added the os-ios Apple iOS label Mar 11, 2026
@kotlarmiloskotlarmilos added this to the 11.0.0 milestone Mar 11, 2026
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to 'os-ios': @vitek-karas, @kotlarmilos, @steveisok, @akoeplinger
See info in area-owners.md if you want to be subscribed.

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

Extends ReadyToRun JIT interface token remapping to handle additional TypeDesc cases when compiling synthesized (non-ECMA-backed) method bodies, enabling module/token resolution via the existing ModuleTokenResolver.

Changes:

  • Add a TypeDesc switch arm in HandleToModuleToken’s faux-MethodIL token remapping to resolve module tokens through _compilation.NodeFactory.Resolver.

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

@davidwrighton

Copy link
Copy Markdown
Member

@jtschuster@kotlarmilos please update the tests so that we hit this scenario on normal crossgen2 outerloop run.

@jtschuster

Copy link
Copy Markdown
Member

@jtschuster@kotlarmilos please update the tests so that we hit this scenario on normal crossgen2 outerloop run.

Filed #125453 to track, working on a test now.

@kotlarmilos
kotlarmilos merged commit 92969f4 into dotnet:mainMar 12, 2026
115 of 116 checks passed
@jtschuster

Copy link
Copy Markdown
Member

It looks like we don't have any pipelines that run the test with corelib in the version bubble, but ios builds do. We'll have to add more jobs to a pipeline with the --large_version_bubble flag to run.

The repro also shows this isn't quite enough to fix the issue. We should disable compiling async methods completely in composite mode rather than just not emit them. I'll send out a PR soon.

CopilotAI pushed a commit that referenced this pull request Mar 13, 2026
…tion in async methods (#125444)
Fixes a regression introduced in #124203 where crossgen2 crashes with
`NotImplementedException: Unsupported token resolution for
Internal.TypeSystem.InstantiatedType` when compiling async methods that
reference generic type instantiations (e.g., `CallStruct1M0<T>`) on
Apple mobile platforms.
## Problem
The `GetModuleTokenForType` local function in `HandleToModuleToken`
handles `SignatureMethodVariable`, `ParameterizedType`, and `EcmaType`,
but does not handle `InstantiatedType`. When async resumption stubs
resolve tokens for instantiated generic types, the code falls through to
the `default` case and throws.
Affected jobs in `runtime-extra-platforms` pipeline:
- `iossimulator-arm64 Release AllSubsets_CoreCLR_RuntimeTests`
- `iossimulator-x64 Release AllSubsets_CoreCLR_RuntimeTests`
- `tvossimulator-arm64 Release AllSubsets_CoreCLR_RuntimeTests`
**Failed build:**
https://dev.azure.com/dnceng-public/public/_build/results?buildId=1329675&view=results
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
jtschuster added a commit that referenced this pull request Mar 16, 2026
We don't have pipeline legs that build coreclr tests with the framework
in the coreclr tests. This would have caught the issue from
#125444 in the crossgen2 pipeline.
It looks like the change in that PR didn't fully fix the issue but just
kicked the can down for a later exception to throw.
Add a job to `runtime-coreclr crossgen2-composite` to build the tests
including the framework libraries.
In composite mode, skip compiling all async methods rather than just not
emitting them.
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Apr 12, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@kotlarmilos@davidwrighton@jtschuster@jkotas
, '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

Fix crossgen2 crash on Apple mobile for InstantiatedType token resolution in async methods - #125444

Merged
kotlarmilos merged 1 commit into
dotnet:mainfrom
kotlarmilos:fix/crossgen2-async-instantiated-type
Mar 12, 2026
Merged

Fix crossgen2 crash on Apple mobile for InstantiatedType token resolution in async methods#125444
kotlarmilos merged 1 commit into
dotnet:mainfrom
kotlarmilos:fix/crossgen2-async-instantiated-type

Conversation

@kotlarmilos

@kotlarmiloskotlarmilos commented Mar 11, 2026

Copy link
Copy Markdown
Member

Fixes a regression introduced in #124203 where crossgen2 crashes with NotImplementedException: Unsupported token resolution for Internal.TypeSystem.InstantiatedType when compiling async methods that reference generic type instantiations (e.g., CallStruct1M0<T>) on Apple mobile platforms.

Problem

The GetModuleTokenForType local function in HandleToModuleToken handles SignatureMethodVariable, ParameterizedType, and EcmaType, but does not handle InstantiatedType. When async resumption stubs resolve tokens for instantiated generic types, the code falls through to the default case and throws.

Affected jobs in runtime-extra-platforms pipeline:

  • iossimulator-arm64 Release AllSubsets_CoreCLR_RuntimeTests
  • iossimulator-x64 Release AllSubsets_CoreCLR_RuntimeTests
  • tvossimulator-arm64 Release AllSubsets_CoreCLR_RuntimeTests

Failed build:https://dev.azure.com/dnceng-public/public/_build/results?buildId=1329675&view=results

…tion in async methods
Add a TypeDesc case to GetModuleTokenForType to handle InstantiatedType
and other non-EcmaType TypeDesc variants by delegating to the existing
ModuleTokenResolver.GetModuleTokenForType.
Fixes a regression from dotnet#124203 where async resumption stubs referencing
generic type instantiations (e.g., CallStruct1M0<T>) crash with
NotImplementedException on Apple simulator CoreCLR RuntimeTests.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings March 11, 2026 14:15
@kotlarmiloskotlarmilos added the os-ios Apple iOS label Mar 11, 2026
@kotlarmiloskotlarmilos added this to the 11.0.0 milestone Mar 11, 2026
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to 'os-ios': @vitek-karas, @kotlarmilos, @steveisok, @akoeplinger
See info in area-owners.md if you want to be subscribed.

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

Extends ReadyToRun JIT interface token remapping to handle additional TypeDesc cases when compiling synthesized (non-ECMA-backed) method bodies, enabling module/token resolution via the existing ModuleTokenResolver.

Changes:

  • Add a TypeDesc switch arm in HandleToModuleToken’s faux-MethodIL token remapping to resolve module tokens through _compilation.NodeFactory.Resolver.

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

@davidwrighton

Copy link
Copy Markdown
Member

@jtschuster@kotlarmilos please update the tests so that we hit this scenario on normal crossgen2 outerloop run.

@jtschuster

Copy link
Copy Markdown
Member

@jtschuster@kotlarmilos please update the tests so that we hit this scenario on normal crossgen2 outerloop run.

Filed #125453 to track, working on a test now.

@kotlarmilos
kotlarmilos merged commit 92969f4 into dotnet:mainMar 12, 2026
115 of 116 checks passed
@jtschuster

Copy link
Copy Markdown
Member

It looks like we don't have any pipelines that run the test with corelib in the version bubble, but ios builds do. We'll have to add more jobs to a pipeline with the --large_version_bubble flag to run.

The repro also shows this isn't quite enough to fix the issue. We should disable compiling async methods completely in composite mode rather than just not emit them. I'll send out a PR soon.

CopilotAI pushed a commit that referenced this pull request Mar 13, 2026
…tion in async methods (#125444)
Fixes a regression introduced in #124203 where crossgen2 crashes with
`NotImplementedException: Unsupported token resolution for
Internal.TypeSystem.InstantiatedType` when compiling async methods that
reference generic type instantiations (e.g., `CallStruct1M0<T>`) on
Apple mobile platforms.
## Problem
The `GetModuleTokenForType` local function in `HandleToModuleToken`
handles `SignatureMethodVariable`, `ParameterizedType`, and `EcmaType`,
but does not handle `InstantiatedType`. When async resumption stubs
resolve tokens for instantiated generic types, the code falls through to
the `default` case and throws.
Affected jobs in `runtime-extra-platforms` pipeline:
- `iossimulator-arm64 Release AllSubsets_CoreCLR_RuntimeTests`
- `iossimulator-x64 Release AllSubsets_CoreCLR_RuntimeTests`
- `tvossimulator-arm64 Release AllSubsets_CoreCLR_RuntimeTests`
**Failed build:**
https://dev.azure.com/dnceng-public/public/_build/results?buildId=1329675&view=results
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
jtschuster added a commit that referenced this pull request Mar 16, 2026
We don't have pipeline legs that build coreclr tests with the framework
in the coreclr tests. This would have caught the issue from
#125444 in the crossgen2 pipeline.
It looks like the change in that PR didn't fully fix the issue but just
kicked the can down for a later exception to throw.
Add a job to `runtime-coreclr crossgen2-composite` to build the tests
including the framework libraries.
In composite mode, skip compiling all async methods rather than just not
emitting them.
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Apr 12, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@kotlarmilos@davidwrighton@jtschuster@jkotas
, '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

Fix crossgen2 crash on Apple mobile for InstantiatedType token resolution in async methods - #125444

Merged
kotlarmilos merged 1 commit into
dotnet:mainfrom
kotlarmilos:fix/crossgen2-async-instantiated-type
Mar 12, 2026
Merged

Fix crossgen2 crash on Apple mobile for InstantiatedType token resolution in async methods#125444
kotlarmilos merged 1 commit into
dotnet:mainfrom
kotlarmilos:fix/crossgen2-async-instantiated-type

Conversation

@kotlarmilos

@kotlarmiloskotlarmilos commented Mar 11, 2026

Copy link
Copy Markdown
Member

Fixes a regression introduced in #124203 where crossgen2 crashes with NotImplementedException: Unsupported token resolution for Internal.TypeSystem.InstantiatedType when compiling async methods that reference generic type instantiations (e.g., CallStruct1M0<T>) on Apple mobile platforms.

Problem

The GetModuleTokenForType local function in HandleToModuleToken handles SignatureMethodVariable, ParameterizedType, and EcmaType, but does not handle InstantiatedType. When async resumption stubs resolve tokens for instantiated generic types, the code falls through to the default case and throws.

Affected jobs in runtime-extra-platforms pipeline:

  • iossimulator-arm64 Release AllSubsets_CoreCLR_RuntimeTests
  • iossimulator-x64 Release AllSubsets_CoreCLR_RuntimeTests
  • tvossimulator-arm64 Release AllSubsets_CoreCLR_RuntimeTests

Failed build:https://dev.azure.com/dnceng-public/public/_build/results?buildId=1329675&view=results

…tion in async methods
Add a TypeDesc case to GetModuleTokenForType to handle InstantiatedType
and other non-EcmaType TypeDesc variants by delegating to the existing
ModuleTokenResolver.GetModuleTokenForType.
Fixes a regression from dotnet#124203 where async resumption stubs referencing
generic type instantiations (e.g., CallStruct1M0<T>) crash with
NotImplementedException on Apple simulator CoreCLR RuntimeTests.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings March 11, 2026 14:15
@kotlarmiloskotlarmilos added the os-ios Apple iOS label Mar 11, 2026
@kotlarmiloskotlarmilos added this to the 11.0.0 milestone Mar 11, 2026
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to 'os-ios': @vitek-karas, @kotlarmilos, @steveisok, @akoeplinger
See info in area-owners.md if you want to be subscribed.

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

Extends ReadyToRun JIT interface token remapping to handle additional TypeDesc cases when compiling synthesized (non-ECMA-backed) method bodies, enabling module/token resolution via the existing ModuleTokenResolver.

Changes:

  • Add a TypeDesc switch arm in HandleToModuleToken’s faux-MethodIL token remapping to resolve module tokens through _compilation.NodeFactory.Resolver.

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

@davidwrighton

Copy link
Copy Markdown
Member

@jtschuster@kotlarmilos please update the tests so that we hit this scenario on normal crossgen2 outerloop run.

@jtschuster

Copy link
Copy Markdown
Member

@jtschuster@kotlarmilos please update the tests so that we hit this scenario on normal crossgen2 outerloop run.

Filed #125453 to track, working on a test now.

@kotlarmilos
kotlarmilos merged commit 92969f4 into dotnet:mainMar 12, 2026
115 of 116 checks passed
@jtschuster

Copy link
Copy Markdown
Member

It looks like we don't have any pipelines that run the test with corelib in the version bubble, but ios builds do. We'll have to add more jobs to a pipeline with the --large_version_bubble flag to run.

The repro also shows this isn't quite enough to fix the issue. We should disable compiling async methods completely in composite mode rather than just not emit them. I'll send out a PR soon.

CopilotAI pushed a commit that referenced this pull request Mar 13, 2026
…tion in async methods (#125444)
Fixes a regression introduced in #124203 where crossgen2 crashes with
`NotImplementedException: Unsupported token resolution for
Internal.TypeSystem.InstantiatedType` when compiling async methods that
reference generic type instantiations (e.g., `CallStruct1M0<T>`) on
Apple mobile platforms.
## Problem
The `GetModuleTokenForType` local function in `HandleToModuleToken`
handles `SignatureMethodVariable`, `ParameterizedType`, and `EcmaType`,
but does not handle `InstantiatedType`. When async resumption stubs
resolve tokens for instantiated generic types, the code falls through to
the `default` case and throws.
Affected jobs in `runtime-extra-platforms` pipeline:
- `iossimulator-arm64 Release AllSubsets_CoreCLR_RuntimeTests`
- `iossimulator-x64 Release AllSubsets_CoreCLR_RuntimeTests`
- `tvossimulator-arm64 Release AllSubsets_CoreCLR_RuntimeTests`
**Failed build:**
https://dev.azure.com/dnceng-public/public/_build/results?buildId=1329675&view=results
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
jtschuster added a commit that referenced this pull request Mar 16, 2026
We don't have pipeline legs that build coreclr tests with the framework
in the coreclr tests. This would have caught the issue from
#125444 in the crossgen2 pipeline.
It looks like the change in that PR didn't fully fix the issue but just
kicked the can down for a later exception to throw.
Add a job to `runtime-coreclr crossgen2-composite` to build the tests
including the framework libraries.
In composite mode, skip compiling all async methods rather than just not
emitting them.
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Apr 12, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@kotlarmilos@davidwrighton@jtschuster@jkotas
, '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

Fix crossgen2 crash on Apple mobile for InstantiatedType token resolution in async methods - #125444

Merged
kotlarmilos merged 1 commit into
dotnet:mainfrom
kotlarmilos:fix/crossgen2-async-instantiated-type
Mar 12, 2026
Merged

Fix crossgen2 crash on Apple mobile for InstantiatedType token resolution in async methods#125444
kotlarmilos merged 1 commit into
dotnet:mainfrom
kotlarmilos:fix/crossgen2-async-instantiated-type

Conversation

@kotlarmilos

@kotlarmiloskotlarmilos commented Mar 11, 2026

Copy link
Copy Markdown
Member

Fixes a regression introduced in #124203 where crossgen2 crashes with NotImplementedException: Unsupported token resolution for Internal.TypeSystem.InstantiatedType when compiling async methods that reference generic type instantiations (e.g., CallStruct1M0<T>) on Apple mobile platforms.

Problem

The GetModuleTokenForType local function in HandleToModuleToken handles SignatureMethodVariable, ParameterizedType, and EcmaType, but does not handle InstantiatedType. When async resumption stubs resolve tokens for instantiated generic types, the code falls through to the default case and throws.

Affected jobs in runtime-extra-platforms pipeline:

  • iossimulator-arm64 Release AllSubsets_CoreCLR_RuntimeTests
  • iossimulator-x64 Release AllSubsets_CoreCLR_RuntimeTests
  • tvossimulator-arm64 Release AllSubsets_CoreCLR_RuntimeTests

Failed build:https://dev.azure.com/dnceng-public/public/_build/results?buildId=1329675&view=results

…tion in async methods
Add a TypeDesc case to GetModuleTokenForType to handle InstantiatedType
and other non-EcmaType TypeDesc variants by delegating to the existing
ModuleTokenResolver.GetModuleTokenForType.
Fixes a regression from dotnet#124203 where async resumption stubs referencing
generic type instantiations (e.g., CallStruct1M0<T>) crash with
NotImplementedException on Apple simulator CoreCLR RuntimeTests.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings March 11, 2026 14:15
@kotlarmiloskotlarmilos added the os-ios Apple iOS label Mar 11, 2026
@kotlarmiloskotlarmilos added this to the 11.0.0 milestone Mar 11, 2026
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to 'os-ios': @vitek-karas, @kotlarmilos, @steveisok, @akoeplinger
See info in area-owners.md if you want to be subscribed.

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

Extends ReadyToRun JIT interface token remapping to handle additional TypeDesc cases when compiling synthesized (non-ECMA-backed) method bodies, enabling module/token resolution via the existing ModuleTokenResolver.

Changes:

  • Add a TypeDesc switch arm in HandleToModuleToken’s faux-MethodIL token remapping to resolve module tokens through _compilation.NodeFactory.Resolver.

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

@davidwrighton

Copy link
Copy Markdown
Member

@jtschuster@kotlarmilos please update the tests so that we hit this scenario on normal crossgen2 outerloop run.

@jtschuster

Copy link
Copy Markdown
Member

@jtschuster@kotlarmilos please update the tests so that we hit this scenario on normal crossgen2 outerloop run.

Filed #125453 to track, working on a test now.

@kotlarmilos
kotlarmilos merged commit 92969f4 into dotnet:mainMar 12, 2026
115 of 116 checks passed
@jtschuster

Copy link
Copy Markdown
Member

It looks like we don't have any pipelines that run the test with corelib in the version bubble, but ios builds do. We'll have to add more jobs to a pipeline with the --large_version_bubble flag to run.

The repro also shows this isn't quite enough to fix the issue. We should disable compiling async methods completely in composite mode rather than just not emit them. I'll send out a PR soon.

CopilotAI pushed a commit that referenced this pull request Mar 13, 2026
…tion in async methods (#125444)
Fixes a regression introduced in #124203 where crossgen2 crashes with
`NotImplementedException: Unsupported token resolution for
Internal.TypeSystem.InstantiatedType` when compiling async methods that
reference generic type instantiations (e.g., `CallStruct1M0<T>`) on
Apple mobile platforms.
## Problem
The `GetModuleTokenForType` local function in `HandleToModuleToken`
handles `SignatureMethodVariable`, `ParameterizedType`, and `EcmaType`,
but does not handle `InstantiatedType`. When async resumption stubs
resolve tokens for instantiated generic types, the code falls through to
the `default` case and throws.
Affected jobs in `runtime-extra-platforms` pipeline:
- `iossimulator-arm64 Release AllSubsets_CoreCLR_RuntimeTests`
- `iossimulator-x64 Release AllSubsets_CoreCLR_RuntimeTests`
- `tvossimulator-arm64 Release AllSubsets_CoreCLR_RuntimeTests`
**Failed build:**
https://dev.azure.com/dnceng-public/public/_build/results?buildId=1329675&view=results
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
jtschuster added a commit that referenced this pull request Mar 16, 2026
We don't have pipeline legs that build coreclr tests with the framework
in the coreclr tests. This would have caught the issue from
#125444 in the crossgen2 pipeline.
It looks like the change in that PR didn't fully fix the issue but just
kicked the can down for a later exception to throw.
Add a job to `runtime-coreclr crossgen2-composite` to build the tests
including the framework libraries.
In composite mode, skip compiling all async methods rather than just not
emitting them.
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Apr 12, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@kotlarmilos@davidwrighton@jtschuster@jkotas
, '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

Fix crossgen2 crash on Apple mobile for InstantiatedType token resolution in async methods - #125444

Merged
kotlarmilos merged 1 commit into
dotnet:mainfrom
kotlarmilos:fix/crossgen2-async-instantiated-type
Mar 12, 2026
Merged

Fix crossgen2 crash on Apple mobile for InstantiatedType token resolution in async methods#125444
kotlarmilos merged 1 commit into
dotnet:mainfrom
kotlarmilos:fix/crossgen2-async-instantiated-type

Conversation

@kotlarmilos

@kotlarmiloskotlarmilos commented Mar 11, 2026

Copy link
Copy Markdown
Member

Fixes a regression introduced in #124203 where crossgen2 crashes with NotImplementedException: Unsupported token resolution for Internal.TypeSystem.InstantiatedType when compiling async methods that reference generic type instantiations (e.g., CallStruct1M0<T>) on Apple mobile platforms.

Problem

The GetModuleTokenForType local function in HandleToModuleToken handles SignatureMethodVariable, ParameterizedType, and EcmaType, but does not handle InstantiatedType. When async resumption stubs resolve tokens for instantiated generic types, the code falls through to the default case and throws.

Affected jobs in runtime-extra-platforms pipeline:

  • iossimulator-arm64 Release AllSubsets_CoreCLR_RuntimeTests
  • iossimulator-x64 Release AllSubsets_CoreCLR_RuntimeTests
  • tvossimulator-arm64 Release AllSubsets_CoreCLR_RuntimeTests

Failed build:https://dev.azure.com/dnceng-public/public/_build/results?buildId=1329675&view=results

…tion in async methods
Add a TypeDesc case to GetModuleTokenForType to handle InstantiatedType
and other non-EcmaType TypeDesc variants by delegating to the existing
ModuleTokenResolver.GetModuleTokenForType.
Fixes a regression from dotnet#124203 where async resumption stubs referencing
generic type instantiations (e.g., CallStruct1M0<T>) crash with
NotImplementedException on Apple simulator CoreCLR RuntimeTests.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings March 11, 2026 14:15
@kotlarmiloskotlarmilos added the os-ios Apple iOS label Mar 11, 2026
@kotlarmiloskotlarmilos added this to the 11.0.0 milestone Mar 11, 2026
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to 'os-ios': @vitek-karas, @kotlarmilos, @steveisok, @akoeplinger
See info in area-owners.md if you want to be subscribed.

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

Extends ReadyToRun JIT interface token remapping to handle additional TypeDesc cases when compiling synthesized (non-ECMA-backed) method bodies, enabling module/token resolution via the existing ModuleTokenResolver.

Changes:

  • Add a TypeDesc switch arm in HandleToModuleToken’s faux-MethodIL token remapping to resolve module tokens through _compilation.NodeFactory.Resolver.

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

@davidwrighton

Copy link
Copy Markdown
Member

@jtschuster@kotlarmilos please update the tests so that we hit this scenario on normal crossgen2 outerloop run.

@jtschuster

Copy link
Copy Markdown
Member

@jtschuster@kotlarmilos please update the tests so that we hit this scenario on normal crossgen2 outerloop run.

Filed #125453 to track, working on a test now.

@kotlarmilos
kotlarmilos merged commit 92969f4 into dotnet:mainMar 12, 2026
115 of 116 checks passed
@jtschuster

Copy link
Copy Markdown
Member

It looks like we don't have any pipelines that run the test with corelib in the version bubble, but ios builds do. We'll have to add more jobs to a pipeline with the --large_version_bubble flag to run.

The repro also shows this isn't quite enough to fix the issue. We should disable compiling async methods completely in composite mode rather than just not emit them. I'll send out a PR soon.

CopilotAI pushed a commit that referenced this pull request Mar 13, 2026
…tion in async methods (#125444)
Fixes a regression introduced in #124203 where crossgen2 crashes with
`NotImplementedException: Unsupported token resolution for
Internal.TypeSystem.InstantiatedType` when compiling async methods that
reference generic type instantiations (e.g., `CallStruct1M0<T>`) on
Apple mobile platforms.
## Problem
The `GetModuleTokenForType` local function in `HandleToModuleToken`
handles `SignatureMethodVariable`, `ParameterizedType`, and `EcmaType`,
but does not handle `InstantiatedType`. When async resumption stubs
resolve tokens for instantiated generic types, the code falls through to
the `default` case and throws.
Affected jobs in `runtime-extra-platforms` pipeline:
- `iossimulator-arm64 Release AllSubsets_CoreCLR_RuntimeTests`
- `iossimulator-x64 Release AllSubsets_CoreCLR_RuntimeTests`
- `tvossimulator-arm64 Release AllSubsets_CoreCLR_RuntimeTests`
**Failed build:**
https://dev.azure.com/dnceng-public/public/_build/results?buildId=1329675&view=results
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
jtschuster added a commit that referenced this pull request Mar 16, 2026
We don't have pipeline legs that build coreclr tests with the framework
in the coreclr tests. This would have caught the issue from
#125444 in the crossgen2 pipeline.
It looks like the change in that PR didn't fully fix the issue but just
kicked the can down for a later exception to throw.
Add a job to `runtime-coreclr crossgen2-composite` to build the tests
including the framework libraries.
In composite mode, skip compiling all async methods rather than just not
emitting them.
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Apr 12, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@kotlarmilos@davidwrighton@jtschuster@jkotas
, '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

Fix crossgen2 crash on Apple mobile for InstantiatedType token resolution in async methods - #125444

Merged
kotlarmilos merged 1 commit into
dotnet:mainfrom
kotlarmilos:fix/crossgen2-async-instantiated-type
Mar 12, 2026
Merged

Fix crossgen2 crash on Apple mobile for InstantiatedType token resolution in async methods#125444
kotlarmilos merged 1 commit into
dotnet:mainfrom
kotlarmilos:fix/crossgen2-async-instantiated-type

Conversation

@kotlarmilos

@kotlarmiloskotlarmilos commented Mar 11, 2026

Copy link
Copy Markdown
Member

Fixes a regression introduced in #124203 where crossgen2 crashes with NotImplementedException: Unsupported token resolution for Internal.TypeSystem.InstantiatedType when compiling async methods that reference generic type instantiations (e.g., CallStruct1M0<T>) on Apple mobile platforms.

Problem

The GetModuleTokenForType local function in HandleToModuleToken handles SignatureMethodVariable, ParameterizedType, and EcmaType, but does not handle InstantiatedType. When async resumption stubs resolve tokens for instantiated generic types, the code falls through to the default case and throws.

Affected jobs in runtime-extra-platforms pipeline:

  • iossimulator-arm64 Release AllSubsets_CoreCLR_RuntimeTests
  • iossimulator-x64 Release AllSubsets_CoreCLR_RuntimeTests
  • tvossimulator-arm64 Release AllSubsets_CoreCLR_RuntimeTests

Failed build:https://dev.azure.com/dnceng-public/public/_build/results?buildId=1329675&view=results

…tion in async methods
Add a TypeDesc case to GetModuleTokenForType to handle InstantiatedType
and other non-EcmaType TypeDesc variants by delegating to the existing
ModuleTokenResolver.GetModuleTokenForType.
Fixes a regression from dotnet#124203 where async resumption stubs referencing
generic type instantiations (e.g., CallStruct1M0<T>) crash with
NotImplementedException on Apple simulator CoreCLR RuntimeTests.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings March 11, 2026 14:15
@kotlarmiloskotlarmilos added the os-ios Apple iOS label Mar 11, 2026
@kotlarmiloskotlarmilos added this to the 11.0.0 milestone Mar 11, 2026
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to 'os-ios': @vitek-karas, @kotlarmilos, @steveisok, @akoeplinger
See info in area-owners.md if you want to be subscribed.

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

Extends ReadyToRun JIT interface token remapping to handle additional TypeDesc cases when compiling synthesized (non-ECMA-backed) method bodies, enabling module/token resolution via the existing ModuleTokenResolver.

Changes:

  • Add a TypeDesc switch arm in HandleToModuleToken’s faux-MethodIL token remapping to resolve module tokens through _compilation.NodeFactory.Resolver.

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

@davidwrighton

Copy link
Copy Markdown
Member

@jtschuster@kotlarmilos please update the tests so that we hit this scenario on normal crossgen2 outerloop run.

@jtschuster

Copy link
Copy Markdown
Member

@jtschuster@kotlarmilos please update the tests so that we hit this scenario on normal crossgen2 outerloop run.

Filed #125453 to track, working on a test now.

@kotlarmilos
kotlarmilos merged commit 92969f4 into dotnet:mainMar 12, 2026
115 of 116 checks passed
@jtschuster

Copy link
Copy Markdown
Member

It looks like we don't have any pipelines that run the test with corelib in the version bubble, but ios builds do. We'll have to add more jobs to a pipeline with the --large_version_bubble flag to run.

The repro also shows this isn't quite enough to fix the issue. We should disable compiling async methods completely in composite mode rather than just not emit them. I'll send out a PR soon.

CopilotAI pushed a commit that referenced this pull request Mar 13, 2026
…tion in async methods (#125444)
Fixes a regression introduced in #124203 where crossgen2 crashes with
`NotImplementedException: Unsupported token resolution for
Internal.TypeSystem.InstantiatedType` when compiling async methods that
reference generic type instantiations (e.g., `CallStruct1M0<T>`) on
Apple mobile platforms.
## Problem
The `GetModuleTokenForType` local function in `HandleToModuleToken`
handles `SignatureMethodVariable`, `ParameterizedType`, and `EcmaType`,
but does not handle `InstantiatedType`. When async resumption stubs
resolve tokens for instantiated generic types, the code falls through to
the `default` case and throws.
Affected jobs in `runtime-extra-platforms` pipeline:
- `iossimulator-arm64 Release AllSubsets_CoreCLR_RuntimeTests`
- `iossimulator-x64 Release AllSubsets_CoreCLR_RuntimeTests`
- `tvossimulator-arm64 Release AllSubsets_CoreCLR_RuntimeTests`
**Failed build:**
https://dev.azure.com/dnceng-public/public/_build/results?buildId=1329675&view=results
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
jtschuster added a commit that referenced this pull request Mar 16, 2026
We don't have pipeline legs that build coreclr tests with the framework
in the coreclr tests. This would have caught the issue from
#125444 in the crossgen2 pipeline.
It looks like the change in that PR didn't fully fix the issue but just
kicked the can down for a later exception to throw.
Add a job to `runtime-coreclr crossgen2-composite` to build the tests
including the framework libraries.
In composite mode, skip compiling all async methods rather than just not
emitting them.
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Apr 12, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@kotlarmilos@davidwrighton@jtschuster@jkotas
, '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

Fix crossgen2 crash on Apple mobile for InstantiatedType token resolution in async methods - #125444

Merged
kotlarmilos merged 1 commit into
dotnet:mainfrom
kotlarmilos:fix/crossgen2-async-instantiated-type
Mar 12, 2026
Merged

Fix crossgen2 crash on Apple mobile for InstantiatedType token resolution in async methods#125444
kotlarmilos merged 1 commit into
dotnet:mainfrom
kotlarmilos:fix/crossgen2-async-instantiated-type

Conversation

@kotlarmilos

@kotlarmiloskotlarmilos commented Mar 11, 2026

Copy link
Copy Markdown
Member

Fixes a regression introduced in #124203 where crossgen2 crashes with NotImplementedException: Unsupported token resolution for Internal.TypeSystem.InstantiatedType when compiling async methods that reference generic type instantiations (e.g., CallStruct1M0<T>) on Apple mobile platforms.

Problem

The GetModuleTokenForType local function in HandleToModuleToken handles SignatureMethodVariable, ParameterizedType, and EcmaType, but does not handle InstantiatedType. When async resumption stubs resolve tokens for instantiated generic types, the code falls through to the default case and throws.

Affected jobs in runtime-extra-platforms pipeline:

  • iossimulator-arm64 Release AllSubsets_CoreCLR_RuntimeTests
  • iossimulator-x64 Release AllSubsets_CoreCLR_RuntimeTests
  • tvossimulator-arm64 Release AllSubsets_CoreCLR_RuntimeTests

Failed build:https://dev.azure.com/dnceng-public/public/_build/results?buildId=1329675&view=results

…tion in async methods
Add a TypeDesc case to GetModuleTokenForType to handle InstantiatedType
and other non-EcmaType TypeDesc variants by delegating to the existing
ModuleTokenResolver.GetModuleTokenForType.
Fixes a regression from dotnet#124203 where async resumption stubs referencing
generic type instantiations (e.g., CallStruct1M0<T>) crash with
NotImplementedException on Apple simulator CoreCLR RuntimeTests.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings March 11, 2026 14:15
@kotlarmiloskotlarmilos added the os-ios Apple iOS label Mar 11, 2026
@kotlarmiloskotlarmilos added this to the 11.0.0 milestone Mar 11, 2026
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to 'os-ios': @vitek-karas, @kotlarmilos, @steveisok, @akoeplinger
See info in area-owners.md if you want to be subscribed.

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

Extends ReadyToRun JIT interface token remapping to handle additional TypeDesc cases when compiling synthesized (non-ECMA-backed) method bodies, enabling module/token resolution via the existing ModuleTokenResolver.

Changes:

  • Add a TypeDesc switch arm in HandleToModuleToken’s faux-MethodIL token remapping to resolve module tokens through _compilation.NodeFactory.Resolver.

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

@davidwrighton

Copy link
Copy Markdown
Member

@jtschuster@kotlarmilos please update the tests so that we hit this scenario on normal crossgen2 outerloop run.

@jtschuster

Copy link
Copy Markdown
Member

@jtschuster@kotlarmilos please update the tests so that we hit this scenario on normal crossgen2 outerloop run.

Filed #125453 to track, working on a test now.

@kotlarmilos
kotlarmilos merged commit 92969f4 into dotnet:mainMar 12, 2026
115 of 116 checks passed
@jtschuster

Copy link
Copy Markdown
Member

It looks like we don't have any pipelines that run the test with corelib in the version bubble, but ios builds do. We'll have to add more jobs to a pipeline with the --large_version_bubble flag to run.

The repro also shows this isn't quite enough to fix the issue. We should disable compiling async methods completely in composite mode rather than just not emit them. I'll send out a PR soon.

CopilotAI pushed a commit that referenced this pull request Mar 13, 2026
…tion in async methods (#125444)
Fixes a regression introduced in #124203 where crossgen2 crashes with
`NotImplementedException: Unsupported token resolution for
Internal.TypeSystem.InstantiatedType` when compiling async methods that
reference generic type instantiations (e.g., `CallStruct1M0<T>`) on
Apple mobile platforms.
## Problem
The `GetModuleTokenForType` local function in `HandleToModuleToken`
handles `SignatureMethodVariable`, `ParameterizedType`, and `EcmaType`,
but does not handle `InstantiatedType`. When async resumption stubs
resolve tokens for instantiated generic types, the code falls through to
the `default` case and throws.
Affected jobs in `runtime-extra-platforms` pipeline:
- `iossimulator-arm64 Release AllSubsets_CoreCLR_RuntimeTests`
- `iossimulator-x64 Release AllSubsets_CoreCLR_RuntimeTests`
- `tvossimulator-arm64 Release AllSubsets_CoreCLR_RuntimeTests`
**Failed build:**
https://dev.azure.com/dnceng-public/public/_build/results?buildId=1329675&view=results
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
jtschuster added a commit that referenced this pull request Mar 16, 2026
We don't have pipeline legs that build coreclr tests with the framework
in the coreclr tests. This would have caught the issue from
#125444 in the crossgen2 pipeline.
It looks like the change in that PR didn't fully fix the issue but just
kicked the can down for a later exception to throw.
Add a job to `runtime-coreclr crossgen2-composite` to build the tests
including the framework libraries.
In composite mode, skip compiling all async methods rather than just not
emitting them.
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Apr 12, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@kotlarmilos@davidwrighton@jtschuster@jkotas