注意点
このページは、dotnet/runtimeリポジトリにマージされたPull Requestを自動的に収集し、その内容をAIが要約した内容を表示しています。そのため、必ずしも正確な要約ではない場合があります。
目次
- #134309 Disable badinlinee on unsupported configurations
- #134290 [wasm] Bump chrome for testing - linux: 153.0.8010.52, windows: 154.0.8037.17, mac: 154.0.8037.17
- #134288 Re-enable badcodeinsidefinally for Wasm R2R
- #134229 [release/11.0] Fix NLS ordinal casing of supplementary characters to agree with OrdinalIgnoreCase
- #134225 [release/11.0] Add
StackTraceHiddento a few more infrastructure runtime async mehods - #134215 [release/11.0] Fix scalar-typed SIMD operands in Dot and mask inversion lowering
- #134214 [release/11.0] Fix not-greater-than predicate when lowering SIMD selects
- #134213 [release/11.0] Preserve mask element granularity in SIMD transformations
- #134165 [release/11.0] Add Composite ML-KEM Windows implementation
- #134164 [release/11.0] Add managed Composite ML-KEM implementation
- #134092 Add ReadyToRun JIT helper roots metadata
- #134071 Preserve portable entrypoints during recursive interpreter compilation
- #133046 KEM support for EnvelopedCms
- #131089 Share common delegate code, cleanup NativeAOT delegate impl
#134309 Disable badinlinee on unsupported configurations
- 作成者: @AndyAyersMS
- 作成日時: 2026年09月20日 15:20:54(UTC)
- マージ日時: 2026年09月20日 20:00:20(UTC)
- ラベル: area-CodeGen-Interpreter-coreclr
概要
badinlinee リグレッションテストが、ティアード最適化JIT動作に依存していたため、ブラウザ CoreCLR(インタープリタ実行、ティアード コンパイル無効)で決定論的なメモリ割り当て検証に失敗していた問題を修正。テストをブラウザ CoreCLR でのみ除外し、インタープリタ非互換としてマークすることで、最適化JIT構成でのカバレッジを保持しながら不要な失敗を回避。
変更内容
- src/tests/JIT/opt/GuardedDevirtualization/badinlinee.csproj
- ブラウザ CoreCLR 構成の除外設定を追加
- インタープリタ実行との非互換性をメタデータで標記
- 既存の
ObjectStackAllocationTestsと同様のパターンに従う
パフォーマンスへの影響
影響なし
関連Issue
その他
- Windows x64 Checked 環境でのテスト検証完了
- ブラウザ CoreCLR プロジェクト評価時に
_WillCLRTestProjectBuild=falseが設定される - Windows CoreCLR プロジェクト評価時は
_WillCLRTestProjectBuild=trueを維持 - インタープリタスキップパスが正常に終了することを確認
#134290 [wasm] Bump chrome for testing - linux: 153.0.8010.52, windows: 154.0.8037.17, mac: 154.0.8037.17
- 作成者: @github-actions[bot]
- 作成日時: 2026年09月20日 00:11:54(UTC)
- マージ日時: 2026年09月20日 04:04:26(UTC)
- ラベル: arch-wasm area-Infrastructure-mono
概要
WebAssembly テスト環境で使用する Chrome のバージョンを更新します。
- Linux: 153.0.8010.52
- Windows: 154.0.8037.17
- macOS: 154.0.8037.17
変更内容
eng/testing/BrowserVersions.props: Chrome のバージョン定義を更新(1行変更)
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
自動化されたバージョン更新によるもの(github-actions[bot]が作成者)
#134288 Re-enable badcodeinsidefinally for Wasm R2R
- 作成者: @AndyAyersMS
- 作成日時: 2026年09月19日 21:27:42(UTC)
- マージ日時: 2026年09月20日 00:08:20(UTC)
- ラベル: area-CodeGen-coreclr
概要
browser-Wasm ReadyToRun対応のbadcodeinsidefinallyテストの隔離(quarantine)を解除し、テストを再度有効化します。ActiveIssue属性でのみ使用されていたアセンブリ参照を削除し、テスト実行時のクリーンアップを行います。
変更内容
- badcodeinsidefinally.il: Wasm隔離メタデータを削除
- badcodeinsidefinally_d.ilproj: 未使用のTestLibraryプロジェクト参照を削除
- badcodeinsidefinally_r.ilproj: 未使用のTestLibraryプロジェクト参照を削除
パフォーマンスへの影響
影響なし
関連Issue
その他
- テスト検証: browser-Wasm Checked runtimeおよび対応するCore_Root layoutでビルド実施
badcodeinsidefinally_dおよびbadcodeinsidefinally_rともテスト成功(pass出力、終了コード100)を確認
#134229 [release/11.0] Fix NLS ordinal casing of supplementary characters to agree with OrdinalIgnoreCase
- 作成者: @github-actions[bot]
- 作成日時: 2026年09月18日 22:40:36(UTC)
- マージ日時: 2026年09月20日 04:12:08(UTC)
- ラベル: Servicing-approved area-System.Globalization
概要
.NET 11で導入されたOrdinal casing機能において、WindowsのNLSグローバライゼーション モードで補足平面文字(Deseret、Adlam、Vithkuqiなどのスクリプト)のケース変換が不正な結果を返す問題を修正します。OrdinalIgnoreCaseで異なると判定されるはずの2つの文字列が、ordinal casingで同じ値に変換される可能性があり、ドキュメント化されたcanonicalizeコントラクトに違反していました。修正により、NLS modeでのケース変換をCompareStringOrdinalの既存動作に合わせます。
変更内容
- Ordinal.cs: supplementary characters対応のためのケース変換ロジックを追加(+109行)
- Rune.cs: Supplementary character処理の改善(+8行)
- OrdinalCasingTests.cs: 補足平面文字に関するリグレッションテストと追加テストを実装(+65行)
パフォーマンスへの影響
影響なし
関連Issue
#133950
#134149(オリジナルPR)
dotnet/aspnetcore #68912(報告元)
その他
- .NET 11新機能に関連するバグ修正のため、リスク度は低い
- 変更はNLS modeに限定され、デフォルトのICU modeには影響しない
- すべてのリグレッションテストがパスしており、問題領域に対する追加テストも実装済み
- 内部で発見された問題でASP.NETチームが報告
#134225 [release/11.0] Add StackTraceHidden to a few more infrastructure runtime async mehods
- 作成者: @github-actions[bot]
- 作成日時: 2026年09月18日 21:20:17(UTC)
- マージ日時: 2026年09月20日 22:20:07(UTC)
- ラベル: Servicing-approved area-System.Reflection
概要
内部ランタイム非同期インフラストラクチャメソッドにおいて、スタックトレース出力から隠蔽する際に使用される StackTraceHidden 属性を追加しました。これにより、デバッグやスタックトレース表示時に不要な内部メソッドが表示されなくなります。
変更内容
- AsyncHelpers.ValueTaskSourceContinuation.cs: 継続メソッドに
StackTraceHidden属性を追加(3行追加) - RuntimeAsyncTaskContinuation.cs: 継続メソッドに
StackTraceHidden属性を追加(3行追加) - StackTraceTests.cs: スタックトレーステストを更新し、より多くのケースに対応(7行追加、5行削除)
パフォーマンスへの影響
影響なし。属性の追加のみで、実行時の処理に変更はありません。
関連Issue
#134175(本PRはこのバックポート版)
その他
- 内部的に発見された問題への対応
- リスク評価: 低(メソッドに属性を追加するのみ)
- release/11.0ブランチへのバックポート
#134215 [release/11.0] Fix scalar-typed SIMD operands in Dot and mask inversion lowering
- 作成者: @github-actions[bot]
- 作成日時: 2026年09月18日 19:17:26(UTC)
- マージ日時: 2026年09月20日 15:32:36(UTC)
- ラベル: Servicing-approved area-CodeGen-coreclr
概要
.NET 11でSIMD演算(Vector128.Dot/Vector256.Dot)にCreateScalarUnsafeオペランドを使用する場合にJIT コンパイルが失敗する回帰バグを修正します。スカラー型SIMDオペランドの表現不変式を修正し、マスク反転処理も同時に対応しています。
変更内容
- gentree.cpp: スカラー型SIMD操作の表現形式を修正(4行の修正)
- lowerxarch.cpp: Dot演算とマスク反転処理のスカラー型SIMD表現を正確に処理(5行追加、1行削除)
- テストケース追加:
Runtime_133551.cs: 128/256ビットのDot演算に関する回帰テスト(float/double、オペランド順序、スカラー乗除処理を網羅)Runtime_133554.cs: 512ビット条件選択関連のテストケース
パフォーマンスへの影響
影響なし。本変更はコード生成の正確性修正であり、スカラー幅のロードとマスク付きゼロイング処理など意図した命令生成を確保します。
関連Issue
その他
- 回帰の性質: .NET 11開発サイクル中に導入された回帰。.NET 8、9、10では正常に動作
- リスク評価: 低い。変更は小規模で確立されたスカラー/SIMD表現不変式を修正。ビルダー共有セマンティクスに変更なし
- テスト範囲: ISAサポート環境、AVX-512/AVX無効、ハードウェアインtrinsics無効、レジスタストレス環境で検証済み。オペランド順序、ベクトル幅、メモリ/レジスタ形式、NaN処理などをカバー
#134214 [release/11.0] Fix not-greater-than predicate when lowering SIMD selects
- 作成者: @github-actions[bot]
- 作成日時: 2026年09月18日 19:17:20(UTC)
- マージ日時: 2026年09月20日 15:32:47(UTC)
- ラベル: Servicing-approved area-CodeGen-coreclr
概要
AVX-512でSIMD選択操作を最適化する際に、CompareNotGreaterThan述語が誤ってCompareGreaterThanにマッピングされていた問題を修正します。この不具合により、比較条件(未満、等于、大于、順序なし)に対して逆の値が選択されるという深刻な動作エラーが発生していました。.NET 11 RC2で発症し、.NET 8/9/10では正常に動作していました。
変更内容
- src/coreclr/jit/lowerxarch.cpp: AVX-512の述語マッピングを1行修正(
CompareGreaterThanMaskからCompareNotGreaterThanMaskへの正しいマッピングに修正) - src/tests/JIT/Regression/JitBlue/Runtime_133550/Runtime_133550.cs: 新規回帰テストを追加(128/256ビット、float/doubleの未満、等于、大于、NaN入力を網羅)
- src/tests/JIT/Regression/Regression_ro_2.csproj: テストプロジェクト設定を更新
パフォーマンスへの影響
影響なし。述語マッピングの修正のみで、命令数やコードサイズは増減しません。
関連Issue
その他
- リグレッション: .NET 11開発サイクル中に導入された問題
- テスト範囲: AVX-512、AVX2、AVX無効時の両方でテスト実施済み。修正前は全10テストケースがAVX-512で失敗、修正後は全パス
- リスク評価: 低リスク。単一の述語マッピング修正で、既存の比較テストも全てパス
- 対象ブランチ: release/11.0へのバックポート
#134213 [release/11.0] Preserve mask element granularity in SIMD transformations
- 作成者: @github-actions[bot]
- 作成日時: 2026年09月18日 19:16:56(UTC)
- マージ日時: 2026年09月20日 15:31:53(UTC)
- ラベル: Servicing-approved area-CodeGen-coreclr
概要
SIMD変換処理におけるマスク要素の粒度(granularity)を正確に保持するための修正をrelease/11.0にバックポートします。.NET 11 RC2でのSIMDマスク畳み込みと低レベル化処理の不正な結果とJITアサーション失敗を修正します。
変更内容
- src/coreclr/jit/gentree.cpp: マスク要素の粒度を検証するガード条件を追加(+24/-10)
- src/coreclr/jit/lowerxarch.cpp: xarch SIMD変換時のマスク粒度不変式の修正(+25/-18)
- テスト追加:
- Runtime_133548.cs: xarch固有のマスク畳み込み失敗の回帰テスト
- Runtime_133552.cs: JITアサーション失敗の回帰テスト
- Runtime_133555.cs: .NET 9-11に影響する共有マスク畳み込みガード関連のテスト
- PredicateInstructions.cs: SVEクロスコードジェン検証テスト
パフォーマンスへの影響
影響なし。変更は要素粒度ガードと不変式の修正に限定され、既存の有効なSIMD変換を保持します。代表的な同一幅最適化は修正後も同一の命令数とコードサイズを維持することが確認されています。
関連Issue
その他
- このバックポートは.NET 11開発サイクル中に導入された回帰を修正し、.NET 11のリリース時にSIMD関連の回帰を回避します
- 修正は検証版およびリリース版ビルド、ネイティブAVX-512実行、ISA縮小構成を含むすべてのテストで検証されています
- リスク評価: 低(変更が狭くスコープされており、フォーカスされた回帰カバレッジとSVEクロスコードジェン検証で品質を確保)
#134165 [release/11.0] Add Composite ML-KEM Windows implementation
- 作成者: @PranavSenthilnathan
- 作成日時: 2026年09月17日 23:14:19(UTC)
- マージ日時: 2026年09月20日 04:10:47(UTC)
- ラベル: Servicing-approved area-System.Security
概要
WindowsにおけるComposite ML-KEM(ポスト量子暗号ハイブリッドアルゴリズム)のサポートを追加するバックポートPRです。BCrypt/NCrypt統合、CNG API、キーブロブハンドリングの実装を含みます。既存の暗号化API動作への変更はなく、新しい実験的APIのサポートのみが追加されます。
変更内容
- BCrypt/NCrypt実装:
CompositeMLKemImplementation.Windows.cs、CompositeMLKemCng.Windows.csでWindows固有の暗号操作を実装 - CNG API追加:
CngAlgorithm.cs、CngAlgorithmGroup.cs、CngKeyBlobFormat.csでComposite ML-KEM対応の新しいCNG識別子と形式定義を追加 - キーブロブ処理:
PqcBlobHelpers.CompositeMLKem.csでComposite ML-KEM特有のキーエンコーディング/デコーディング実装 - BCrypt相互運用:
Interop.Blobs.cs、Cng.csでネイティブBCryptインターフェース定義を追加 - テスト実装: Windows CNG動作テスト、CNG識別子互換性テスト、キー生成・インポートヘルパーを追加
- 非Windows対応:
Cng.NotSupported.csでWindows以外のプラットフォーム向けスタブを実装
パフォーマンスへの影響
影響なし
関連Issue
その他
API承認の要件あり: Copilot レビューにより、追加された公開CNG メンバー(ref/System.Security.Cryptography.csに記載)については、リリース前にAPI承認またはリモーバルが必要と指摘されています。
リスク評価: 低。新しい実験的APIのみの追加で既存機能への影響なし。
テスト状況: cherry-pick同等性確認済み。ローカルビルド/テスト実行は未実施。
#134164 [release/11.0] Add managed Composite ML-KEM implementation
- 作成者: @PranavSenthilnathan
- 作成日時: 2026年09月17日 23:11:05(UTC)
- マージ日時: 2026年09月20日 04:03:59(UTC)
- ラベル: Servicing-approved area-System.Security
概要
OpenSSL対応プラットフォーム向けにComposite ML-KEM(ハイブリッド量子耐性暗号)の管理実装を追加するバックポートです。ML-KEM とRSA/ECDH/X25519を組み合わせたハイブリッドPQC APIをOpenSSLベースのプラットフォームで利用可能にします。
変更内容
- Composite ML-KEM実装: ML-KEM、RSA-OAEP、ECDH、X25519の各成分を組み合わせた4つの管理実装(.Rsa、.EcDiffieHellman、.XDiffieHellman別ファイル)
- プラットフォーム対応: OpenSSL、Windows、未サポートプラットフォーム向けのML-KEM対応状況検出機能を追加
- ASN.1サポート: RSAKeyFormatHelper.Pkcs1に設定可能なエンコーディングルール機能、テスト用ASN.1ユーティリティの拡張
- テストカバレッジ: テストベクトル、実装/ファクトリ/契約テスト、シークレットクリア動作の検証を追加
- エラーハンドリング: RSA復号化失敗時の文字列リソース追加、失敗時のシークレットバッファクリア処理
パフォーマンスへの影響
影響なし(新しい実験的API機能の実装)
関連Issue
その他
未解決の懸念点: Copilotレビューが指摘した高優先度の問題として「X25519全ゼロ合意値の検証がX25519パスで解決されていない」があります。encapsulation処理で定時間実行での全ゼロ合意値棄却が両パスで必要との指摘が残っています。プロジェクトファイルのベクトルエントリのアルファベット順序についても指摘があります。
テストはチェリーピック等価性とgit diff --checkは通過していますが、ローカルビルド/テスト実行は未実施。.NET 11.0 RC2向けのスタックレイヤー3/4として実装されています。
#134092 Add ReadyToRun JIT helper roots metadata
- 作成者: @Copilot
- 作成日時: 2026年09月16日 17:46:51(UTC)
- マージ日時: 2026年09月20日 14:33:41(UTC)
- ラベル: area-ReadyToRun
概要
ReadyToRun コンパイル時に CoreLib JIT ヘルパー実装メソッドをルート化するための機能を追加しました。JIT ヘルパー メソッドが ReadyToRun イメージに確実に含まれるようにします。
変更内容
- ReadyToRunJitHelperRootProvider.cs (新規): JIT ヘルパー メソッドをルート化するロジックを実装
- ReadyToRunCodegenCompilationBuilder.cs: ヘルパー ルート プロバイダーをコンパイル パイプラインに統合
- jithelpers.h: ヘルパー マッピングの同期に関する保守ガイダンスを追加
- ReadyToRunCodegenNodeFactory.cs: JIT ヘルパー メソッドのルート化ロジックを追加
- WebCilObjectWriter.cs: サポート機能を追加
- ILCompiler.ReadyToRun.csproj: 新規ファイルへの参照を追加
パフォーマンスへの影響
潜在的な懸念: ターゲット固有の条件なしに無条件でヘルパーをルート化しているため、現在のターゲットで JIT ヘルパーでない実装メソッドも CoreLib ReadyToRun イメージに含まれ、コード サイズが増加する可能性があります。特に 32-bit ARM の DIV/MOD/UDIV/UMOD、および Windows x86 以外の 64-bit 除算/剰余ヘルパーが該当します。
関連Issue
なし
その他
セキュリティ/品質上の懸念: Copilot レビューで以下が指摘されています:
- ターゲット固有の条件の不一致:
jithelpers.hの定義との同期が不完全で、一部ヘルパー(DIV/MOD など)はターゲット依存的にもかかわらず無条件でルート化されている - 未実装機能: JitHelperRoots セクションのエミッション、使用、検証が実装されていない
これらの問題に対処し、プラットフォーム固有のヘルパー定義に基づいてルート セットを同期させる必要があります。
#134071 Preserve portable entrypoints during recursive interpreter compilation
- 作成者: @radekdoulik
- 作成日時: 2026年09月16日 14:59:09(UTC)
- マージ日時: 2026年09月20日 09:47:21(UTC)
- ラベル: arch-wasm area-CodeGen-Interpreter-coreclr
概要
CoreCLRのポータブルエントリポイント上でインタープリタコンパイル中に最初の公開データを保持するための修正。リエントランシアル(再入可能)なコンパイルが発生する際、複数のコンパイル試行が同じポータブルエントリポイントを共有しており、最初の成功した公開を上書きしないようにするための変更。例えば、メソッドコンパイル中に依存性が読み込まれアセンブリロードコールバックが実行される場合、そのコールバックが同じメソッドを呼び出すと、ネストされたコンパイルが外側のコンパイル再開前にコードを公開する可能性がある。
変更内容
- src/coreclr/vm/jitinterface.cpp: インタープリタデータの設定処理を
SetInterpreterDataInterlockedを直接使用する方式に変更し、Compare-Exchangeで勝者データを返すように修正 - src/coreclr/vm/precode_portable.cpp/hpp: ポータブルプリコード周辺のインタープリタデータ設定メソッドをアトミック操作に対応
- src/coreclr/vm/prestub.cpp: 勝者データを返す
SetInterpreterDataInterlockedの結果を適切に処理 - src/libraries/System.Runtime.Loader/tests/AssemblyLoadContextTest.cs:
AssemblyLoadEvent_ReentrantMethodCompilationテストを追加(再入可能なメソッドコンパイル回帰テスト) - src/libraries/System.Runtime.Loader/tests/MissingDependency.Root/RootClass.cs: 依存関係トリガーメソッドを追加
パフォーマンスへの影響
影響なし。この修正は重複コンパイルを防ぐものではなく、既に公開されたインタープリタコードを再利用する。一時的なコンパイルデータはクリーンアップされるが、未使用のエミットバイトコード、ヘッダー、GCデータ、例外ハンドリングデータはローダー所有のまま保持される(CoreCLRの既存ポリシー)。
関連Issue
その他
- Volatileな読み取りを使用し、読者が初期化されたデータを確認できるようにしている
- ノンポータブルインタープリタプリコードパスは変更されていない
- メタデータ更新、コードバージョニング、デバッガサポート、ブラウザHot Reloadは有効にされていない
- Debug/Node、Release/Chromiumでのテスト検証:AssemblyLoadEvent_ReentrantMethodCompilation が成功、既存テストも23/23合格
- ローカルネイティブARM64での並行性検証:8つのライター、2つのリーダーで256ラウンド実行し、ThreadSanitizerエラーなし
#133046 KEM support for EnvelopedCms
- 作成者: @vcsjones
- 作成日時: 2026年09月01日 21:20:50(UTC)
- マージ日時: 2026年09月20日 15:18:54(UTC)
- ラベル: area-System.Security
概要
EnvelopedCmsに対するML-KEMおよびComposite ML-KEMのサポートを追加します。マネージド実装ではML-KEM全体をRFC 9936に準拠して実装しており、RFC 9936で定義されたKEM(Key Encapsulation Mechanism)ベースの暗号化・復号化機能を提供します。ただし、Windows対応とComposite ML-KEMの実装は将来の対応として、APIシェイプのみ先行して追加されています。
変更内容
- 新しいKEM受信者型の導入:
RecipientInfoTypeにKemタイプを追加、KemRecipientInfoクラスで公開API提供 - マネージド実装:
ManagedPal.Kem.csでML-KEMの暗号化・復号化処理を全面実装(RFC 9936準拠) - ASN.1サポート: KEM受信者情報、OtherRecipientInfo、CMSメタデータのASN.1スキーマを定義
- EnvelopedCmsの拡張: KEM復号化用の新規メソッドおよび関連ロジック追加
- CmsRecipientの拡張: KEM受信者ファクトリメソッド追加
- プラットフォーム別実装: Windowsではキー復号化未対応(PlatformNotSupportedException)、その他OSはマネージド実装を使用
- 広範なテスト: 暗号化/復号化、相互運用性、未対応プラットフォーム動作のテストを追加
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
留意事項:
- Copilot指摘の高優先度問題: マネージド実装のKEM KDFがRFC非準拠。RFC 9936ではHKDF-SHA256が必須だが、現在の実装ではSHA384を使用。WindowsではSHA256のみ対応のため、今後の調整が必要。
- API承認未確認: 新規公開API(
KemRecipientInfo等)の正式なAPI承認プロセスが未完了。 - Windows機能制限: Windowsは現在KEMRecipientInfo自体のデコード機能がないため、KEM機能完全対応は別途対応予定。
- Composite ML-KEM: APIシェイプのみ提供、全実装で
PlatformNotSupportedExceptionを発行する予定。 - Union型visibility:
UnionAttributeとIUnionのアクセシビリティ調整により、KEM関連の型安全性を確保。
#131089 Share common delegate code, cleanup NativeAOT delegate impl
- 作成者: @MichalPetryka
- 作成日時: 2026年07月20日 16:30:06(UTC)
- マージ日時: 2026年09月20日 04:44:10(UTC)
- ラベル: area-System.Runtime community-contribution
概要
複数のランタイム(CoreCLR、NativeAOT、Mono)間でのデリゲート実装コードの重複を解消し、共有実装を統一するリファクタリング。共有デリゲートロジック(呼び出しリスト処理、Combine/Remove、等値性比較)をSystem.Delegateの共有実装に集約し、ランタイム固有の重複コードを削減します。また、RuntimeHelpers.TypeEquivalent()という新しい共有ヘルパーを導入し、ランタイム間での型等価性チェックを統一します。
変更内容
- src/libraries/System.Private.CoreLib/src/System/Delegate.cs: 共有デリゲートロジック(invocation listの列挙、
CombineImpl/RemoveImpl、Equals、GetInvocationListなど)を集約。GetInvokeMethodヘルパーを追加 - src/libraries/System.Private.CoreLib/src/System/Runtime/CompilerServices/RuntimeHelpers.cs: 新しい
RuntimeHelpers.TypeEquivalent()ヘルパーを追加(MONO/CoreCLR/NATIVEAOT条件分岐対応) - src/coreclr/System.Private.CoreLib/src/System/Delegate.CoreCLR.cs: 共有ロジックの重複を削減(231行削減)。CoreCLR固有の
SlotEquals/EqualsCoreのみを提供 - src/coreclr/nativeaot/System.Private.CoreLib/src/System/Delegate.cs: 共有ロジックの重複を削除(772行削減)。NativeAOT固有実装を新ファイル
Delegate.NativeAot.csに分離 - src/mono/System.Private.CoreLib/src/System/Delegate.Mono.cs: 共有
GetInvokeMethodとRuntimeHelpers.TypeEquivalentを利用 - src/mono/System.Private.CoreLib/src/System/MulticastDelegate.Mono.cs: 結合時の型チェックを共有
RuntimeHelpers.TypeEquivalentに切り替え
パフォーマンスへの影響
懸念点あり:NativeAOTでRuntimeHelpers.TypeEquivalent()実装がメソッドテーブル直接比較からObject.GetType()呼び出しに変更されることで、反射オブジェクト(RuntimeType)が不要に初期化される可能性。デリゲートのequality/combine/removeはホットパスであるため、NativeAOT用に従来のメソッドテーブル比較を保持してAggressiveInlining属性を適用することが推奨されています。
関連Issue
その他
- 内部実装の整理であり、公開APIに破壊的変更なし
- 前回のクリーンアップに続くランタイム実装の統一作業
- Copilotレビューで、NativeAOT最適化のためのメソッドテーブル直接比較の保持が指摘されている