Skip to content

Preserve IL for CoreCLR interpreter fallback on Apple mobile - #130622

Merged
kotlarmilos merged 22 commits into
mainfrom
copilot/clr-ios-track-il-stripping-issues
Jul 28, 2026
Merged

Preserve IL for CoreCLR interpreter fallback on Apple mobile#130622
kotlarmilos merged 22 commits into
mainfrom
copilot/clr-ios-track-il-stripping-issues

Conversation

CopilotAI commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Apple mobile composite ReadyToRun publishing could strip IL later required by the CoreCLR interpreter when compiled code is rejected or unavailable in a custom load context.

  • Stripping policy

    • Preserve IL for methods with per-method instruction-set support fixups.
    • Retain component IL on Apple mobile targets where interpreter fallback remains possible.
  • Coverage

    • Add focused ReadyToRun coverage for opportunistic instruction sets and Apple mobile publishing.
    • Remove the temporary project-level IL-stripping opt-outs.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/runtime-infrastructure
See info in area-owners.md if you want to be subscribed.

Co-authored-by: kotlarmilos <11523312+kotlarmilos@users.noreply.github.com>
CopilotAI requested review from Copilot and removed request for CopilotJuly 13, 2026 14:07
Co-authored-by: kotlarmilos <11523312+kotlarmilos@users.noreply.github.com>
CopilotAI requested review from Copilot and removed request for CopilotJuly 13, 2026 14:18
CopilotAI changed the title [WIP] Track IL-stripping issues for CoreCLR on Apple mobilePreserve IL for CoreCLR interpreter fallback on Apple mobileJul 13, 2026
CopilotAI requested a review from kotlarmilosJuly 13, 2026 14:19
@kotlarmilos

Copy link
Copy Markdown
Member

/azp run runtime-extra-platforms

@azure-pipelines

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

@jkotas

Copy link
Copy Markdown
Member

Apple mobile composite ReadyToRun publishing could strip IL later required by the CoreCLR interpreter when compiled code is rejected

This sounds like a bug in how we produce the R2R images for use with interpreter. The instruction set should be fixed in this case, and we should never reject the native code. If the actual machine supports more instruction set extensions that the fixed set, we should ignore them.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 19812166-4b05-40cc-9a81-8b80b909e10b
CopilotAI review requested due to automatic review settings July 21, 2026 12:30
@kotlarmilos

Copy link
Copy Markdown
Member

/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.

Copilot's findings

Comments suppressed due to low confidence (2)

src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/TestCasesRunner/R2RResultChecker.cs:977

  • EagerInstructionSetSupportHasNoUnsupportedEntries claims to validate the global eager baseline Check_InstructionSetSupport fixup, but it currently scans all import sections (including non-eager/method-level sections). This can produce false failures if any per-method Check_InstructionSetSupport signatures contain '-' entries.

Filter to eager import sections (ReadyToRunImportSectionFlags.Eager) to match the method's stated intent.

 foreach (ReadyToRunImportSection section in reader.ImportSections)
{
if (section.Entries is null)
continue;
foreach (ReadyToRunImportSection.ImportSectionEntry entry in section.Entries)
{
if (entry.Signature is not null && entry.Signature.FixupKind == ReadyToRunFixupKind.Check_InstructionSetSupport)
signatures.Add(entry.Signature.ToString(options));
}
}

src/libraries/System.Reflection.Metadata/tests/Metadata/Decoding/SignatureDecoderTests.cs:266

  • The stripped-IL detection uses raw opcode bytes (0x2A and 0xFE 0x24) without explaining what 0xFE 0x24 represents. Adding a brief comment (and a named constant for 0x2A) would make it clearer that this matches the crossgen2 IL-stripping sentinel (CopiedMethodILNode.s_minimalILBody).
 var il = body.GetILBytes();
bool isStripped =
(il?.Length == 1 && il[0] == 0x2A) ||
(il?.Length == 2 && il[0] == 0xFE && il[1] == 0x24);
if (!isStripped)
  • Files reviewed: 13/13 changed files
  • Comments generated: 0 new

Comment threadsrc/coreclr/tools/aot/crossgen2/crossgen2.props Outdated
Comment threadsrc/coreclr/tools/aot/crossgen2/Program.cs Outdated
Comment threadsrc/coreclr/tools/aot/crossgen2/Program.cs Outdated
crossgen2 binaries are host-specific, so gating GetTargetAllowsRuntimeCodeGeneration
on the host build's FEATURE_DYNAMIC_CODE_COMPILED define is wrong. Drop the define
from crossgen2.props and the surrounding #if from Program.cs, leaving the decision
purely on the target OS and architecture.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 2d421224-6ce0-4d3a-92ac-263330249e7c
CopilotAI review requested due to automatic review settings July 22, 2026 06:51
…yToRun
The define is no longer consumed by any source in the project after the
runtime-codegen decision moved to a target-based check in crossgen2.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 2d421224-6ce0-4d3a-92ac-263330249e7c

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.

Copilot's findings

  • Files reviewed: 13/13 changed files
  • Comments generated: 0 new

CopilotAI review requested due to automatic review settings July 22, 2026 06:58

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.

Copilot was unable to review this pull request because there is no eligible user to bill. To allow Copilot reviews on bot-authored pull requests, enable direct organization billing in your organization's Copilot settings.

@jkotasjkotas left a comment

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.

LGTM. Thank you!

@kotlarmilos

Copy link
Copy Markdown
Member

/azp run runtime-extra-platforms

@azure-pipelines

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

@kotlarmilos

Copy link
Copy Markdown
Member

/ba-g Libraries x86 Debug is #130947, extra-platforms failures overlap with main

@kotlarmilos
kotlarmilos merged commit 4dc319f into mainJul 28, 2026
170 of 186 checks passed
@am11

am11 commented Jul 28, 2026

Copy link
Copy Markdown
Member

This conflicted with #131429.

linux-x64 checked CLR_Tools_Tests is now failing to build.

 crossgen2_inbuild -> /__w/1/s/artifacts/bin/coreclr/linux.x64.Checked/x64/crossgen2/
/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/WasmArgumentLayoutTests.cs(166,45): error CS7036: There is no argument given that corresponds to the required parameter 'instructionSetSupport' of 'ReadyToRunCompilerContext.ReadyToRunCompilerContext(TargetDetails, SharedGenericsMode, bool, bool, InstructionSetSupport, CompilerTypeSystemContext)' [/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/ILCompiler.ReadyToRun.Tests.csproj]
Build FAILED.
/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/WasmArgumentLayoutTests.cs(166,45): error CS7036: There is no argument given that corresponds to the required parameter 'instructionSetSupport' of 'ReadyToRunCompilerContext.ReadyToRunCompilerContext(TargetDetails, SharedGenericsMode, bool, bool, InstructionSetSupport, CompilerTypeSystemContext)' [/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/ILCompiler.ReadyToRun.Tests.csproj]
0 Warning(s)
1 Error(s)

@kotlarmilos

Copy link
Copy Markdown
Member

This conflicted with #131429.

linux-x64 checked CLR_Tools_Tests is now failing to build.

 crossgen2_inbuild -> /__w/1/s/artifacts/bin/coreclr/linux.x64.Checked/x64/crossgen2/
/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/WasmArgumentLayoutTests.cs(166,45): error CS7036: There is no argument given that corresponds to the required parameter 'instructionSetSupport' of 'ReadyToRunCompilerContext.ReadyToRunCompilerContext(TargetDetails, SharedGenericsMode, bool, bool, InstructionSetSupport, CompilerTypeSystemContext)' [/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/ILCompiler.ReadyToRun.Tests.csproj]
Build FAILED.
/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/WasmArgumentLayoutTests.cs(166,45): error CS7036: There is no argument given that corresponds to the required parameter 'instructionSetSupport' of 'ReadyToRunCompilerContext.ReadyToRunCompilerContext(TargetDetails, SharedGenericsMode, bool, bool, InstructionSetSupport, CompilerTypeSystemContext)' [/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/ILCompiler.ReadyToRun.Tests.csproj]
0 Warning(s)
1 Error(s)

Thanks for the heads up, should be fixed in #131505. @lewing Thanks!

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

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

[clr-ios] Track IL-stripping issues for CoreCLR on Apple mobile

6 participants

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

Preserve IL for CoreCLR interpreter fallback on Apple mobile - #130622

