Pull Request on 2026年04月28日

dotnet/runtimeにマージされたPull RequestをAIで日本語要約

注意点

このページは、dotnet/runtimeリポジトリにマージされたPull Requestを自動的に収集し、その内容をAIが要約した内容を表示しています。そのため、必ずしも正確な要約ではない場合があります。


目次

  1. #127488 JIT: eliminate redundant bounds checks for span.Slice(span.Length - cns)
  2. #127485 Remove unsafe code from IBinaryInteger.TryReadBigEndian implementations
  3. #127481 [cDAC] Delete GetAssemblyInfo
  4. #127480 Fix interpreter context after breakpoint
  5. #127477 Handle GT_CCMP in GenTree::OperConsumesFlags on TARGET_AMD64
  6. #127470 Simplify ManagedWebSocket.EnsureBufferContainsAsync
  7. #127469 Adjust interpreter debugger IL mapping
  8. #127465 Fix trimming test exclusions for iOS/tvOS simulator CoreCLR builds
  9. #127456 Remove unsafe code from CRC vectorized helpers
  10. #127420 [mobile] Skip DnsGetHostEntry_LocalHost test on Android
  11. #127418 [release/11.0-preview4] Source code updates from dotnet/dotnet
  12. #127400 P/Invoke transient IL regression fixes
  13. #127398 Fix SIGILL crash on ARM64 platforms with SME but no SVE
  14. #127302 Remove unnecessary _featureCheckValues cache from ILLink
  15. #127290 Skip decommit for large pages and add fake large pages test mode
  16. #127254 Deduplicate warnings for attribute on property dataflow
  17. #127225 [android] Enable CoreCLR runtime pack production for android-arm
  18. #127213 Remove unwind calls from patchpoint OSR transition
  19. #127195 [cDAC] Adding IsLeafFrame and GetContext DacDbi APIs
  20. #127186 R2r skip return dropping thunks
  21. #127165 Fix HttpHeaders.Remove to handle well-known header names
  22. #127114 Add cDAC JIT notification contract with lazy table allocation
  23. #127088 Update Microsoft.Diagnostics.Runtime to 4.0.722401
  24. #126701 Haiku: Fix native component build
  25. #126529 JIT: Transform 'CONST - x' to 'xor x, CONST' when possible
  26. #126385 [cDAC] Adding symbols and using heap dumps
  27. #126152 [release/9.0] Update dependencies from dotnet/emsdk
  28. #126041 Add size/perf optimized FinishSuspension helpers for runtime async
  29. #125955 [release/8.0] Update dependencies from dotnet/emsdk

#127488 JIT: eliminate redundant bounds checks for span.Slice(span.Length - cns)

概要

JITコンパイラの最適化を強化し、span.Slice(span.Length - cns) パターンで発生する冗長な境界チェックを削除します。値番号付け(VN)の恒等式拡張と範囲チェック(RangeCheck)のアサーション推論改善により、BinaryPrimitives.ReadInt32BigEndian 内の長さチェックなども折り畳み可能になります。

生成されるアセンブリコードが大幅に削減され、例示コードでは stackalloc や冗長な境界チェック呼び出しが完全に除去されています。

変更内容

  • src/coreclr/jit/valuenum.cpp: 減算の新しい恒等式を追加し、x - (x + a) / x - (a + x) を -a に値番号付けします(非浮動小数点、非オーバーフロー時)。これにより length - (length - cns) パターンが定数に簡約され、後続チェックの折り畳みが可能になります。

  • src/coreclr/jit/rangecheck.cpp: 関連する関係演算子(relop)の折り畳みロジックを追加し、負の定数 K < 0 について ADD(A, K) < A を証明できるようにします。A の下限が -K 以上の場合、ラップアラウンドが発生しないと判断し、Slice(start) の (uint)start > (uint)_length チェックを削除します。

パフォーマンスへの影響

改善が顕著です。提供されたコード例では:

  • stack領域の確保・解放が不要になり (sub/add rsp が削除)
  • 冗長な境界チェック処理が完全に除去
  • 例外スロー呼び出し(ThrowArgumentOutOfRangeException)が不要化
  • 生成コード量が大幅削減(複数の分岐やチェックロジックが消去)

懸念点: なし。純粋な冗長性除去のため、正確性に影響はありません。

関連Issue

#127486

その他

なし


#127485 Remove unsafe code from IBinaryInteger.TryReadBigEndian implementations

概要

IBinaryInteger<T>.TryReadBigEndian の実装から unsafe コードを削除し、安全な同等物に置き換えました。Unsafe.ReadUnaligned、Unsafe.Add、MemoryMarshal.GetReference の使用を BinaryPrimitives.ReadXxxBigEndian と span インデックスに置き換えています。JIT は既存の長さチェックにより、結果のバウンズチェックを削除することが期待されます。

変更内容

13個のプリミティブ型(Byte、SByte、Char、Int16/UInt16、Int32/UInt32、Int64/UInt64、IntPtr/UIntPtr、Int128/UInt128)の TryReadBigEndian メソッドを安全なコードに置き換えました:

  • エンディアン変換: Unsafe.ReadUnaligned → BinaryPrimitives.Read{U}Int{16|32|64|128}BigEndian に変更
  • バイト反復処理: Unsafe.Add(ref sourceRef, i) → source[i] スパンインデックスに変更
  • ポインタ参照削除: MemoryMarshal.GetReference の使用を廃止し span インデックスで代替
  • プラットフォーム依存処理: IntPtr/UIntPtr の #if TARGET_64BIT 分岐で適切な BinaryPrimitives.ReadInt{32|64}BigEndian / ReadUInt{32|64}BigEndian を選択

パフォーマンスへの影響

影響なし。JIT コンパイラが既存の長さゲートに基づいてバウンズチェックを削除することで、パフォーマンスが維持されることが期待されています。

関連Issue

なし

その他

  • Copilot CLI アシスタンスにより作成されたPRです
  • このPRは#127488で JIT が改善され、元々の制約(#127486)を回避しています

#127481 [cDAC] Delete GetAssemblyInfo

  • 作成者: @rcj1
  • 作成日時: 2026年04月27日 23:37:52(UTC)
  • マージ日時: 2026年04月28日 13:30:16(UTC)
  • ラベル: area-Diagnostics-cdac

概要

