Pull Request on 2026年09月22日

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

注意点

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


目次

  1. #134441 Fix null vnStore dereference in optAssertionProp_HWIntrinsic
  2. #134427 Inline GetEnumerator under NativeAOT
  3. #134417 Improve ComparerHelper.CreateDefaultComparer
  4. #134411 JIT: Simplify and disable overlapping struct copy regression test
  5. #134410 JIT: Fix AVX state tracking for unrolled block operations
  6. #134378 [release/11.0] Fix macOS single-file runtime info capture
  7. #134369 [release/11.0] Fix TlsSessionTests TLS resume flakiness by using a unique SNI
  8. #134366 Preserve contained-load exceptions during embedded masking
  9. #134364 Fix VNNI blend merge operand preservation
  10. #134362 Fix unsigned vector division correction lane width
  11. #134358 [JIT] [Wasm]: Check IsInvariantInRange for LEA base addr in GetFoldableAddrMode
  12. #134345 JIT: Bypass bulk write barrier wrapper for small struct copies
  13. #134320 [release/8.0-staging] Update dependencies from dotnet/xharness
  14. #134316 Allow platform NaN canonicalization in floating-point assertions
  15. #134126 [release/11.0] Avoid slow parallel connect failures in SocketAsyncEventArgs test
  16. #134124 [browser] release eagerly created Task/Promise proxies on non-normal async interop paths
  17. #134106 Fix round-trip assertion for fractional floating-point formats
  18. #133905 [WIP] Fix GC hole in JIT due to if-conversion
  19. #133804 Managed HPKE
  20. #133772 [release/9.0-staging] Update dependencies from dotnet/icu
  21. #133578 JIT: correct assertion for negative constant array dimensions
  22. #133450 Emit interop source directly as text
  23. #133416 JIT: Model promoted struct definitions through visitors

#134441 Fix null vnStore dereference in optAssertionProp_HWIntrinsic

  • 作成者: @Copilot
  • 作成日時: 2026年09月22日 17:41:50(UTC)
  • マージ日時: 2026年09月22日 22:33:02(UTC)
  • ラベル: area-CodeGen-coreclr

概要

JIT コンパイラの optAssertionProp_HWIntrinsic 関数における null vnStore 参照解析エラーを修正しました。ローカルアサーション伝播処理中にハードウェアイントリンシック最適化をガードすることで、null 参照の問題を回避します。

変更内容

  • src/coreclr/jit/assertionprop.cpp: vnStore の null チェック条件を追加し、VN(値番号)に依存するハードウェアイントリンシック処理をガードする変更を実施しました。

パフォーマンスへの影響

影響なし(バグ修正による安定性改善が主目的)

関連Issue

#134435

その他

  • 最小限の修正であり、アサーション伝播前提条件の確認と回帰テストカバレッジの追加が実施されています
  • 本修正は JIT コンパイラの内部実装部分に限定されており、公開 API への影響はありません

#134427 Inline GetEnumerator under NativeAOT

概要

NativeAOT環境下で、配列のGetEnumeratorメソッドに対してAggressiveInlining属性を追加し、インライン化を促進するもの。これにより、配列インターフェース経由のforeachループが逆仮想化後にインライン化されるようになります。

変更内容

  • src/coreclr/nativeaot/System.Private.CoreLib/src/System/Array.NativeAot.cs
    • Array<T>.GetEnumerator()メソッドにAggressiveInlining属性を追加(+1行)
    • NativeAOT環境でのインライン化最適化を有効化

パフォーマンスへの影響

  • GetEnumeratorのインライン化により、配列インターフェース経由のforeachループが最適化されます
  • 逆仮想化後、foreachループ全体がインライン化可能になるため、関数呼び出しオーバーヘッドが削減されます
  • ベンチマーク結果の記載なし

関連Issue

#131265

その他

  • 変更はNativeAOT環境に限定されたもので、標準的な.NETランタイムには影響しません
  • Copilot reviewで承認推奨との評価を受けています

#134417 Improve ComparerHelper.CreateDefaultComparer

概要

ComparerHelpers.CreateDefaultComparerでNullable<T>の基盤型取得をGetGenericArguments()からGetNullableUnderlyingType()に変更しました。これにより、closed Nullable<T>に対する比較器作成時のジェネリック引数配列の割り当てを回避し、#126905で導入されたAPIを活用します。

変更内容

  • src/coreclr/System.Private.CoreLib/src/System/Collections/Generic/ComparerHelpers.cs
    • GetNullableUnderlyingType()メソッドを使用して、Nullable<T>の基盤型をより効率的に取得するよう変更
    • 内部実装の変更(API互換性への影響なし)

パフォーマンスへの影響