Merged
kotlarmilos merged 22 commits into
mainfrom
copilot/clr-ios-track-il-stripping-issues
Jul 28, 2026
Merged

Preserve IL for CoreCLR interpreter fallback on Apple mobile#130622
kotlarmilos merged 22 commits into
mainfrom
copilot/clr-ios-track-il-stripping-issues

Conversation

CopilotAI commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Apple mobile composite ReadyToRun publishing could strip IL later required by the CoreCLR interpreter when compiled code is rejected or unavailable in a custom load context.

  • Stripping policy

    • Preserve IL for methods with per-method instruction-set support fixups.
    • Retain component IL on Apple mobile targets where interpreter fallback remains possible.
  • Coverage

    • Add focused ReadyToRun coverage for opportunistic instruction sets and Apple mobile publishing.
    • Remove the temporary project-level IL-stripping opt-outs.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/runtime-infrastructure
See info in area-owners.md if you want to be subscribed.

Co-authored-by: kotlarmilos <11523312+kotlarmilos@users.noreply.github.com>
CopilotAI requested review from Copilot and removed request for CopilotJuly 13, 2026 14:07
Co-authored-by: kotlarmilos <11523312+kotlarmilos@users.noreply.github.com>
CopilotAI requested review from Copilot and removed request for CopilotJuly 13, 2026 14:18
CopilotAI changed the title [WIP] Track IL-stripping issues for CoreCLR on Apple mobilePreserve IL for CoreCLR interpreter fallback on Apple mobileJul 13, 2026
CopilotAI requested a review from kotlarmilosJuly 13, 2026 14:19
@kotlarmilos

Copy link
Copy Markdown
Member

/azp run runtime-extra-platforms

@azure-pipelines

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

@jkotas

Copy link
Copy Markdown
Member

Apple mobile composite ReadyToRun publishing could strip IL later required by the CoreCLR interpreter when compiled code is rejected

This sounds like a bug in how we produce the R2R images for use with interpreter. The instruction set should be fixed in this case, and we should never reject the native code. If the actual machine supports more instruction set extensions that the fixed set, we should ignore them.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 19812166-4b05-40cc-9a81-8b80b909e10b
CopilotAI review requested due to automatic review settings July 21, 2026 12:30
@kotlarmilos

Copy link
Copy Markdown
Member

/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.

Copilot's findings

Comments suppressed due to low confidence (2)

src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/TestCasesRunner/R2RResultChecker.cs:977

  • EagerInstructionSetSupportHasNoUnsupportedEntries claims to validate the global eager baseline Check_InstructionSetSupport fixup, but it currently scans all import sections (including non-eager/method-level sections). This can produce false failures if any per-method Check_InstructionSetSupport signatures contain '-' entries.

Filter to eager import sections (ReadyToRunImportSectionFlags.Eager) to match the method's stated intent.

 foreach (ReadyToRunImportSection section in reader.ImportSections)
{
if (section.Entries is null)
continue;
foreach (ReadyToRunImportSection.ImportSectionEntry entry in section.Entries)
{
if (entry.Signature is not null && entry.Signature.FixupKind == ReadyToRunFixupKind.Check_InstructionSetSupport)
signatures.Add(entry.Signature.ToString(options));
}
}

src/libraries/System.Reflection.Metadata/tests/Metadata/Decoding/SignatureDecoderTests.cs:266

  • The stripped-IL detection uses raw opcode bytes (0x2A and 0xFE 0x24) without explaining what 0xFE 0x24 represents. Adding a brief comment (and a named constant for 0x2A) would make it clearer that this matches the crossgen2 IL-stripping sentinel (CopiedMethodILNode.s_minimalILBody).
 var il = body.GetILBytes();
bool isStripped =
(il?.Length == 1 && il[0] == 0x2A) ||
(il?.Length == 2 && il[0] == 0xFE && il[1] == 0x24);
if (!isStripped)
  • Files reviewed: 13/13 changed files
  • Comments generated: 0 new

Comment threadsrc/coreclr/tools/aot/crossgen2/crossgen2.props Outdated
Comment threadsrc/coreclr/tools/aot/crossgen2/Program.cs Outdated
Comment threadsrc/coreclr/tools/aot/crossgen2/Program.cs Outdated
crossgen2 binaries are host-specific, so gating GetTargetAllowsRuntimeCodeGeneration
on the host build's FEATURE_DYNAMIC_CODE_COMPILED define is wrong. Drop the define
from crossgen2.props and the surrounding #if from Program.cs, leaving the decision
purely on the target OS and architecture.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 2d421224-6ce0-4d3a-92ac-263330249e7c
CopilotAI review requested due to automatic review settings July 22, 2026 06:51
…yToRun
The define is no longer consumed by any source in the project after the
runtime-codegen decision moved to a target-based check in crossgen2.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 2d421224-6ce0-4d3a-92ac-263330249e7c

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.

Copilot's findings

  • Files reviewed: 13/13 changed files
  • Comments generated: 0 new

CopilotAI review requested due to automatic review settings July 22, 2026 06:58

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.

Copilot was unable to review this pull request because there is no eligible user to bill. To allow Copilot reviews on bot-authored pull requests, enable direct organization billing in your organization's Copilot settings.

@jkotasjkotas left a comment

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.

LGTM. Thank you!

@kotlarmilos

Copy link
Copy Markdown
Member

/azp run runtime-extra-platforms

@azure-pipelines

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

@kotlarmilos

Copy link
Copy Markdown
Member

/ba-g Libraries x86 Debug is #130947, extra-platforms failures overlap with main

@kotlarmilos
kotlarmilos merged commit 4dc319f into mainJul 28, 2026
170 of 186 checks passed
@am11

am11 commented Jul 28, 2026

Copy link
Copy Markdown
Member

This conflicted with #131429.

linux-x64 checked CLR_Tools_Tests is now failing to build.

 crossgen2_inbuild -> /__w/1/s/artifacts/bin/coreclr/linux.x64.Checked/x64/crossgen2/
/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/WasmArgumentLayoutTests.cs(166,45): error CS7036: There is no argument given that corresponds to the required parameter 'instructionSetSupport' of 'ReadyToRunCompilerContext.ReadyToRunCompilerContext(TargetDetails, SharedGenericsMode, bool, bool, InstructionSetSupport, CompilerTypeSystemContext)' [/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/ILCompiler.ReadyToRun.Tests.csproj]
Build FAILED.
/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/WasmArgumentLayoutTests.cs(166,45): error CS7036: There is no argument given that corresponds to the required parameter 'instructionSetSupport' of 'ReadyToRunCompilerContext.ReadyToRunCompilerContext(TargetDetails, SharedGenericsMode, bool, bool, InstructionSetSupport, CompilerTypeSystemContext)' [/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/ILCompiler.ReadyToRun.Tests.csproj]
0 Warning(s)
1 Error(s)

@kotlarmilos

Copy link
Copy Markdown
Member

This conflicted with #131429.

linux-x64 checked CLR_Tools_Tests is now failing to build.

 crossgen2_inbuild -> /__w/1/s/artifacts/bin/coreclr/linux.x64.Checked/x64/crossgen2/
/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/WasmArgumentLayoutTests.cs(166,45): error CS7036: There is no argument given that corresponds to the required parameter 'instructionSetSupport' of 'ReadyToRunCompilerContext.ReadyToRunCompilerContext(TargetDetails, SharedGenericsMode, bool, bool, InstructionSetSupport, CompilerTypeSystemContext)' [/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/ILCompiler.ReadyToRun.Tests.csproj]
Build FAILED.
/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/WasmArgumentLayoutTests.cs(166,45): error CS7036: There is no argument given that corresponds to the required parameter 'instructionSetSupport' of 'ReadyToRunCompilerContext.ReadyToRunCompilerContext(TargetDetails, SharedGenericsMode, bool, bool, InstructionSetSupport, CompilerTypeSystemContext)' [/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/ILCompiler.ReadyToRun.Tests.csproj]
0 Warning(s)
1 Error(s)

Thanks for the heads up, should be fixed in #131505. @lewing Thanks!

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

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

[clr-ios] Track IL-stripping issues for CoreCLR on Apple mobile

6 participants

@kotlarmilos@jkotas@am11@BrzVlad
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Preserve IL for CoreCLR interpreter fallback on Apple mobile by Copilot · Pull Request #130622 · dotnet/runtime · GitHub
Skip to content