DAC/DBI(デバッグ)インターフェース内の IDacDbiInterface::GetAssemblyInfo API を削除し、単一の CordbAppDomain を想定することでデバッガー右側(RS)コードパスを簡潔化します。この変更により、フレーム単位での AppDomain トークン処理が不要になり、キャッシュされた AppDomain を直接使用するようになります。

変更内容

  • DAC/DBI インターフェース層: IDacDbiInterface から GetAssemblyInfo メソッドを削除(IDL、ネイティブヘッダー、DAC実装、マネージド cDAC DBI interop)
  • デバッガー右側簡潔化: CordbProcess::LookupOrCreateAppDomain() を削除し、呼び出し元を CordbProcess::GetAppDomain() に統一
  • デバッガーコードパス更新: RS のモジュール/値/スタックウォーク/スレッドイベントパスを更新し、フレーム単位の AppDomain トークン処理を廃止し、キャッシュされた単一 AppDomain を使用

パフォーマンスへの影響

影響なし(API削除と実装簡潔化に伴う軽微な効率化)

関連Issue

なし

その他

この変更は内部デバッグAPIの削除であり、公開APIに対する破壊的変更ではありません。マネージドコード層とネイティブ層の両方で GetAssemblyInfo への依存を廃止し、AppDomain 管理ロジックを一本化することで、デバッガーのメンテナンス性を向上させています。


#127480 Fix interpreter context after breakpoint

概要

デバッガのブレークポイント後に実行が再開される際、デバッガが修正したスレッドコンテキスト(IP や SP など)が無視されていた問題を修正します。この変更により、インタープリタはコンテキスト変更を検出し、ResumeAfterCatchException を発生させることで、修正されたコンテキストから正しく実行を再開できるようになります。

変更内容

  • src/coreclr/vm/interpexec.cpp:ブレークポイント処理後にデバッガコンテキストの変更(IP と SP)を検出し、変更が検出された場合に ResumeAfterCatchException を発生させるロジックを追加(+8/-2)

パフォーマンスへの影響

影響なし

関連Issue

#126576(先行PR)

その他

  • インタープリタデバッガテストの失敗修正:Exceptions.InterceptTest
  • ResumeAfterCatchException は本来は ResumeException と名付けるべきだが、命名変更は今後の別PR に委ねられている

#127477 Handle GT_CCMP in GenTree::OperConsumesFlags on TARGET_AMD64

  • 作成者: @Copilot
  • 作成日時: 2026年04月27日 22:50:40(UTC)
  • マージ日時: 2026年04月28日 13:01:41(UTC)
  • ラベル: area-CodeGen-coreclr

概要

GenTree::OperConsumesFlagsメソッドがTARGET_AMD64でもGT_CCMP(条件付きコンパレア)を正しく処理するよう修正しました。従来はTARGET_ARM64のみでGT_CCMPを処理していましたが、GT_CCMPは両アーキテクチャで生成されているため、AMD64での処理を追加します。これにより、フラグ消費ノードとしての正確な認識が可能になり、命令スケジューリングやレジスタ割り当てが改善されます。

#elif defined(TARGET_AMD64)
    static_assert(AreContiguous(GT_JCC, GT_SETCC, GT_SELECTCC, GT_CCMP));
    return (GT_JCC <= gtOper) && (gtOper <= GT_CCMP);
#endif

変更内容

  • src/coreclr/jit/gentree.h — OperConsumesFlagsメソッドにターゲットAMD64用の分岐を追加。GT_JCC、GT_SETCC、GT_SELECTCC、GT_CCMPのEnum値が連続していることを利用して、4つの比較を2つの範囲チェックに最適化。static_assert(AreContiguous(...))で連続性を検証し、ファイル内の既存パターン(OperIsCompareなど)に準拠。

パフォーマンスへの影響

AMD64でのGT_CCMPノード周辺の命令スケジューリングおよび依存関係解析が正確になることで、コード生成品質が改善される可能性があります。(具体的なベンチマーク数値は未提供)

関連Issue

なし

その他

  • 変更の影響範囲:lir.cpp、liveness.cpp、lower.cpp、sideeffects.cppのコーラー側で、AMD64のGT_CCMPノードをフラグ消費ノードとして正確に認識できるようになります
  • GitHub Copilotにより作成されたPRです

#127470 Simplify ManagedWebSocket.EnsureBufferContainsAsync

概要

ManagedWebSocket.EnsureBufferContainsAsyncメソッドの不要なコード削除。PR #69272でループがStream.ReadAtLeastAsyncに置き換えられた際に放置された死んだブランチと古いコメントを削除するクリーンアップです。動作変更なし。

変更内容

  • src/libraries/System.Net.WebSockets/src/System/Net/WebSockets/ManagedWebSocket.cs
    • 内側のif (_receiveBufferCount < minimumRequiredBytes)条件を削除(外側の条件と同一であり、その間で_receiveBufferCountは変更されないため死んだコード)
    • 古いコメント// While we don't have enough data, read more.を削除(現在はReadAtLeastAsync内部でループが実行されるため不正確)
    • 結果として不要なネストを削除し、コードをデデント

パフォーマンスへの影響

影響なし

関連Issue

#69272

その他

なし


#127469 Adjust interpreter debugger IL mapping

概要

CoreCLRインタープリタのデバッグ時にスタックウォーク中に不正な行番号が報告される問題を修正します。JITの行番号マッピング方式に合わせるため、以下の改善を実施:

  1. IL→ネイティブマッピングデータをILスタックが空の箇所とnop命令のみに限定
  2. デバッグモードで、call命令直後に削除されるIL命令がある場合、nop命令を挿入してリターンアドレスのマッピングを正確化

変更内容

  • src/coreclr/interpreter/compiler.cpp: IL→ネイティブ境界の出力フィルタリングを制限し、デバッグコードモードで削除されるIR操作に対してINTOP_DEBUG_SEQ_POINTバイトコードを挿入
  • src/coreclr/vm/eetwain.cpp: インタープリタフレーム アンワインダーのコメント追加(親フレームIPがコール後の再開ポイントであることを明確化)

パフォーマンスへの影響

デバッグ情報生成の効率化により、IL→ネイティブマッピングデータの量が削減されます。パフォーマンスへの悪影響は最小限に留まることが想定されます。

関連Issue

#127469