改善あり:Nullable<T>型に対して顕著な改善が観測されました。

  • 実行速度:Nullable<T>型で約18%の高速化(154.3ns → 127.4ns、DateTime?の例)
  • メモリ割り当て:Nullable<T>型で27%削減(120B → 88B)
    • 非nullable型(int、long、string)への影響:なし
    • Nullable型での改善率:Ratio = 0.82(平均)

ベンチマーク結果から、GetNullableUnderlyingType()の使用により、ジェネリック引数配列の割り当てが不要になったことで、Nullable型に特化した最適化が可能になったことが確認できます。

関連Issue

#126905(GetNullableUnderlyingType() API導入) #134321(CreateDefaultEqualityComparerへの同様の変更)

その他

  • 兄弟メソッドComparerHelpers.CreateDefaultEqualityComparerに対して同様の変更が#134321で実施済みであり、このPRにより両メソッドで同じ手法を統一しています。
  • 破壊的変更なし、公開APIへの影響なし。

#134411 JIT: Simplify and disable overlapping struct copy regression test

概要

JITの重なり構造体コピー(overlapping struct copy)に関する回帰テストを簡潔化し、長年の既知問題 #7539 に対して ActiveIssue マークを付与したものです。テストケースを1つの代表的なシナリオに削減し、冗長なエイリアシングやパラメータ化されたケースを削除しました。

変更内容

  • src/tests/JIT/Regression_ro_2/Runtime_133858.cs
    • テストケースを1つの代表的なシナリオに縮小
    • 冗長なエイリアシングおよびパラメータ化されたテストケースを削除
    • [ActiveIssue] 属性を追加して既知の失敗テストを無効化

パフォーマンスへの影響

影響なし(テストケースの簡潔化のため、テスト実行時間は短縮される可能性があります)

関連Issue

#7539(JIT関連の長年の既知問題)
#134389(このPRで修正)

その他

なし


#134410 JIT: Fix AVX state tracking for unrolled block operations

  • 作成者: @EgorBo
  • 作成日時: 2026年09月22日 11:13:13(UTC)
  • マージ日時: 2026年09月22日 15:00:42(UTC)
  • ラベル: area-CodeGen-coreclr

概要

x64 JIT コンパイラの AVX 状態追跡を、アンロール化されたブロック操作(memmove/initblk)において修正します。SIMD 幅の追跡を正確に行い、ゼロ初期化ブロックでは 128 ビット命令を使用することで、AVX 状態の不整合を解決します。

変更内容

  • lsraxarch.cpp: アンロール memmove 操作における SIMD 幅追跡の更新
  • codegenxarch.cpp: ブロック初期化時に狭い(128 ビット)ゼロイング命令を使用するよう変更

パフォーマンスへの影響

影響なし

関連Issue

#133784

その他

  • JIT コンパイラの内部実装変更(公開 API への影響なし)
  • Copilot レビューで、GC を含む initblk 実行における SIMD 幅追跡とリグレッション テストカバレッジについて指摘あり
  • 最新の Copilot レビュー評価では「Needs a closer look」となっており、回帰テストの追加と SIMD 幅会計の調整が推奨されている

#134378 [release/11.0] Fix macOS single-file runtime info capture

概要

macOS単一ファイルランタイムの情報キャプチャに関する修正をrelease/11.0ブランチにバックポートしたものです。このPRは#134353の上流修正をrelease/11.0向けに適用しています。

変更内容

  • src/coreclr/debug/createdump/crashinfomac.cpp: ランタイム情報キャプチャロジックの修正(7行追加、7行削除)
  • src/coreclr/debug/dbgutil/machoreader.cpp: Mach-Oリーダーの修正(11行追加、11行削除)
  • src/coreclr/debug/dbgutil/machoreader.h: ヘッダーファイルの定義調整(3行追加、2行削除)

これらの変更は、macOS環境での単一ファイル配布されたランタイムのクラッシュダンプ情報キャプチャ処理に関連する内部実装の修正です。

パフォーマンスへの影響

影響なし

関連Issue

#134353

その他

このPRはバックポートであり、元の修正は#134353で実施されています。変更の詳細な技術的背景、テスト内容、顧客への影響については、元のPR#134353を参照してください。


#134369 [release/11.0] Fix TlsSessionTests TLS resume flakiness by using a unique SNI

概要

TLS再開テストの不安定性(flakiness)を修正するため、一意のSNI(Server Name Indication)を使用するように改善しました。このテスト修正により、テスト実行時のランダムな失敗を回避できます。

変更内容

  • src/libraries/System.Net.Security/tests/FunctionalTests/TlsSessionTests.cs: TLS再開テストロジックを改善し、各テストで一意のSNI値を使用するように修正(+11/-5)