Preserve IL for CoreCLR interpreter fallback on Apple mobile - #130622

Merged
kotlarmilos merged 22 commits into
mainfrom
copilot/clr-ios-track-il-stripping-issues
Jul 28, 2026
Merged

Preserve IL for CoreCLR interpreter fallback on Apple mobile#130622
kotlarmilos merged 22 commits into
mainfrom
copilot/clr-ios-track-il-stripping-issues

Conversation

CopilotAI commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Apple mobile composite ReadyToRun publishing could strip IL later required by the CoreCLR interpreter when compiled code is rejected or unavailable in a custom load context.

  • Stripping policy

    • Preserve IL for methods with per-method instruction-set support fixups.
    • Retain component IL on Apple mobile targets where interpreter fallback remains possible.
  • Coverage

    • Add focused ReadyToRun coverage for opportunistic instruction sets and Apple mobile publishing.
    • Remove the temporary project-level IL-stripping opt-outs.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/runtime-infrastructure
See info in area-owners.md if you want to be subscribed.

Co-authored-by: kotlarmilos <11523312+kotlarmilos@users.noreply.github.com>
CopilotAI requested review from Copilot and removed request for CopilotJuly 13, 2026 14:07
Co-authored-by: kotlarmilos <11523312+kotlarmilos@users.noreply.github.com>
CopilotAI requested review from Copilot and removed request for CopilotJuly 13, 2026 14:18
CopilotAI changed the title [WIP] Track IL-stripping issues for CoreCLR on Apple mobilePreserve IL for CoreCLR interpreter fallback on Apple mobileJul 13, 2026
CopilotAI requested a review from kotlarmilosJuly 13, 2026 14:19
@kotlarmilos

Copy link
Copy Markdown
Member

/azp run runtime-extra-platforms

@azure-pipelines

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

@jkotas

Copy link
Copy Markdown
Member

Apple mobile composite ReadyToRun publishing could strip IL later required by the CoreCLR interpreter when compiled code is rejected

This sounds like a bug in how we produce the R2R images for use with interpreter. The instruction set should be fixed in this case, and we should never reject the native code. If the actual machine supports more instruction set extensions that the fixed set, we should ignore them.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 19812166-4b05-40cc-9a81-8b80b909e10b
CopilotAI review requested due to automatic review settings July 21, 2026 12:30
@kotlarmilos

Copy link
Copy Markdown
Member

/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.

Copilot's findings

Comments suppressed due to low confidence (2)

src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/TestCasesRunner/R2RResultChecker.cs:977

  • EagerInstructionSetSupportHasNoUnsupportedEntries claims to validate the global eager baseline Check_InstructionSetSupport fixup, but it currently scans all import sections (including non-eager/method-level sections). This can produce false failures if any per-method Check_InstructionSetSupport signatures contain '-' entries.

Filter to eager import sections (ReadyToRunImportSectionFlags.Eager) to match the method's stated intent.

 foreach (ReadyToRunImportSection section in reader.ImportSections)
{
if (section.Entries is null)
continue;
foreach (ReadyToRunImportSection.ImportSectionEntry entry in section.Entries)
{
if (entry.Signature is not null && entry.Signature.FixupKind == ReadyToRunFixupKind.Check_InstructionSetSupport)
signatures.Add(entry.Signature.ToString(options));
}
}

src/libraries/System.Reflection.Metadata/tests/Metadata/Decoding/SignatureDecoderTests.cs:266

  • The stripped-IL detection uses raw opcode bytes (0x2A and 0xFE 0x24) without explaining what 0xFE 0x24 represents. Adding a brief comment (and a named constant for 0x2A) would make it clearer that this matches the crossgen2 IL-stripping sentinel (CopiedMethodILNode.s_minimalILBody).
 var il = body.GetILBytes();
bool isStripped =
(il?.Length == 1 && il[0] == 0x2A) ||
(il?.Length == 2 && il[0] == 0xFE && il[1] == 0x24);
if (!isStripped)
  • Files reviewed: 13/13 changed files
  • Comments generated: 0 new

Comment threadsrc/coreclr/tools/aot/crossgen2/crossgen2.props Outdated
Comment threadsrc/coreclr/tools/aot/crossgen2/Program.cs Outdated
Comment threadsrc/coreclr/tools/aot/crossgen2/Program.cs Outdated
crossgen2 binaries are host-specific, so gating GetTargetAllowsRuntimeCodeGeneration
on the host build's FEATURE_DYNAMIC_CODE_COMPILED define is wrong. Drop the define
from crossgen2.props and the surrounding #if from Program.cs, leaving the decision
purely on the target OS and architecture.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 2d421224-6ce0-4d3a-92ac-263330249e7c
CopilotAI review requested due to automatic review settings July 22, 2026 06:51
…yToRun
The define is no longer consumed by any source in the project after the
runtime-codegen decision moved to a target-based check in crossgen2.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 2d421224-6ce0-4d3a-92ac-263330249e7c

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.

Copilot's findings

  • Files reviewed: 13/13 changed files
  • Comments generated: 0 new

CopilotAI review requested due to automatic review settings July 22, 2026 06:58

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.

Copilot was unable to review this pull request because there is no eligible user to bill. To allow Copilot reviews on bot-authored pull requests, enable direct organization billing in your organization's Copilot settings.

@jkotasjkotas left a comment

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.

LGTM. Thank you!

@kotlarmilos

Copy link
Copy Markdown
Member

/azp run runtime-extra-platforms

@azure-pipelines

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

@kotlarmilos

Copy link
Copy Markdown
Member

/ba-g Libraries x86 Debug is #130947, extra-platforms failures overlap with main

@kotlarmilos
kotlarmilos merged commit 4dc319f into mainJul 28, 2026
170 of 186 checks passed
@am11

am11 commented Jul 28, 2026

Copy link
Copy Markdown
Member

This conflicted with #131429.

linux-x64 checked CLR_Tools_Tests is now failing to build.

 crossgen2_inbuild -> /__w/1/s/artifacts/bin/coreclr/linux.x64.Checked/x64/crossgen2/
/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/WasmArgumentLayoutTests.cs(166,45): error CS7036: There is no argument given that corresponds to the required parameter 'instructionSetSupport' of 'ReadyToRunCompilerContext.ReadyToRunCompilerContext(TargetDetails, SharedGenericsMode, bool, bool, InstructionSetSupport, CompilerTypeSystemContext)' [/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/ILCompiler.ReadyToRun.Tests.csproj]
Build FAILED.
/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/WasmArgumentLayoutTests.cs(166,45): error CS7036: There is no argument given that corresponds to the required parameter 'instructionSetSupport' of 'ReadyToRunCompilerContext.ReadyToRunCompilerContext(TargetDetails, SharedGenericsMode, bool, bool, InstructionSetSupport, CompilerTypeSystemContext)' [/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/ILCompiler.ReadyToRun.Tests.csproj]
0 Warning(s)
1 Error(s)

@kotlarmilos

Copy link
Copy Markdown
Member

This conflicted with #131429.

linux-x64 checked CLR_Tools_Tests is now failing to build.

 crossgen2_inbuild -> /__w/1/s/artifacts/bin/coreclr/linux.x64.Checked/x64/crossgen2/
/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/WasmArgumentLayoutTests.cs(166,45): error CS7036: There is no argument given that corresponds to the required parameter 'instructionSetSupport' of 'ReadyToRunCompilerContext.ReadyToRunCompilerContext(TargetDetails, SharedGenericsMode, bool, bool, InstructionSetSupport, CompilerTypeSystemContext)' [/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/ILCompiler.ReadyToRun.Tests.csproj]
Build FAILED.
/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/WasmArgumentLayoutTests.cs(166,45): error CS7036: There is no argument given that corresponds to the required parameter 'instructionSetSupport' of 'ReadyToRunCompilerContext.ReadyToRunCompilerContext(TargetDetails, SharedGenericsMode, bool, bool, InstructionSetSupport, CompilerTypeSystemContext)' [/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/ILCompiler.ReadyToRun.Tests.csproj]
0 Warning(s)
1 Error(s)

Thanks for the heads up, should be fixed in #131505. @lewing Thanks!

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

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

[clr-ios] Track IL-stripping issues for CoreCLR on Apple mobile

6 participants

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

Preserve IL for CoreCLR interpreter fallback on Apple mobile - #130622

