Enable managed ilasm round trip testing. - #131508

Closed
jkoritzinsky wants to merge 77 commits into
ilasm-fixupsfrom
managed-ilasm-rt-ci
Closed

Enable managed ilasm round trip testing.#131508
jkoritzinsky wants to merge 77 commits into
ilasm-fixupsfrom
managed-ilasm-rt-ci

Conversation

@jkoritzinsky

@jkoritzinskyjkoritzinsky commented Jul 28, 2026

Copy link
Copy Markdown
Member

Stack created with GitHub Stacks CLIGive Feedback 💬

Note

This PR description was generated with GitHub Copilot.

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
16 pipeline(s) were filtered out due to trigger conditions.
There may be pipelines that require an authorized user to comment /azp run to run.

@jkoritzinskyjkoritzinsky changed the title managed ilasm rt ciEnable managed ilasm round trip testing.Jul 28, 2026
@jkoritzinsky

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-coreclr ilasm

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
1 pipeline(s) were filtered out due to trigger conditions.

@jkoritzinsky
jkoritzinsky marked this pull request as ready for review July 28, 2026 23:33
CopilotAI lite review requested due to automatic review settings July 28, 2026 23:33
@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
16 pipeline(s) were filtered out due to trigger conditions.
There may be pipelines that require an authorized user to comment /azp run to run.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This PR updates the runtime test pipeline template to run an additional ILASM round-trip scenario that uses the managed ILASM implementation when the ilasm test group is selected.

Changes:

  • Adds managedilasmroundtrip to the ilasm test group’s Helix scenarios list (alongside ilasmroundtrip).

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

CopilotAI review requested due to automatic review settings July 29, 2026 00:05

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

CopilotAI review requested due to automatic review settings July 29, 2026 00:34

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

CopilotAI review requested due to automatic review settings July 29, 2026 19:00

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 2fb9f1ef-f721-49e0-bf48-4a7a9458d53a
CopilotAI review requested due to automatic review settings August 2, 2026 23:02

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

Suppressed comments (2)

src/tools/ilasm/tests/ILAssembler.Tests/AssemblyTests.cs:349

  • ManagedIlasm_DeterministicOutput_IsByteIdentical varies the output file extension between .dll and .exe, but the Options passed to the compiler never sets Dll. That means the ".dll" case still produces an image whose COFF Characteristics might not have the DLL bit set, so the test doesn't actually exercise the new Options.Dll behavior and can mask regressions in DLL-vs-EXE emission.
 var options = new Options
{
Deterministic = true,
OutputFileName = outputFileName,
};

src/tools/ilasm/src/ILAssembler/DocumentCompiler.cs:21

  • DocumentCompiler.Compile changes its public return type from PEBuilder? to CompilationResult?. Since DocumentCompiler is public, this is a breaking change for any external consumers of ILAssembler, and it also introduces/expands public surface area (CompilationResult). If ILAssembler isn't intended to be a supported public API, consider making the types/members internal instead; otherwise, consider keeping the existing API shape (e.g., retaining a PEBuilder?-returning entry point) to avoid breaking downstream code.