その他

この変更はデバッガの動作とインタープリタの動作をより緊密に連携させるもので、主にデバッグビルドに影響します。ランタイムコンパイラの内部実装変更です。


#127465 Fix trimming test exclusions for iOS/tvOS simulator CoreCLR builds

概要

iOS/tvOS シミュレータ向けの CoreCLR ビルドで Aggressive Trimming テスト除外ルールが機能していなかった問題を修正。TargetOS の明示的リストチェック(ios/tvos/maccatalyst)では iossimulator/tvossimulator をカバーしていなかったため、Trimming に敏感なテストが実行されて NullReferenceException で失敗していました。修正により、既存の TargetsAppleMobile プロパティを使用することで、すべての Apple モバイルターゲットに対して一貫したテスト除外を適用します。

変更内容

  • src/libraries/tests.proj: Aggressive Trimming テスト除外条件を修正
    • 変更前:ios/tvos/maccatalyst の明示的な TargetOS リストチェック
    • 変更後:$(TargetsAppleMobile) == 'true' に統一(ios、iossimulator、tvos、tvossimulator、maccatalyst をすべてカバー)

パフォーマンスへの影響

影響なし(テスト実行時の不要なテスト失敗を回避する修正)

関連Issue

  • #127449
  • #127054(EnableAggressiveTrimming=true を iOS CoreCLR シミュレータ Release ビルドで有効化した PR)
  • #127448(同じ根本原因による DI/Hosting 失敗)

その他

  • 本 PR は AI/Copilot により生成されました
  • TargetsAppleMobile プロパティは eng/OSArch.props で定義され、同ファイル内の他の箇所(lines 303, 337, 654, 765)でも既に使用されている標準的なプロパティです
  • Aggressive Trimming により EventSource の反射メタデータ(ParameterInfo[])が削除され、PayloadNames アクセス時に NullReferenceException が発生していました

#127456 Remove unsafe code from CRC vectorized helpers

概要

CRC32/CRC64ベクトル化ヘルパーの安全でないコード(ref byte + Vector128.LoadUnsafe + Unsafe.Add)を、安全なコード(ReadOnlySpan<byte> + Vector128.Create(span) + Slice)に置き換えました。最新のJITボーンズチェック除去がこのループパターンの安全性チェックを処理するため、パフォーマンス低下は予想されていません。

変更内容

  • Crc32ParameterSet.Vectorized.cs: ref byteを使用したアンセーフなベクトル走査をReadOnlySpan<byte>スライス操作に変更
  • Crc64ParameterSet.Vectorized.cs: **Crc32と同様の変更を適用

主な技術的変更:

  • Vector128.LoadUnsafe() → Vector128.Create(span)に統一
  • ポインタ操作による手動走査 → Slice()によるスパン操作に変更
  • 内部実装の安全性向上(ランタイムの破壊的変更なし)

パフォーマンスへの影響

影響なし(ベンチマーク結果では誤差範囲内の変化)。JITのボーンズチェック除去により、安全コード使用時の追加チェックが最適化されます。ただしUpdateVectorizedCoreメソッドには1つのボーンズチェックが残存(空スパン判定をJITが最適化できない箇所)。

関連Issue

dotnet/runtime-utils#1865

その他

このPRはGitHub Copilotにより作成されました。C#のメモリ安全性向上を目指す取り組みとして、アンセーフコード使用箇所の段階的な削減を実施しています。


#127420 [mobile] Skip DnsGetHostEntry_LocalHost test on Android

概要

Android Helix環境でのDnsGetHostEntry_LocalHost_ReturnsFqdnAndLoopbackIPsテスト失敗を修正するため、当該テストをAndroidプラットフォームでスキップするようにします。Androidでは"localhost"のDNS解決が、ループバックアドレス(127.0.0.1、::1)に加えて実際のネットワークインターフェース情報も返すため、テストが失敗していました。

変更内容

  • src/libraries/System.Net.NameResolution/tests/FunctionalTests/GetHostEntryTest.cs
    • DnsGetHostEntry_LocalHost_ReturnsFqdnAndLoopbackIPsテストに対する既存の[SkipOnPlatform]属性をAndroidを含むように拡張
    • iOS/tvOS/MacCatalystに対するスキップと同様の対応

パフォーマンスへの影響

影響なし

関連Issue

#124079(iOS/tvOS/MacCatalestでの同様スキップ) #107339(Wasiでの類似スキップ)

その他

  • テストスキップの理由:Android emulatorにおいて、"localhost"のDNS解決が以下の非ループバックアドレスを含む結果を返すため
    • fe80::e05a:f2ff:fee9:6ae6%47(リンクローカルIPv6)
    • 2001:4898:502:2:e05a:f2ff:fee9:6ae6(グローバルIPv6)
    • 10.64.32.211(プライベートIPv4)
  • 変更は既存の他プラットフォーム対応と整合性を保つもの

#127418 [release/11.0-preview4] Source code updates from dotnet/dotnet

概要

.NET 11.0 Preview 4リリース向けのVMR(Virtual Monolithic Repository)からのコードフロー更新PRです。Arcade SDK、Roslyn/CodeAnalysis、NuGet、ランタイムツール、Webアセンブリランタイムなど複数の依存パッケージを最新ビルド(20260424.22)に更新しています。ビルド基盤やSBOM生成、ログ検証処理も同時に更新されています。

変更内容

主な依存パッケージ更新:

  • Microsoft.CodeAnalysis及び関連パッケージ:5.7.0-1.26211.102 → 5.7.0-1.26224.122
  • Microsoft.DotNet.Arcade.Sdk他ビルドタスク:11.0.0-beta.26211.102 → 11.0.0-beta.26224.122
  • NuGet.Frameworks/Packaging/ProjectModel/Versioning:7.6.0-rc.21202 → 7.7.0-rc.22522
  • System.Text.Json/System.Reflection.Metadata:11.0.0-preview.4.26211.102 → 11.0.0-preview.4.26224.122
  • runtime.*.Microsoft.NETCore.Runtime.JIT.Tools及びMono.LLVM関連:19.1.0-alpha.1.26173.1 → 19.1.0-alpha.1.26208.2
  • runtime.*.Microsoft.NETCore.Runtime.Wasm.Node.Transport:11.0.0-alpha.1.26173.2 → 11.0.0-alpha.1.26208.5