Merged
kotlarmilos merged 22 commits into
mainfrom
copilot/clr-ios-track-il-stripping-issues
Jul 28, 2026
Merged

Preserve IL for CoreCLR interpreter fallback on Apple mobile#130622
kotlarmilos merged 22 commits into
mainfrom
copilot/clr-ios-track-il-stripping-issues

Conversation

CopilotAI commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Apple mobile composite ReadyToRun publishing could strip IL later required by the CoreCLR interpreter when compiled code is rejected or unavailable in a custom load context.

  • Stripping policy

    • Preserve IL for methods with per-method instruction-set support fixups.
    • Retain component IL on Apple mobile targets where interpreter fallback remains possible.
  • Coverage

    • Add focused ReadyToRun coverage for opportunistic instruction sets and Apple mobile publishing.
    • Remove the temporary project-level IL-stripping opt-outs.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/runtime-infrastructure
See info in area-owners.md if you want to be subscribed.

Co-authored-by: kotlarmilos <11523312+kotlarmilos@users.noreply.github.com>
CopilotAI requested review from Copilot and removed request for CopilotJuly 13, 2026 14:07
Co-authored-by: kotlarmilos <11523312+kotlarmilos@users.noreply.github.com>
CopilotAI requested review from Copilot and removed request for CopilotJuly 13, 2026 14:18
CopilotAI changed the title [WIP] Track IL-stripping issues for CoreCLR on Apple mobilePreserve IL for CoreCLR interpreter fallback on Apple mobileJul 13, 2026
CopilotAI requested a review from kotlarmilosJuly 13, 2026 14:19
@kotlarmilos

Copy link
Copy Markdown
Member

/azp run runtime-extra-platforms

@azure-pipelines

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

@jkotas

Copy link
Copy Markdown
Member

Apple mobile composite ReadyToRun publishing could strip IL later required by the CoreCLR interpreter when compiled code is rejected

This sounds like a bug in how we produce the R2R images for use with interpreter. The instruction set should be fixed in this case, and we should never reject the native code. If the actual machine supports more instruction set extensions that the fixed set, we should ignore them.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 19812166-4b05-40cc-9a81-8b80b909e10b
CopilotAI review requested due to automatic review settings July 21, 2026 12:30
@kotlarmilos

Copy link
Copy Markdown
Member

/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.

Copilot's findings

Comments suppressed due to low confidence (2)

src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/TestCasesRunner/R2RResultChecker.cs:977

  • EagerInstructionSetSupportHasNoUnsupportedEntries claims to validate the global eager baseline Check_InstructionSetSupport fixup, but it currently scans all import sections (including non-eager/method-level sections). This can produce false failures if any per-method Check_InstructionSetSupport signatures contain '-' entries.

Filter to eager import sections (ReadyToRunImportSectionFlags.Eager) to match the method's stated intent.

 foreach (ReadyToRunImportSection section in reader.ImportSections)
{
if (section.Entries is null)
continue;
foreach (ReadyToRunImportSection.ImportSectionEntry entry in section.Entries)
{
if (entry.Signature is not null && entry.Signature.FixupKind == ReadyToRunFixupKind.Check_InstructionSetSupport)
signatures.Add(entry.Signature.ToString(options));
}
}

src/libraries/System.Reflection.Metadata/tests/Metadata/Decoding/SignatureDecoderTests.cs:266

  • The stripped-IL detection uses raw opcode bytes (0x2A and 0xFE 0x24) without explaining what 0xFE 0x24 represents. Adding a brief comment (and a named constant for 0x2A) would make it clearer that this matches the crossgen2 IL-stripping sentinel (CopiedMethodILNode.s_minimalILBody).
 var il = body.GetILBytes();
bool isStripped =
(il?.Length == 1 && il[0] == 0x2A) ||
(il?.Length == 2 && il[0] == 0xFE && il[1] == 0x24);
if (!isStripped)
  • Files reviewed: 13/13 changed files
  • Comments generated: 0 new

Comment threadsrc/coreclr/tools/aot/crossgen2/crossgen2.props Outdated
Comment threadsrc/coreclr/tools/aot/crossgen2/Program.cs Outdated
Comment threadsrc/coreclr/tools/aot/crossgen2/Program.cs Outdated
crossgen2 binaries are host-specific, so gating GetTargetAllowsRuntimeCodeGeneration
on the host build's FEATURE_DYNAMIC_CODE_COMPILED define is wrong. Drop the define
from crossgen2.props and the surrounding #if from Program.cs, leaving the decision
purely on the target OS and architecture.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 2d421224-6ce0-4d3a-92ac-263330249e7c
CopilotAI review requested due to automatic review settings July 22, 2026 06:51
…yToRun
The define is no longer consumed by any source in the project after the
runtime-codegen decision moved to a target-based check in crossgen2.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 2d421224-6ce0-4d3a-92ac-263330249e7c

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.

Copilot's findings

  • Files reviewed: 13/13 changed files
  • Comments generated: 0 new

CopilotAI review requested due to automatic review settings July 22, 2026 06:58

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.

Copilot was unable to review this pull request because there is no eligible user to bill. To allow Copilot reviews on bot-authored pull requests, enable direct organization billing in your organization's Copilot settings.

@jkotasjkotas left a comment

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.

LGTM. Thank you!

@kotlarmilos

Copy link
Copy Markdown
Member

/azp run runtime-extra-platforms

@azure-pipelines

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

@kotlarmilos

Copy link
Copy Markdown
Member

/ba-g Libraries x86 Debug is #130947, extra-platforms failures overlap with main

@kotlarmilos
kotlarmilos merged commit 4dc319f into mainJul 28, 2026
170 of 186 checks passed
@am11

am11 commented Jul 28, 2026

Copy link
Copy Markdown
Member

This conflicted with #131429.

linux-x64 checked CLR_Tools_Tests is now failing to build.

 crossgen2_inbuild -> /__w/1/s/artifacts/bin/coreclr/linux.x64.Checked/x64/crossgen2/
/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/WasmArgumentLayoutTests.cs(166,45): error CS7036: There is no argument given that corresponds to the required parameter 'instructionSetSupport' of 'ReadyToRunCompilerContext.ReadyToRunCompilerContext(TargetDetails, SharedGenericsMode, bool, bool, InstructionSetSupport, CompilerTypeSystemContext)' [/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/ILCompiler.ReadyToRun.Tests.csproj]
Build FAILED.
/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/WasmArgumentLayoutTests.cs(166,45): error CS7036: There is no argument given that corresponds to the required parameter 'instructionSetSupport' of 'ReadyToRunCompilerContext.ReadyToRunCompilerContext(TargetDetails, SharedGenericsMode, bool, bool, InstructionSetSupport, CompilerTypeSystemContext)' [/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/ILCompiler.ReadyToRun.Tests.csproj]
0 Warning(s)
1 Error(s)

@kotlarmilos

Copy link
Copy Markdown
Member

This conflicted with #131429.

linux-x64 checked CLR_Tools_Tests is now failing to build.

 crossgen2_inbuild -> /__w/1/s/artifacts/bin/coreclr/linux.x64.Checked/x64/crossgen2/
/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/WasmArgumentLayoutTests.cs(166,45): error CS7036: There is no argument given that corresponds to the required parameter 'instructionSetSupport' of 'ReadyToRunCompilerContext.ReadyToRunCompilerContext(TargetDetails, SharedGenericsMode, bool, bool, InstructionSetSupport, CompilerTypeSystemContext)' [/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/ILCompiler.ReadyToRun.Tests.csproj]
Build FAILED.
/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/WasmArgumentLayoutTests.cs(166,45): error CS7036: There is no argument given that corresponds to the required parameter 'instructionSetSupport' of 'ReadyToRunCompilerContext.ReadyToRunCompilerContext(TargetDetails, SharedGenericsMode, bool, bool, InstructionSetSupport, CompilerTypeSystemContext)' [/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/ILCompiler.ReadyToRun.Tests.csproj]
0 Warning(s)
1 Error(s)

Thanks for the heads up, should be fixed in #131505. @lewing Thanks!

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

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

[clr-ios] Track IL-stripping issues for CoreCLR on Apple mobile

6 participants

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

Preserve IL for CoreCLR interpreter fallback on Apple mobile - #130622