パフォーマンスへの影響

影響なし(テスト修正のため)

関連Issue

#132749(本修正の元となったPR)

その他

  • このPRはrelease/11.0ブランチへのバックポートです
  • テストの信頼性向上を目的とした変更で、TLS セッション再開時のテスト失敗率を低減させます
  • System.Net.Security ライブラリの機能テストに関する修正です

#134366 Preserve contained-load exceptions during embedded masking

概要

AVX-512マスキング機能が、含まれたロード操作の例外を誤って抑制するバグを修正します。マスク値が空の場合、潜在的に失敗するロード(null参照アクセスなど)の例外が発生しなくなることを防ぎます。既存のJIT例外分析NodeOrContainedOperandsMayThrowを埋め込みマスキング判定で活用し、例外モデリングを保護します。

変更内容

  • lowerxarch.cpp: 埋め込みマスキング形成時に、候補オペランド(ブロードキャストチェーンを含む含まれたオペランド)が例外をスロー可能な場合、マスキングを無効化するチェックNodeOrContainedOperandsMayThrowを追加
  • gentree.cpp/gentree.h: 例外分析ロジックの内部支援(非const版オーバーロード追加)
  • Runtime_134197.cs: 5つの代表的パターン(ベクトルロード付き算術、スカラブロードキャスト付き算術、直接ベクトルロード、直接ブロードキャスト、アラインドロード組み込み関数)を対象に、空・部分・完全マスク+null/有効入力の組み合わせで合計15テストケースを追加

パフォーマンスへの影響

  • 安全なケース(フィールドロード、定数ブロードキャスト、null確認済みロード):コード生成・サイズ変化なし(63、63、118バイト)
  • 潜在的に失敗するロード:代表例で6バイト増加(例:67→73バイト、64→70バイト)
  • 直接ブレンド例:54→60バイトに増加。BenchmarkDotNetでは1.551ns→1.553nsで変化なし。同一JIT制御でも測定変動があり、正確な性能境界は不明確

関連Issue

#134197

その他

  • 検証範囲: Windows x64 のCheckedおよびRelease JITでAVX-512F/VL有効時のテスト。回帰テストスイート356テスト、DOTNET_JitStress=2でも合格
  • 未検証: x86、ARM64、非Windows環境、NativeAOT実行、サービシングブランチ
  • 互換性: 公開APIではなくJIT内部実装の修正のため、直接的な互換性影響なし
  • 技術詳細: マスク形成時の含まれたオペランド分析で、ブロードキャストチェーン全体を走査し、条件付きに評価可能なレジスタオペランドや検証済み非例外メモリオペランドは継続対象。ハードウェアアクセス違反ではなく、JIT例外モデリングのみ保護

#134364 Fix VNNI blend merge operand preservation

概要

VNNI乗算累積命令のマージマスク処理におけるバグを修正します。マージマスク付きのBlendVariable(fallback, MultiplyWideningAndAdd(...), mask)をVNNI命令に最適化する際、非アクティブレーンのfallback値が保持されず上書きされていました。VNNI内在関数をHW_Flag_RmwIntrinsicフラグでマークし、既存の埋め込みマスキング互換性チェックが無効な最適化を拒否するようにしました。これにより、VNNI操作とblend操作が正しく分離されます。

変更内容

  • hwintrinsiclistxarch.h: 通常、飽和、新しい整数バリアントを含むすべてのVNNI内在関数エントリにHW_Flag_RmwIntrinsicフラグを追加
  • Runtime_133753.cs: 128/256/512ビットベクタ、byte/short積、飽和/非飽和形式をカバーする12個の回帰テストケースを追加

パフォーマンスへの影響

  • コード生成サイズ: ゼロfallbackを持つマスク融合が保守的に除外され、63→69バイト/9→10命令に増加
  • マスクなしVNNI: コード変更なし
  • ローカルベンチマークは不安定なため、スループット測定は実施されていません
  • 実行は正確性を優先しており、パフォーマンス回帰は最小限に抑えられています

関連Issue

#133753

その他

  • 検証: Windows x64 AVX-512 VNNI搭載環境で、Checked/Release JITで12個すべてのテストケースがパスを確認
  • テスト形式: 最適化コンパイルを強制するためのヘルパーを使用し、デフォルトティアリング下で実行
  • 留意点: 新しいINT8/INT16バリアントのテストカバレッジとゼロfallback融合の最適化余地があります

#134362 Fix unsigned vector division correction lane width

概要

符号なし SIMD ベクトル除算における補正処理のバグを修正しました。AVX および SSE4.1 の除算パスで、64ビット幅の blendvpd から32ビット幅の blendvps に変更し、各32ビットレーンで独立して商補正を選択するようにしています。修正前は64ビット単位の blend が隣接レーンの誤った置換や overflow レーンの見落としを招いていました。

