Skip to content

Conversation

github-actions[bot]
Copy link
Contributor

I detected changes in the release/10.0-rc1 branch which have not been merged yet to release/10.0. I'm a robot and am configured to help you automatically keep release/10.0 up to date, so I've opened this PR.

This PR merges commits made on release/10.0-rc1 by the following committers:

  • github-actions[bot]
  • agocke
  • jtschuster
  • Maoni0
  • elinor-fung
  • MackinnonBuck
  • jacob-crawley
  • MichalStrehovsky

Instructions for merging from UI

This PR will not be auto-merged. When pull request checks pass, complete this PR by creating a merge commit, not a squash or rebase commit.

merge button instructions

If this repo does not allow creating merge commits from the GitHub UI, use command line instructions.

Instructions for merging via command line

Run these commands to merge this pull request from the command line.

git fetch
git checkout release/10.0-rc1
git pull --ff-only
git checkout release/10.0
git pull --ff-only
git merge --no-ff release/10.0-rc1

# If there are merge conflicts, resolve them and then run git merge --continue to complete the merge
# Pushing the changes to the PR branch will re-trigger PR validation.
git push https://github.com/dotnet/runtime HEAD:merge/release/10.0-rc1-to-release/10.0
or if you are using SSH
git push [email protected]:dotnet/runtime HEAD:merge/release/10.0-rc1-to-release/10.0

After PR checks are complete push the branch

git push

Instructions for resolving conflicts

⚠️ If there are merge conflicts, you will need to resolve them manually before merging. You can do this using GitHub or using the command line.

Instructions for updating this pull request

Contributors to this repo have permission update this pull request by pushing to the branch 'merge/release/10.0-rc1-to-release/10.0'. This can be done to resolve conflicts or make other changes to this pull request before it is merged.
The provided examples assume that the remote is named 'origin'. If you have a different remote name, please replace 'origin' with the name of your remote.

git fetch
git checkout -b merge/release/10.0-rc1-to-release/10.0 origin/release/10.0
git pull https://github.com/dotnet/runtime merge/release/10.0-rc1-to-release/10.0
(make changes)
git commit -m "Updated PR with my changes"
git push https://github.com/dotnet/runtime HEAD:merge/release/10.0-rc1-to-release/10.0
or if you are using SSH
git fetch
git checkout -b merge/release/10.0-rc1-to-release/10.0 origin/release/10.0
git pull [email protected]:dotnet/runtime merge/release/10.0-rc1-to-release/10.0
(make changes)
git commit -m "Updated PR with my changes"
git push [email protected]:dotnet/runtime HEAD:merge/release/10.0-rc1-to-release/10.0

Contact .NET Core Engineering (dotnet/dnceng) if you have questions or issues.
Also, if this PR was generated incorrectly, help us fix it. See https://github.com/dotnet/arcade/blob/main/.github/workflows/scripts/inter-branch-merge.ps1.