Merged
kotlarmilos merged 22 commits into
mainfrom
copilot/clr-ios-track-il-stripping-issues
Jul 28, 2026
Merged

Preserve IL for CoreCLR interpreter fallback on Apple mobile#130622
kotlarmilos merged 22 commits into
mainfrom
copilot/clr-ios-track-il-stripping-issues

Conversation

CopilotAI commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Apple mobile composite ReadyToRun publishing could strip IL later required by the CoreCLR interpreter when compiled code is rejected or unavailable in a custom load context.

  • Stripping policy

    • Preserve IL for methods with per-method instruction-set support fixups.
    • Retain component IL on Apple mobile targets where interpreter fallback remains possible.
  • Coverage

    • Add focused ReadyToRun coverage for opportunistic instruction sets and Apple mobile publishing.
    • Remove the temporary project-level IL-stripping opt-outs.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/runtime-infrastructure
See info in area-owners.md if you want to be subscribed.

Co-authored-by: kotlarmilos <11523312+kotlarmilos@users.noreply.github.com>
CopilotAI requested review from Copilot and removed request for CopilotJuly 13, 2026 14:07
Co-authored-by: kotlarmilos <11523312+kotlarmilos@users.noreply.github.com>
CopilotAI requested review from Copilot and removed request for CopilotJuly 13, 2026 14:18
CopilotAI changed the title [WIP] Track IL-stripping issues for CoreCLR on Apple mobilePreserve IL for CoreCLR interpreter fallback on Apple mobileJul 13, 2026
CopilotAI requested a review from kotlarmilosJuly 13, 2026 14:19
@kotlarmilos

Copy link
Copy Markdown
Member

/azp run runtime-extra-platforms

@azure-pipelines

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

@jkotas

Copy link
Copy Markdown
Member

Apple mobile composite ReadyToRun publishing could strip IL later required by the CoreCLR interpreter when compiled code is rejected

This sounds like a bug in how we produce the R2R images for use with interpreter. The instruction set should be fixed in this case, and we should never reject the native code. If the actual machine supports more instruction set extensions that the fixed set, we should ignore them.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 19812166-4b05-40cc-9a81-8b80b909e10b
CopilotAI review requested due to automatic review settings July 21, 2026 12:30
@kotlarmilos

Copy link
Copy Markdown
Member

/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.

Copilot's findings

Comments suppressed due to low confidence (2)

src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/TestCasesRunner/R2RResultChecker.cs:977

  • EagerInstructionSetSupportHasNoUnsupportedEntries claims to validate the global eager baseline Check_InstructionSetSupport fixup, but it currently scans all import sections (including non-eager/method-level sections). This can produce false failures if any per-method Check_InstructionSetSupport signatures contain '-' entries.

Filter to eager import sections (ReadyToRunImportSectionFlags.Eager) to match the method's stated intent.

 foreach (ReadyToRunImportSection section in reader.ImportSections)
{
if (section.Entries is null)
continue;
foreach (ReadyToRunImportSection.ImportSectionEntry entry in section.Entries)
{
if (entry.Signature is not null && entry.Signature.FixupKind == ReadyToRunFixupKind.Check_InstructionSetSupport)
signatures.Add(entry.Signature.ToString(options));
}
}

src/libraries/System.Reflection.Metadata/tests/Metadata/Decoding/SignatureDecoderTests.cs:266

  • The stripped-IL detection uses raw opcode bytes (0x2A and 0xFE 0x24) without explaining what 0xFE 0x24 represents. Adding a brief comment (and a named constant for 0x2A) would make it clearer that this matches the crossgen2 IL-stripping sentinel (CopiedMethodILNode.s_minimalILBody).
 var il = body.GetILBytes();
bool isStripped =
(il?.Length == 1 && il[0] == 0x2A) ||
(il?.Length == 2 && il[0] == 0xFE && il[1] == 0x24);
if (!isStripped)
  • Files reviewed: 13/13 changed files
  • Comments generated: 0 new

Comment threadsrc/coreclr/tools/aot/crossgen2/crossgen2.props Outdated
Comment threadsrc/coreclr/tools/aot/crossgen2/Program.cs Outdated
Comment threadsrc/coreclr/tools/aot/crossgen2/Program.cs Outdated
crossgen2 binaries are host-specific, so gating GetTargetAllowsRuntimeCodeGeneration
on the host build's FEATURE_DYNAMIC_CODE_COMPILED define is wrong. Drop the define
from crossgen2.props and the surrounding #if from Program.cs, leaving the decision
purely on the target OS and architecture.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 2d421224-6ce0-4d3a-92ac-263330249e7c
CopilotAI review requested due to automatic review settings July 22, 2026 06:51
…yToRun
The define is no longer consumed by any source in the project after the
runtime-codegen decision moved to a target-based check in crossgen2.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 2d421224-6ce0-4d3a-92ac-263330249e7c

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.

Copilot's findings

  • Files reviewed: 13/13 changed files
  • Comments generated: 0 new

CopilotAI review requested due to automatic review settings July 22, 2026 06:58

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.

Copilot was unable to review this pull request because there is no eligible user to bill. To allow Copilot reviews on bot-authored pull requests, enable direct organization billing in your organization's Copilot settings.

@jkotasjkotas left a comment

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.

LGTM. Thank you!

@kotlarmilos

Copy link
Copy Markdown
Member

/azp run runtime-extra-platforms

@azure-pipelines

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

@kotlarmilos

Copy link
Copy Markdown
Member

/ba-g Libraries x86 Debug is #130947, extra-platforms failures overlap with main

@kotlarmilos
kotlarmilos merged commit 4dc319f into mainJul 28, 2026
170 of 186 checks passed
@am11

am11 commented Jul 28, 2026

Copy link
Copy Markdown
Member

This conflicted with #131429.

linux-x64 checked CLR_Tools_Tests is now failing to build.

 crossgen2_inbuild -> /__w/1/s/artifacts/bin/coreclr/linux.x64.Checked/x64/crossgen2/
/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/WasmArgumentLayoutTests.cs(166,45): error CS7036: There is no argument given that corresponds to the required parameter 'instructionSetSupport' of 'ReadyToRunCompilerContext.ReadyToRunCompilerContext(TargetDetails, SharedGenericsMode, bool, bool, InstructionSetSupport, CompilerTypeSystemContext)' [/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/ILCompiler.ReadyToRun.Tests.csproj]
Build FAILED.
/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/WasmArgumentLayoutTests.cs(166,45): error CS7036: There is no argument given that corresponds to the required parameter 'instructionSetSupport' of 'ReadyToRunCompilerContext.ReadyToRunCompilerContext(TargetDetails, SharedGenericsMode, bool, bool, InstructionSetSupport, CompilerTypeSystemContext)' [/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/ILCompiler.ReadyToRun.Tests.csproj]
0 Warning(s)
1 Error(s)

@kotlarmilos

Copy link
Copy Markdown
Member

This conflicted with #131429.

linux-x64 checked CLR_Tools_Tests is now failing to build.

 crossgen2_inbuild -> /__w/1/s/artifacts/bin/coreclr/linux.x64.Checked/x64/crossgen2/
/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/WasmArgumentLayoutTests.cs(166,45): error CS7036: There is no argument given that corresponds to the required parameter 'instructionSetSupport' of 'ReadyToRunCompilerContext.ReadyToRunCompilerContext(TargetDetails, SharedGenericsMode, bool, bool, InstructionSetSupport, CompilerTypeSystemContext)' [/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/ILCompiler.ReadyToRun.Tests.csproj]
Build FAILED.
/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/WasmArgumentLayoutTests.cs(166,45): error CS7036: There is no argument given that corresponds to the required parameter 'instructionSetSupport' of 'ReadyToRunCompilerContext.ReadyToRunCompilerContext(TargetDetails, SharedGenericsMode, bool, bool, InstructionSetSupport, CompilerTypeSystemContext)' [/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/ILCompiler.ReadyToRun.Tests.csproj]
0 Warning(s)
1 Error(s)

Thanks for the heads up, should be fixed in #131505. @lewing Thanks!

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

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

[clr-ios] Track IL-stripping issues for CoreCLR on Apple mobile

6 participants

@kotlarmilos@jkotas@am11@BrzVlad
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Preserve IL for CoreCLR interpreter fallback on Apple mobile by Copilot · Pull Request #130622 · dotnet/runtime · GitHub
Skip to content