変更内容

  • hwintrinsiccodegenxarch.cpp: 符号なし商補正の最終段階で blendvpd から blendvps に変更。各32ビットレーンが独立して処理されるよう修正
  • lsraxarch.cpp: blend 命令レジスタ割り当てのドキュメンテーション更新
  • Runtime_133752.cs: Vector128<uint> と Vector256<uint> の回帰テスト追加。報告されたテスト入力値、符号変換の境界値、隣接レーン間の異なる補正マスクをカバー

パフォーマンスへの影響

影響なし。命令カウントとコードサイズは変更されていません。BenchmarkDotNet による比較で計測された timing 区間は重複しており、スループット改善は主張されていません。

関連Issue

#133752

その他

  • Checked/Release JIT で Windows x64 上で検証済み。修正前は AVX2、AVX のみ、SSE4.1 で回帰テストが失敗し、修正後は成功
  • AVX-512 および software-fallback は修正前後で成功
  • 隣接整数除算、変換境界、混合マスク選択パスにおける 5 つの ISA 構成で追加 16,314 件のベクトル比較テスト実施
  • x86 実行環境でのテストは未実施
  • この PR 説明は GitHub Copilot で作成されました

#134358 [JIT] [Wasm]: Check IsInvariantInRange for LEA base addr in GetFoldableAddrMode

概要

Wasm JITにおけるLEA(Load Effective Address)アドレッシングモードの最適化時に、ベースアドレスが計算中に再ロードされる場合を正しく検出できていなかった問題を修正します。フィールドアクセスの左辺と右辺で同じオブジェクトのアドレスが使用される場合、不正なアドレッシングモード最適化によってLIRセマンティクスアサーションと操作数の包含/順序の問題が発生していました。

public class Program
{
    public static void M0()
    {
        s_1.F0.F0.F8 = (ushort)M1(ref s_1.F8);
    }
}

変更内容

  • src/coreclr/jit/lowerwasm.cpp: GetFoldableAddrMode関数でLEAのベースアドレスに対してIsInvariantInRangeチェックを追加(5行の追加)。これにより、ベースアドレスが値の計算中に変更/再ロードされないことを確認してからLEA最適化を適用するようになりました。既存のSIMD12と書き込みバリア除外ロジックは保持されます。

パフォーマンスへの影響

軽微なリグレッションが予想されていますが、公式ベンチマーク結果では許容範囲内です。

関連Issue

#132987

その他

  • Copilotレビュアーから、Wasm固有のアドレス順序パターンをカバーする回帰テストの追加が推奨されています
  • Fuzzlyn(Wasm対応版)による実験的なファジング手法で発見された問題

#134345 JIT: Bypass bulk write barrier wrapper for small struct copies

  • 作成者: @EgorBo
  • 作成日時: 2026年09月21日 15:38:02(UTC)
  • マージ日時: 2026年09月22日 11:49:50(UTC)
  • ラベル: area-CodeGen-coreclr

概要

小さな構造体のコピー(最大128バイト)に対する書き込みバリア処理を最適化するPRです。JIT、ReadyToRun、NativeAOTで、GC参照を含む構造体コピーについて、マネージド書き込みバリアのラッパー関数をバイパスして直接ヘルパーを呼び出すようにしました。128バイトを超えるコピーは既存のヘルパーのままです。ベンチマーク結果では5参照構造体で5~15%のパフォーマンス向上が報告されています。

変更内容

  • JITコンパイラ (src/coreclr/jit/lower.cpp): 128バイト以下のコピーで新しいヘルパー CORINFO_HELP_BULK_WRITEBARRIER_SMALL を選択するロジックを追加
  • ヘルパー定義 (src/coreclr/inc/corinfo.h, src/coreclr/tools/Common/JitInterface/CorInfoHelpFunc.cs): 新しいヘルパー列挙型を登録
  • ランタイム設定 (src/coreclr/vm/corelib.h, src/coreclr/inc/jithelpers.h): 内部バッファヘルパーを登録
  • NativeAOT対応 (src/coreclr/tools/aot/ILCompiler.RyuJit/JitInterface/CorInfoImpl.RyuJit.cs): 64ビットNativeAOTで生のワーカーを使用
  • ReadyToRun対応 (src/coreclr/tools/aot/ILCompiler.ReadyToRun/JitInterface/CorInfoImpl.ReadyToRun.cs, src/coreclr/inc/readytorunhelpers.h): ラッパーフォールバックを保持
  • WASM対応 (src/coreclr/jit/codegenwasm.cpp): WASMヘルパーシグネチャを追加
  • ヘルパー属性 (src/coreclr/jit/utils.cpp): ヘルパーをヒープ変更マーク