public sealed class DocumentCompiler
{
public (ImmutableArray<Diagnostic>, CompilationResult?) Compile(SourceText document, Func<string, SourceText> includedDocumentLoader, Func<string, byte[]> resourceLocator, Options options)
{
return Compile([document], includedDocumentLoader, resourceLocator, options);
}
public (ImmutableArray<Diagnostic>, CompilationResult?) Compile(ImmutableArray<SourceText> documents, Func<string, SourceText> includedDocumentLoader, Func<string, byte[]> resourceLocator, Options options)
{

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 2fb9f1ef-f721-49e0-bf48-4a7a9458d53a
CopilotAI review requested due to automatic review settings August 3, 2026 18:49

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

Suppressed comments (2)

src/tools/ilasm/tests/ILAssembler.Tests/AssemblyTests.cs:410

  • The deterministic-output test varies the output file name between .dll and .exe, but the Options passed to the compiler never sets Options.Dll. This means the “Deterministic.dll” case still produces an executable image, so the test isn’t exercising the DLL imageCharacteristics path (and could miss DLL-specific nondeterminism).
 var options = new Options
{
Deterministic = true,
OutputFileName = outputFileName,
};

src/tools/ilasm/src/ILAssembler/DocumentCompiler.cs:21

  • This changes the public API of ILAssembler by replacing the public Compile return type (PEBuilder?) with a new public CompilationResult and updating the tuple signatures. The PR description doesn’t link an api-approved issue, so this can’t be validated against an approved API shape per the repo’s API approval process. Either (a) link an approved issue, or (b) keep the public surface unchanged and move the new behavior behind internal APIs / internal helper types.
public sealed class DocumentCompiler
{
public (ImmutableArray<Diagnostic>, CompilationResult?) Compile(SourceText document, Func<string, SourceText> includedDocumentLoader, Func<string, byte[]> resourceLocator, Options options)
{
return Compile([document], includedDocumentLoader, resourceLocator, options);
}
public (ImmutableArray<Diagnostic>, CompilationResult?) Compile(ImmutableArray<SourceText> documents, Func<string, SourceText> includedDocumentLoader, Func<string, byte[]> resourceLocator, Options options)
{

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 106f96fe-da32-41d4-8aa5-7431edb36fc6
CopilotAI review requested due to automatic review settings August 10, 2026 17:11

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

Suppressed comments (1)

src/tools/ilasm/tests/ILAssembler.Tests/GenericTests.cs:167

  • GenericType_MoreThanMetadataIndexRange_IsAcceptedForCompatibility builds a very large IL source string (65,537 generic parameters). Initializing StringBuilder without an estimated capacity will cause repeated growth reallocations and extra copying, which can significantly slow this test and increase memory usage in CI.

Consider supplying an initial capacity that scales with GenericParameterCount to keep this test cheaper while preserving coverage.

 StringBuilder source = new("""
.assembly extern mscorlib { }
.assembly test { }
.class public auto ansi Test<
""");

…ompiler, it's a compiler that's AOT compiled)
CopilotAI review requested due to automatic review settings August 12, 2026 18:03

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

Suppressed comments (1)

src/tools/ilasm/src/ILAssembler/DocumentCompiler.cs:21

  • DocumentCompiler is public, and this change replaces its public Compile(...) return type from PEBuilder? to CompilationResult? (and adds a new public type). That’s a source-breaking public API change for any out-of-repo consumers of ILAssembler, and it also triggers the repo’s “new public API requires api-approved issue” process.

If ILAssembler isn’t intended to expose a stable public API, consider making DocumentCompiler (and/or the new CompilationResult) internal instead. If it is intended as public API, please link an api-approved issue in the PR description and ensure the API shape is approved before merging.

public sealed class DocumentCompiler
{
public (ImmutableArray<Diagnostic>, CompilationResult?) Compile(SourceText document, Func<string, SourceText> includedDocumentLoader, Func<string, byte[]> resourceLocator, Options options)
{
return Compile([document], includedDocumentLoader, resourceLocator, options);
}
public (ImmutableArray<Diagnostic>, CompilationResult?) Compile(ImmutableArray<SourceText> documents, Func<string, SourceText> includedDocumentLoader, Func<string, byte[]> resourceLocator, Options options)
{

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

Projects

Status: No status
Status: Done

Development

Successfully merging this pull request may close these issues.

3 participants

@jkoritzinsky
, '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

Enable managed ilasm round trip testing. - #131508

Closed
jkoritzinsky wants to merge 77 commits into
ilasm-fixupsfrom
managed-ilasm-rt-ci
Closed

Enable managed ilasm round trip testing.#131508
jkoritzinsky wants to merge 77 commits into
ilasm-fixupsfrom
managed-ilasm-rt-ci

Conversation

@jkoritzinsky

@jkoritzinskyjkoritzinsky commented Jul 28, 2026

Copy link
Copy Markdown
Member

Stack created with GitHub Stacks CLIGive Feedback 💬

Note

This PR description was generated with GitHub Copilot.

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
16 pipeline(s) were filtered out due to trigger conditions.
There may be pipelines that require an authorized user to comment /azp run to run.

@jkoritzinskyjkoritzinsky changed the title managed ilasm rt ciEnable managed ilasm round trip testing.Jul 28, 2026
@jkoritzinsky

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-coreclr ilasm

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
1 pipeline(s) were filtered out due to trigger conditions.

@jkoritzinsky
jkoritzinsky marked this pull request as ready for review July 28, 2026 23:33
CopilotAI lite review requested due to automatic review settings July 28, 2026 23:33
@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
16 pipeline(s) were filtered out due to trigger conditions.
There may be pipelines that require an authorized user to comment /azp run to run.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This PR updates the runtime test pipeline template to run an additional ILASM round-trip scenario that uses the managed ILASM implementation when the ilasm test group is selected.

Changes:

  • Adds managedilasmroundtrip to the ilasm test group’s Helix scenarios list (alongside ilasmroundtrip).

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

CopilotAI review requested due to automatic review settings July 29, 2026 00:05

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

CopilotAI review requested due to automatic review settings July 29, 2026 00:34

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

CopilotAI review requested due to automatic review settings July 29, 2026 19:00

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 2fb9f1ef-f721-49e0-bf48-4a7a9458d53a
CopilotAI review requested due to automatic review settings August 2, 2026 23:02

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

Suppressed comments (2)

src/tools/ilasm/tests/ILAssembler.Tests/AssemblyTests.cs:349

  • ManagedIlasm_DeterministicOutput_IsByteIdentical varies the output file extension between .dll and .exe, but the Options passed to the compiler never sets Dll. That means the ".dll" case still produces an image whose COFF Characteristics might not have the DLL bit set, so the test doesn't actually exercise the new Options.Dll behavior and can mask regressions in DLL-vs-EXE emission.
 var options = new Options
{
Deterministic = true,
OutputFileName = outputFileName,
};

src/tools/ilasm/src/ILAssembler/DocumentCompiler.cs:21

  • DocumentCompiler.Compile changes its public return type from PEBuilder? to CompilationResult?. Since DocumentCompiler is public, this is a breaking change for any external consumers of ILAssembler, and it also introduces/expands public surface area (CompilationResult). If ILAssembler isn't intended to be a supported public API, consider making the types/members internal instead; otherwise, consider keeping the existing API shape (e.g., retaining a PEBuilder?-returning entry point) to avoid breaking downstream code.
public sealed class DocumentCompiler
{
public (ImmutableArray<Diagnostic>, CompilationResult?) Compile(SourceText document, Func<string, SourceText> includedDocumentLoader, Func<string, byte[]> resourceLocator, Options options)
{
return Compile([document], includedDocumentLoader, resourceLocator, options);
}
public (ImmutableArray<Diagnostic>, CompilationResult?) Compile(ImmutableArray<SourceText> documents, Func<string, SourceText> includedDocumentLoader, Func<string, byte[]> resourceLocator, Options options)
{

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 2fb9f1ef-f721-49e0-bf48-4a7a9458d53a
CopilotAI review requested due to automatic review settings August 3, 2026 18:49

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

Suppressed comments (2)

src/tools/ilasm/tests/ILAssembler.Tests/AssemblyTests.cs:410

  • The deterministic-output test varies the output file name between .dll and .exe, but the Options passed to the compiler never sets Options.Dll. This means the “Deterministic.dll” case still produces an executable image, so the test isn’t exercising the DLL imageCharacteristics path (and could miss DLL-specific nondeterminism).
 var options = new Options
{
Deterministic = true,
OutputFileName = outputFileName,
};

src/tools/ilasm/src/ILAssembler/DocumentCompiler.cs:21

  • This changes the public API of ILAssembler by replacing the public Compile return type (PEBuilder?) with a new public CompilationResult and updating the tuple signatures. The PR description doesn’t link an api-approved issue, so this can’t be validated against an approved API shape per the repo’s API approval process. Either (a) link an approved issue, or (b) keep the public surface unchanged and move the new behavior behind internal APIs / internal helper types.
public sealed class DocumentCompiler
{
public (ImmutableArray<Diagnostic>, CompilationResult?) Compile(SourceText document, Func<string, SourceText> includedDocumentLoader, Func<string, byte[]> resourceLocator, Options options)
{
return Compile([document], includedDocumentLoader, resourceLocator, options);
}
public (ImmutableArray<Diagnostic>, CompilationResult?) Compile(ImmutableArray<SourceText> documents, Func<string, SourceText> includedDocumentLoader, Func<string, byte[]> resourceLocator, Options options)
{

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 106f96fe-da32-41d4-8aa5-7431edb36fc6
CopilotAI review requested due to automatic review settings August 10, 2026 17:11

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

Suppressed comments (1)

src/tools/ilasm/tests/ILAssembler.Tests/GenericTests.cs:167

  • GenericType_MoreThanMetadataIndexRange_IsAcceptedForCompatibility builds a very large IL source string (65,537 generic parameters). Initializing StringBuilder without an estimated capacity will cause repeated growth reallocations and extra copying, which can significantly slow this test and increase memory usage in CI.

Consider supplying an initial capacity that scales with GenericParameterCount to keep this test cheaper while preserving coverage.

 StringBuilder source = new("""
.assembly extern mscorlib { }
.assembly test { }
.class public auto ansi Test<
""");

…ompiler, it's a compiler that's AOT compiled)
CopilotAI review requested due to automatic review settings August 12, 2026 18:03

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

Suppressed comments (1)

src/tools/ilasm/src/ILAssembler/DocumentCompiler.cs:21

  • DocumentCompiler is public, and this change replaces its public Compile(...) return type from PEBuilder? to CompilationResult? (and adds a new public type). That’s a source-breaking public API change for any out-of-repo consumers of ILAssembler, and it also triggers the repo’s “new public API requires api-approved issue” process.

If ILAssembler isn’t intended to expose a stable public API, consider making DocumentCompiler (and/or the new CompilationResult) internal instead. If it is intended as public API, please link an api-approved issue in the PR description and ensure the API shape is approved before merging.

public sealed class DocumentCompiler
{
public (ImmutableArray<Diagnostic>, CompilationResult?) Compile(SourceText document, Func<string, SourceText> includedDocumentLoader, Func<string, byte[]> resourceLocator, Options options)
{
return Compile([document], includedDocumentLoader, resourceLocator, options);
}
public (ImmutableArray<Diagnostic>, CompilationResult?) Compile(ImmutableArray<SourceText> documents, Func<string, SourceText> includedDocumentLoader, Func<string, byte[]> resourceLocator, Options options)
{

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

Projects

Status: No status
Status: Done

Development

Successfully merging this pull request may close these issues.

3 participants

@jkoritzinsky
, '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

Enable managed ilasm round trip testing. - #131508

Closed
jkoritzinsky wants to merge 77 commits into
ilasm-fixupsfrom
managed-ilasm-rt-ci
Closed

Enable managed ilasm round trip testing.#131508
jkoritzinsky wants to merge 77 commits into
ilasm-fixupsfrom
managed-ilasm-rt-ci

Conversation

@jkoritzinsky

@jkoritzinskyjkoritzinsky commented Jul 28, 2026

Copy link
Copy Markdown
Member

Stack created with GitHub Stacks CLIGive Feedback 💬

Note

This PR description was generated with GitHub Copilot.

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
16 pipeline(s) were filtered out due to trigger conditions.
There may be pipelines that require an authorized user to comment /azp run to run.

@jkoritzinskyjkoritzinsky changed the title managed ilasm rt ciEnable managed ilasm round trip testing.Jul 28, 2026
@jkoritzinsky

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-coreclr ilasm

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
1 pipeline(s) were filtered out due to trigger conditions.

@jkoritzinsky
jkoritzinsky marked this pull request as ready for review July 28, 2026 23:33
CopilotAI lite review requested due to automatic review settings July 28, 2026 23:33
@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
16 pipeline(s) were filtered out due to trigger conditions.
There may be pipelines that require an authorized user to comment /azp run to run.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This PR updates the runtime test pipeline template to run an additional ILASM round-trip scenario that uses the managed ILASM implementation when the ilasm test group is selected.

Changes:

  • Adds managedilasmroundtrip to the ilasm test group’s Helix scenarios list (alongside ilasmroundtrip).

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

CopilotAI review requested due to automatic review settings July 29, 2026 00:05

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

CopilotAI review requested due to automatic review settings July 29, 2026 00:34

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

CopilotAI review requested due to automatic review settings July 29, 2026 19:00

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 2fb9f1ef-f721-49e0-bf48-4a7a9458d53a
CopilotAI review requested due to automatic review settings August 2, 2026 23:02

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

Suppressed comments (2)

src/tools/ilasm/tests/ILAssembler.Tests/AssemblyTests.cs:349

  • ManagedIlasm_DeterministicOutput_IsByteIdentical varies the output file extension between .dll and .exe, but the Options passed to the compiler never sets Dll. That means the ".dll" case still produces an image whose COFF Characteristics might not have the DLL bit set, so the test doesn't actually exercise the new Options.Dll behavior and can mask regressions in DLL-vs-EXE emission.
 var options = new Options
{
Deterministic = true,
OutputFileName = outputFileName,
};

src/tools/ilasm/src/ILAssembler/DocumentCompiler.cs:21

  • DocumentCompiler.Compile changes its public return type from PEBuilder? to CompilationResult?. Since DocumentCompiler is public, this is a breaking change for any external consumers of ILAssembler, and it also introduces/expands public surface area (CompilationResult). If ILAssembler isn't intended to be a supported public API, consider making the types/members internal instead; otherwise, consider keeping the existing API shape (e.g., retaining a PEBuilder?-returning entry point) to avoid breaking downstream code.
public sealed class DocumentCompiler
{
public (ImmutableArray<Diagnostic>, CompilationResult?) Compile(SourceText document, Func<string, SourceText> includedDocumentLoader, Func<string, byte[]> resourceLocator, Options options)
{
return Compile([document], includedDocumentLoader, resourceLocator, options);
}
public (ImmutableArray<Diagnostic>, CompilationResult?) Compile(ImmutableArray<SourceText> documents, Func<string, SourceText> includedDocumentLoader, Func<string, byte[]> resourceLocator, Options options)
{

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 2fb9f1ef-f721-49e0-bf48-4a7a9458d53a
CopilotAI review requested due to automatic review settings August 3, 2026 18:49

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

Suppressed comments (2)

src/tools/ilasm/tests/ILAssembler.Tests/AssemblyTests.cs:410

  • The deterministic-output test varies the output file name between .dll and .exe, but the Options passed to the compiler never sets Options.Dll. This means the “Deterministic.dll” case still produces an executable image, so the test isn’t exercising the DLL imageCharacteristics path (and could miss DLL-specific nondeterminism).
 var options = new Options
{
Deterministic = true,
OutputFileName = outputFileName,
};

src/tools/ilasm/src/ILAssembler/DocumentCompiler.cs:21

  • This changes the public API of ILAssembler by replacing the public Compile return type (PEBuilder?) with a new public CompilationResult and updating the tuple signatures. The PR description doesn’t link an api-approved issue, so this can’t be validated against an approved API shape per the repo’s API approval process. Either (a) link an approved issue, or (b) keep the public surface unchanged and move the new behavior behind internal APIs / internal helper types.
public sealed class DocumentCompiler
{
public (ImmutableArray<Diagnostic>, CompilationResult?) Compile(SourceText document, Func<string, SourceText> includedDocumentLoader, Func<string, byte[]> resourceLocator, Options options)
{
return Compile([document], includedDocumentLoader, resourceLocator, options);
}
public (ImmutableArray<Diagnostic>, CompilationResult?) Compile(ImmutableArray<SourceText> documents, Func<string, SourceText> includedDocumentLoader, Func<string, byte[]> resourceLocator, Options options)
{

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 106f96fe-da32-41d4-8aa5-7431edb36fc6
CopilotAI review requested due to automatic review settings August 10, 2026 17:11

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

Suppressed comments (1)

src/tools/ilasm/tests/ILAssembler.Tests/GenericTests.cs:167

  • GenericType_MoreThanMetadataIndexRange_IsAcceptedForCompatibility builds a very large IL source string (65,537 generic parameters). Initializing StringBuilder without an estimated capacity will cause repeated growth reallocations and extra copying, which can significantly slow this test and increase memory usage in CI.

Consider supplying an initial capacity that scales with GenericParameterCount to keep this test cheaper while preserving coverage.

 StringBuilder source = new("""
.assembly extern mscorlib { }
.assembly test { }
.class public auto ansi Test<
""");

…ompiler, it's a compiler that's AOT compiled)
CopilotAI review requested due to automatic review settings August 12, 2026 18:03

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

Suppressed comments (1)

src/tools/ilasm/src/ILAssembler/DocumentCompiler.cs:21

  • DocumentCompiler is public, and this change replaces its public Compile(...) return type from PEBuilder? to CompilationResult? (and adds a new public type). That’s a source-breaking public API change for any out-of-repo consumers of ILAssembler, and it also triggers the repo’s “new public API requires api-approved issue” process.

If ILAssembler isn’t intended to expose a stable public API, consider making DocumentCompiler (and/or the new CompilationResult) internal instead. If it is intended as public API, please link an api-approved issue in the PR description and ensure the API shape is approved before merging.

public sealed class DocumentCompiler
{
public (ImmutableArray<Diagnostic>, CompilationResult?) Compile(SourceText document, Func<string, SourceText> includedDocumentLoader, Func<string, byte[]> resourceLocator, Options options)
{
return Compile([document], includedDocumentLoader, resourceLocator, options);
}
public (ImmutableArray<Diagnostic>, CompilationResult?) Compile(ImmutableArray<SourceText> documents, Func<string, SourceText> includedDocumentLoader, Func<string, byte[]> resourceLocator, Options options)
{

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

Projects

Status: No status
Status: Done

Development

Successfully merging this pull request may close these issues.

3 participants

@jkoritzinsky
, '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

Enable managed ilasm round trip testing. - #131508

Closed
jkoritzinsky wants to merge 77 commits into
ilasm-fixupsfrom
managed-ilasm-rt-ci
Closed

Enable managed ilasm round trip testing.#131508
jkoritzinsky wants to merge 77 commits into
ilasm-fixupsfrom
managed-ilasm-rt-ci

Conversation

@jkoritzinsky

@jkoritzinskyjkoritzinsky commented Jul 28, 2026

Copy link
Copy Markdown
Member

Stack created with GitHub Stacks CLIGive Feedback 💬

Note

This PR description was generated with GitHub Copilot.

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
16 pipeline(s) were filtered out due to trigger conditions.
There may be pipelines that require an authorized user to comment /azp run to run.

@jkoritzinskyjkoritzinsky changed the title managed ilasm rt ciEnable managed ilasm round trip testing.Jul 28, 2026
@jkoritzinsky

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-coreclr ilasm

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
1 pipeline(s) were filtered out due to trigger conditions.

@jkoritzinsky
jkoritzinsky marked this pull request as ready for review July 28, 2026 23:33
CopilotAI lite review requested due to automatic review settings July 28, 2026 23:33
@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
16 pipeline(s) were filtered out due to trigger conditions.
There may be pipelines that require an authorized user to comment /azp run to run.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This PR updates the runtime test pipeline template to run an additional ILASM round-trip scenario that uses the managed ILASM implementation when the ilasm test group is selected.

Changes:

  • Adds managedilasmroundtrip to the ilasm test group’s Helix scenarios list (alongside ilasmroundtrip).

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

CopilotAI review requested due to automatic review settings July 29, 2026 00:05

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

CopilotAI review requested due to automatic review settings July 29, 2026 00:34

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

CopilotAI review requested due to automatic review settings July 29, 2026 19:00

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 2fb9f1ef-f721-49e0-bf48-4a7a9458d53a
CopilotAI review requested due to automatic review settings August 2, 2026 23:02

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

Suppressed comments (2)

src/tools/ilasm/tests/ILAssembler.Tests/AssemblyTests.cs:349

  • ManagedIlasm_DeterministicOutput_IsByteIdentical varies the output file extension between .dll and .exe, but the Options passed to the compiler never sets Dll. That means the ".dll" case still produces an image whose COFF Characteristics might not have the DLL bit set, so the test doesn't actually exercise the new Options.Dll behavior and can mask regressions in DLL-vs-EXE emission.
 var options = new Options
{
Deterministic = true,
OutputFileName = outputFileName,
};

src/tools/ilasm/src/ILAssembler/DocumentCompiler.cs:21

  • DocumentCompiler.Compile changes its public return type from PEBuilder? to CompilationResult?. Since DocumentCompiler is public, this is a breaking change for any external consumers of ILAssembler, and it also introduces/expands public surface area (CompilationResult). If ILAssembler isn't intended to be a supported public API, consider making the types/members internal instead; otherwise, consider keeping the existing API shape (e.g., retaining a PEBuilder?-returning entry point) to avoid breaking downstream code.
public sealed class DocumentCompiler
{
public (ImmutableArray<Diagnostic>, CompilationResult?) Compile(SourceText document, Func<string, SourceText> includedDocumentLoader, Func<string, byte[]> resourceLocator, Options options)
{
return Compile([document], includedDocumentLoader, resourceLocator, options);
}
public (ImmutableArray<Diagnostic>, CompilationResult?) Compile(ImmutableArray<SourceText> documents, Func<string, SourceText> includedDocumentLoader, Func<string, byte[]> resourceLocator, Options options)
{

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 2fb9f1ef-f721-49e0-bf48-4a7a9458d53a
CopilotAI review requested due to automatic review settings August 3, 2026 18:49

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

Suppressed comments (2)

src/tools/ilasm/tests/ILAssembler.Tests/AssemblyTests.cs:410

  • The deterministic-output test varies the output file name between .dll and .exe, but the Options passed to the compiler never sets Options.Dll. This means the “Deterministic.dll” case still produces an executable image, so the test isn’t exercising the DLL imageCharacteristics path (and could miss DLL-specific nondeterminism).
 var options = new Options
{
Deterministic = true,
OutputFileName = outputFileName,
};

src/tools/ilasm/src/ILAssembler/DocumentCompiler.cs:21

  • This changes the public API of ILAssembler by replacing the public Compile return type (PEBuilder?) with a new public CompilationResult and updating the tuple signatures. The PR description doesn’t link an api-approved issue, so this can’t be validated against an approved API shape per the repo’s API approval process. Either (a) link an approved issue, or (b) keep the public surface unchanged and move the new behavior behind internal APIs / internal helper types.
public sealed class DocumentCompiler
{
public (ImmutableArray<Diagnostic>, CompilationResult?) Compile(SourceText document, Func<string, SourceText> includedDocumentLoader, Func<string, byte[]> resourceLocator, Options options)
{
return Compile([document], includedDocumentLoader, resourceLocator, options);
}
public (ImmutableArray<Diagnostic>, CompilationResult?) Compile(ImmutableArray<SourceText> documents, Func<string, SourceText> includedDocumentLoader, Func<string, byte[]> resourceLocator, Options options)
{

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 106f96fe-da32-41d4-8aa5-7431edb36fc6
CopilotAI review requested due to automatic review settings August 10, 2026 17:11

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

Suppressed comments (1)

src/tools/ilasm/tests/ILAssembler.Tests/GenericTests.cs:167

  • GenericType_MoreThanMetadataIndexRange_IsAcceptedForCompatibility builds a very large IL source string (65,537 generic parameters). Initializing StringBuilder without an estimated capacity will cause repeated growth reallocations and extra copying, which can significantly slow this test and increase memory usage in CI.

Consider supplying an initial capacity that scales with GenericParameterCount to keep this test cheaper while preserving coverage.

 StringBuilder source = new("""
.assembly extern mscorlib { }
.assembly test { }
.class public auto ansi Test<
""");

…ompiler, it's a compiler that's AOT compiled)
CopilotAI review requested due to automatic review settings August 12, 2026 18:03

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

Suppressed comments (1)

src/tools/ilasm/src/ILAssembler/DocumentCompiler.cs:21

  • DocumentCompiler is public, and this change replaces its public Compile(...) return type from PEBuilder? to CompilationResult? (and adds a new public type). That’s a source-breaking public API change for any out-of-repo consumers of ILAssembler, and it also triggers the repo’s “new public API requires api-approved issue” process.

If ILAssembler isn’t intended to expose a stable public API, consider making DocumentCompiler (and/or the new CompilationResult) internal instead. If it is intended as public API, please link an api-approved issue in the PR description and ensure the API shape is approved before merging.

public sealed class DocumentCompiler
{
public (ImmutableArray<Diagnostic>, CompilationResult?) Compile(SourceText document, Func<string, SourceText> includedDocumentLoader, Func<string, byte[]> resourceLocator, Options options)
{
return Compile([document], includedDocumentLoader, resourceLocator, options);
}
public (ImmutableArray<Diagnostic>, CompilationResult?) Compile(ImmutableArray<SourceText> documents, Func<string, SourceText> includedDocumentLoader, Func<string, byte[]> resourceLocator, Options options)
{

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

Projects

Status: No status
Status: Done

Development

Successfully merging this pull request may close these issues.

3 participants

@jkoritzinsky
, '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

Enable managed ilasm round trip testing. - #131508

Closed
jkoritzinsky wants to merge 77 commits into
ilasm-fixupsfrom
managed-ilasm-rt-ci
Closed

Enable managed ilasm round trip testing.#131508
jkoritzinsky wants to merge 77 commits into
ilasm-fixupsfrom
managed-ilasm-rt-ci

Conversation

@jkoritzinsky

@jkoritzinskyjkoritzinsky commented Jul 28, 2026

Copy link
Copy Markdown
Member

Stack created with GitHub Stacks CLIGive Feedback 💬

Note

This PR description was generated with GitHub Copilot.

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
16 pipeline(s) were filtered out due to trigger conditions.
There may be pipelines that require an authorized user to comment /azp run to run.

@jkoritzinskyjkoritzinsky changed the title managed ilasm rt ciEnable managed ilasm round trip testing.Jul 28, 2026
@jkoritzinsky

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-coreclr ilasm

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
1 pipeline(s) were filtered out due to trigger conditions.

@jkoritzinsky
jkoritzinsky marked this pull request as ready for review July 28, 2026 23:33
CopilotAI lite review requested due to automatic review settings July 28, 2026 23:33
@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
16 pipeline(s) were filtered out due to trigger conditions.
There may be pipelines that require an authorized user to comment /azp run to run.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This PR updates the runtime test pipeline template to run an additional ILASM round-trip scenario that uses the managed ILASM implementation when the ilasm test group is selected.

Changes:

  • Adds managedilasmroundtrip to the ilasm test group’s Helix scenarios list (alongside ilasmroundtrip).

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

CopilotAI review requested due to automatic review settings July 29, 2026 00:05

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

CopilotAI review requested due to automatic review settings July 29, 2026 00:34

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

CopilotAI review requested due to automatic review settings July 29, 2026 19:00

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 2fb9f1ef-f721-49e0-bf48-4a7a9458d53a
CopilotAI review requested due to automatic review settings August 2, 2026 23:02

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

Suppressed comments (2)

src/tools/ilasm/tests/ILAssembler.Tests/AssemblyTests.cs:349

  • ManagedIlasm_DeterministicOutput_IsByteIdentical varies the output file extension between .dll and .exe, but the Options passed to the compiler never sets Dll. That means the ".dll" case still produces an image whose COFF Characteristics might not have the DLL bit set, so the test doesn't actually exercise the new Options.Dll behavior and can mask regressions in DLL-vs-EXE emission.
 var options = new Options
{
Deterministic = true,
OutputFileName = outputFileName,
};

src/tools/ilasm/src/ILAssembler/DocumentCompiler.cs:21

  • DocumentCompiler.Compile changes its public return type from PEBuilder? to CompilationResult?. Since DocumentCompiler is public, this is a breaking change for any external consumers of ILAssembler, and it also introduces/expands public surface area (CompilationResult). If ILAssembler isn't intended to be a supported public API, consider making the types/members internal instead; otherwise, consider keeping the existing API shape (e.g., retaining a PEBuilder?-returning entry point) to avoid breaking downstream code.
public sealed class DocumentCompiler
{
public (ImmutableArray<Diagnostic>, CompilationResult?) Compile(SourceText document, Func<string, SourceText> includedDocumentLoader, Func<string, byte[]> resourceLocator, Options options)
{
return Compile([document], includedDocumentLoader, resourceLocator, options);
}
public (ImmutableArray<Diagnostic>, CompilationResult?) Compile(ImmutableArray<SourceText> documents, Func<string, SourceText> includedDocumentLoader, Func<string, byte[]> resourceLocator, Options options)
{

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 2fb9f1ef-f721-49e0-bf48-4a7a9458d53a
CopilotAI review requested due to automatic review settings August 3, 2026 18:49

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

Suppressed comments (2)

src/tools/ilasm/tests/ILAssembler.Tests/AssemblyTests.cs:410

  • The deterministic-output test varies the output file name between .dll and .exe, but the Options passed to the compiler never sets Options.Dll. This means the “Deterministic.dll” case still produces an executable image, so the test isn’t exercising the DLL imageCharacteristics path (and could miss DLL-specific nondeterminism).
 var options = new Options
{
Deterministic = true,
OutputFileName = outputFileName,
};

src/tools/ilasm/src/ILAssembler/DocumentCompiler.cs:21

  • This changes the public API of ILAssembler by replacing the public Compile return type (PEBuilder?) with a new public CompilationResult and updating the tuple signatures. The PR description doesn’t link an api-approved issue, so this can’t be validated against an approved API shape per the repo’s API approval process. Either (a) link an approved issue, or (b) keep the public surface unchanged and move the new behavior behind internal APIs / internal helper types.
public sealed class DocumentCompiler
{
public (ImmutableArray<Diagnostic>, CompilationResult?) Compile(SourceText document, Func<string, SourceText> includedDocumentLoader, Func<string, byte[]> resourceLocator, Options options)
{
return Compile([document], includedDocumentLoader, resourceLocator, options);
}
public (ImmutableArray<Diagnostic>, CompilationResult?) Compile(ImmutableArray<SourceText> documents, Func<string, SourceText> includedDocumentLoader, Func<string, byte[]> resourceLocator, Options options)
{

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 106f96fe-da32-41d4-8aa5-7431edb36fc6
CopilotAI review requested due to automatic review settings August 10, 2026 17:11

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

Suppressed comments (1)

src/tools/ilasm/tests/ILAssembler.Tests/GenericTests.cs:167

  • GenericType_MoreThanMetadataIndexRange_IsAcceptedForCompatibility builds a very large IL source string (65,537 generic parameters). Initializing StringBuilder without an estimated capacity will cause repeated growth reallocations and extra copying, which can significantly slow this test and increase memory usage in CI.

Consider supplying an initial capacity that scales with GenericParameterCount to keep this test cheaper while preserving coverage.

 StringBuilder source = new("""
.assembly extern mscorlib { }
.assembly test { }
.class public auto ansi Test<
""");

…ompiler, it's a compiler that's AOT compiled)
CopilotAI review requested due to automatic review settings August 12, 2026 18:03

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

Suppressed comments (1)

src/tools/ilasm/src/ILAssembler/DocumentCompiler.cs:21

  • DocumentCompiler is public, and this change replaces its public Compile(...) return type from PEBuilder? to CompilationResult? (and adds a new public type). That’s a source-breaking public API change for any out-of-repo consumers of ILAssembler, and it also triggers the repo’s “new public API requires api-approved issue” process.

If ILAssembler isn’t intended to expose a stable public API, consider making DocumentCompiler (and/or the new CompilationResult) internal instead. If it is intended as public API, please link an api-approved issue in the PR description and ensure the API shape is approved before merging.

public sealed class DocumentCompiler
{
public (ImmutableArray<Diagnostic>, CompilationResult?) Compile(SourceText document, Func<string, SourceText> includedDocumentLoader, Func<string, byte[]> resourceLocator, Options options)
{
return Compile([document], includedDocumentLoader, resourceLocator, options);
}
public (ImmutableArray<Diagnostic>, CompilationResult?) Compile(ImmutableArray<SourceText> documents, Func<string, SourceText> includedDocumentLoader, Func<string, byte[]> resourceLocator, Options options)
{

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

Projects

Status: No status
Status: Done

Development

Successfully merging this pull request may close these issues.

3 participants

@jkoritzinsky
, '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

Enable managed ilasm round trip testing. - #131508

Closed
jkoritzinsky wants to merge 77 commits into
ilasm-fixupsfrom
managed-ilasm-rt-ci
Closed

Enable managed ilasm round trip testing.#131508
jkoritzinsky wants to merge 77 commits into
ilasm-fixupsfrom
managed-ilasm-rt-ci

Conversation

@jkoritzinsky

@jkoritzinskyjkoritzinsky commented Jul 28, 2026

Copy link
Copy Markdown
Member

Stack created with GitHub Stacks CLIGive Feedback 💬

Note

This PR description was generated with GitHub Copilot.

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
16 pipeline(s) were filtered out due to trigger conditions.
There may be pipelines that require an authorized user to comment /azp run to run.

@jkoritzinskyjkoritzinsky changed the title managed ilasm rt ciEnable managed ilasm round trip testing.Jul 28, 2026
@jkoritzinsky

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-coreclr ilasm

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
1 pipeline(s) were filtered out due to trigger conditions.

@jkoritzinsky
jkoritzinsky marked this pull request as ready for review July 28, 2026 23:33
CopilotAI lite review requested due to automatic review settings July 28, 2026 23:33
@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
16 pipeline(s) were filtered out due to trigger conditions.
There may be pipelines that require an authorized user to comment /azp run to run.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This PR updates the runtime test pipeline template to run an additional ILASM round-trip scenario that uses the managed ILASM implementation when the ilasm test group is selected.

Changes:

  • Adds managedilasmroundtrip to the ilasm test group’s Helix scenarios list (alongside ilasmroundtrip).

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

CopilotAI review requested due to automatic review settings July 29, 2026 00:05

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

CopilotAI review requested due to automatic review settings July 29, 2026 00:34

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

CopilotAI review requested due to automatic review settings July 29, 2026 19:00

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 2fb9f1ef-f721-49e0-bf48-4a7a9458d53a
CopilotAI review requested due to automatic review settings August 2, 2026 23:02

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

Suppressed comments (2)

src/tools/ilasm/tests/ILAssembler.Tests/AssemblyTests.cs:349

  • ManagedIlasm_DeterministicOutput_IsByteIdentical varies the output file extension between .dll and .exe, but the Options passed to the compiler never sets Dll. That means the ".dll" case still produces an image whose COFF Characteristics might not have the DLL bit set, so the test doesn't actually exercise the new Options.Dll behavior and can mask regressions in DLL-vs-EXE emission.
 var options = new Options
{
Deterministic = true,
OutputFileName = outputFileName,
};

src/tools/ilasm/src/ILAssembler/DocumentCompiler.cs:21

  • DocumentCompiler.Compile changes its public return type from PEBuilder? to CompilationResult?. Since DocumentCompiler is public, this is a breaking change for any external consumers of ILAssembler, and it also introduces/expands public surface area (CompilationResult). If ILAssembler isn't intended to be a supported public API, consider making the types/members internal instead; otherwise, consider keeping the existing API shape (e.g., retaining a PEBuilder?-returning entry point) to avoid breaking downstream code.
public sealed class DocumentCompiler
{
public (ImmutableArray<Diagnostic>, CompilationResult?) Compile(SourceText document, Func<string, SourceText> includedDocumentLoader, Func<string, byte[]> resourceLocator, Options options)
{
return Compile([document], includedDocumentLoader, resourceLocator, options);
}
public (ImmutableArray<Diagnostic>, CompilationResult?) Compile(ImmutableArray<SourceText> documents, Func<string, SourceText> includedDocumentLoader, Func<string, byte[]> resourceLocator, Options options)
{

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 2fb9f1ef-f721-49e0-bf48-4a7a9458d53a
CopilotAI review requested due to automatic review settings August 3, 2026 18:49

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

Suppressed comments (2)

src/tools/ilasm/tests/ILAssembler.Tests/AssemblyTests.cs:410

  • The deterministic-output test varies the output file name between .dll and .exe, but the Options passed to the compiler never sets Options.Dll. This means the “Deterministic.dll” case still produces an executable image, so the test isn’t exercising the DLL imageCharacteristics path (and could miss DLL-specific nondeterminism).
 var options = new Options
{
Deterministic = true,
OutputFileName = outputFileName,
};

src/tools/ilasm/src/ILAssembler/DocumentCompiler.cs:21

  • This changes the public API of ILAssembler by replacing the public Compile return type (PEBuilder?) with a new public CompilationResult and updating the tuple signatures. The PR description doesn’t link an api-approved issue, so this can’t be validated against an approved API shape per the repo’s API approval process. Either (a) link an approved issue, or (b) keep the public surface unchanged and move the new behavior behind internal APIs / internal helper types.
public sealed class DocumentCompiler
{
public (ImmutableArray<Diagnostic>, CompilationResult?) Compile(SourceText document, Func<string, SourceText> includedDocumentLoader, Func<string, byte[]> resourceLocator, Options options)
{
return Compile([document], includedDocumentLoader, resourceLocator, options);
}
public (ImmutableArray<Diagnostic>, CompilationResult?) Compile(ImmutableArray<SourceText> documents, Func<string, SourceText> includedDocumentLoader, Func<string, byte[]> resourceLocator, Options options)
{

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 106f96fe-da32-41d4-8aa5-7431edb36fc6
CopilotAI review requested due to automatic review settings August 10, 2026 17:11

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

Suppressed comments (1)

src/tools/ilasm/tests/ILAssembler.Tests/GenericTests.cs:167

  • GenericType_MoreThanMetadataIndexRange_IsAcceptedForCompatibility builds a very large IL source string (65,537 generic parameters). Initializing StringBuilder without an estimated capacity will cause repeated growth reallocations and extra copying, which can significantly slow this test and increase memory usage in CI.

Consider supplying an initial capacity that scales with GenericParameterCount to keep this test cheaper while preserving coverage.

 StringBuilder source = new("""
.assembly extern mscorlib { }
.assembly test { }
.class public auto ansi Test<
""");

…ompiler, it's a compiler that's AOT compiled)
CopilotAI review requested due to automatic review settings August 12, 2026 18:03

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

Suppressed comments (1)

src/tools/ilasm/src/ILAssembler/DocumentCompiler.cs:21

  • DocumentCompiler is public, and this change replaces its public Compile(...) return type from PEBuilder? to CompilationResult? (and adds a new public type). That’s a source-breaking public API change for any out-of-repo consumers of ILAssembler, and it also triggers the repo’s “new public API requires api-approved issue” process.

If ILAssembler isn’t intended to expose a stable public API, consider making DocumentCompiler (and/or the new CompilationResult) internal instead. If it is intended as public API, please link an api-approved issue in the PR description and ensure the API shape is approved before merging.

public sealed class DocumentCompiler
{
public (ImmutableArray<Diagnostic>, CompilationResult?) Compile(SourceText document, Func<string, SourceText> includedDocumentLoader, Func<string, byte[]> resourceLocator, Options options)
{
return Compile([document], includedDocumentLoader, resourceLocator, options);
}
public (ImmutableArray<Diagnostic>, CompilationResult?) Compile(ImmutableArray<SourceText> documents, Func<string, SourceText> includedDocumentLoader, Func<string, byte[]> resourceLocator, Options options)
{

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

Projects

Status: No status
Status: Done

Development

Successfully merging this pull request may close these issues.

3 participants

@jkoritzinsky
, '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

Enable managed ilasm round trip testing. - #131508

Closed
jkoritzinsky wants to merge 77 commits into
ilasm-fixupsfrom
managed-ilasm-rt-ci
Closed

Enable managed ilasm round trip testing.#131508
jkoritzinsky wants to merge 77 commits into
ilasm-fixupsfrom
managed-ilasm-rt-ci

Conversation

@jkoritzinsky

@jkoritzinskyjkoritzinsky commented Jul 28, 2026

Copy link
Copy Markdown
Member

Stack created with GitHub Stacks CLIGive Feedback 💬

Note

This PR description was generated with GitHub Copilot.

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
16 pipeline(s) were filtered out due to trigger conditions.
There may be pipelines that require an authorized user to comment /azp run to run.

@jkoritzinskyjkoritzinsky changed the title managed ilasm rt ciEnable managed ilasm round trip testing.Jul 28, 2026
@jkoritzinsky

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-coreclr ilasm

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
1 pipeline(s) were filtered out due to trigger conditions.

@jkoritzinsky
jkoritzinsky marked this pull request as ready for review July 28, 2026 23:33
CopilotAI lite review requested due to automatic review settings July 28, 2026 23:33
@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
16 pipeline(s) were filtered out due to trigger conditions.
There may be pipelines that require an authorized user to comment /azp run to run.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This PR updates the runtime test pipeline template to run an additional ILASM round-trip scenario that uses the managed ILASM implementation when the ilasm test group is selected.

Changes:

  • Adds managedilasmroundtrip to the ilasm test group’s Helix scenarios list (alongside ilasmroundtrip).

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

CopilotAI review requested due to automatic review settings July 29, 2026 00:05

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

CopilotAI review requested due to automatic review settings July 29, 2026 00:34

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

CopilotAI review requested due to automatic review settings July 29, 2026 19:00

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 2fb9f1ef-f721-49e0-bf48-4a7a9458d53a
CopilotAI review requested due to automatic review settings August 2, 2026 23:02

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

Suppressed comments (2)

src/tools/ilasm/tests/ILAssembler.Tests/AssemblyTests.cs:349

  • ManagedIlasm_DeterministicOutput_IsByteIdentical varies the output file extension between .dll and .exe, but the Options passed to the compiler never sets Dll. That means the ".dll" case still produces an image whose COFF Characteristics might not have the DLL bit set, so the test doesn't actually exercise the new Options.Dll behavior and can mask regressions in DLL-vs-EXE emission.
 var options = new Options
{
Deterministic = true,
OutputFileName = outputFileName,
};

src/tools/ilasm/src/ILAssembler/DocumentCompiler.cs:21

  • DocumentCompiler.Compile changes its public return type from PEBuilder? to CompilationResult?. Since DocumentCompiler is public, this is a breaking change for any external consumers of ILAssembler, and it also introduces/expands public surface area (CompilationResult). If ILAssembler isn't intended to be a supported public API, consider making the types/members internal instead; otherwise, consider keeping the existing API shape (e.g., retaining a PEBuilder?-returning entry point) to avoid breaking downstream code.
public sealed class DocumentCompiler
{
public (ImmutableArray<Diagnostic>, CompilationResult?) Compile(SourceText document, Func<string, SourceText> includedDocumentLoader, Func<string, byte[]> resourceLocator, Options options)
{
return Compile([document], includedDocumentLoader, resourceLocator, options);
}
public (ImmutableArray<Diagnostic>, CompilationResult?) Compile(ImmutableArray<SourceText> documents, Func<string, SourceText> includedDocumentLoader, Func<string, byte[]> resourceLocator, Options options)
{

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 2fb9f1ef-f721-49e0-bf48-4a7a9458d53a
CopilotAI review requested due to automatic review settings August 3, 2026 18:49

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

Suppressed comments (2)

src/tools/ilasm/tests/ILAssembler.Tests/AssemblyTests.cs:410

  • The deterministic-output test varies the output file name between .dll and .exe, but the Options passed to the compiler never sets Options.Dll. This means the “Deterministic.dll” case still produces an executable image, so the test isn’t exercising the DLL imageCharacteristics path (and could miss DLL-specific nondeterminism).
 var options = new Options
{
Deterministic = true,
OutputFileName = outputFileName,
};

src/tools/ilasm/src/ILAssembler/DocumentCompiler.cs:21

  • This changes the public API of ILAssembler by replacing the public Compile return type (PEBuilder?) with a new public CompilationResult and updating the tuple signatures. The PR description doesn’t link an api-approved issue, so this can’t be validated against an approved API shape per the repo’s API approval process. Either (a) link an approved issue, or (b) keep the public surface unchanged and move the new behavior behind internal APIs / internal helper types.
public sealed class DocumentCompiler
{
public (ImmutableArray<Diagnostic>, CompilationResult?) Compile(SourceText document, Func<string, SourceText> includedDocumentLoader, Func<string, byte[]> resourceLocator, Options options)
{
return Compile([document], includedDocumentLoader, resourceLocator, options);
}
public (ImmutableArray<Diagnostic>, CompilationResult?) Compile(ImmutableArray<SourceText> documents, Func<string, SourceText> includedDocumentLoader, Func<string, byte[]> resourceLocator, Options options)
{

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 106f96fe-da32-41d4-8aa5-7431edb36fc6
CopilotAI review requested due to automatic review settings August 10, 2026 17:11

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

Suppressed comments (1)

src/tools/ilasm/tests/ILAssembler.Tests/GenericTests.cs:167

  • GenericType_MoreThanMetadataIndexRange_IsAcceptedForCompatibility builds a very large IL source string (65,537 generic parameters). Initializing StringBuilder without an estimated capacity will cause repeated growth reallocations and extra copying, which can significantly slow this test and increase memory usage in CI.

Consider supplying an initial capacity that scales with GenericParameterCount to keep this test cheaper while preserving coverage.

 StringBuilder source = new("""
.assembly extern mscorlib { }
.assembly test { }
.class public auto ansi Test<
""");

…ompiler, it's a compiler that's AOT compiled)
CopilotAI review requested due to automatic review settings August 12, 2026 18:03

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

Suppressed comments (1)

src/tools/ilasm/src/ILAssembler/DocumentCompiler.cs:21

  • DocumentCompiler is public, and this change replaces its public Compile(...) return type from PEBuilder? to CompilationResult? (and adds a new public type). That’s a source-breaking public API change for any out-of-repo consumers of ILAssembler, and it also triggers the repo’s “new public API requires api-approved issue” process.

If ILAssembler isn’t intended to expose a stable public API, consider making DocumentCompiler (and/or the new CompilationResult) internal instead. If it is intended as public API, please link an api-approved issue in the PR description and ensure the API shape is approved before merging.

public sealed class DocumentCompiler
{
public (ImmutableArray<Diagnostic>, CompilationResult?) Compile(SourceText document, Func<string, SourceText> includedDocumentLoader, Func<string, byte[]> resourceLocator, Options options)
{
return Compile([document], includedDocumentLoader, resourceLocator, options);
}
public (ImmutableArray<Diagnostic>, CompilationResult?) Compile(ImmutableArray<SourceText> documents, Func<string, SourceText> includedDocumentLoader, Func<string, byte[]> resourceLocator, Options options)
{

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

Projects

Status: No status
Status: Done

Development

Successfully merging this pull request may close these issues.

3 participants

@jkoritzinsky
, '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

Enable managed ilasm round trip testing. - #131508

Closed
jkoritzinsky wants to merge 77 commits into
ilasm-fixupsfrom
managed-ilasm-rt-ci
Closed

Enable managed ilasm round trip testing.#131508
jkoritzinsky wants to merge 77 commits into
ilasm-fixupsfrom
managed-ilasm-rt-ci

Conversation

@jkoritzinsky

@jkoritzinskyjkoritzinsky commented Jul 28, 2026

Copy link
Copy Markdown
Member

Stack created with GitHub Stacks CLIGive Feedback 💬

Note

This PR description was generated with GitHub Copilot.

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
16 pipeline(s) were filtered out due to trigger conditions.
There may be pipelines that require an authorized user to comment /azp run to run.

@jkoritzinskyjkoritzinsky changed the title managed ilasm rt ciEnable managed ilasm round trip testing.Jul 28, 2026
@jkoritzinsky

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-coreclr ilasm

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
1 pipeline(s) were filtered out due to trigger conditions.

@jkoritzinsky
jkoritzinsky marked this pull request as ready for review July 28, 2026 23:33
CopilotAI lite review requested due to automatic review settings July 28, 2026 23:33
@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
16 pipeline(s) were filtered out due to trigger conditions.
There may be pipelines that require an authorized user to comment /azp run to run.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This PR updates the runtime test pipeline template to run an additional ILASM round-trip scenario that uses the managed ILASM implementation when the ilasm test group is selected.

Changes:

  • Adds managedilasmroundtrip to the ilasm test group’s Helix scenarios list (alongside ilasmroundtrip).

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

CopilotAI review requested due to automatic review settings July 29, 2026 00:05

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

CopilotAI review requested due to automatic review settings July 29, 2026 00:34

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

CopilotAI review requested due to automatic review settings July 29, 2026 19:00

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 2fb9f1ef-f721-49e0-bf48-4a7a9458d53a
CopilotAI review requested due to automatic review settings August 2, 2026 23:02

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

Suppressed comments (2)

src/tools/ilasm/tests/ILAssembler.Tests/AssemblyTests.cs:349

  • ManagedIlasm_DeterministicOutput_IsByteIdentical varies the output file extension between .dll and .exe, but the Options passed to the compiler never sets Dll. That means the ".dll" case still produces an image whose COFF Characteristics might not have the DLL bit set, so the test doesn't actually exercise the new Options.Dll behavior and can mask regressions in DLL-vs-EXE emission.
 var options = new Options
{
Deterministic = true,
OutputFileName = outputFileName,
};

src/tools/ilasm/src/ILAssembler/DocumentCompiler.cs:21

  • DocumentCompiler.Compile changes its public return type from PEBuilder? to CompilationResult?. Since DocumentCompiler is public, this is a breaking change for any external consumers of ILAssembler, and it also introduces/expands public surface area (CompilationResult). If ILAssembler isn't intended to be a supported public API, consider making the types/members internal instead; otherwise, consider keeping the existing API shape (e.g., retaining a PEBuilder?-returning entry point) to avoid breaking downstream code.
public sealed class DocumentCompiler
{
public (ImmutableArray<Diagnostic>, CompilationResult?) Compile(SourceText document, Func<string, SourceText> includedDocumentLoader, Func<string, byte[]> resourceLocator, Options options)
{
return Compile([document], includedDocumentLoader, resourceLocator, options);
}
public (ImmutableArray<Diagnostic>, CompilationResult?) Compile(ImmutableArray<SourceText> documents, Func<string, SourceText> includedDocumentLoader, Func<string, byte[]> resourceLocator, Options options)
{

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 2fb9f1ef-f721-49e0-bf48-4a7a9458d53a
CopilotAI review requested due to automatic review settings August 3, 2026 18:49

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

Suppressed comments (2)

src/tools/ilasm/tests/ILAssembler.Tests/AssemblyTests.cs:410

  • The deterministic-output test varies the output file name between .dll and .exe, but the Options passed to the compiler never sets Options.Dll. This means the “Deterministic.dll” case still produces an executable image, so the test isn’t exercising the DLL imageCharacteristics path (and could miss DLL-specific nondeterminism).
 var options = new Options
{
Deterministic = true,
OutputFileName = outputFileName,
};

src/tools/ilasm/src/ILAssembler/DocumentCompiler.cs:21

  • This changes the public API of ILAssembler by replacing the public Compile return type (PEBuilder?) with a new public CompilationResult and updating the tuple signatures. The PR description doesn’t link an api-approved issue, so this can’t be validated against an approved API shape per the repo’s API approval process. Either (a) link an approved issue, or (b) keep the public surface unchanged and move the new behavior behind internal APIs / internal helper types.
public sealed class DocumentCompiler
{
public (ImmutableArray<Diagnostic>, CompilationResult?) Compile(SourceText document, Func<string, SourceText> includedDocumentLoader, Func<string, byte[]> resourceLocator, Options options)
{
return Compile([document], includedDocumentLoader, resourceLocator, options);
}
public (ImmutableArray<Diagnostic>, CompilationResult?) Compile(ImmutableArray<SourceText> documents, Func<string, SourceText> includedDocumentLoader, Func<string, byte[]> resourceLocator, Options options)
{

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 106f96fe-da32-41d4-8aa5-7431edb36fc6
CopilotAI review requested due to automatic review settings August 10, 2026 17:11

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

Suppressed comments (1)

src/tools/ilasm/tests/ILAssembler.Tests/GenericTests.cs:167

  • GenericType_MoreThanMetadataIndexRange_IsAcceptedForCompatibility builds a very large IL source string (65,537 generic parameters). Initializing StringBuilder without an estimated capacity will cause repeated growth reallocations and extra copying, which can significantly slow this test and increase memory usage in CI.

Consider supplying an initial capacity that scales with GenericParameterCount to keep this test cheaper while preserving coverage.

 StringBuilder source = new("""
.assembly extern mscorlib { }
.assembly test { }
.class public auto ansi Test<
""");

…ompiler, it's a compiler that's AOT compiled)
CopilotAI review requested due to automatic review settings August 12, 2026 18:03

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

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

Suppressed comments (1)

src/tools/ilasm/src/ILAssembler/DocumentCompiler.cs:21

  • DocumentCompiler is public, and this change replaces its public Compile(...) return type from PEBuilder? to CompilationResult? (and adds a new public type). That’s a source-breaking public API change for any out-of-repo consumers of ILAssembler, and it also triggers the repo’s “new public API requires api-approved issue” process.

If ILAssembler isn’t intended to expose a stable public API, consider making DocumentCompiler (and/or the new CompilationResult) internal instead. If it is intended as public API, please link an api-approved issue in the PR description and ensure the API shape is approved before merging.

public sealed class DocumentCompiler
{
public (ImmutableArray<Diagnostic>, CompilationResult?) Compile(SourceText document, Func<string, SourceText> includedDocumentLoader, Func<string, byte[]> resourceLocator, Options options)
{
return Compile([document], includedDocumentLoader, resourceLocator, options);
}
public (ImmutableArray<Diagnostic>, CompilationResult?) Compile(ImmutableArray<SourceText> documents, Func<string, SourceText> includedDocumentLoader, Func<string, byte[]> resourceLocator, Options options)
{

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

Projects

Status: No status
Status: Done

Development

Successfully merging this pull request may close these issues.

3 participants

@jkoritzinsky