Preserve IL for CoreCLR interpreter fallback on Apple mobile - #130622

Merged
kotlarmilos merged 22 commits into
mainfrom
copilot/clr-ios-track-il-stripping-issues
Jul 28, 2026
Merged

Preserve IL for CoreCLR interpreter fallback on Apple mobile#130622
kotlarmilos merged 22 commits into
mainfrom
copilot/clr-ios-track-il-stripping-issues

Conversation

CopilotAI commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Apple mobile composite ReadyToRun publishing could strip IL later required by the CoreCLR interpreter when compiled code is rejected or unavailable in a custom load context.

  • Stripping policy

    • Preserve IL for methods with per-method instruction-set support fixups.
    • Retain component IL on Apple mobile targets where interpreter fallback remains possible.
  • Coverage

    • Add focused ReadyToRun coverage for opportunistic instruction sets and Apple mobile publishing.
    • Remove the temporary project-level IL-stripping opt-outs.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/runtime-infrastructure
See info in area-owners.md if you want to be subscribed.

Co-authored-by: kotlarmilos <11523312+kotlarmilos@users.noreply.github.com>
CopilotAI requested review from Copilot and removed request for CopilotJuly 13, 2026 14:07
Co-authored-by: kotlarmilos <11523312+kotlarmilos@users.noreply.github.com>
CopilotAI requested review from Copilot and removed request for CopilotJuly 13, 2026 14:18
CopilotAI changed the title [WIP] Track IL-stripping issues for CoreCLR on Apple mobilePreserve IL for CoreCLR interpreter fallback on Apple mobileJul 13, 2026
CopilotAI requested a review from kotlarmilosJuly 13, 2026 14:19
@kotlarmilos

Copy link
Copy Markdown
Member

/azp run runtime-extra-platforms

@azure-pipelines

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

@jkotas

Copy link
Copy Markdown
Member

Apple mobile composite ReadyToRun publishing could strip IL later required by the CoreCLR interpreter when compiled code is rejected

This sounds like a bug in how we produce the R2R images for use with interpreter. The instruction set should be fixed in this case, and we should never reject the native code. If the actual machine supports more instruction set extensions that the fixed set, we should ignore them.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 19812166-4b05-40cc-9a81-8b80b909e10b
CopilotAI review requested due to automatic review settings July 21, 2026 12:30
@kotlarmilos

Copy link
Copy Markdown
Member

/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.

Copilot's findings

Comments suppressed due to low confidence (2)

src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/TestCasesRunner/R2RResultChecker.cs:977

  • EagerInstructionSetSupportHasNoUnsupportedEntries claims to validate the global eager baseline Check_InstructionSetSupport fixup, but it currently scans all import sections (including non-eager/method-level sections). This can produce false failures if any per-method Check_InstructionSetSupport signatures contain '-' entries.

Filter to eager import sections (ReadyToRunImportSectionFlags.Eager) to match the method's stated intent.

 foreach (ReadyToRunImportSection section in reader.ImportSections)
{
if (section.Entries is null)
continue;
foreach (ReadyToRunImportSection.ImportSectionEntry entry in section.Entries)
{
if (entry.Signature is not null && entry.Signature.FixupKind == ReadyToRunFixupKind.Check_InstructionSetSupport)
signatures.Add(entry.Signature.ToString(options));
}
}

src/libraries/System.Reflection.Metadata/tests/Metadata/Decoding/SignatureDecoderTests.cs:266

  • The stripped-IL detection uses raw opcode bytes (0x2A and 0xFE 0x24) without explaining what 0xFE 0x24 represents. Adding a brief comment (and a named constant for 0x2A) would make it clearer that this matches the crossgen2 IL-stripping sentinel (CopiedMethodILNode.s_minimalILBody).
 var il = body.GetILBytes();
bool isStripped =
(il?.Length == 1 && il[0] == 0x2A) ||
(il?.Length == 2 && il[0] == 0xFE && il[1] == 0x24);
if (!isStripped)
  • Files reviewed: 13/13 changed files
  • Comments generated: 0 new

Comment threadsrc/coreclr/tools/aot/crossgen2/crossgen2.props Outdated
Comment threadsrc/coreclr/tools/aot/crossgen2/Program.cs Outdated
Comment threadsrc/coreclr/tools/aot/crossgen2/Program.cs Outdated
crossgen2 binaries are host-specific, so gating GetTargetAllowsRuntimeCodeGeneration
on the host build's FEATURE_DYNAMIC_CODE_COMPILED define is wrong. Drop the define
from crossgen2.props and the surrounding #if from Program.cs, leaving the decision
purely on the target OS and architecture.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 2d421224-6ce0-4d3a-92ac-263330249e7c
CopilotAI review requested due to automatic review settings July 22, 2026 06:51
…yToRun
The define is no longer consumed by any source in the project after the
runtime-codegen decision moved to a target-based check in crossgen2.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 2d421224-6ce0-4d3a-92ac-263330249e7c

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.

Copilot's findings

  • Files reviewed: 13/13 changed files
  • Comments generated: 0 new

CopilotAI review requested due to automatic review settings July 22, 2026 06:58

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.

Copilot was unable to review this pull request because there is no eligible user to bill. To allow Copilot reviews on bot-authored pull requests, enable direct organization billing in your organization's Copilot settings.

@jkotasjkotas left a comment

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.

LGTM. Thank you!

@kotlarmilos

Copy link
Copy Markdown
Member

/azp run runtime-extra-platforms

@azure-pipelines

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

@kotlarmilos

Copy link
Copy Markdown
Member

/ba-g Libraries x86 Debug is #130947, extra-platforms failures overlap with main

@kotlarmilos
kotlarmilos merged commit 4dc319f into mainJul 28, 2026
170 of 186 checks passed
@am11

am11 commented Jul 28, 2026

Copy link
Copy Markdown
Member

This conflicted with #131429.

linux-x64 checked CLR_Tools_Tests is now failing to build.

 crossgen2_inbuild -> /__w/1/s/artifacts/bin/coreclr/linux.x64.Checked/x64/crossgen2/
/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/WasmArgumentLayoutTests.cs(166,45): error CS7036: There is no argument given that corresponds to the required parameter 'instructionSetSupport' of 'ReadyToRunCompilerContext.ReadyToRunCompilerContext(TargetDetails, SharedGenericsMode, bool, bool, InstructionSetSupport, CompilerTypeSystemContext)' [/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/ILCompiler.ReadyToRun.Tests.csproj]
Build FAILED.
/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/WasmArgumentLayoutTests.cs(166,45): error CS7036: There is no argument given that corresponds to the required parameter 'instructionSetSupport' of 'ReadyToRunCompilerContext.ReadyToRunCompilerContext(TargetDetails, SharedGenericsMode, bool, bool, InstructionSetSupport, CompilerTypeSystemContext)' [/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/ILCompiler.ReadyToRun.Tests.csproj]
0 Warning(s)
1 Error(s)

@kotlarmilos

Copy link
Copy Markdown
Member

This conflicted with #131429.

linux-x64 checked CLR_Tools_Tests is now failing to build.

 crossgen2_inbuild -> /__w/1/s/artifacts/bin/coreclr/linux.x64.Checked/x64/crossgen2/
/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/WasmArgumentLayoutTests.cs(166,45): error CS7036: There is no argument given that corresponds to the required parameter 'instructionSetSupport' of 'ReadyToRunCompilerContext.ReadyToRunCompilerContext(TargetDetails, SharedGenericsMode, bool, bool, InstructionSetSupport, CompilerTypeSystemContext)' [/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/ILCompiler.ReadyToRun.Tests.csproj]
Build FAILED.
/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/WasmArgumentLayoutTests.cs(166,45): error CS7036: There is no argument given that corresponds to the required parameter 'instructionSetSupport' of 'ReadyToRunCompilerContext.ReadyToRunCompilerContext(TargetDetails, SharedGenericsMode, bool, bool, InstructionSetSupport, CompilerTypeSystemContext)' [/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/ILCompiler.ReadyToRun.Tests.csproj]
0 Warning(s)
1 Error(s)

Thanks for the heads up, should be fixed in #131505. @lewing Thanks!

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

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

[clr-ios] Track IL-stripping issues for CoreCLR on Apple mobile

6 participants