パフォーマンスへの影響

小さな構造体コピーで5~15%のパフォーマンス改善が期待されます。特に5参照を含む構造体のコピーで効果的です。これはマネージド関数呼び出しのオーバーヘッドを削減することによります。

関連Issue

なし

その他

本PRは複数の初期レビューで未解決の指摘があります:

  • 128バイト境界(128/129バイト分岐)のテストカバレッジが不足
  • ReadyToRunのルート化が未完全
  • GC安全点ポーリング戦略の検証が必要
  • NativeAOT/ReadyToRun経由での回帰テストが必要

コンパイラとランタイムの複数層に変更を伴う内部実装の最適化であり、公開APIへの影響はありません。


#134320 [release/8.0-staging] Update dependencies from dotnet/xharness

概要

dotnet/xharnessの依存関係を更新するPRです。Microsoft.DotNet.XHarness関連のパッケージ(CLI、TestRunners.Common、TestRunners.Xunit)を11.0.0-prerelease.26461.1から11.0.0-prerelease.26466.1に更新しています。

変更内容

  • .config/dotnet-tools.json: ツール設定の更新(+1/-1)
  • eng/Version.Details.xml: XHarnessパッケージのバージョン詳細情報を更新(+6/-6)
  • eng/Versions.props: XHarnessパッケージのバージョンプロパティを更新(+3/-3)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • 更新対象: dotnet/xharnessリポジトリのmainブランチから(コミット: 22d42107bdcf6779c426171400a979c282bec7e4)
  • ビルド日時: 2026年9月16日(テスト用データの可能性あり)
  • このPRはrelease/8.0-stagingブランチへの依存関係更新です

#134316 Allow platform NaN canonicalization in floating-point assertions

概要

WebAssemblyのNaN正規化動作をテストアサーションで許容するための変更。プラットフォーム別にNaNペイロード保持の期待値をポリシー化し、共有テストアサーション(double、float、Half)に適用。有限値と符号付きゼロはビット完全性を維持、NaNと非NaN間の不一致は引き続き失敗。

変更内容

  • PlatformDetection.cs: IsNaNPayloadPreservationExpectedプロパティを追加。RISC-Vの例外を保持しながらWebAssembly(ブラウザおよびWASI)に対応
  • AssertExtensions.cs: double、float、Halfのアサーション内でNaN正規化ポリシーを適用。NFloatは対応するオーバーロードに委譲
  • GenericMathTestMemberData.cs: Mono/Wasmで除外されていた4つのdouble Min/Maxテストデータ行を復元

パフォーマンスへの影響

なし(テストユーティリティの変更のみで、プロダクトコードおよびJITへの影響なし)

関連Issue

#134268

その他

  • Copilotレビューで中程度の指摘が存在(NaNペイロード検査の保持に関連)
  • ブラウザWasmテスト実行は、ビルドプロセスのLLVM IRBuilder.h抽出エラーにより検証できず
  • TestUtilities.csprojはnet10.0およびnet481ビルドで正常に完了

#134126 [release/11.0] Avoid slow parallel connect failures in SocketAsyncEventArgs test

概要

SocketAsyncEventArgsテストにおける遅いパラレル接続失敗を回避するテスト改善。CI の ノイズを低減するためのテスト専用変更です。

変更内容

  • src/libraries/System.Net.Sockets/tests/FunctionalTests/SocketAsyncEventArgsTest.cs: テストロジックを簡素化し、パラレル接続の失敗処理を改善(+3行/-18行)

パフォーマンスへの影響

テスト実行時間の短縮が期待できます。遅いパラレル接続失敗を回避することで、テスト実行の安定性向上とCI処理の効率化に寄与します。

関連Issue

#132931(本体Issueの参照元)

その他

  • Release/11.0 ブランチへのバックポート
  • CI ノイズ低減を目的とした変更であり、機能的な影響なし

#134124 [browser] release eagerly created Task/Promise proxies on non-normal async interop paths

概要

Browser JS相互運用(Interop)における非正常系パスでのTask/Promise プロキシのメモリリークを修正。非同期JSのInteropで事前に作成されたTask/Promiseプロキシペアが、複数の異常系パスで解放されずページの存続期間中リークしていました。[JSExport]が同期的に完了/例外発生したケース、バインド失敗時、および非同期[JSImport]での例外/Promise未生成時の各パスでプロキシを適切に解放するよう修正しました。

