Skip to content

Conversation

@yowl
Copy link
Contributor

@yowl yowl commented Nov 8, 2025

This PR merges to commit a67d388.

Remove new operator from alloc.cpp as clashes with LLVM.
Make the cleanup RenameTempOutput virtual and don't implement for now - we have lots of files.
Dont include System.Native.Browser with a temporary hard coded false in the condition.
Add rollup dependency.
Align JS function names.
Remove dn-containers for clrinterpreter as we don't have it.

Copilot AI and others added 30 commits October 17, 2025 16:40
Fixes dotnet/runtime#61895

This PR ports regex functional tests from the
[nim-regex](https://github.com/nitely/nim-regex) project to increase
.NET's regex test coverage, following the same pattern used for PCRE and
Rust test suites.

## Changes

- Added `RegexNimTests.cs` with 156 unique test cases focusing on
patterns not already covered by existing tests
- Updated `System.Text.RegularExpressions.Tests.csproj` to include the
new test file
- All tests pass across all regex engines (Interpreter, Compiled,
NonBacktracking, SourceGenerated)

## Test Coverage

The ported tests provide additional coverage for unique patterns
including:

- **Escaped quantifiers**: `\*+`, `\??`, `\++?` - testing literal `*`,
`+`, `?` characters with quantifiers
- **Nested repetitions**: `(a*)*`, `(a*)*b`, `((a)*(a)*)*` - edge case
patterns
- **Complex patterns**: `a(b|c)*d`, `((a(b)*)*(b)*)`, alternations with
grouping
- **Unicode character classes**: `\d` matching `۲`, `\D` matching `⅕`
- **Lookahead/lookbehind**: Positive/negative assertions (filtered for
NonBacktracking engine)
- **Named groups**: `(?<name>...)` syntax
- **Word boundary edge cases**: `\b\b\b` patterns
- **Empty patterns and special cases**

## Deduplication

After analysis, 25 duplicate and trivial test cases were removed that
were already covered by existing tests in `Regex.Match.Tests.cs`,
`Regex.Groups.Tests.cs`, and other test files. The remaining tests focus
on unique patterns and edge cases.

## Compatibility Notes

Some NIM-specific patterns were excluded or adapted for .NET
compatibility:

- **Removed** `\y` escape sequence (not recognized in .NET)
- **Removed** `(?U)` ungreedy flag (not supported in .NET)
- **Removed** Unicode case folding tests (ß ↔ ss) due to different
behavior
- **Converted** named group syntax from `(?P<name>)` to .NET's
`(?<name>)` format
- **Filtered** lookahead/lookbehind tests for NonBacktracking engine
(throws NotSupportedException)

## Test Results

- Total tests: 29,899 (added ~600+ test executions across all engines)
- Failures: 0
- All tests pass successfully

The MIT license for nim-regex was already present in
`THIRD-PARTY-NOTICES.TXT`.

<!-- START COPILOT CODING AGENT SUFFIX -->



<details>

<summary>Original prompt</summary>

> 
> ----
> 
> *This section details on the original issue you should resolve*
> 
> <issue_title>Port nim regex tests</issue_title>
> <issue_description>Nim has lots of regex functional tests we should
port over to improve our coverage:
>
https://github.com/nitely/nim-regex/blob/eeefb4f51264ff3bc3b36caf55672a74f52f5ef5/tests/tests.nim</issue_description>
> 
> <agent_instructions>You can see in
https://github.com/dotnet/runtime/tree/main/src/libraries/System.Text.RegularExpressions/tests/FunctionalTests
we have a file of tests ported from PCRE and a file of tests ported from
Rust. Please similarly port the cited NIM tests (or a newer version if
there is one); any that don't pass but should need to be marked as
[ActiveIssue(...)]... any that don't pass but that's expected should be
removed.</agent_instructions>
> 
> ## Comments on the Issue (you are @copilot in this section)
> 
> <comments>
> <comment_new><author>@</author><body>
> Tagging subscribers to this area: @eerhardt,
@dotnet/area-system-text-regularexpressions
> See info in
[area-owners.md](https://github.com/dotnet/runtime/blob/main/docs/area-owners.md)
if you want to be subscribed.
> <details>
> <summary>Issue Details</summary>
> <hr />
> 
> Nim has lots of regex functional tests we should port over to improve
our coverage:
>
https://github.com/nitely/nim-regex/blob/eeefb4f51264ff3bc3b36caf55672a74f52f5ef5/tests/tests.nim
> 
> <table>
>   <tr>
>     <th align="left">Author:</th>
>     <td>stephentoub</td>
>   </tr>
>   <tr>
>     <th align="left">Assignees:</th>
>     <td>-</td>
>   </tr>
>   <tr>
>     <th align="left">Labels:</th>
>     <td>
> 
> `area-System.Text.RegularExpressions`
> 
> </td>
>   </tr>
>   <tr>
>     <th align="left">Milestone:</th>
>     <td>.NET 7.0</td>
>   </tr>
> </table>
> </details></body></comment_new>
> <comment_new><author>@joperezr</author><body>
> This will likely miss ZBB but will still make it before 7.0. Adjusting
the milestone just because this is not technically a blocker for
7.0.</body></comment_new>
> </comments>
> 


</details>

Fixes dotnet/runtime#61895

<!-- START COPILOT CODING AGENT TIPS -->
---

✨ Let Copilot coding agent [set things up for
you](https://github.com/dotnet/runtime/issues/new?title=✨+Set+up+Copilot+instructions&body=Configure%20instructions%20for%20this%20repository%20as%20documented%20in%20%5BBest%20practices%20for%20Copilot%20coding%20agent%20in%20your%20repository%5D%28https://gh.io/copilot-coding-agent-tips%29%2E%0A%0A%3COnboard%20this%20repo%3E&assignees=copilot)
— coding agent works faster and does higher quality work when set up for
your repo.

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: stephentoub <2642209+stephentoub@users.noreply.github.com>
Adds support for using `IReadOnlyDictionary<string, object>` and
`IReadOnlyDictionary<string, JsonElement>` as JsonExtensionData
properties, enabling them to work identically to `IDictionary` types.

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: stephentoub <2642209+stephentoub@users.noreply.github.com>
…Await cases. (#120810)

Fixes: #119617


Since ValueTask is a struct, we need to see through `stloc; ldloca;`
sequence when matching `ConfigureAwait` call
… sequences of IL opcodes (#120827)

- This is needed to ensure that some of our SIMD tests finish in a
vaguely reasonable timeframe
- The peeps implemented here make that almost possible, although the
behavior in CI hasn't yet been verified
- Peeps implemented
- stloc/ldloc ... This is a minor improvement, but will be needed to
handle a future optimization around allowing the il stack to have
constant values
  - box/unbox.any - Removes unnecessary boxing/unboxing
- typeof(T)==typeof(Y) - This allows us to handle the type testing
specialization behavior that is used heavily in the BCL
  - typeof(T).IsValueType - Used in the Unsafe.BitCast function

Not yet implemented is giving the interpreter stack a concept of
constant values, so that we can optimize brtrue/brfalse and friends into
unconditional branches. With this set of changes the if
(typeof(T)==typeof(int)) { ... } else if (typeof(T)==typeof(float))
pattern is *much* faster than before, but the not taken paths are still
fully generated interpreter code, and there are still many branches.

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
…(#120683)

Fixes dotnet/runtime#120340

Adds test with some runtime async methods, and fixes the check for
invalid IL when a Task returning async method doesn't have a value on
the stack for `ret`.

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
… Build ID 2818866 (#120770)

This is the pull request automatically created by the OneLocBuild task
in the build process to check-in localized files generated based upon
translation source files (.lcl files) handed-back from the downstream
localization pipeline. If there are issues in translations, visit
https://aka.ms/icxLocBug and log bugs for fixes. The OneLocBuild wiki is
https://aka.ms/onelocbuild and the localization process in general is
documented at https://aka.ms/AllAboutLoc.
…120856)

## Summary

Fixed a bug where balancing groups were incorrectly being removed from
negative lookarounds during regex tree reduction, causing patterns like
`()(?'-1')(?!(?'-1'))` to incorrectly return 0 matches instead of
matching at every position.

## Root Cause

The issue was introduced by an optimization in the `RemoveCaptures`
method within `ReduceLookaround` in `RegexNode.cs`. This method removes
capture groups from negative lookarounds since captures inside negative
lookarounds are undone after the lookaround completes. However, it was
incorrectly removing ALL capture groups, including balancing groups.

Balancing groups (e.g., `(?'-1')`) have semantic meaning that affects
matching behavior - they require a specific capture group to have been
captured before they can succeed. Removing them changes the match
semantics.

## The Fix

Modified the `RemoveCaptures` method to preserve balancing groups by
checking if `N != -1` (where N stores the uncapture group number). The
code now uses pattern matching for cleaner syntax: `if (node is { Kind:
RegexNodeKind.Capture, N: -1 })`. Updated comments to clarify that
captures that don't rely on or impact persisted state can be removed,
which includes backreferences and balancing groups.

## Changes Made

1. **RegexNode.cs**: Modified `RemoveCaptures` to check `node.N == -1`
before removing captures, using pattern matching
2. **Regex.Match.Tests.cs**: Added test case for balancing groups in
negative lookarounds
3. **Regex.Count.Tests.cs**: Added count test to verify correct match
count

## Test Results

- ✅ All functional tests pass: 29,334 tests
- ✅ All unit tests pass: 1,005 tests  
- ✅ Pattern `()(?'-1')(?!(?'-1'))` now correctly matches at every
position in the input string

<!-- START COPILOT CODING AGENT SUFFIX -->



<details>

<summary>Original prompt</summary>

> 
> ----
> 
> *This section details on the original issue you should resolve*
> 
> <issue_title>Regex `()(?'-1')(?!(?'-1'))` exhibit incorrect matching
behavior in .NET10</issue_title>
> <issue_description>### Description
> 
> Such situation occur in `(?!)` and `(?<!)` under Interpreter、Compiled
and source GeneratedCode.
> 
> ### Reproduction Steps
> 
> ```c#
> using System.Text.RegularExpressions;
> 
> var pattern = @"()(?'-1')(?!(?'-1'))";
> var input = "such situation occur in (?!) and (?<!) under
Interpreter、Compiled and source GeneratedCode";
> Regex regex = new Regex(pattern, RegexOptions.Compiled);
> var mhes = regex.Matches(input);
> Console.WriteLine(Regex.Matches(input, pattern).Count);
> Console.WriteLine(mhes.Count);
> Console.WriteLine(RegexTester.regexGenerate().Matches(input).Count);
> internal partial class RegexTester
> {
> 	[GeneratedRegex(@"()(?'-1')(?!(?'-1'))")]
> 	internal static partial Regex regexGenerate();
> }
> ```
> 
> **Here is part of source Generated Code:**
> ```c#
> partial class RegexTester
> {
>     /// <remarks>
>     /// Pattern:<br/>
>     /// <code>()(?'-1')(?!(?'-1'))</code><br/>
>     /// Explanation:<br/>
>     /// <code>
>     /// ○ Fail to match.<br/>
>     /// </code>
>     /// </remarks>
>
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Text.RegularExpressions.Generator",
"10.0.13.307")]
> internal static partial global::System.Text.RegularExpressions.Regex
regexGenerate() =>
global::System.Text.RegularExpressions.Generated.regexGenerate_0.Instance;
> }
> 
> private sealed class Runner : RegexRunner
> {
> /// <summary>Scan the <paramref name="inputSpan"/> starting from
base.runtextstart for the next match.</summary>
> /// <param name="inputSpan">The text being scanned by the regular
expression.</param>
>     protected override void Scan(ReadOnlySpan<char> inputSpan)
>     {
>         // The pattern never matches anything.
>     }
> }
> ```
> 
> ### Expected behavior
> 
> ```
> 91
> 91
> 91
> ```
> 
> ### Actual behavior
> 
> ```
> 0
> 0
> 0
> ```
> 
> ### Regression?
> 
> _No response_
> 
> ### Known Workarounds
> 
> _No response_
> 
> ### Configuration
> 
> _No response_
> 
> ### Other information
> 
> _No response_</issue_description>
> 
> <agent_instructions>Please add tests for the problem and fix it. I
expect the problem was introduced in
dotnet/runtime#118084 and that the fix is simply
to ensure that capture groups are only removed from negative lookarounds
if they're not part of a balancing group.</agent_instructions>
> 
> ## Comments on the Issue (you are @copilot in this section)
> 
> <comments>
> <comment_new><author>@stephentoub</author><body>
> Why do you believe the current behavior is incorrect? It's unclear
from your description as the Regression section is empty... is your
"Expected behavior" from a previous release?</body></comment_new>
> </comments>
> 


</details>

Fixes dotnet/runtime#120849

<!-- START COPILOT CODING AGENT TIPS -->
---

✨ Let Copilot coding agent [set things up for
you](https://github.com/dotnet/runtime/issues/new?title=✨+Set+up+Copilot+instructions&body=Configure%20instructions%20for%20this%20repository%20as%20documented%20in%20%5BBest%20practices%20for%20Copilot%20coding%20agent%20in%20your%20repository%5D%28https://gh.io/copilot-coding-agent-tips%29%2E%0A%0A%3COnboard%20this%20repo%3E&assignees=copilot)
— coding agent works faster and does higher quality work when set up for
your repo.

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: stephentoub <2642209+stephentoub@users.noreply.github.com>
Add ability for the VM to dynamically create continuation layout types
and for the JIT to request such types to be created.
…18270)

Codegen was not a good place for these transformations, it resulted in
contorted logic and complicated register allocation. Every type of
comparison benefits: branch, floating, and integer but that was
especially true for non-branch integer comparisons -- only less-than is
available so any other comparison must be achieved with additional
operations which are much easier to insert/transform to at node level.

Inserting sign-extensions (and recognizing when it is necessary) for
comparands is also easier at node level. This PR introduces only simple
local checks, more comprehensive sign-extension elimination will be
attempted in subsequent PRs.

Part of #84834, cc @dotnet/samsung
…#120731)

- [x] Mark
DeepEquals_TooDeepJsonDocument_ThrowsInsufficientExecutionStackException
test as [OuterLoop]
- [x] Add 136 tests systematically targeting uncovered code paths
- [x] **Final Coverage: 94.27% line, 90.60% branch, 93.40% method**
(baseline: 93.73%, +0.54% improvement)
- [x] Fix OutOfMemoryException in validation tests
- [x] Convert all JSON string constants to raw string literals (per code
review feedback)
- [x] Replace wasteful JsonSerializerOptions creation with
JsonSerializerOptions.Default (per code review feedback)
- [x] Revert incorrect line in JsonValueTests to use options variable
(per code review feedback)
- [x] Convert additional JSON strings to raw string literals in
DomTests.cs (per code review feedback)
- [x] All 49,787 tests passing

## Summary
Through systematic iterations, this PR improved System.Text.Json
coverage from 93.73% to 94.27% (+0.54%) by adding 136 targeted unit
tests covering previously untested API surfaces including JsonSerializer
methods with JsonTypeInfo/JsonSerializerContext, multi-segment
Utf8JsonReader scenarios, JsonWriter formatting options, JsonNode
operations, JsonNamingPolicy variants, and collection serialization.

Remaining gaps to reach 95% (~215 lines) consist primarily of complex
Utf8JsonReader edge cases requiring specialized buffer setups,
ThrowHelper exception paths, and F# converter infrastructure.

<!-- START COPILOT CODING AGENT TIPS -->
---

💡 You can make Copilot smarter by setting up custom instructions,
customizing its development environment and configuring Model Context
Protocol (MCP) servers. Learn more [Copilot coding agent
tips](https://gh.io/copilot-coding-agent-tips) in the docs.

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: stephentoub <2642209+stephentoub@users.noreply.github.com>
…atches (#120872)

This has been an issue in the interpreter forever, as far as I can tell.
We've had multiple issues over the years all flagging problems with
different symptoms that stem from the same core problem.

Fixes dotnet/runtime#43314
Fixes dotnet/runtime#58786
Fixes dotnet/runtime#63385
Fixes dotnet/runtime#111051
Fixes dotnet/runtime#114626

The problem came down to how the regex interpreter handled lazy
quantifiers over expressions that can match the empty string. When the
interpreter reaches one of these lazy loops, it uses an internal
instruction called `Lazybranchmark` to manage entering and potentially
looping the subexpression. To keep track of loop state and capture
boundaries, the interpreter uses two internal stacks, a grouping stack,
that tracks positions relevant to capturing groups (e.g. where a group
started), and a backtracking stack, that tracks states that are needed
if the engine has to go back and try a different match. The bug occurred
in the case when the subpattern inside the lazy loop matches nothing. In
this case, the interpreter unconditionally pushed a placeholder onto the
grouping stack. If the rest of the pattern then succeeded without
backtracking through this loop, that extra placeholder remained on the
grouping stack. This polluted the capture bookkeeping: later parts of
the pattern popped that placeholder, treating it as a real start
position, and shifted captures to the wrong place.

The fix is to stop pushing onto the grouping stack when the loop matches
empty. Instead, the interpreter records two things on the backtracking
stack: the old group boundary and a flag indicating whether the grouping
stack needs to be popped later. If the interpreter ends up backtracking
through this lazy loop, it checks the flag: if a grouping stack entry
was added earlier, it pops it; if not, it leaves the grouping stack
untouched. This keeps the grouping stack and backtracking stack in sync
in both forward and backtracking paths. As a result, empty lazy loops no
longer leave stray entries on the grouping stack. This also prevents the
unbounded stack growth that previously caused overflows or hangs on some
patterns involving nested lazy quantifiers.
…" (#120881)

## Summary

Multiple classes across the repository were throwing
`IndexOutOfRangeException` with `nameof(index)` as the message
parameter, resulting in an unhelpful error message of just "index"
instead of the standard .NET exception message.

## Changes

This PR updates all occurrences to use the parameterless
`IndexOutOfRangeException()` constructor, which provides the default,
user-friendly message: "Index was outside the bounds of the array."

**Before:**
```csharp
throw new IndexOutOfRangeException(nameof(index));
// Exception message: "index"
```

**After:**
```csharp
throw new IndexOutOfRangeException();
// Exception message: "Index was outside the bounds of the array."
```

## Files Modified

**Logging-related files:**
- **LoggerMessage.cs**: Fixed 7 occurrences across different generic
`LogValues<T>` classes
- **LoggerMessageGenerator.Emitter.cs**: Fixed 1 occurrence in the
source generator template
- **LogValuesFormatter.cs**: Fixed 1 occurrence in the logging formatter
- **FormattedLogValues.cs**: Fixed 1 occurrence in formatted log values
- **LoggerExtensionsTest.cs**: Fixed 1 occurrence in test helper class
- **HttpHeadersLogValue.cs**: Fixed 1 occurrence in HTTP logging
infrastructure
- **Baseline test files**: Updated 3 generated code baseline files to
match the new output
- **LoggerMessageTest.cs**: Added comprehensive test to verify the
exception message is proper

**Other components:**
- **DesignerOptionService.cs**: Fixed 1 occurrence in
System.ComponentModel.TypeConverter

## Testing

- All existing tests continue to pass (291 tests in
Microsoft.Extensions.Logging.Tests, 184 tests in
Microsoft.Extensions.Http.Tests)
- Added new test
`LogValues_OutOfRangeAccess_ThrowsIndexOutOfRangeExceptionWithDefaultMessage`
that validates the exception message for all LogValues variants (0-6
parameters)
- Manually verified the fix produces the expected error message

This is a minimal change that maintains backward compatibility (still
throws `IndexOutOfRangeException`) while significantly improving the
developer experience with a clear, descriptive error message across the
entire codebase.

<!-- START COPILOT CODING AGENT TIPS -->
---

💡 You can make Copilot smarter by setting up custom instructions,
customizing its development environment and configuring Model Context
Protocol (MCP) servers. Learn more [Copilot coding agent
tips](https://gh.io/copilot-coding-agent-tips) in the docs.

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: stephentoub <2642209+stephentoub@users.noreply.github.com>
Follow-up PR for #120495
Fills in missing return tags
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 5
to 6.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/actions/setup-node/releases">actions/setup-node's
releases</a>.</em></p>
<blockquote>
<h2>v6.0.0</h2>
<h2>What's Changed</h2>
<p><strong>Breaking Changes</strong></p>
<ul>
<li>Limit automatic caching to npm, update workflows and documentation
by <a
href="https://github.com/priyagupta108"><code>@​priyagupta108</code></a>
in <a
href="https://redirect.github.com/actions/setup-node/pull/1374">actions/setup-node#1374</a></li>
</ul>
<p><strong>Dependency Upgrades</strong></p>
<ul>
<li>Upgrade ts-jest from 29.1.2 to 29.4.1 and document breaking changes
in v5 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/actions/setup-node/pull/1336">#1336</a></li>
<li>Upgrade prettier from 2.8.8 to 3.6.2 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/actions/setup-node/pull/1334">#1334</a></li>
<li>Upgrade actions/publish-action from 0.3.0 to 0.4.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/actions/setup-node/pull/1362">#1362</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/setup-node/compare/v5...v6.0.0">https://github.com/actions/setup-node/compare/v5...v6.0.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/actions/setup-node/commit/2028fbc5c25fe9cf00d9f06a71cc4710d4507903"><code>2028fbc</code></a>
Limit automatic caching to npm, update workflows and documentation (<a
href="https://redirect.github.com/actions/setup-node/issues/1374">#1374</a>)</li>
<li><a
href="https://github.com/actions/setup-node/commit/13427813f706a0f6c9b74603b31103c40ab1c35a"><code>1342781</code></a>
Bump actions/publish-action from 0.3.0 to 0.4.0 (<a
href="https://redirect.github.com/actions/setup-node/issues/1362">#1362</a>)</li>
<li><a
href="https://github.com/actions/setup-node/commit/89d709d423dc495668cd762a18dd4a070611be3f"><code>89d709d</code></a>
Bump prettier from 2.8.8 to 3.6.2 (<a
href="https://redirect.github.com/actions/setup-node/issues/1334">#1334</a>)</li>
<li><a
href="https://github.com/actions/setup-node/commit/cd2651c46231bc0d6f48d6b34433b845331235fe"><code>cd2651c</code></a>
Bump ts-jest from 29.1.2 to 29.4.1 (<a
href="https://redirect.github.com/actions/setup-node/issues/1336">#1336</a>)</li>
<li>See full diff in <a
href="https://github.com/actions/setup-node/compare/v5...v6">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/setup-node&package-manager=github_actions&previous-version=5&new-version=6)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: stephentoub <2642209+stephentoub@users.noreply.github.com>
* Publish managed cDAC package for use in other repositories
Adds an AsyncMethodDesc type to represent the runtime-async calling
convention methods. The type was modeled after UnboxingMethodDesc, which
also has multiple MethodDescs for each method def. These methods
override the Signature to add the CallConvAsync flag and change the
return type to void (for Task and ValueTask) or T (for Task<T> and
ValueTask<T>).

---------

Co-authored-by: Jan Kotas <jkotas@microsoft.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Backport of #120721 to main

/cc @PranavSenthilnathan

Links in the installer have English text instead of localized text. See
#120109 for screenshots. Found by CTI.

Fixes #120109

Co-authored-by: Pranav Senthilnathan <pranav.senthilnathan@live.com>
[Draft
12](https://datatracker.ietf.org/doc/html/draft-ietf-lamps-pq-composite-sigs-12)
of the Composite ML-DSA spec now requires the parameters to be present
for `ECPrivateKey`. This PR implements these changes in our managed
Composite ML-DSA implementation.

---------

Co-authored-by: Kevin Jones <vcsjones@github.com>
These 5 packages had lower versions than we had in pruning data in
`net9.0`. Customer impact is that they would have been pruned in 9.0,
but not in 10.0. Conflict resolution would still be dropping all of
these regardless. No know "broken" beahvior.
…ed (#120272)

Make sure we order the control expression after the spill.

Also add a range control to selectively enable instrumentation stress.

Fixes #120170.
Updates the definition of CORINFO_ASYNC_INFO to match CoreCLRs
definition, and adds an implementation for the `getAsyncInfo` jit
callback in ReadyToRun.

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Adam Sitnik <adam.sitnik@gmail.com>
…on (#120917)

Fixes dotnet/runtime#120792

This looks like some very old bug that was exposed by an unrelated
change in .NET 10.0

Basically, we have an assertion `obj->pMT == <cns_type>` we invoke
`optImpliedByTypeOfAssertions` to see if we can find some existing
assertion (anywhere) for `obj != null` so we can duplicate it into
current `ASSERT_TP& activeAssertions`, because `obj->pMT` assertion
implies obj is not null.

We do find such an assertion but for some reason we don't check that
it's null on the right side (op2) -> obj != null. Instead, we pick up
some random `obj != <frozen_object>` assertion which then is incorrectly
used.

[No
diffs.](https://dev.azure.com/dnceng-public/public/_build/results?buildId=1180340&view=ms.vss-build-web.run-extensions-tab)
…ilable (#120929)

- [x] Delete PathFeatures.cs file
- [x] Remove PathFeatures.cs references from .csproj files (5 files)
- [x] Update FileSystemTest.cs to remove PathFeatures usage (3
properties)
- [x] Update PathTestsBase.cs to use non-legacy values in
TestData_GetPathRoot_DevicePaths (5 lines)
- [x] Update PathTests_Windows.cs to remove conditional logic based on
PathFeatures (9 usages)
- [x] Update zip_ManualAndCompatibilityTests.cs to remove PathFeatures
usage (1 property + 1 conditional)
- [x] Update ProcessModuleTests.Windows.cs to remove ConditionalFact
attribute (1 line)
- [x] Build and test affected libraries to ensure all tests pass
  - System.Runtime.Extensions.Tests: 8280 tests passed
  - System.IO.FileSystem.Tests: 8716 tests passed
  - System.IO.Compression.Tests: 1335 tests passed
  - System.Diagnostics.Process.Tests: 339 tests passed
- [x] Run final verification of all changes
- [x] Address feedback: Remove AreAllLongPathsAvailable,
LongPathsAreNotBlocked, and UsingNewNormalization properties
- [x] Address feedback: Update outdated comment about ConditionalFact in
ProcessModuleTests.Windows.cs
- [x] Address feedback: Remove IsUsingNewPathNormalization property from
zip_ManualAndCompatibilityTests.cs
- [x] Address feedback: Remove redundant property wrappers in Delete.cs
and replace with RemoteExecutor.IsSupported
- [x] Address feedback: Merge
GetFullPath_Windows_UNC_Valid_LegacyPathSupport test cases into
GetFullPath_UNC_Valid
- [x] Fix CI failure: Add typeof(RemoteExecutor) parameter to
ConditionalFact attributes

## Summary
Successfully removed PathFeatures.cs dead code and all its references.
Replaced all conditional test attributes that depended on always-true
properties with unconditional Fact/Theory attributes. Removed redundant
property wrappers and merged duplicate test methods. Fixed
ConditionalFact attributes to properly reference
RemoteExecutor.IsSupported. All tests now assume:
- All long paths are available (no legacy MAX_PATH limitations)
- New path normalization is always used (no legacy path handling)
- No conditional behavior based on runtime capabilities

<!-- START COPILOT CODING AGENT SUFFIX -->



<details>

<summary>Original prompt</summary>

> 
> ----
> 
> *This section details on the original issue you should resolve*
> 
> <issue_title>PathFeatures.cs is dead code</issue_title>
> <issue_description>PathFeatures.cs is only used in tests in target
current netcoreapp app. All path features are available in current
netcoreapp.</issue_description>
> 
> <agent_instructions>Please delete PathFeatures.cs and all references
to it. Assume that all Path features are available and no legacy
behaviors are present.</agent_instructions>
> 
> ## Comments on the Issue (you are @copilot in this section)
> 
> <comments>
> </comments>
> 


</details>

Fixes dotnet/runtime#120928

<!-- START COPILOT CODING AGENT TIPS -->
---

💬 Share your feedback on Copilot coding agent for the chance to win a
$200 gift card! Click
[here](https://survey3.medallia.com/?EAHeSx-AP01bZqG0Ld9QLQ) to start
the survey.

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: jkotas <6668460+jkotas@users.noreply.github.com>
Co-authored-by: adamsitnik <6011991+adamsitnik@users.noreply.github.com>
MichalStrehovsky and others added 11 commits November 7, 2025 07:08
…1359)

Fixes dotnet/runtime#121006

This provides an entry point, similar to P/Invokes thunks, for generated
reverse P/Invoke stubs. A commented out example of the generated code
was provided.
## Description

The libclrinterpreter is already linked into the coreclr_static library
for wasm in:

https://github.com/dotnet/runtime/blob/e0837be345978738d0387055e0eb1e2b989dd787/src/coreclr/dlls/mscoree/coreclr/CMakeLists.txt#L201

This PR updates the build to avoid shipping libclrinterpreter in the
wasm runtime packs as separate static librariy, which resolves the
manifest errors:
```
The following files are missing entries in the templated manifest: libclrinterpreter.dylib. 
```

Fixes dotnet/runtime#121399
Disable one part of the aliasing_retbuf that uses pinvoke with
marshalling, fix disabling of calli_excep test that needs to be disabled
on the project level as it is executed as isolated and finally
Test_HndIndex_10_Reordered that has the same issue as previously
disabled Test_HndIndex_10_Plain.
The test was accepting only 0xc0000005 as an exit code for
NullReferenceException. But in the interpreter case, the exception is
thrown using COMPlusThrow(kNullReferenceException) and gets the error
code of regular managed exception, the 0xE0434352.

This change updates the test to accept that one too and adds
verification that the exception message contains the
System.NullReferenceException to make sure the tested app didn't exit
due to some other exception.

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
…121425)

`timespec_get` is not available on the Android API levels we target,
causing compilation failures in debug builds of
`src/coreclr/utilcode/debug.cpp`.

### Changes
- Added `HOST_ANDROID` to the existing preprocessor conditionals that
select `gettimeofday` over `timespec_get`
- Updated include guards for `<sys/time.h>` to include Android

Android now follows the same codepath as iOS, tvOS, and macCatalyst:

```cpp
#if defined(HOST_IOS) || defined(HOST_TVOS) || defined(HOST_MACCATALYST) || defined(HOST_ANDROID)
    // timespec_get is only available on iOS 13.0+ and not supported on Android API levels we target
    struct timeval tv;
    gettimeofday(&tv, nullptr);
    ts.tv_sec = tv.tv_sec;
    ts.tv_nsec = tv.tv_usec * 1000;
#else
    int ret = timespec_get(&ts, TIME_UTC);
#endif
```

<!-- START COPILOT CODING AGENT SUFFIX -->



<details>

<summary>Original prompt</summary>

> When built for Android in the debug configuration,
src/coreclr/utilcode/debug.cpp fails to compile because timespec_get is
not supported for the API level we target. HOST_ANDROID needs to be
added to #define checks so that it will fall through the gettimeofday
path.


</details>



<!-- START COPILOT CODING AGENT TIPS -->
---

✨ Let Copilot coding agent [set things up for
you](https://github.com/dotnet/runtime/issues/new?title=✨+Set+up+Copilot+instructions&body=Configure%20instructions%20for%20this%20repository%20as%20documented%20in%20%5BBest%20practices%20for%20Copilot%20coding%20agent%20in%20your%20repository%5D%28https://gh.io/copilot-coding-agent-tips%29%2E%0A%0A%3COnboard%20this%20repo%3E&assignees=copilot)
— coding agent works faster and does higher quality work when set up for
your repo.

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: steveisok <471438+steveisok@users.noreply.github.com>
Calling `EnumAllVirtualSlots` on classes returns all `newslot` methods
that exist in the class hierarchy. Calling this on interfaces produced
an empty enumeration.

For runtime-async, it would be convenient if this returned the logical
slots on interfaces. While interfaces don't have physical slots, they
still have logical slots, so it's not a big stretch.

Doing this now simplifies things in some places, and requires an extra
`if` check in other places. But it will be really convenient for
runtime-async.
This is an attempt to address #119962 by adding a new range assertion
for `x & y` when a range for `x` and `y` can be determined. As part of the change, this PR also adds a non-negative range assertion for GT_CNS_INT when appropriate. 

---------

Co-authored-by: Adam Perlin <adamperlin@microsoft.com>
This change adds check for thread abort to the INTOP_SAFEPOINT and also
to the code resuming after catch. This makes all the libraries
controlled execution tests pass.
The `ProcessRead` method used unnecessary unsafe pointer arithmetic
despite accepting a `ReadOnlySpan<byte>` parameter that already provides
safe, efficient indexing.

## Changes

- **Replaced unsafe pointer arithmetic with ReadOnlySpan indexing**
  - Removed `unsafe` block and `fixed` statement
  - Replaced `byte*` pointers with integer index tracking
  - Changed `*ptr++` to `buffer[i++]`, `(int)(ptr - start)` to `i`

- **Fixed pre-existing validation bug** (discovered during refactoring)
- Changed `if (b < '0' && b > '9')` to `if (b < '0' || b > '9')` in
digit validation
- Original condition could never be true (no byte can be both < 48 and >
57)

## Before/After

```csharp
// Before
unsafe {
    fixed (byte* pBuffer = buffer) {
        byte* ptr = pBuffer;
        byte b = *ptr++;
        if (b < '0' && b > '9')  // Bug: never true
            throw new FormatException(...);
    }
}

// After
int i = 0;
byte b = buffer[i++];
if (b < '0' || b > '9')  // Correct validation
    throw new FormatException(...);
```

All existing tests pass. No API or behavior changes.

> [!WARNING]
>
> <details>
> <summary>Firewall rules blocked me from connecting to one or more
addresses (expand for details)</summary>
>
> #### I tried to connect to the following addresses, but was blocked by
firewall rules:
>
> - `1d7b368770e34adf874f9425defe0a54`
> - Triggering command:
`/home/REDACTED/work/runtime/runtime/artifacts/bin/testhost/net10.0-linux-Debug-x64/dotnet
exec --runtimeconfig System.Net.Mail.Functional.Tests.runtimeconfig.json
--depsfile System.Net.Mail.Functional.Tests.deps.json
/home/REDACTED/.nuget/packages/microsoft.dotnet.xunitconsoleREDACTED/2.9.3-beta.25528.108/build/../tools/net/xunit.console.dll
System.Net.Mail.Functional.Tests.dll -xml testResults.xml -nologo
-notrait category=OuterLoop -notrait category=failing` (dns block)
> - `2f1ac5ebdede409c885709296cd79caf`
> - Triggering command:
`/home/REDACTED/work/runtime/runtime/artifacts/bin/testhost/net10.0-linux-Debug-x64/dotnet
exec --runtimeconfig System.Net.Mail.Functional.Tests.runtimeconfig.json
--depsfile System.Net.Mail.Functional.Tests.deps.json
/home/REDACTED/.nuget/packages/microsoft.dotnet.xunitconsoleREDACTED/2.9.3-beta.25528.108/build/../tools/net/xunit.console.dll
System.Net.Mail.Functional.Tests.dll -xml testResults.xml -nologo
-notrait category=OuterLoop -notrait category=failing` (dns block)
> - `3e267405dc55499fbf89ba600b269486`
> - Triggering command:
`/home/REDACTED/work/runtime/runtime/artifacts/bin/testhost/net10.0-linux-Debug-x64/dotnet
exec --runtimeconfig System.Net.Mail.Functional.Tests.runtimeconfig.json
--depsfile System.Net.Mail.Functional.Tests.deps.json
/home/REDACTED/.nuget/packages/microsoft.dotnet.xunitconsoleREDACTED/2.9.3-beta.25528.108/build/../tools/net/xunit.console.dll
System.Net.Mail.Functional.Tests.dll -xml testResults.xml -nologo
-notrait category=OuterLoop -notrait category=failing` (dns block)
> - `4741d8119c5b46deb7b6a3247cf3e987`
> - Triggering command:
`/home/REDACTED/work/runtime/runtime/artifacts/bin/testhost/net10.0-linux-Debug-x64/dotnet
exec --runtimeconfig System.Net.Mail.Functional.Tests.runtimeconfig.json
--depsfile System.Net.Mail.Functional.Tests.deps.json
/home/REDACTED/.nuget/packages/microsoft.dotnet.xunitconsoleREDACTED/2.9.3-beta.25528.108/build/../tools/net/xunit.console.dll
System.Net.Mail.Functional.Tests.dll -xml testResults.xml -nologo
-notrait category=OuterLoop -notrait category=failing` (dns block)
> - `4777e169b2a54bef872d3013b91d119d`
> - Triggering command:
`/home/REDACTED/work/runtime/runtime/artifacts/bin/testhost/net10.0-linux-Debug-x64/dotnet
exec --runtimeconfig System.Net.Mail.Functional.Tests.runtimeconfig.json
--depsfile System.Net.Mail.Functional.Tests.deps.json
/home/REDACTED/.nuget/packages/microsoft.dotnet.xunitconsoleREDACTED/2.9.3-beta.25528.108/build/../tools/net/xunit.console.dll
System.Net.Mail.Functional.Tests.dll -xml testResults.xml -nologo
-notrait category=OuterLoop -notrait category=failing` (dns block)
> - `674cfdb34af049bc80dcbc8c430c56e8`
> - Triggering command:
`/home/REDACTED/work/runtime/runtime/artifacts/bin/testhost/net10.0-linux-Debug-x64/dotnet
exec --runtimeconfig System.Net.Mail.Functional.Tests.runtimeconfig.json
--depsfile System.Net.Mail.Functional.Tests.deps.json
/home/REDACTED/.nuget/packages/microsoft.dotnet.xunitconsoleREDACTED/2.9.3-beta.25528.108/build/../tools/net/xunit.console.dll
System.Net.Mail.Functional.Tests.dll -xml testResults.xml -nologo
-notrait category=OuterLoop -notrait category=failing` (dns block)
> - `83b38af9921845538f0d2b8e91bd4c93`
> - Triggering command:
`/home/REDACTED/work/runtime/runtime/artifacts/bin/testhost/net10.0-linux-Debug-x64/dotnet
exec --runtimeconfig System.Net.Mail.Functional.Tests.runtimeconfig.json
--depsfile System.Net.Mail.Functional.Tests.deps.json
/home/REDACTED/.nuget/packages/microsoft.dotnet.xunitconsoleREDACTED/2.9.3-beta.25528.108/build/../tools/net/xunit.console.dll
System.Net.Mail.Functional.Tests.dll -xml testResults.xml -nologo
-notrait category=OuterLoop -notrait category=failing` (dns block)
> - `8445b7f8594e4fa79d67a5f60e1917e1`
> - Triggering command:
`/home/REDACTED/work/runtime/runtime/artifacts/bin/testhost/net10.0-linux-Debug-x64/dotnet
exec --runtimeconfig System.Net.Mail.Functional.Tests.runtimeconfig.json
--depsfile System.Net.Mail.Functional.Tests.deps.json
/home/REDACTED/.nuget/packages/microsoft.dotnet.xunitconsoleREDACTED/2.9.3-beta.25528.108/build/../tools/net/xunit.console.dll
System.Net.Mail.Functional.Tests.dll -xml testResults.xml -nologo
-notrait category=OuterLoop -notrait category=failing` (dns block)
> - `9c17f6fe624d4688a482d039f62e9376`
> - Triggering command:
`/home/REDACTED/work/runtime/runtime/artifacts/bin/testhost/net10.0-linux-Debug-x64/dotnet
exec --runtimeconfig System.Net.Mail.Functional.Tests.runtimeconfig.json
--depsfile System.Net.Mail.Functional.Tests.deps.json
/home/REDACTED/.nuget/packages/microsoft.dotnet.xunitconsoleREDACTED/2.9.3-beta.25528.108/build/../tools/net/xunit.console.dll
System.Net.Mail.Functional.Tests.dll -xml testResults.xml -nologo
-notrait category=OuterLoop -notrait category=failing` (dns block)
> - `9caf23efb9b44deeaad1f5a4390857ed`
> - Triggering command:
`/home/REDACTED/work/runtime/runtime/artifacts/bin/testhost/net10.0-linux-Debug-x64/dotnet
exec --runtimeconfig System.Net.Mail.Functional.Tests.runtimeconfig.json
--depsfile System.Net.Mail.Functional.Tests.deps.json
/home/REDACTED/.nuget/packages/microsoft.dotnet.xunitconsoleREDACTED/2.9.3-beta.25528.108/build/../tools/net/xunit.console.dll
System.Net.Mail.Functional.Tests.dll -xml testResults.xml -nologo
-notrait category=OuterLoop -notrait category=failing` (dns block)
> - `ad5b1d9a0284470497198faf9964749f`
> - Triggering command:
`/home/REDACTED/work/runtime/runtime/artifacts/bin/testhost/net10.0-linux-Debug-x64/dotnet
exec --runtimeconfig System.Net.Mail.Functional.Tests.runtimeconfig.json
--depsfile System.Net.Mail.Functional.Tests.deps.json
/home/REDACTED/.nuget/packages/microsoft.dotnet.xunitconsoleREDACTED/2.9.3-beta.25528.108/build/../tools/net/xunit.console.dll
System.Net.Mail.Functional.Tests.dll -xml testResults.xml -nologo
-notrait category=OuterLoop -notrait category=failing` (dns block)
> - `dad9f17011b54a2883ca8f7489dde4e8`
> - Triggering command:
`/home/REDACTED/work/runtime/runtime/artifacts/bin/testhost/net10.0-linux-Debug-x64/dotnet
exec --runtimeconfig System.Net.Mail.Functional.Tests.runtimeconfig.json
--depsfile System.Net.Mail.Functional.Tests.deps.json
/home/REDACTED/.nuget/packages/microsoft.dotnet.xunitconsoleREDACTED/2.9.3-beta.25528.108/build/../tools/net/xunit.console.dll
System.Net.Mail.Functional.Tests.dll -xml testResults.xml -nologo
-notrait category=OuterLoop -notrait category=failing` (dns block)
> - `dc00558270b44330978820a282438ebc`
> - Triggering command:
`/home/REDACTED/work/runtime/runtime/artifacts/bin/testhost/net10.0-linux-Debug-x64/dotnet
exec --runtimeconfig System.Net.Mail.Functional.Tests.runtimeconfig.json
--depsfile System.Net.Mail.Functional.Tests.deps.json
/home/REDACTED/.nuget/packages/microsoft.dotnet.xunitconsoleREDACTED/2.9.3-beta.25528.108/build/../tools/net/xunit.console.dll
System.Net.Mail.Functional.Tests.dll -xml testResults.xml -nologo
-notrait category=OuterLoop -notrait category=failing` (dns block)
> - `f13d3b87148d4771ab29f5a3afc20964`
> - Triggering command:
`/home/REDACTED/work/runtime/runtime/artifacts/bin/testhost/net10.0-linux-Debug-x64/dotnet
exec --runtimeconfig System.Net.Mail.Functional.Tests.runtimeconfig.json
--depsfile System.Net.Mail.Functional.Tests.deps.json
/home/REDACTED/.nuget/packages/microsoft.dotnet.xunitconsoleREDACTED/2.9.3-beta.25528.108/build/../tools/net/xunit.console.dll
System.Net.Mail.Functional.Tests.dll -xml testResults.xml -nologo
-notrait category=OuterLoop -notrait category=failing` (dns block)
> - `f4e51707a3454d68a871b21a5edce6f6`
> - Triggering command:
`/home/REDACTED/work/runtime/runtime/artifacts/bin/testhost/net10.0-linux-Debug-x64/dotnet
exec --runtimeconfig System.Net.Mail.Functional.Tests.runtimeconfig.json
--depsfile System.Net.Mail.Functional.Tests.deps.json
/home/REDACTED/.nuget/packages/microsoft.dotnet.xunitconsoleREDACTED/2.9.3-beta.25528.108/build/../tools/net/xunit.console.dll
System.Net.Mail.Functional.Tests.dll -xml testResults.xml -nologo
-notrait category=OuterLoop -notrait category=failing` (dns block)
>
> If you need me to access, download, or install something from one of
these locations, you can either:
>
> - Configure [Actions setup
steps](https://gh.io/copilot/actions-setup-steps) to set up my
environment, which run before the firewall is enabled
> - Add the appropriate URLs or hosts to the custom allowlist in this
repository's [Copilot coding agent
settings](https://github.com/dotnet/runtime/settings/copilot/coding_agent)
(admins only)
>
> </details>

<!-- START COPILOT CODING AGENT SUFFIX -->



<details>

<summary>Original prompt</summary>

> There is absolutely unnecessary unsafe code in
`SmtpReplyReaderFactory.cs` in `ProcessRead` function, please file a PR
to replace with just normal ReadOnlySpan memory access to make it memory
safe.


</details>



<!-- START COPILOT CODING AGENT TIPS -->
---

💬 We'd love your input! Share your thoughts on Copilot coding agent in
our [2 minute survey](https://gh.io/copilot-coding-agent-survey).

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: EgorBo <523221+EgorBo@users.noreply.github.com>
Co-authored-by: Egor Bogatov <egorbo@gmail.com>
Co-authored-by: xtqqczze <45661989+xtqqczze@users.noreply.github.com>
@jkotas jkotas added the area-NativeAOT-LLVM LLVM generation for Native AOT compilation (including Web Assembly) label Nov 8, 2025
@SingleAccretion
Copy link

This should hopefully address #3204 (comment) and fix the official build.

@yowl
Copy link
Contributor Author

yowl commented Nov 10, 2025 via email

@yowl yowl marked this pull request as ready for review November 21, 2025 18:02
@yowl
Copy link
Contributor Author

yowl commented Nov 21, 2025

cc @dotnet/nativeaot-llvm


// Rename the temporary file to the final output file
File.Move(tempOutputFilePath, outputFilePath, overwrite: true);
compilation.RenameTempOutput(tempOutputFilePath, outputFilePath);

Choose a reason for hiding this comment

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

Can we move to the upstream scheme for this, at least for the "main" output file? I don't see why it wouldn't work.

Comment on lines +127 to +128
# Only when Browser for CoreCLR, TODO: NAOT-LLVM but not for NativeAOT, but how to detect that? Remove when it is ready to be used.
if (CLR_CMAKE_TARGET_BROWSER AND BUILD_LIBS_NATIVE_BROWSER AND false)

Choose a reason for hiding this comment

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

Does just building this part cause problems?

(We may still want to disable still for build time reasons.)

"packages": {
"": {
"name": "@microsoft/dotnet-runtime",
"version": "1.0.0",

Choose a reason for hiding this comment

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

Why do we need such a big diff from upstream here?

<FeaturePortableEntryPoints>true</FeaturePortableEntryPoints>
<FeaturePortableHelpers>true</FeaturePortableHelpers>
<FeatureInterpreter>true</FeatureInterpreter>
<FeatureInterpreter>false</FeatureInterpreter>

Choose a reason for hiding this comment

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

Do we need to disable this for functional reasons, or...?

>>>>>>> main
endif()

if (CLR_CMAKE_TARGET_ARCH_WASM AND DEFINED CMAKE_TZD_DIR)

Choose a reason for hiding this comment

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

I think we also need to adjust our targets slightly to link System.Native.TimeZoneData.Invariant instead of System.Native.TimeZoneData.Disabled (port difference).

yowl and others added 2 commits November 27, 2025 18:23
Co-authored-by: SingleAccretion <62474226+SingleAccretion@users.noreply.github.com>
Co-authored-by: SingleAccretion <62474226+SingleAccretion@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area-NativeAOT-LLVM LLVM generation for Native AOT compilation (including Web Assembly)

Projects

None yet

Development

Successfully merging this pull request may close these issues.