@kotlarmilos@jkotas@am11@BrzVlad
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Preserve IL for CoreCLR interpreter fallback on Apple mobile by Copilot · Pull Request #130622 · dotnet/runtime · GitHub
Skip to content

Preserve IL for CoreCLR interpreter fallback on Apple mobile - #130622

Merged
kotlarmilos merged 22 commits into
mainfrom
copilot/clr-ios-track-il-stripping-issues
Jul 28, 2026
Merged

Preserve IL for CoreCLR interpreter fallback on Apple mobile#130622
kotlarmilos merged 22 commits into
mainfrom
copilot/clr-ios-track-il-stripping-issues

Conversation

CopilotAI commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Apple mobile composite ReadyToRun publishing could strip IL later required by the CoreCLR interpreter when compiled code is rejected or unavailable in a custom load context.

  • Stripping policy

    • Preserve IL for methods with per-method instruction-set support fixups.
    • Retain component IL on Apple mobile targets where interpreter fallback remains possible.
  • Coverage

    • Add focused ReadyToRun coverage for opportunistic instruction sets and Apple mobile publishing.
    • Remove the temporary project-level IL-stripping opt-outs.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/runtime-infrastructure
See info in area-owners.md if you want to be subscribed.

Co-authored-by: kotlarmilos <11523312+kotlarmilos@users.noreply.github.com>
CopilotAI requested review from Copilot and removed request for CopilotJuly 13, 2026 14:07
Co-authored-by: kotlarmilos <11523312+kotlarmilos@users.noreply.github.com>
CopilotAI requested review from Copilot and removed request for CopilotJuly 13, 2026 14:18
CopilotAI changed the title [WIP] Track IL-stripping issues for CoreCLR on Apple mobilePreserve IL for CoreCLR interpreter fallback on Apple mobileJul 13, 2026
CopilotAI requested a review from kotlarmilosJuly 13, 2026 14:19
@kotlarmilos

Copy link
Copy Markdown
Member

/azp run runtime-extra-platforms

@azure-pipelines

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

@jkotas

Copy link
Copy Markdown
Member

Apple mobile composite ReadyToRun publishing could strip IL later required by the CoreCLR interpreter when compiled code is rejected

This sounds like a bug in how we produce the R2R images for use with interpreter. The instruction set should be fixed in this case, and we should never reject the native code. If the actual machine supports more instruction set extensions that the fixed set, we should ignore them.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 19812166-4b05-40cc-9a81-8b80b909e10b
CopilotAI review requested due to automatic review settings July 21, 2026 12:30
@kotlarmilos

Copy link
Copy Markdown
Member

/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.

Copilot's findings

Comments suppressed due to low confidence (2)

src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/TestCasesRunner/R2RResultChecker.cs:977

  • EagerInstructionSetSupportHasNoUnsupportedEntries claims to validate the global eager baseline Check_InstructionSetSupport fixup, but it currently scans all import sections (including non-eager/method-level sections). This can produce false failures if any per-method Check_InstructionSetSupport signatures contain '-' entries.

Filter to eager import sections (ReadyToRunImportSectionFlags.Eager) to match the method's stated intent.

 foreach (ReadyToRunImportSection section in reader.ImportSections)
{
if (section.Entries is null)
continue;
foreach (ReadyToRunImportSection.ImportSectionEntry entry in section.Entries)
{
if (entry.Signature is not null && entry.Signature.FixupKind == ReadyToRunFixupKind.Check_InstructionSetSupport)
signatures.Add(entry.Signature.ToString(options));
}
}

src/libraries/System.Reflection.Metadata/tests/Metadata/Decoding/SignatureDecoderTests.cs:266

  • The stripped-IL detection uses raw opcode bytes (0x2A and 0xFE 0x24) without explaining what 0xFE 0x24 represents. Adding a brief comment (and a named constant for 0x2A) would make it clearer that this matches the crossgen2 IL-stripping sentinel (CopiedMethodILNode.s_minimalILBody).
 var il = body.GetILBytes();
bool isStripped =
(il?.Length == 1 && il[0] == 0x2A) ||
(il?.Length == 2 && il[0] == 0xFE && il[1] == 0x24);
if (!isStripped)
  • Files reviewed: 13/13 changed files
  • Comments generated: 0 new

Comment threadsrc/coreclr/tools/aot/crossgen2/crossgen2.props Outdated
Comment threadsrc/coreclr/tools/aot/crossgen2/Program.cs Outdated
Comment threadsrc/coreclr/tools/aot/crossgen2/Program.cs Outdated
crossgen2 binaries are host-specific, so gating GetTargetAllowsRuntimeCodeGeneration
on the host build's FEATURE_DYNAMIC_CODE_COMPILED define is wrong. Drop the define
from crossgen2.props and the surrounding #if from Program.cs, leaving the decision
purely on the target OS and architecture.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 2d421224-6ce0-4d3a-92ac-263330249e7c
CopilotAI review requested due to automatic review settings July 22, 2026 06:51
…yToRun
The define is no longer consumed by any source in the project after the
runtime-codegen decision moved to a target-based check in crossgen2.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 2d421224-6ce0-4d3a-92ac-263330249e7c

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.

Copilot's findings

  • Files reviewed: 13/13 changed files
  • Comments generated: 0 new

CopilotAI review requested due to automatic review settings July 22, 2026 06:58

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.

Copilot was unable to review this pull request because there is no eligible user to bill. To allow Copilot reviews on bot-authored pull requests, enable direct organization billing in your organization's Copilot settings.

@jkotasjkotas left a comment

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.

LGTM. Thank you!

@kotlarmilos

Copy link
Copy Markdown
Member

/azp run runtime-extra-platforms

@azure-pipelines

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

@kotlarmilos

Copy link
Copy Markdown
Member

/ba-g Libraries x86 Debug is #130947, extra-platforms failures overlap with main

@kotlarmilos
kotlarmilos merged commit 4dc319f into mainJul 28, 2026
170 of 186 checks passed
@am11

am11 commented Jul 28, 2026

Copy link
Copy Markdown
Member

This conflicted with #131429.

linux-x64 checked CLR_Tools_Tests is now failing to build.

 crossgen2_inbuild -> /__w/1/s/artifacts/bin/coreclr/linux.x64.Checked/x64/crossgen2/
/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/WasmArgumentLayoutTests.cs(166,45): error CS7036: There is no argument given that corresponds to the required parameter 'instructionSetSupport' of 'ReadyToRunCompilerContext.ReadyToRunCompilerContext(TargetDetails, SharedGenericsMode, bool, bool, InstructionSetSupport, CompilerTypeSystemContext)' [/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/ILCompiler.ReadyToRun.Tests.csproj]
Build FAILED.
/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/WasmArgumentLayoutTests.cs(166,45): error CS7036: There is no argument given that corresponds to the required parameter 'instructionSetSupport' of 'ReadyToRunCompilerContext.ReadyToRunCompilerContext(TargetDetails, SharedGenericsMode, bool, bool, InstructionSetSupport, CompilerTypeSystemContext)' [/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/ILCompiler.ReadyToRun.Tests.csproj]
0 Warning(s)
1 Error(s)

@kotlarmilos

Copy link
Copy Markdown
Member

This conflicted with #131429.

linux-x64 checked CLR_Tools_Tests is now failing to build.

 crossgen2_inbuild -> /__w/1/s/artifacts/bin/coreclr/linux.x64.Checked/x64/crossgen2/
/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/WasmArgumentLayoutTests.cs(166,45): error CS7036: There is no argument given that corresponds to the required parameter 'instructionSetSupport' of 'ReadyToRunCompilerContext.ReadyToRunCompilerContext(TargetDetails, SharedGenericsMode, bool, bool, InstructionSetSupport, CompilerTypeSystemContext)' [/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/ILCompiler.ReadyToRun.Tests.csproj]
Build FAILED.
/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/WasmArgumentLayoutTests.cs(166,45): error CS7036: There is no argument given that corresponds to the required parameter 'instructionSetSupport' of 'ReadyToRunCompilerContext.ReadyToRunCompilerContext(TargetDetails, SharedGenericsMode, bool, bool, InstructionSetSupport, CompilerTypeSystemContext)' [/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/ILCompiler.ReadyToRun.Tests.csproj]
0 Warning(s)
1 Error(s)

Thanks for the heads up, should be fixed in #131505. @lewing Thanks!

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

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

[clr-ios] Track IL-stripping issues for CoreCLR on Apple mobile