変更内容

  • JSProxyContext.cs: Disposeメソッドを改善し、holder.Stateを解放。スナップショットベースの走査でコールバック再入時の重複解放を防止
  • JSFunctionBinding.cs: 非同期[JSImport]でDispatchJSImportAsyncPost使用時、JS関数の例外をTask経由で配信するよう修正し、ハング状態を解決
  • marshal-to-js.ts (CoreCLR/Mono): 同期完了時と例外発生時にTask/Promiseプロキシを適切に解放
  • managed-exports.ts (CoreCLR/Mono): getAssemblyExports失敗時にPromiseホルダーを解放
  • invoke-js.ts (CoreCLR/Mono): 非同期[JSImport]の例外/リターン時のプロキシ解放を修正
  • ProxyLeakTest.cs: 完了/保留中/失敗/例外状態のTask/Promiseをテスト。100回反復実行後、JSHandleテーブルが増長しないことを検証
  • PromiseHolderLeakTest: マネージド側の保持カウントをUnsafeAccessorで検証。スレッド単一時のリーク、マルチスレッド時の非同期ポスト翻訳をカバー

パフォーマンスへの影響

影響なし。メモリリーク修正により、長時間実行アプリケーションではメモリ消費量が削減されます。

関連Issue

#132966

その他

  • テスト制限: 0引数の汎用非同期ラッパーのみテストカバー。1引数・2引数の特殊化版は視察のみで独立テストなし
  • 未カバー領域: CoreCLRはビルド/実行されず型チェック検証のみ。マルチスレッド時のキャッチパスリリースとJSWebWorkerワーカー終了時のホルダーテストなし
  • 既知の制約: JavaScriptのFinalizationRegistryによる遅延ドレイン対策として、GCHandleテーブルのアサーションは除外(テスト不安定性回避)

#134106 Fix round-trip assertion for fractional floating-point formats

概要

Number.FormatFloatのラウンドトリップアサーション条件を修正するプルリクエストです。F、N、C、P形式では分数部の先頭ゼロが有効精度を消費するため、デバッグ/チェックビルドで正しくフォーマットされた出力がアサーション失敗することがありました。有効数字モードのみにアサーション範囲を制限し、リリースビルドの動作は変わりません。

変更内容

  • Number.Formatting.cs: ラウンドトリップアサーションを有効数字モード(G形式など)に限定し、分数精度形式(F、N、C、P)での過度なアサーション条件を削除
  • DoubleTests.cs、SingleTests.cs、HalfTests.cs、BFloat16Tests.cs: 分数形式、精度境界、負の値、非正規化数、符号付きゼロを網羅する48個の回帰テストケースを追加。各ケースでToString、UTF-16/UTF-8 TryFormat、バッファ不足時の動作をカバー

パフォーマンスへの影響

影響なし

関連Issue

#134101

その他

  • 検証はWindows x64で実施され、チェックビルドでの元のアサーション失敗を再現後、修正版CoreLibで6,367個の関連テストをすべてパス確認
  • PR説明と変更はGitHub Copilotの支援で作成されています

#133905 [WIP] Fix GC hole in JIT due to if-conversion

  • 作成者: @Copilot
  • 作成日時: 2026年09月14日 18:55:11(UTC)
  • マージ日時: 2026年09月22日 11:52:53(UTC)
  • ラベル: area-CodeGen-coreclr

概要

JITのif-conversion最適化において、明示的初期化(explicit-init)ストアがGC安全点を越えてシンク化される場合に発生するGC穴(GC hole)を修正します。この問題により、未初期化だが報告されたGCスタックスロットが残される可能性がありました。修正により、if-conversion中にGTF_VAR_EXPLICIT_INITフラグを持つストアが移動されることを防ぎます。

変更内容

  • src/coreclr/jit/ifconversion.cpp: IfConvertTryGetElseFromJtrueBlock関数に、explicit-initストアの移動を禁止するガード条件を追加(+6行)。GC安全点を越えたシンク化がメモリ安全性を損なわないようにするセーフガードとコメントを追加。

パフォーマンスへの影響

焦点を絞った参照初期化により、既存の大型構造体ゼロ化コード生成に影響なく、参照初期化時に2命令/6バイト追加。全体的なパフォーマンス劣化は最小限。

関連Issue

#133754

その他

  • JIT内部実装(if-conversion最適化エンジン)の修正
  • Copilotレビューからは、将来の再導入を防ぐため焦点を絞った回帰テストの追加が推奨されています(低優先度)
  • GC-stress回帰テストの実行は未確認
  • クロスプラットフォームDebug JITビルドおよび6つのLinux x64テストランナーにより確認

#133804 Managed HPKE

概要

HPKE (Hybrid Public Key Encryption) のマネージド実装を追加する最初のコミットです。公開API、DHKEM (Diffie-Hellman Key Encapsulation Mechanism) / KDF / AEAD実装をマネージドコードで提供します。OpenSSL および Windows固有の実装、ML-KEM、Hybrid構成は後続のPRで対応予定です。