ビルド基盤の変更:

  • eng/common/generate-sbom-prep.ps1/.sh削除、generate-sbom.ymlの簡略化(50行削減)
  • sourcelink-validation.ps1削除(327行)
  • post-build.yml及びjob.ymlで15-69行の変更
  • global.json更新

影響範囲:

  • コンパイラ/アナライザー関連:内部実装
  • ランタイム/パフォーマンスツール:内部実装
  • ビルド/テスト基盤:内部実装

パフォーマンスへの影響

提供情報内にパフォーマンス関連の具体的な数値やベンチマーク結果がないため判定不可。SBOMやバリデーション処理の削減によるビルド時間短縮の可能性あり。

関連Issue

なし

その他

このPRはコードフロー更新(Codeflow PR)であり、複数の上流リポジトリからの変更を集約しています。arcade、aspnetcore、cecil、command-line-api、efcore、emsdk、fsharp、msbuild、nuget.client、razor、roslyn、runtime、scenario-tests、sdk、symreader、templating、vstest、windowsdesktop、winforms、wpf、xdtからの関連変更が包含されています。


#127400 P/Invoke transient IL regression fixes

概要

P/Invokeの一時的IL(transient IL)に関連する回帰問題を修正。x86スタック引数のサイジング動作を改善し、PInvokeImportWorkerがSuppressGCTransition下で協調モード呼び出し元に対応できるようにしました。

変更内容

  • dllimport.cpp: x86スタック引数サイズ計算時にMarshalInfo::SetupArgumentSizes()を通じて引数ごとのネイティブサイズを初期化。
  • method.cpp: PInvokeImportWorkerを更新し、SuppressGCTransitionシナリオでの協調モード呼び出し元対応と、既に解決済みの場合のターゲット再解決を回避。マネージ例外ディスパッチャー/アンウィンドハンドラのインストールを解決パスに制限。
  • prestub.cpp: 不要なコード削除(12行削除)。

パフォーマンスへの影響

影響なし

関連Issue

#127231 #127209

その他

本修正はランタイムP/Invokeスタブ生成の内部実装に関わるもので、公開APIへの影響はありません。x86アーキテクチャでのP/Invoke呼び出しの正確性と、GC遷移制御シナリオでの契約違反を解消しています。


#127398 Fix SIGILL crash on ARM64 platforms with SME but no SVE

  • 作成者: @AndyAyersMS
  • 作成日時: 2026年04月24日 19:31:25(UTC)
  • マージ日時: 2026年04月28日 17:16:05(UTC)
  • ラベル: area-PAL-coreclr

概要

ARM64プラットフォームにおいて、SME(Streaming SVE)は搭載されているがSVEは搭載されていない環境(例:macOS Virtualization.FrameworkのApple M4)で発生していたSIGILL(不正命令例外)クラッシュを修正します。

シグナルコンテキスト処理でCONTEXT_GetSveLengthFromOS()がSVE rdvl命令を実行していましたが、SME専用プラットフォームではこの命令がサポートされていないため例外が発生していました。本修正では、カーネルが提供するシグナルフレーム内のsve->vl値を直接読み込むことで、rdvl実行を回避します。

変更内容

  • src/coreclr/pal/src/thread/context.cpp: SVEコンテキスト処理時にCONTEXT_GetSveLengthFromOS()の呼び出しを削除し、シグナルフレームから直接sve->vlを読み込むように変更(+13行、-4行)
  • src/coreclr/pal/src/include/pal/context.h: CONTEXT_GetSveLengthFromOS()関数宣言を削除(-15行)
  • src/coreclr/pal/src/arch/arm64/context2.S: 対応する実装を削除(-8行)

SME単独プラットフォームではsve->vlが0となるため、SVEレジスタの保存/復元が正しくスキップされます。実SVEハードウェアではsve->vlはrdvlの戻り値と一致します。

パフォーマンスへの影響

影響なし(むしろシグナルハンドラ内での不正命令例外による再帰呼び出しが排除されるため、クラッシュシナリオは解消)

関連Issue

#122608

その他

  • 互換性: 内部実装の変更であり、公開APIへの影響なし
  • プラットフォーム固有: ARM64 Linux環境、特にSME対応だがSVE非対応の仮想化環境での修正
  • 問題の詳細: SIGUSR1(アクティベーションインジェクション)などのシグナルが発火する際、SVE_MAGICレコードを含むシグナルフレームを認識してrdvlを実行し、SME専用プラットフォームでSIGILLが発生、さらにSIGILLハンドラがrdvlを再度実行する無限ループが生じていました

#127302 Remove unnecessary _featureCheckValues cache from ILLink

概要