6 participants

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

Preserve IL for CoreCLR interpreter fallback on Apple mobile - #130622

Merged
kotlarmilos merged 22 commits into
mainfrom
copilot/clr-ios-track-il-stripping-issues
Jul 28, 2026
Merged

Preserve IL for CoreCLR interpreter fallback on Apple mobile#130622
kotlarmilos merged 22 commits into
mainfrom
copilot/clr-ios-track-il-stripping-issues

Conversation

CopilotAI commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Apple mobile composite ReadyToRun publishing could strip IL later required by the CoreCLR interpreter when compiled code is rejected or unavailable in a custom load context.

  • Stripping policy

    • Preserve IL for methods with per-method instruction-set support fixups.
    • Retain component IL on Apple mobile targets where interpreter fallback remains possible.
  • Coverage

    • Add focused ReadyToRun coverage for opportunistic instruction sets and Apple mobile publishing.
    • Remove the temporary project-level IL-stripping opt-outs.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/runtime-infrastructure
See info in area-owners.md if you want to be subscribed.

Co-authored-by: kotlarmilos <11523312+kotlarmilos@users.noreply.github.com>
CopilotAI requested review from Copilot and removed request for CopilotJuly 13, 2026 14:07
Co-authored-by: kotlarmilos <11523312+kotlarmilos@users.noreply.github.com>
CopilotAI requested review from Copilot and removed request for CopilotJuly 13, 2026 14:18
CopilotAI changed the title [WIP] Track IL-stripping issues for CoreCLR on Apple mobilePreserve IL for CoreCLR interpreter fallback on Apple mobileJul 13, 2026
CopilotAI requested a review from kotlarmilosJuly 13, 2026 14:19
@kotlarmilos

Copy link
Copy Markdown
Member

/azp run runtime-extra-platforms

@azure-pipelines

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

@jkotas

Copy link
Copy Markdown
Member

Apple mobile composite ReadyToRun publishing could strip IL later required by the CoreCLR interpreter when compiled code is rejected

This sounds like a bug in how we produce the R2R images for use with interpreter. The instruction set should be fixed in this case, and we should never reject the native code. If the actual machine supports more instruction set extensions that the fixed set, we should ignore them.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 19812166-4b05-40cc-9a81-8b80b909e10b
CopilotAI review requested due to automatic review settings July 21, 2026 12:30
@kotlarmilos

Copy link
Copy Markdown
Member

/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.

Copilot's findings

Comments suppressed due to low confidence (2)

src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/TestCasesRunner/R2RResultChecker.cs:977

  • EagerInstructionSetSupportHasNoUnsupportedEntries claims to validate the global eager baseline Check_InstructionSetSupport fixup, but it currently scans all import sections (including non-eager/method-level sections). This can produce false failures if any per-method Check_InstructionSetSupport signatures contain '-' entries.

Filter to eager import sections (ReadyToRunImportSectionFlags.Eager) to match the method's stated intent.

 foreach (ReadyToRunImportSection section in reader.ImportSections)
{
if (section.Entries is null)
continue;
foreach (ReadyToRunImportSection.ImportSectionEntry entry in section.Entries)
{
if (entry.Signature is not null && entry.Signature.FixupKind == ReadyToRunFixupKind.Check_InstructionSetSupport)
signatures.Add(entry.Signature.ToString(options));
}
}

src/libraries/System.Reflection.Metadata/tests/Metadata/Decoding/SignatureDecoderTests.cs:266

  • The stripped-IL detection uses raw opcode bytes (0x2A and 0xFE 0x24) without explaining what 0xFE 0x24 represents. Adding a brief comment (and a named constant for 0x2A) would make it clearer that this matches the crossgen2 IL-stripping sentinel (CopiedMethodILNode.s_minimalILBody).
 var il = body.GetILBytes();
bool isStripped =
(il?.Length == 1 && il[0] == 0x2A) ||
(il?.Length == 2 && il[0] == 0xFE && il[1] == 0x24);
if (!isStripped)
  • Files reviewed: 13/13 changed files
  • Comments generated: 0 new

Comment threadsrc/coreclr/tools/aot/crossgen2/crossgen2.props Outdated
Comment threadsrc/coreclr/tools/aot/crossgen2/Program.cs Outdated
Comment threadsrc/coreclr/tools/aot/crossgen2/Program.cs Outdated
crossgen2 binaries are host-specific, so gating GetTargetAllowsRuntimeCodeGeneration
on the host build's FEATURE_DYNAMIC_CODE_COMPILED define is wrong. Drop the define
from crossgen2.props and the surrounding #if from Program.cs, leaving the decision
purely on the target OS and architecture.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 2d421224-6ce0-4d3a-92ac-263330249e7c
CopilotAI review requested due to automatic review settings July 22, 2026 06:51
…yToRun
The define is no longer consumed by any source in the project after the
runtime-codegen decision moved to a target-based check in crossgen2.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 2d421224-6ce0-4d3a-92ac-263330249e7c

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.

Copilot's findings

  • Files reviewed: 13/13 changed files
  • Comments generated: 0 new

CopilotAI review requested due to automatic review settings July 22, 2026 06:58

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.

Copilot was unable to review this pull request because there is no eligible user to bill. To allow Copilot reviews on bot-authored pull requests, enable direct organization billing in your organization's Copilot settings.

@jkotasjkotas left a comment

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.

LGTM. Thank you!

@kotlarmilos

Copy link
Copy Markdown
Member

/azp run runtime-extra-platforms

@azure-pipelines

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

@kotlarmilos

Copy link
Copy Markdown
Member

/ba-g Libraries x86 Debug is #130947, extra-platforms failures overlap with main

@kotlarmilos
kotlarmilos merged commit 4dc319f into mainJul 28, 2026
170 of 186 checks passed
@am11

am11 commented Jul 28, 2026

Copy link
Copy Markdown
Member

This conflicted with #131429.

linux-x64 checked CLR_Tools_Tests is now failing to build.

 crossgen2_inbuild -> /__w/1/s/artifacts/bin/coreclr/linux.x64.Checked/x64/crossgen2/
/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/WasmArgumentLayoutTests.cs(166,45): error CS7036: There is no argument given that corresponds to the required parameter 'instructionSetSupport' of 'ReadyToRunCompilerContext.ReadyToRunCompilerContext(TargetDetails, SharedGenericsMode, bool, bool, InstructionSetSupport, CompilerTypeSystemContext)' [/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/ILCompiler.ReadyToRun.Tests.csproj]
Build FAILED.
/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/WasmArgumentLayoutTests.cs(166,45): error CS7036: There is no argument given that corresponds to the required parameter 'instructionSetSupport' of 'ReadyToRunCompilerContext.ReadyToRunCompilerContext(TargetDetails, SharedGenericsMode, bool, bool, InstructionSetSupport, CompilerTypeSystemContext)' [/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/ILCompiler.ReadyToRun.Tests.csproj]
0 Warning(s)
1 Error(s)

@kotlarmilos

Copy link
Copy Markdown
Member

This conflicted with #131429.

linux-x64 checked CLR_Tools_Tests is now failing to build.

 crossgen2_inbuild -> /__w/1/s/artifacts/bin/coreclr/linux.x64.Checked/x64/crossgen2/
/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/WasmArgumentLayoutTests.cs(166,45): error CS7036: There is no argument given that corresponds to the required parameter 'instructionSetSupport' of 'ReadyToRunCompilerContext.ReadyToRunCompilerContext(TargetDetails, SharedGenericsMode, bool, bool, InstructionSetSupport, CompilerTypeSystemContext)' [/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/ILCompiler.ReadyToRun.Tests.csproj]
Build FAILED.
/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/WasmArgumentLayoutTests.cs(166,45): error CS7036: There is no argument given that corresponds to the required parameter 'instructionSetSupport' of 'ReadyToRunCompilerContext.ReadyToRunCompilerContext(TargetDetails, SharedGenericsMode, bool, bool, InstructionSetSupport, CompilerTypeSystemContext)' [/__w/1/s/src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/ILCompiler.ReadyToRun.Tests.csproj]
0 Warning(s)
1 Error(s)

Thanks for the heads up, should be fixed in #131505. @lewing Thanks!

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

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

[clr-ios] Track IL-stripping issues for CoreCLR on Apple mobile

6 participants

@kotlarmilos@jkotas@am11@BrzVlad