変更内容

公開API (System.Security.Cryptography 名前空間)

  • Hpke クラス: HPKE操作のメインエントリーポイント
  • HpkeSuite: KEM/KDF/AEAD のスイートメタデータ定義
  • HpkeSender/HpkeRecipient: 暗号化/復号化コンテキスト
  • HpkeKem/HpkeKdf/HpkeAead: アルゴリズム列挙型

マネージド実装

  • HpkeImplementation.Managed.cs: マネージドHPKE操作とコンテキスト処理
  • HpkeManagedKemAdapter.cs: KEM基盤実装
  • HpkeECDiffieHellmanKemAdapter.cs: NIST P-curve DHKEM
  • HpkeX25519DiffieHellmanKemAdapter.cs: X25519 KEM
  • HpkeManagedKdfAdapter.cs: HKDF/SHAKE KDF実装
  • HpkeManagedAesAeadAdapter.cs: AES-GCM サポート
  • HpkeManagedChaCha20Poly1305AeadAdapter.cs: ChaCha20-Poly1305 サポート
  • FixedMemoryKeyBox.cs: 保護されたキー保存機構

テスト

  • RFC 9180 およびPQ草案のテストベクター
  • スイートメタデータ、送受信者コンテキスト、キー生成/インポート/エクスポート検証
  • 非サポートプラットフォーム向けテスト

Microsoft.Bcl.Cryptography との互換性

  • HPKE型の転送機構を追加

パフォーマンスへの影響

影響なし(初期実装段階)

関連Issue

なし

その他

  • 実験的機能として公開されており、診断ID SYSLIB5009 で標識
  • Copilot Code Reviewから以下の指摘あり:
    • API承認レビューのリンク確認が必須
    • 並行 Open 操作のシーケンス番号保護(同期化)が必要
    • baseNonceBuffer の全クリーンアップパスでの適切なクリア
  • これら指摘は後続レビューで解決済み

#133772 [release/9.0-staging] Update dependencies from dotnet/icu

概要

dotnet/icuリポジトリからの依存関係を更新するPull Requestです。Microsoft.NETCore.Runtime.ICU.Transportパッケージを9.0.0-rtm.26458.1から9.0.0-rtm.26469.2にアップデートします。

変更内容

  • eng/Version.Details.xml: Microsoft.NETCore.Runtime.ICU.Transportのバージョン情報を9.0.0-rtm.26469.2に更新
  • eng/Versions.props: バージョン定義を最新状態に同期

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • このは自動化された依存関係更新PR(dotnet-maestrobot)です
  • dotnet/icu リポジトリのdotnet/release/9.0ブランチからの更新です
  • 本PRはrelease/9.0-stagingブランチをターゲットとしています

#133578 JIT: correct assertion for negative constant array dimensions

  • 作成者: @Copilot
  • 作成日時: 2026年09月10日 09:40:01(UTC)
  • マージ日時: 2026年09月22日 11:54:48(UTC)
  • ラベル: area-VM-coreclr

概要

JIT Importerで、array.GetLength(-1)などの負の定数次元引数に対する不正なアサーション(Checked/Debug モード)を修正しました。負の定数に対してIndexOutOfRangeExceptionをスローする正しい動作(Release ビルドと同じ)を実現します。

変更内容

  • src/coreclr/jit/importercalls.cpp: Importer アサーションを修正し、定数 MD-Array 次元引数の符号付き int 表現可能性を検証。負の定数によるアサーション失敗を回避しつつ、既存の符号なし境界チェックを保持。
  • src/tests/JIT/Regression/JitBlue/Runtime_60957/Runtime_60957.cs: マルチディメンショナル配列回帰テストを拡張。GetLength、GetLowerBound、GetUpperBoundに対して -1 および int.MinValue のケースを追加。

パフォーマンスへの影響

影響なし

関連Issue

#133556

その他

このPRは JIT コンパイラの内部実装 を修正するもので、公開APIには影響しません。修正範囲は狭く、既存の境界チェックを保持しながら Debug/Checked モードと Release モードの動作の一貫性を確保します。


#133450 Emit interop source directly as text

概要

Interop ソースジェネレータのコード生成パイプラインを刷新し、Roslyn構文木の構築・正規化・逆シリアル化のサイクルを廃止し、直接テキスト出力に変更しました。入力解析はRoslyn に任せつつ、出力生成では共有 IndentedTextWriter と値ベースのパラメータ/シグネチャモデルを使用して、メモリ割り当てとフォーマッティングオーバーヘッドを削減します。LibraryImport、COM、JavaScript インポート/エクスポートジェネレータで統一されたアプローチを採用し、pinning scope、例外処理、last-error 処理、クリーンアップ順序を保持しながら段階的にマーシャリングコードを出力します。