ILLink の MemberActionStore から不要となった _featureCheckValues キャッシュを削除するクリーンアップ。CodeRewriterStep が SweepStep より前に実行されるようになった (#127090) ため、機能属性値を事前にキャッシュしておく必要がなくなりました。属性は CodeRewriterStep 処理時にも存在するようになります。

変更内容

  • src/tools/illink/src/linker/Linker.Steps/MarkStep.cs: _featureCheckValues の事前計算処理を削除(-12行)
  • src/tools/illink/src/linker/Linker/MemberActionStore.cs: _featureCheckValues キャッシュフィールドおよび関連ロジックを削除(-13行)

パフォーマンスへの影響

改善の可能性あり。キャッシュ管理と事前計算処理の削除により、メモリ使用量の低減と処理フローの簡略化が期待できます。

関連Issue

#127090(CodeRewriterStep と SweepStep の実行順序変更) #104995(キャッシュ導入時のPR)

その他

このクリーンアップは #127090 でのレビューコメントに基づいています。破壊的変更ではなく、内部実装の最適化です。


#127290 Skip decommit for large pages and add fake large pages test mode

概要

大ページ(large pages)を使用する場合の仮想メモリ割り当て解除の処理を改善しました。大ページは部分的な割り当て解除ができないため、割り当て解除をスキップして、代わりにメモリをOSに返却し、メモリ統計の正確性を向上させます。また、大ページコードパスのテストを容易にするため、GCLargePages=2モードを追加し、小ページを使用して大ページの動作を模擬できるようにしました。

変更内容

  • gc/regions_segments.cpp: 大ページ使用時にdistribute_free_regionsとdecommit_heap_segmentでの割り当て解除をスキップするロジックを追加(32行追加)
  • gc/memory.cpp: decommit_regionで大ページの場合は直接reduce_committed_bytesを呼び出し、virtual_decommitで大ページ時のアサートを追加(18行追加、10行削除)
  • gc/init.cpp: GCLargePages=2モードの処理を実装し、use_large_pages_p=true設定時に小ページでシミュレート(16行追加)
  • gc/gcconfig.h, gc/gcpriv.h, gc/interface.cpp: 関連する設定値・構造体・インターフェースの微調整
  • テスト追加: Collect_Aggressive_LargePages.csで大ページ環境でのヒープ破損を検証するテストを追加

パフォーマンスへの影響

メモリ割り当て解除時の不要なメモリクリア処理を削減し、メモリがOSに正確に返却されるため、メモリ効率が向上します。ただし、具体的なベンチマーク結果は提供されていません。

関連Issue

#126903、#126929

その他

GCLargePages=2モードの追加により、OS上の大ページ設定権限なしでCI環境で大ページ関連のコードパスをテストできるようになりました。


#127254 Deduplicate warnings for attribute on property dataflow

概要

依存関係グラフにPropertyMetadataNodeとEventMetadataNodeを追加し、プロパティのアクセッサ(getter、setter)およびイベント(adder、remover、raiser)を複数回分析することで生じていた重複警告を削除します。

変更内容

  • 新規ファイル:PropertyMetadataNode.cs(50行)、EventMetadataNode.cs(50行)、MethodMetadataNode.cs(35行)を追加
  • NodeFactory.cs:新しいメタデータノードファクトリメソッドを追加(30行追加)
  • CustomAttributeBasedDependencyAlgorithm.cs:重複警告を排除するロジックを簡潔化(10行追加、31行削除)
  • PropertyPseudoDesc.cs、EventPseudoDesc.cs:各2行追加
  • テスト調整:重複警告の期待値を削除(AttributePropertyDataflow.cs、RequiresOnAttribute.csで計9行削除)

パフォーマンスへの影響

影響なし

関連Issue

#120004

その他

この変更はAOT(Ahead-of-Time)コンパイラの依存関係分析における警告重複の問題に対応しています。プロパティとイベント属性のデータフロー分析における内部実装の改善で、公開APIへの影響はありません。


#127225 [android] Enable CoreCLR runtime pack production for android-arm

概要

Android ARM32(armeabi-v7a)向けの CoreCLR ランタイムパック本番サポートを有効にするPRです。最小APIレベルが24に引き上げられたため、ARM アーキテクチャの制限を解除し、CI パイプラインで android_arm プラットフォームのサポートを追加します。

変更内容

  • eng/Subsets.props — Android でブロックされているアーキテクチャリストから arm を削除(x86 はブロック継続)。fseeko/ftello の非可用性による制限は、最小APIレベル24の採用により解消。
  • eng/pipelines/runtime.yml — CoreCLR Android CI プラットフォームリストに android_arm を追加。
  • eng/pipelines/extra-platforms/runtime-extra-platforms-android.yml — extra-platforms CoreCLR ジョブに android_arm を追加。
  • eng/pipelines/coreclr/templates/helix-queues-setup.yml — android_arm64 と同じ Windows.11.Amd64.Android キューを使用する android_arm Helix キューマッピングを追加。

パフォーマンスへの影響

影響なし

関連Issue

#111665、#126838への依存あり。本PR は #126838 のマージ後に統合予定。

その他

  • プラットフォーム行列定義、ネイティブビルドツール、パッケージング RID、ライブラリ Helix キューは既にサポート済み。
  • CoreCLR CMake/JIT には ARM32+Android 固有のブロック要因なし。
  • GitHub Copilot の支援により作成。

#127213 Remove unwind calls from patchpoint OSR transition

概要

On-Stack Replacement (OSR)トランジション時のpatchpointから不要なunwind呼び出しを削除する変更。前のPR(#123645)のフォローアップであり、JITコンパイラのpatchpoint処理を最適化して、OSR遷移時の呼び出しオーバーヘッドを削減します。

変更内容

  • JITコンパイラ: 新しいGT_PATCHPOINT_HOLDERノードタイプを導入(gtlist.h、gentree.cpp)し、patchpointから直接的なunwind呼び出しを削除
  • Codegen: 複数のアーキテクチャ(ARM、ARM64、LoongArch64、RISC-V64、x86/x64)のコード生成時にpatchpoint処理を更新
  • レジスタ割り当て: LSRA(Linear Scan Register Allocation)フェーズで新しいノードタイプのライフタイム情報を処理
  • Runtime: JITヘルパー関数を簡略化し、unwind情報の管理を改善(jithelpers.cpp)
  • その他: lower.cpp、patchpoint.cpp、liveness.cpp、fgstmt.cppなどの箇所で関連する処理を調整

パフォーマンスへの影響

改善の期待:OSR遷移時の不要な関数呼び出しを削減することで、パフォーマンスオーバーヘッドが軽減される可能性があります。ただし具体的なベンチマーク数値は提供されていません。

関連Issue

#123645(前のPRのフォローアップ)

その他

  • 複数のアーキテクチャをサポートする設計で、すべてのプラットフォーム(ARM、ARM64、LoongArch64、RISC-V64、x86/x64)で一貫した変更を実施
  • JIT内部実装の変更であり、公開APIへの影響なし
  • 多くのレビュワーによる詳細なレビューを受けており、実装が慎重に検討されていることを示唆

#127195 [cDAC] Adding IsLeafFrame and GetContext DacDbi APIs

  • 作成者: @rcj1
  • 作成日時: 2026年04月21日 00:40:44(UTC)
  • マージ日時: 2026年04月28日 21:27:01(UTC)
  • ラベル: area-Diagnostics-cdac

概要

cDAC(Common Data Access Component)と従来のDacDbi APIに新しいスタックウォーク関連API(IsLeafFrameとGetContext)を追加するPRです。スレッドコンテキストの取得とリーフフレームの判定をサポートし、GetThreadContextを実装しないデータターゲットへのネイティブDAC フォールバック動作を削除しています。

変更内容

  • 契約API追加: IThread.GetContext(...)とIStackWalk.AreContextsEqual(...)を契約層に追加
  • マネージドcDAC実装: DacDbiImpl.GetContextとDacDbiImpl.IsLeafFrameを実装、ダンプテスト追加
  • ネイティブDAC更新: GetContext/IsLeafFrameがGetThreadContextに常に依存し、E_NOTIMPLフォールバックを削除
  • コンテキストフラグ整理: 全アーキテクチャ(x64/ARM/ARM64/x86/LoongArch64/RISC-V)にわたり、FullContextFlagsとAllContextFlagsに分割
  • テスト拡充: StackWalkとDacDbi用のダンプテスト新規追加(DacDbiStackWalkDumpTests.cs、StackWalkDumpTests.cs)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • 内部実装の変更であり、公開APIへの直接的な影響はありません
  • ネイティブDAC側のコード削減により、コードの簡潔性が向上(dacdbiimpl.cppで48行削除)
  • ThreadContextSource列挙型が新たに導入され、スレッドコンテキストソースの区別が可能に
  • ドキュメント(StackWalk.md、Thread.md)が更新されています

#127186 R2r skip return dropping thunks

  • 作成者: @jtschuster
  • 作成日時: 2026年04月20日 22:27:49(UTC)
  • マージ日時: 2026年04月28日 15:40:25(UTC)
  • ラベル: area-VM-coreclr

概要

R2R(Ready2Run)コンパイル時に、リターン値の型変換(covariant returns)に関連するサンク(thunk)の生成をスキップしないよう修正しました。これにより、CI内のcovariant return テストが正常に動作するようになります。

変更内容

  • src/coreclr/vm/readytoruninfo.cpp: R2Rコンパイラのサンク生成ロジックに8行のコード追加。リターン値のドロップ処理でサンクの再コンパイルを強制する条件を追加
  • src/tests/async/covariant-return/covariant-returns.csproj: テスト設定から4行削除。テストの無効化設定を解除

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

covariant return型は.NETにおいて派生クラスが基底クラスのメソッドをオーバーライドする際に、より派生した型を戻り値として指定できる機能です。このPRはR2R環境でこの機能の正確な動作を保証するための修正です。


#127165 Fix HttpHeaders.Remove to handle well-known header names

  • 作成者: @Copilot
  • 作成日時: 2026年04月20日 15:51:20(UTC)
  • マージ日時: 2026年04月28日 18:02:44(UTC)
  • ラベル: area-System.Net.Http

概要

HttpHeaders.Remove()とHttpHeaders.Contains()が、そのコレクションに属さないwell-known headerまたは無効なheader名に対して例外をスローする代わりにfalseを返すように動作を変更します。これにより、呼び出し元が事前にどのコレクションを使用すべきかを知らずに、別のheader collectionにフォールバックできるようになります。

変更内容

  • HttpHeaders.cs: Contains(string)とRemove(string)メソッドをTryGetHeaderDescriptorを使用するように修正し、無効名またはdisallowed well-known headerに対して例外をスローせずfalseを返すように変更
  • HttpHeadersTest.cs: null/empty/無効名に対して例外をexpectするテストを、falseの返却をvalidateするテストに更新
  • HttpRequestHeadersTest.cs: request headersで禁止されているcontent headersに対してContains/Removeがfalseを返すことをカバーするテストを追加
  • HttpResponseHeadersTest.cs: response headersで禁止されているcontent headersに対してContains/Removeがfalseを返すことをカバーするテストを追加
  • HttpContentHeadersTest.cs: content headersで禁止されているrequest headersに対してContains/Removeがfalseを返すことをカバーするテストを追加

パフォーマンスへの影響

影響なし

関連Issue

#61968

その他

この変更により、YARPなどの外部プロジェクトがheader typeに応じた硬決めされたリストを保持する必要がなくなり、コードの保守性が向上します。これは公開API(Contains/Removeの動作)の変更ですが、例外をスローしていた既存コードが呼び出し側で例外をキャッチしている場合、その部分の動作が変わる可能性があります(ただしfalseを返すようになる方が一般的には有用)。


#127114 Add cDAC JIT notification contract with lazy table allocation

概要

cDAC JIT通知テーブルの新しい契約実装を追加し、レガシーDAC フォールバックを削除しました。新しい ICodeNotifications 契約(c1)は、Windows上での遅延割り当て(ICLRDataTarget2::AllocVirtual)をサポートし、約24KBのメモリコスト削減を実現します。テーブル容量は1000スロット(コンパイル時定数)で、スロット0に長さ情報を格納します。

変更内容

ランタイム側(内部実装)

  • 新データ型 JITNotification + グローバル JITNotificationTable/JITNotificationTableSize を datadescriptor.inc に追加
  • Unix向けのテーブル初期化を更新

cDAC Reader側(公開API・内部実装)

  • 新 ICodeNotifications 契約インターフェースと CodeNotifications_1 実装を追加
  • Target に AllocateMemory(uint size) 仮想メソッドと WriteNUInt 抽象メソッドを追加
  • ContractDescriptorTarget に AllocVirtualDelegate を追加し、メモリ割り当てをサポート
  • cdac_reader.h/cdac.cpp を拡張して alloc_virtual コールバックに対応

レガシーCOM ラッパー(内部実装)

  • IXCLRDataMethodDefinition::GetCodeNotification/SetCodeNotification を ClrDataMethodDefinition に実装
  • IXCLRDataProcess::SetCodeNotifications/GetCodeNotifications/SetAllCodeNotifications を SOSDacImpl に実装
  • LegacyFallbackHelper から SetCodeNotification 関連エントリを削除

テスト・ドキュメント

  • 20+ の通知テスト(CodeNotificationsTests クラス)を追加
  • TestPlaceholderTarget に AllocateMemoryDelegate フック追加
  • 新設計ドキュメント CodeNotifications.md を追加

パフォーマンスへの影響

改善点

  • メモリ削減:JIT通知を使用しないアプリケーションで約24KBのメモリ削減(テーブル遅延割り当て)
  • スタートアップ削減:テーブル事前割り当て不要により、起動時間削減の可能性

設計上の特性

  • Windows上では g_pNotificationTable は NULL から開始し、最初の非トリビアルな SetCodeNotification 呼び出しで遅延割り当て
  • テーブル満杯時は E_FAIL でCOMException をスロー

関連Issue

#126760

その他

互換性の注意

  • レガシーDAC からの意図的な動作変更:
    • SetAllCodeNotifications は末尾の空きスロットのみトリミング(ランタイムの実装と同期するため)
    • GetCodeNotification で NULL テーブル時は E_OUTOFMEMORY ではなく None を返す
    • 一括設定でオーバーフローした場合、事前チェックなく書き込み可能な分だけ設定して失敗

実装上の特記事項

  • テーブル容量はコンパイル時定数 1000、グローバル `JITNotification

#127088 Update Microsoft.Diagnostics.Runtime to 4.0.722401

  • 作成者: @max-charlamb
  • 作成日時: 2026年04月17日 17:51:30(UTC)
  • マージ日時: 2026年04月28日 00:46:23(UTC)
  • ラベル: area-codeflow

概要

Microsoft.Diagnostics.Runtime (ClrMD) を 4.0.722401 (最初の安定版リリース) に更新しました。この更新により、クロスビットネス環境(32ビットホストで64ビットダンプを読み込む場合など)でのアドレス拡張ハンドリング問題が修正されます。これにより、以前回避されていたクロスビットネスダンプテストを実行できるようになります。

変更内容

  • eng/Versions.props: MicrosoftDiagnosticsRuntimeVersion を 4.0.0-beta.26210.1 から 4.0.722401 に更新
  • src/native/managed/cdac/tests/DumpTests/DumpTestBase.cs: #127118で追加されたクロスビットネスダンプテストのスキップ処理(12行)を削除

ClrMD 4.0.722401の修正内容:

  • ClrDataAddress 型による明示的な符号拡張処理(FromTargetAddress / ToAddress)
  • ABI安全なCOM vtableマーシャリング
  • 符号拡張された32ビットアドレスでの OverflowException 回避
  • dotnet/runtimeの sospriv.idl に対する完全な検証

パフォーマンスへの影響

影響なし

関連Issue

#127118

その他

クロスプラットフォームcDACダンプテストがスキップ削除後も正常に合格することを確認済み。この更新は診断・ダンプツール機能に関わる変更で、ランタイムライブラリの公開APIではなく内部診断機能への影響です。


#126701 Haiku: Fix native component build

概要

Haiku プラットフォームでの .NET ランタイムネイティブコンポーネントのビルド対応。pthread robust-mutex API のフィーチャー検出と Haiku リンカー動作の調整を CMake で実装し、ランタイムが Haiku 環境で正常にビルド・動作するようにします。

変更内容

  • eng/native/configurecompiler.cmake: Haiku のリンカーグループ再スキャン設定とリンカーフラグの調整を追加
  • src/native/libs/System.Native/pal_crossprocessmutex.c: pthread_mutex_consistent と pthread_mutexattr_setrobust の使用をフィーチャーマクロで条件付きコンパイル化
  • src/native/libs/configure.cmake: robust-mutex 関連 pthread API のコンフィグ時検出処理を追加
  • src/native/libs/Common/pal_config.h.in: 新しい HAVE_PTHREAD_MUTEX_* フィーチャーマクロをネイティブビルドに公開
  • System.Private.CoreLib: Haiku プラットフォーム対応の更新(OperatingSystem.cs、NamedMutex.Unix.cs)

パフォーマンスへの影響

影響なし

関連Issue

#55803

その他

  • この変更は内部実装(PAL/ネイティブレイヤー)に限定されており、公開APIへの影響なし
  • Haiku は POSIX ベースだが robust-mutex の実装が異なるため、フィーチャー検出による条件付きコンパイルで対応

#126529 JIT: Transform 'CONST - x' to 'xor x, CONST' when possible

概要

JIT最適化として、CONST - x(内部的にADD(NEG(x), CONST)で表現)を、xの範囲情報に基づいてXOR(x, CONST)に変換する処理を追加しました。また、アサーション伝播における値番号ベースの畳み込み最適化にGT_NOTを対応させています。

例:255 - x(byte型)はx ^ 255に、-1 - xは~xに変換され、より短い機械語コードが生成されます。

変更内容

  • morph.cpp: fgOptimizeAddition関数に、IntegralRange::ForNodeによる範囲チェック付きでADD(NEG(x), CONST) => XOR(x, CONST)変換を追加(+43行)
  • assertionprop.cpp: optVNBasedFoldCurStmt関数でGT_NOTノードをVN畳み込み対象に追加(+1行)

パフォーマンスへの影響

改善あり:

  • 255 - x(byte):命令数10バイト→8バイト削減、PerfScore 0.75→0.50に改善
  • -1 - x:命令数6バイト→4バイト削減、PerfScore 0.75→0.50に改善

変換により、NEG+ADD/DECという複数命令がXOR/NOT単一命令に置き換わるため、コードサイズと実行速度の両面で改善します。

関連Issue

#126442、#126553

その他

  • 変換はIntegralRangeに基づく範囲チェックでガード(validity check)されており、安全性が確保されています
  • この変更は同PR#126553でのIntegralRange::ForNodeとRangeOpsの改善と関連しています
  • JIT コンパイラの内部最適化(morph フェーズ)に対する変更で、公開APIへの影響はありません

#126385 [cDAC] Adding symbols and using heap dumps

  • 作成者: @rcj1
  • 作成日時: 2026年03月31日 23:44:28(UTC)
  • マージ日時: 2026年04月28日 04:17:44(UTC)
  • ラベル: area-Diagnostics-coreclr

概要

cDAC(Compact Diagnostic Access Component)のダンプテスト基盤を改善し、フルダンプの代わりにヒープダンプを使用するように切り替えます。ClrMDにシンボルパスを提供することで、System.Private.CoreLibとデバッギープロジェクトのメタデータを解決できるようにし、ダンプ分析の信頼性を向上させます。

変更内容

  • DumpTestBase.cs: ローカルアーティファクトおよびHelix環境のsymbols/フォルダからシンボル/モジュールディレクトリを検出するロジックを追加(+25行)
  • ClrMdDumpHost.cs: ダンプを開く際に追加のシンボルパスを受け入れ、ClrMDシンボル検索パスを設定するよう拡張(+81行)
  • 複数のテストクラス: DumpType => "full"オーバーライドを削除し、デフォルトのヒープダンプ動作を使用するように統一(AsyncContinuationDumpTests、CCWDumpTests、ComWrappersDumpTests、LoaderDumpTests等)
  • 複数のデバッギープロジェクト: .csprojファイルでダンプ生成をヒープダンプに切り替え
  • cdac-dump-helix.proj: CoreLib及びデバッギーDLLをsymbols/フォルダにコピーし、Helix環境でのモジュール/シンボル解決を可能に

パフォーマンスへの影響

ヒープダンプはフルダンプより小さいため、ダンプファイルのサイズとI/O時間が削減されます。シンボルパスの検出は初期化時に1回実行されるため、テスト実行時のパフォーマンス影響は最小限です。

関連Issue

なし

その他

  • net10.0ではヒープダンプが生成されないため、当該テストはnet10.0で実行されなくなる可能性があります
  • README.mdのドキュメントが「メタデータ重い場合はFull」という古い説明のままであり、更新が必要です

#126152 [release/9.0] Update dependencies from dotnet/emsdk

概要

dotnet/emsdkリポジトリの依存関係を更新するための自動PR。Emscripten Workloadおよび関連するランタイムコンポーネント(JIT Tools、Mono LLVM Sdk/Tools)を9.0.15から9.0.16にアップグレード。

変更内容

  • NuGet.config: Emscripten NuGetフィードの参照を更新(1行変更)
  • eng/Version.Details.xml: 以下のパッケージバージョンを更新
    • Microsoft.SourceBuild.Intermediate.emsdk: 9.0.15-servicing.26175.1 → 9.0.16-servicing.26221.3
    • Microsoft.NET.Workload.Emscripten.Current.Manifest-9.0.100.Transport: 同上
    • Microsoft.NET.Workload.Emscripten.Current.Manifest-9.0.100: 9.0.15 → 9.0.16
    • 複数プラットフォーム向けランタイムコンポーネント(JIT Tools、Mono LLVM Sdk/Tools): 19.1.0-alpha.1.26167.4 → 19.1.0-alpha.1.26202.3
  • eng/Versions.props: 上記と同期するバージョン定義の更新(24行変更)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • 本PRはMaestroによる自動更新(dotnet-maestro[bot]が作成)
  • release/9.0ブランチを対象とした定期的な依存関係更新
  • Linux(arm64/x64/musl)、Windows(arm64/x64)、macOS(arm64/x64)を含む複数プラットフォーム対応

#126041 Add size/perf optimized FinishSuspension helpers for runtime async

概要

非同期メソッド実行の一時停止(suspension)時のコンテキスト処理を最適化するため、JIT生成コードからの単一呼び出しで完了する2つのランタイムヘルパー FinishSuspensionNoContinuationContext と FinishSuspensionWithContinuationContext を追加します。従来は複数の呼び出しでコンテキスト処理を実装していたため、コード生成サイズ削減とパフォーマンス向上を実現します。

// 新しいヘルパーメソッド(内部実装)
internal static void FinishSuspensionNoContinuationContext(
    ref Continuation continuation,
    bool hasExecutionContext,
    ExecutionContext currentContext,
    SynchronizationContext syncContext);

internal static void FinishSuspensionWithContinuationContext(
    ref Continuation continuation,
    bool hasExecutionContext,
    ExecutionContext currentContext,
    SynchronizationContext syncContext);

変更内容

  • AsyncHelpers.CoreCLR.cs: 新しい内部ヘルパーメソッド2つを実装。ExecutionContext保存と復元のコンテキスト処理を統一
  • corinfo.h: CORINFO_ASYNC_INFO構造体に2つの新しいヘルパーメソッドハンドルを追加
  • async.cpp/async.h: JIT生成コードの一時停止処理を改善。従来の複数呼び出しをヘルパーメソッド1呼び出しに統合
  • jitinterface.cpp/corelib.h: マネージドJITインターフェース経由でヘルパーメソッドハンドルをJITに供給
  • ExecutionContext.cs: フロー抑制状態を照会する内部インスタンスプロパティを追加
  • CorInfoImpl.cs/CorInfoTypes.cs: マネージドJITインターフェース実装を更新
  • ReadyToRunCodegenCompilation.cs/ILImporter.Scanner.cs: R2R/NativeAOT環境でヘルパーメソッドを依存関係として記録

パフォーマンスへの影響

性能改善: 非同期メソッドの一時停止処理が約8%高速化

  • マイクロベンチマーク結果: 286ms → 265ms(5回の実行平均で約7%改善)
  • 生成されたアセンブリコード: 766バイト → 751バイト(15バイト削減)
  • メモリ効率: Thread TLSへのアクセス回数削減により、キャッシュ効率向上

NativeAOT環境でのバイナリサイズ削減: 最大46KB削減(System.Net.Http.Functional.Tests.exe)

  • System.Net.Http.Functional.Tests.exe: -46.6KB (-0.149%)
  • 多くのテスト実行ファイルで0.03~0.05%の削減

関連Issue

なし

その他

  • 互換性への影響: 新しいヘルパーメソッドは内部実装のため、公開APIへの影響なし
  • JIT仕様変更: CORINFO_ASYNC_INFOのバイナリ互換性が変更されるため、JITバージョンGUID(jiteeversionguid.h)を更新
  • マルチプラットフォーム対応: 変更はRuntime全体で統一的に適用(coreclr、JIT、マネージド実

#125955 [release/8.0] Update dependencies from dotnet/emsdk

概要

dotnet/emsdkリポジトリからの依存関係を更新するautomatedな依存性更新PRです。Emscripten関連のNuGetパッケージを8.0.26から8.0.27へアップグレードします。

変更内容

  • NuGet.config: emsdk関連のNuGetソース設定を更新(+1/-1)
  • eng/Version.Details.xml: 依存関係のバージョン情報を更新
    • Microsoft.SourceBuild.Intermediate.emsdk: 8.0.26-servicing.26167.4 → 8.0.27-servicing.26224.1
    • Microsoft.NET.Workload.Emscripten.Current.Manifest-8.0.100: 8.0.26 → 8.0.27
  • eng/Versions.props: ビルドプロパティのバージョン参照を更新(+1/-1)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • このPRはdotnet-maestro[bot]による自動依存性更新です
  • release/8.0ブランチへの更新で、2026年4月24日時点のemsdkビルド(20260424.1)を取り込みます
  • WebAssembly開発向けのEmscriptenワークロードに関連する変更です

目次