MichalStrehovsky and others added 8 commits August 16, 2025 00:41
…lysis (#118769)

A couple times in the past I needed a way to say "if X is not part of the program, eliminate the entire basic block". We can do this for allocated types (this is how branches under `is` checks elimination works), but we can't do this for more general "characteristics".

This introduces a mechanism where AOT compiler and CoreLib (or System.Private.* universe in general) can define whole program tags such as "whole program has X in it" and CoreLib can condition code on the presence of this tag.

This is easier shown than described, so I extracted the first use of this into a separate commit. In this commit, we eliminate code that tries looking for `StackTraceHiddenAttribute` if we know the whole program has no `StackTraceHiddenAttribute` in it. With this code eliminated, #118640 can then eliminate all custom attributes on methods, which in turn plays into #118718 and we can eliminate enum boxing even when StackTraceSupport is not set to false (right now #118718 really needs the StackTraceSupport=false to get rid of boxed enums; we get more boxed enums from method attributes).

We have a new node that represents the characteristic. The node can be dropped into the graph wherever needed. ILScanner then uses this to condition parts of the method body on this characteristic node. We need similar logic in the substitution IL provider because we need to guarantee that RyuJIT is not going to see basic blocks we didn't scan. So we treat it as a substitution during codegen phase too.
Contributing towards [#115479](#115479)

Contains implementations for the set of [SVE2 FP APIs](#94018 (comment)), aside from `ConvertToSingleOdd` and `ConvertToSingleOddRoundToOdd`. This is due to concerns I have about the API proposal for these intrinsics being incorrect, when I have a resolution to [my comments](#94018 (comment)) on this they will be implemented.
The assertion only ended up printing stderr, but it would be useful to have all the information about the command that was run (the exit code, stdout).
and if the GCGen0MaxBudget config is specified, always honor it including for DATAS
With large block counts, the CFG convergence takes a long time and performs a lot of Meets, allocating a new Dictionary for each Value in each block. This adds up to gigabytes of allocations in the process.

Ideally we would fix the performance issue with some optimization, but I'm still working on a proper solution. To fix the issue for .NET 10 in the meantime, we can add a limit to the number of iterations to bail out if we reach an excessively large number of iterations. The largest number of iterations in the runtime build is 2600, so 10,000 seems fairly reasonable. The build time of the project in issue #118121 is around ~20 seconds with 10,000 iterations and ~70 seconds with 20,000.
Mop-up commits from the end of the merge window for RC1
…8829)

This lets us keep some of the constant-time indexing advantages of the
IList iterator, without the GVM overhead of Select. There is a small
size increase here, but nowhere near the cost of the GVM.

In a pathological generated example for GVMs the cost was:

  1. .NET 9: 12 MB
  2. .NET 10 w/out this change: 2.2 MB
  3. .NET 10 w/ this change: 2.3 MB

In a real-world example (AzureMCP), the size attributed to System.Linq
was:

  1. .NET 9: 1.2 MB
  2. .NET 10 w/out this change: 340 KB
  3. .NET 10 w/ this change: 430 KB

This seems like a good tradeoff. We mostly keep the algorithmic
complexity the same across the size/speed-opt versions, and just
tradeoff on the margins. We could probably continue to improve this in
the future.
github-actions bot and others added 2 commits August 21, 2025 08:37
…t/filters from C++/CLI (#118905)

* JIT: fix issue with EH clause class types for fault/filters from C++/CLI

C++/CLI appears to leave the CORINFO_EH_CLAUSE ClassToken/FilterOffset union
set to some nonzero value for fault/filter clauses. The JIT currently just
passes this value along to the runtime.

If a method with such a nonzero field is inlined into a dynamic method, this
trips up a check in the runtime where a nonzero entry for such a field is
interpreted as a class handle, even for fault/filter clauses where it should
be ignored.

Tolerate this by zeroing the field in the JIT.

Note this could not have happened in pre .NET10 as methods
with EH could not be inlined, so a dynamic method would never see such
an EH clause, and in non-dynamic methods this field is ignored for
faults and filters.

Fixes #118837.

* review feedback

* zero eh table on alloc/realloc

---------

Co-authored-by: Andy Ayers <[email protected]>
* Add trim analysis for implicit constructors

* Fix RequiresExcludeStatics test

* Fix test for native AOT

* Fix test, move to base analyzer

* Clean up whitespace

* Fix RegexLWCGCompiler annotations

This was warning on the implicit ctor.

---------

Co-authored-by: Sven Boemer <[email protected]>
@ViktorHofer
Copy link
Member

I'm out for the next few days. @akoeplinger @jeffschwMSFT can you please track this one and make sure it gets merged (with a merge commit) so that we don't loose RC1 fixes that didn't explicitly also get checked into RC2? Thanks in advance.

@akoeplinger akoeplinger added Servicing-approved Approved for servicing release area-codeflow for labeling automated codeflow and removed linkable-framework Issues associated with delivering a linker friendly framework labels Aug 25, 2025
@dotnet-policy-service dotnet-policy-service bot added the linkable-framework Issues associated with delivering a linker friendly framework label Aug 25, 2025
@ViktorHofer
Copy link
Member

The only inner loop failure is #113686

@ViktorHofer ViktorHofer enabled auto-merge August 28, 2025 14:47
@ViktorHofer ViktorHofer disabled auto-merge August 28, 2025 14:56
@ViktorHofer
Copy link
Member

/ba-g the failures are all outer loop related (which others let me know are always failing so unrelated to this PR). I tagged the inner loop failure above.

@ViktorHofer ViktorHofer merged commit 1dc2902 into release/10.0 Aug 28, 2025
345 of 362 checks passed
@ViktorHofer ViktorHofer deleted the merge/release/10.0-rc1-to-release/10.0 branch August 28, 2025 18:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area-codeflow for labeling automated codeflow linkable-framework Issues associated with delivering a linker friendly framework Servicing-approved Approved for servicing release
Projects
None yet
Development

Successfully merging this pull request may close these issues.

9 participants