変更内容

  • 共有インフラ: IndentedTextWriter、CodeWriterHelpers、GeneratedMethodSignature/GeneratedParameter を新規追加し、複数ジェネレータ間で再利用
  • マーシャリング出力: 全マーシャラー(BlittableMarshaller、BoolMarshaller、CharMarshaller、CustomTypeMarshallingGenerator など)をテキスト書き込みベースに統一
  • COM/VTable生成: ComInterfaceGenerator、ComClassGenerator でシンタックスノード表現から文字列ベースの出力に移行
  • JavaScript生成: JSImportGenerator、JSExportGenerator で直接テキスト出力を実装
  • 増分生成: 値ベースのモデル(JSMarshallingInfo、含まれる型情報)で構造的等価性による キャッシング検証を拡充
  • ヘルパー削除: SyntaxFactoryExtensions、SyntaxEquivalentNode、SyntaxEquivalentComparer など不要になったシンタックス依存ユーティリティを廃止
  • 識別子エスケープ: native エントリーポイント名と COM hint 名でのエスケープ処理を修正
  • 設計ドキュメント: Pipeline.md を新テキスト出力パイプラインと不変性に合わせて更新

パフォーマンスへの影響

生成時間: 20 個の representative workload でベンチマーク測定結果は以下の通り

  • 生成時間比率: 0.182(元実装比)
  • 割り当てバイト数比率: 0.323(元実装比)
  • 全 20 比較ペアで同等の診断出力、バイト同一のアセンブリを生成

エンドツーエンドビルド: CoreLib ビルド実験では全体的な加速は検証されず

  • LibraryImport 生成のみ: 4.36 秒 → 2.56 秒
  • 完全プロジェクト再ビルド: 110.45 秒 → 115.10 秒(平均)、95% 信頼区間 -4.4~+13.7 秒(0 を含む)

ジェネレータ単体では顕著な改善がありますが、完全ビルド時のキャッシング効果・リンク工程は今後の検証課題です。

関連Issue

#95882

その他

  • Copilot の指摘事項(2件)
    • **高: JSMars

#133416 JIT: Model promoted struct definitions through visitors

概要

JITコンパイラの局所変数定義モデルをVisitLocalDefsビジターを通じてリファクタリングし、昇格されたstruct型の論理的フィールド定義(範囲指定のSTORE_LCL_FLDやcall定義を含む)を統一的に報告するようにしました。複数のコア分析(SSA、値番号付け、コピー伝播、非同期解析、エイリアス追跡、ループクエリ)を更新し、昇格特有の定義展開を削除します。将来のSTORE_LCL_VARSノードなど複数局所定義を明示的に表現するIRへの準備となります。

変更内容

  • compiler.hpp: LocalDefProvider型階層を追加し、昇格struct定義の範囲列挙ヘルパーを実装
  • valuenum.cpp: VisitLocalDefsから論理定義を消費するよう値番号付け割り当てを切り替え(+68/-98行)
  • ssabuilder.cpp: SSA名前変更をlocalDefプロバイダー経由で設定、アドレス露出処理を物理定義ノードで分割
  • copyprop.cpp: 定義スタック追跡をlocalNum/ssaNum単位に再構築し、複合SSA名の手動展開を削除(+29/-62行)
  • sideeffects.cpp: 論理定義を使用したローカル書き込み記録(フォールバック機能付き)
  • flowgraph.cpp: ループ定義ビジター/クエリを論理定義消費に更新
  • asyncanalysis.cpp, async.cpp: 論理定義経由で変異局所変数をマーク
  • morph.cpp, lower.cpp, liveness.cpp: 物理定義ノード処理の調整

パフォーマンスへの影響

影響なし(リファクタリングのため、意図された機能変更ではない)

関連Issue

なし

その他

重要な懸念事項(Copilot指摘):

  1. 高優先度: LoopDefinitionsが昇格struct storeの論理定義を記録しなくなり、ループバックエッジ横断でのアサーション陳腐化のリスク
  2. 高優先度: sideeffects.cppの昇格親ローカルがローカル書き込み追跡から除外され、不正なエイリアス解析の可能性
  3. 低優先度: copypropのシャドウされたパラメータ早期リターンでのデバッグアサーションキーの誤り
  4. アーキテクチャ: compiler.h:6508のfgValueNumberLocalStoreテンプレート定義はvaluenum.cppのみに存在し、リンク時トラップの可能性

本PRは複数のコア分析に対する大規模なリワイヤリングであり、回帰面積が大きいため、慎重なテスト検証が必要です。


目次