Pull Request on 2026年10月08日

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

注意点

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


目次

  1. #135445 Fix ILVerify crash on delegate construction
  2. #135431 JIT: Invalidate DFS annotations before recomputing the DFS tree
  3. #135423 [browser][mono] Fix onDotnetReady callback availability across modules
  4. #135415 Fix x86 GC holes in xchg/rorx and GC suspension of spinning threads
  5. #135397 Invoke RunReadyToRunCompiler task for CoreLib crossgen instead of raw Exec
  6. #135381 JIT: Use local's GC type when unspilling a register candidate
  7. #135373 JIT: Preserve inlining of profiled memcmp fallback
  8. #135364 JIT: Preserve null checks in SequenceEqual VN folding
  9. #135363 JIT: Make GenTree::Compare more conservative around several node types
  10. #135338 [release/11.0] Make KillOnParentExit handle Job hierarchy changes on Windows
  11. #135337 Fix cached Windows TLS credential lifetime race
  12. #135327 Fix assertion (node->GetRegNum() != REG_NA) during LSRA
  13. #135323 Fix macOS Process hangs caused by stopped children
  14. #135290 Fix software EH memory leak on Unix
  15. #135282 [release/11.0] Fix hexadecimal float sign round-tripping
  16. #135274 Prevent ZstandardDictionary.Train crashes for small sample sets
  17. #135246 [release/11.0] Fix many array marshalling regressions in CoreCLR
  18. #135093 [cDAC][wasm] Filter unexpected register slots in non-active frames
  19. #134970 JIT: Account for partial SIMD callee saves in hoisting
  20. #134732 Avoid namespace formatting in ILLink analyzer type checks
  21. #134717 Size the RESOLVE_UPDATE_METADATA events in DbgTransportSession::GetEventSize
  22. #134418 Avoid building SslStreamCertificateContexts inside Listener in Quic tests
  23. #134221 Remove JsonToItemsTaskFactory
  24. #133658 Move custom attribute materialization and invocation to managed code
  25. #133570 Add load context identifier option for COM and IJW

#135445 Fix ILVerify crash on delegate construction

概要

ILVerifyが委譲コンストラクタの関数ポインタとしてスタック値(native int引数、ローカル変数、定数など)を受け取る場合にNullReferenceExceptionでクラッシュしていた問題を修正します。修正により、検証エラーが適切に報告され、検証プロセスが完了するようになります。

変更内容

  • src/coreclr/tools/ILVerification/ILImporter.Verify.cs: IsDelegateAssignableの呼び出しをactualFtn.IsMethodチェックで保護。前述のStackMethodチェックをミラーリングし、メソッドでないスタック値の場合は割り当て可能性チェックをスキップ
  • src/coreclr/tools/ILTests/FtnTests.il: ネイティブint引数を関数ポインタとして渡すテストケースを追加(NewObj.DelegateFromNativeIntArgument_Invalid_StackMethod)

パフォーマンスへの影響

影響なし

関連Issue

#135444

その他

検証結果:

  • 新テストを含めて385個すべてのILVerification.Testsが成功(Release/Debug/Checkedすべて)
  • 修正前のコードではNullReferenceExceptionで第2メソッドで失敗、修正後はすべての10メソッドと型が処理される
  • DotNext 5.26.3での検証: 修正前は94番目のメソッドで失敗、修正後はすべての479型・3,429メソッドが処理され368エラーが報告
  • 646個アセンブリのコーパス確認: DotNext.dllのみ変更(クラッシュ→完了)、他に影響なし
  • 変更範囲はnewobj委譲パスに限定

#135431 JIT: Invalidate DFS annotations before recomputing the DFS tree

概要

JIT コンパイラで fgRemoveBlocksOutsideDfsTree() が DFS ツリーを再計算する際に、DFS 由来のアノテーション(m_loops など)が古いツリーに紐づいたままになり、fgDebugCheckFlowGraphAnnotations() でアサーション失敗を引き起こしていた問題を修正します。DFS ツリー置換前に DFS 派生アノテーションを無効化し、他の DFS 再計算箇所との一貫性を確保する変更です。

変更内容

  • src/coreclr/jit/fgopt.cpp: fgRemoveBlocksOutsideDfsTree() でツリー再計算前にループ、支配関係、到達可能性、SSA メタデータなどの DFS 依存アノテーションを無効化するコードを追加(11 行追加)

パフォーマンスへの影響

影響なし

関連Issue

#134834

その他

  • arm64 でのロアリング処理中に発生するデバッグアサーション失敗への対応
  • DFS 再計算時のアノテーション管理の一貫性を確保する修正

#135423 [browser][mono] Fix onDotnetReady callback availability across modules

概要

Mono ブラウザランタイムで onDotnetReady コールバックが異なるモジュール間で同期されず、登録されたコールバックが実行されないリグレッションを修正しました。loaderHelpers オブジェクトをコールバック状態の共有ストレージとして使用することで、ローダーと実行時との間でコールバック情報が正しく渡されるようになります。

変更内容

  • callbacks.ts: コールバック登録処理を loaderHelpers に基づいた実装に変更し、従来の onDotnetReady コールバック抽出とコールバック呼び出しロジックを更新
  • loader/: assets.ts、config.ts、run.ts で、共有されるコールバック状態へのアクセスを loaderHelpers 経由に統一
  • startup.ts: ランタイム起動時のコールバック処理を loaderHelpers から読み込むように修正
  • types/internal.ts: loaderHelpers の型定義にコールバック状態フィールドを追加
  • テスト: ModuleConfigTests.cs でダウンロード進捗シナリオに withDotnetReady 登録を追加し、複数のテストケースで動作を検証

パフォーマンスへの影響

影響なし

関連Issue

#134642 の実装により報告されたリグレッション

その他

  • 修正内容は Mono ブラウザランタイムに限定され、CoreCLR は変更されない
  • 公開 API withDotnetReady と従来の onDotnetReady の両方が対象
  • モジュール間の参照渡し(loaderHelpers)によるコールバック状態の共有が解決策となる

#135415 Fix x86 GC holes in xchg/rorx and GC suspension of spinning threads

  • 作成者: @EgorBo
  • 作成日時: 2026年10月08日 10:55:43(UTC)
  • マージ日時: 2026年10月08日 23:13:57(UTC)
  • ラベル: area-CodeGen-coreclr

概要

x86アーキテクチャにおけるGC追跡の不具合を修正するPRです。メモリ/スタック操作におけるrorx/xchg命令後のGCレジスタ追跡の不整合と、スピニングスレッドのGC停止ハング(特にInlinedCallFrameが関連)を解決します。最近のフルinterruptible化により、これまで潜在していた問題が顕在化しました。

変更内容

  • emitxarch.cpp: emitOutputSV/emitOutputCVにおいて、*_SRD_CNS、*_SRD_RRD、*_MRD_CNS等の形式で、GC操作の宛先レジスタのGCライブネスをクリアしていなかった問題を修正(例:rorx edi, dword ptr [ebp+0x08], 5がediをGC参照として報告し続けていた)
  • codegenxarch.cpp: genCodeForSwapが片側だけGC型の場合のみEA_GCREFを渡していたため、ref↔byrefのxchgでエミッタのGC追跡が同期されなかった問題を修正
  • threadsuspend.cpp: x86でInlinedCallFrameが無効な場合のスキップ処理を追加(GC停止時にスピニングスレッドが"JITコード内ではない"と誤判定されるハング問題を回避)
  • stackwalk.cpp: スタックウォーク順序に関する古いコメント更新

パフォーマンスへの影響

影響なし。本PRは正確性バグ修正であり、パフォーマンス特性に変更はありません。

関連Issue

#135390 #135407 #134837(部分的に対応) Runtime_134894(GCStress下のハング) Runtime_71831(未修正:JitNoStructPromotion=1の間欠的問題)

その他

Copilot Code Reviewから、BMI2 RORX GC状態の回帰テスト追加が推奨されています。PR作成者はCORINFO_HELP_BULK_WRITEBARRIER_SMALLが無GCヘルパーとして扱われているが、プリスタブを経由する初回呼び出しでGCが発生する可能性があることを指摘しており、この点は別途対応が必要とされています。


#135397 Invoke RunReadyToRunCompiler task for CoreLib crossgen instead of raw Exec

  • 作成者: @sbomer
  • 作成日時: 2026年10月08日 01:44:15(UTC)
  • マージ日時: 2026年10月08日 20:08:07(UTC)
  • ラベル: area-ReadyToRun

概要

CoreLib の crossgen2 コンパイル呼び出しを、手書きの <Exec> コマンドラインから SDK が PublishReadyToRun で使用する共有 RunReadyToRunCompiler MSBuild タスクに移行しました。非複合パスはバイト単位で同一であることが検証済みですが、複合パス(Apple モバイル)はローカルで検証されていません。

変更内容

  • src/coreclr/crossgen-corelib.proj: Crossgen2Tasks タスクを読み込み、既存の crossgen2 オプションを RunReadyToRunCompiler タスクパラメータにマッピング。非複合・複合(Apple モバイル)の両方のパスに対応。
    • 非複合パス:元の <Exec> コマンドラインと同一の動作に検証済み
    • 複合パス:CreateCompositeImage/ReadyToRunCompositeBuildReferences などの既存メカニズムを再利用

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

重要な懸念点: Copilot コードレビューにより以下が指摘されています:

  • 高優先度: タスク構成の明示的な指定が必要(クロスカテゴリ タスク参照による混合構成ビルド破損のリスク)
  • 中優先度: WebAssembly コンパイラ引数の意図しない変更の除去が必要
  • 検証の制限: Apple モバイル複合パスは macOS/iOS ツールチェーン がないため、ローカルで検証されていない点に注意が必要

#135381 JIT: Use local's GC type when unspilling a register candidate

  • 作成者: @EgorBo
  • 作成日時: 2026年10月08日 00:01:46(UTC)
  • マージ日時: 2026年10月08日 17:27:50(UTC)
  • ラベル: area-CodeGen-coreclr

概要

JITのレジスタ再割り当て時にローカル変数のGC型を正しく使用するよう修正しました。GC型でないローカル変数(例:ネイティブint T*)がGC型の用途で再ロードされる際、レジスタが誤ってbyrefとしてマークされ、アンマネージド呼び出し時にGCが不正なアドレスを参照してクラッシュする問題を解決します。特にインライナーがポインタをbyref型のthisとして渡すTerraFXスタイルのパターンで発生していました。

変更内容

  • src/coreclr/jit/codegenlinear.cpp: genUnspillRegIfNeededを修正し、レジスタ再ロード時にローカル変数のGC型を使用するように変更
  • src/coreclr/jit/codegenxarch.cpp / codegenarmarch.cpp: アンマネージド呼び出しでGC型のカリー保存レジスタが存在しないことを保証するDEBUGアサーションを追加
  • src/tests/JIT/Regression_ro_2/Runtime_135374.cs: 回帰テストケースを追加し、スピル/リロードパターンを保持

パフォーマンスへの影響

影響なし(バグ修正による正確性の向上)

関連Issue

#135374

その他

  • この問題は.NET 11で公開API関数の新たなインライン化により露呈しました
  • 修正により、GCがアンマネージド呼び出しを跨いで不正なカリー保存レジスタを参照することを防ぎます
  • Copilot Code Reviewから、ターゲット指定された回帰テストを追加することが推奨されています

#135373 JIT: Preserve inlining of profiled memcmp fallback

  • 作成者: @EgorBo
  • 作成日時: 2026年10月07日 23:06:09(UTC)
  • マージ日時: 2026年10月08日 11:27:17(UTC)
  • ラベル: area-CodeGen-coreclr

概要

プロファイル情報に基づいて特殊化されたSequenceEqual呼び出しにおいて、可変長フォールバックのインライン化を保持する修正。従来はオリジナル呼び出しのインライン候補情報をクリアしていたため、サイズ予測が外れた場合にヘルパー呼び出しとベクトルレジスタスピルが発生していた。フォールバックの候補情報と戻り値プレースホルダーを保持し、インライン化前にQMARKを展開することで改善。

変更内容

  • src/coreclr/jit/importercalls.cpp: プロファイル情報を使用したSequenceEqualの特殊化処理を修正。フォールバック関数のインライン候補情報を保持し、QMARK式を展開前にインライン化するように改善(+21/-3行)

パフォーマンスへの影響

大幅な改善

  • Windows x64環境でのSliceSliceベンチマーク: 296.3 ms → 276.5 ms(改善率: 約6.7%、PRなし時の基準値: 281.9 ms)
  • Span.IndexOfレプロ(7文字の検索パターンでトレーニング後、4文字で検索): 942 ns → 524 ns(改善率: 約44%、基準値: 528 ns)

ヘルパー呼び出しとベクトルレジスタスピルの削減により、特にサイズ予測が外れるケースで顕著な改善を実現。

関連Issue

#134865

その他

なし


#135364 JIT: Preserve null checks in SequenceEqual VN folding

  • 作成者: @EgorBo
  • 作成日時: 2026年10月07日 20:51:11(UTC)
  • マージ日時: 2026年10月08日 23:15:25(UTC)
  • ラベル: area-CodeGen-coreclr

概要

JITコンパイラの値番号付け(VN)最適化において、SpanHelpers.SequenceEqualの最適化時に、マネージド実装ではnullポインタの逆参照でスローするはずの場合でもtrueを返してしまうバグを修正しました。短い非空シーケンス(0 < length < sizeof(nuint))のnull参照に対してはGT_NULLCHECKを保持し、ゼロ長およびロングバッファのショートカットは維持します。長さが未知でnull参照の可能性がある場合は関数呼び出しを保持し、引数の副作用の評価順序は保証されます。

変更内容

  • src/coreclr/jit/assertionprop.cpp: 等値VNSequenceEqualフォールディングのセマンティクスを改良
    • null参照チェック(GT_NULLCHECK)の保持ロジックを追加
    • 短い長さでの呼び出し保持
    • 未知長での呼び出し保持
    • 引数の副作用評価順序の維持

パフォーマンスへの影響

影響なし。本変更は正確性の修正であり、最適化ショートカットは引き続き機能します(ゼロ長およびロングバッファケース)。

関連Issue

なし

その他

Copilotの指摘により、null参照、長さの境界値、および評価順序に関する回帰テストカバレッジの追加が推奨されています。本修正はコンパイラの内部実装(JIT最適化ロジック)への変更であり、公開APIに影響はありません。


#135363 JIT: Make GenTree::Compare more conservative around several node types

  • 作成者: @EgorBo
  • 作成日時: 2026年10月07日 20:19:42(UTC)
  • マージ日時: 2026年10月08日 23:12:52(UTC)
  • ラベル: area-CodeGen-coreclr

概要

JITのGenTree::Compare関数を改善し、ノード比較時に複数の重要なフィールドをチェックするようにしました。特に、異なるフィールドシーケンスを持つ定数ノード(GT_CNS_INT)が誤って等価と判定され、ガード付きデューティ値分岐(GDV)の最適化で重要なパス依存情報が失われる問題を修正しています。Roslyn使用時に_containingTypeと_containingSymbolが同じオフセット(0x38)に存在する場合、異なる型チェック結果が同一視され、誤った最適化が行われていました。

変更内容

  • src/coreclr/jit/gentree.cpp: GenTree::Compareの比較ロジックを強化
    • GT_CNS_INT:フィールドシーケンス(fldSeq)、ハンドル種別、コンパイル時ハンドルの比較を追加
    • 関係演算子(Relops):GTF_RELOP_NAN_UNフラグ(順序付き vs 順序なし)の比較を追加
    • 間接参照系ノード(IND、BLK、stores、ARR_LENGTH、MDARR_*、NULLCHECK、atomic操作、CMPXCHG等):GTF_IND_FLAGS(パス依存のGTF_IND_NONFAULTING含む)の比較を追加
    • GT_ARR_ADDR:パス依存のGTF_ARR_ADDR_NONNULLフラグの比較を追加
    • GT_BOX:上流のdef/copyステートメントの比較を追加
    • 予期しない拡張演算子(ExOps)をリリースビルドで常に不等と判定

パフォーマンスへの影響

影響なし(SPMI[Small Pig Milder Interp]実行でほぼ変化なし)

関連Issue

#135350

その他

本修正は内部実装(JITコンパイラの最適化パス)に関わるもので、公開APIには影響しません。修正により、フィールドオフセットが同一でもフィールド種別が異なる場合の誤った統合を防ぎ、正確な型チェックと値の伝播を保証します。Coplitレビューでは、報告された誤コンパイルに対する回帰テストの追加が推奨されています。


#135338 [release/11.0] Make KillOnParentExit handle Job hierarchy changes on Windows

概要

Windows上でProcessStartInfo.KillOnParentExitを使用する際、親プロセスが別のWindows Job Objectに参加した後に子プロセスを起動するとERROR_ACCESS_DENIEDが発生する問題を修正します。キャッシュされたkill-on-parent-exit jobが親プロセスの新しいjob階層に挿入できない場合、互換性のあるjobに置き換えることで、親プロセス終了時の子プロセス強制終了という要件を保持します。

変更内容

  • Interop.JobObjects.cs: Windows Kernel32 APIの相互運用定義を追加(19行追加)
  • SafeProcessHandle.Windows.cs: Job階層の変更に対応するロジックを実装。キャッシュされたjobが親プロセスの新しいjob階層と互換性がない場合、新しいcompatible jobに置き換える処理を追加(109行追加、17行修正)
  • KillOnParentExitTests.cs: ERROR_ACCESS_DENIEDが発生するシナリオを検証するテストケースを追加(116行追加)

パフォーマンスへの影響

影響なし。ただし、KillOnParentExitが有効な場合かつERROR_ACCESS_DENIEDが発生する場合に限り、リトライ処理により若干のオーバーヘッドが生じる可能性があります(最大2回の追加リトライ)。KillOnParentExitはデフォルトで無効のため、影響範囲は限定的です。

関連Issue

#134990(顧客報告)、#135032(オリジナル修正、release/11.0へのバックポート)

その他

  • .NET 11で導入されたProcessStartInfo.KillOnParentExit APIに関する修正
  • リスク評価: 低
  • 回帰テストは追加済みで現在パス中

#135337 Fix cached Windows TLS credential lifetime race

  • 作成者: @rzikm
  • 作成日時: 2026年10月07日 12:15:57(UTC)
  • マージ日時: 2026年10月08日 09:22:00(UTC)
  • ラベル: area-System.Net.Security

概要

Windows SslStreamのハンドシェイク時に、認証情報キャッシュのスキャベンジング処理がキャッシュルックアップ後かつASC/ISC呼び出し前に最後の参照を解放することで発生するObjectDisposedExceptionを修正します。キャッシュヒット時に認証情報参照を取得し、ハンドシェイク完了/失敗時、認証情報置換時、ストリーム破棄時に参照を解放することで競合状態を排除します。キャッシュキーとパブリック認証動作は変更されません。

変更内容

  • SafeCredentialReference.cs: 認証情報参照の生存期間管理を改善(+9行)
  • SslSessionsCache.cs: キャッシュヒット時に参照を取得してから返却するロジックを追加(+14行)
  • SslStream.Protocol.cs: 両方のハンドシェイク実装でPAL呼び出し前に参照を保持し、成功/失敗時に解放(+14行)
  • SslStream.TlsSessionWedge.cs: 軽微な変更(+1行)
  • SslStreamCredentialCacheTest.cs: キャッシュ破棄のリグレッション検証用テストを追加(28ケース)。クライアント/サーバー役割、TLS 1.2/1.3、両ハンドシェイク実装、クライアント証明書再選択、再開無効化、証明書拒否をカバー

パフォーマンスへの影響

キャッシュルックアップ+呼び出し元参照解放の隔離測定で、修正前: 50.76 ns、修正後: 59.30 ns(約16%増加)。ただし、これはキャッシュ操作の個別測定値であり、エンドツーエンドのハンドシェイクタイミングではありません。メモリ割り当ては両者ともゼロです。

関連Issue

#133904

その他

  • テスト検証: x64/x86 Debug/Release機能テスト、ユニットテスト合計5,372~5,340ケース、すべてパス
  • Windows環境での検証のみ実施。Linux/macOSおよび旧Windowsバージョンは未検証
  • コード変更と概要はGitHub Copilot支援で生成

#135327 Fix assertion (node->GetRegNum() != REG_NA) during LSRA

概要

JIT LSRAレジスタ割り当て中に、構造体リターンバッファへの参照とLEA命令間のコピー挿入時にアサーション失敗が発生する問題を修正します。Change #134644で導入されたgcWriteBarrierFormFromTargetAddressのfgAddrCouldBeHeapがコピーを透視できず、NO_REGのLEAから値をコピーしようとした際にアサーションが発生していました。修正はfgAddrCouldBeHeapにLEA除外後のgtSkipReloadOrCopyを追加するもので、動作結果への差分は観察されていません。

変更内容

  • src/coreclr/jit/flowgraph.cpp: fgAddrCouldBeHeap関数にgtSkipReloadOrCopy呼び出しを追加(+3行)
    • LEA命令をスキップして、基となるアドレス値を正しく追跡できるようにします

パフォーマンスへの影響

影響なし(差分なし)

関連Issue

#134831 #134644(関連変更)

その他

なし


#135323 Fix macOS Process hangs caused by stopped children

概要

macOSにおいて、waitid(WEXITED | WNOHANG | WNOWAIT)が停止した子プロセスを報告する一方でwaitpid(WNOHANG)がそれを回収できない場合、SIGCHLD ハンドラが共有ロックを保持したまま同じ子プロセスを何度も観察し、他のProcess操作がハングする問題を修正しました。回収できない子プロセスが報告された場合、no-progressループを継続するのではなく、すべての追跡対象の子プロセスをスキャンするフォールバックに切り替え、既存の高速パスと非ブロッキングフォールバックを活用します。

変更内容

  • ProcessWaitState.Unix.cs: waitid呼び出しで報告された子プロセスが回収できない場合、すべての追跡対象の子プロセスをスキャンするフォールバックロジックを実装(計8行の変更)
  • ProcessTests.Unix.cs: 別の子プロセスが停止している間に同期・非同期の終了待機をカバーする回帰テストを追加(58行追加)
  • AssemblyInfo.cs: Process tests向けの一時的なシリアル化設定を削除(6行削除)、macOS上のクラスレベルの並列化を復元
  • System.Diagnostics.Process.Tests.csproj: テスト設定を更新(2行追加/1行削除)

パフォーマンスへの影響

影響なし。修正により既存の高速パス(子プロセスを正常に回収できる場合)は保持されます。ハング状態は解決され、ブロッキングが排除されるため、実質的にはスループットが改善されます。

関連Issue

#135294

その他

  • macOSのプロセス管理における共有ロック競合が根本原因(OS固有の動作差異に起因)
  • RemoteExecutor隔離変更とタイムアウト設定は既存のまま保持
  • 変更はUnix共有実装に限定されており、他のプラットフォームには影響なし

#135290 Fix software EH memory leak on Unix

  • 作成者: @janvorli
  • 作成日時: 2026年10月06日 16:49:21(UTC)
  • マージ日時: 2026年10月08日 22:09:30(UTC)
  • ラベル: area-VM-coreclr

概要

Unix環境でのソフトウェア例外処理(EH)におけるメモリリークを修正。DispatchManagedExceptionが動的に確保されたコンテキストと例外レコードの所有権を取得していなかったため、ExInfoが必要に応じてこれらレコードの所有権を適切に管理するようにしました。

変更内容

  • exceptionhandling.cpp/h: ExInfoがダイナミックに割り当てられたコンテキストと例外レコードの所有権を取得する機構を追加(+28行)
  • 回帰テスト追加: GitHub_135234ディレクトリに新しい回帰テスト(test135234.cs/csproj)を追加し、メモリリークシナリオを検証

パフォーマンスへの影響

影響なし。本修正は適切なメモリ解放を実現することでメモリリークを防止し、長時間実行時のメモリ使用量安定化に寄与します。

関連Issue

#135234

その他

  • 修正対象はランタイムのネイティブコード(coreclr/vm層)
  • Unix環境に特有の問題への対応
  • 公開APIではなく内部実装の修正

#135282 [release/11.0] Fix hexadecimal float sign round-tripping

概要

カスタム符号を持つ数値のパースと16進浮動小数点フォーマットにおいて、重複する符号プレフィックスの処理を修正しました。パース時は長い方の符号にマッチさせることを優先し、同じ長さの場合はPositiveSignを選択するように改善されています。これにより、フォーマットされたテキストのラウンドトリップが正確に動作するようになります。

変更内容

  • Number.Parsing.Common.cs: 符号マッチング時に最長一致を選択し、同一長の場合はPositiveSignを優先する基本ロジックを追加
  • NumberStyles.cs: 符号パース処理の制御フラグを調整
  • Number.Formatting.cs: 16進浮動小数点フォーマット処理の簡略化
  • Number.Parsing.cs: パース実装を共通ロジックへ統合し、重複コードを削減
  • 各種テスト: DoubleTests.cs、HalfTests.cs、SingleTests.cs、BFloat16Tests.cs、BigInteger/parse.csに、カスタム符号を使用したラウンドトリップテストを追加(合計280行超の新規テスト)

パフォーマンスへの影響

影響なし。符号マッチング時のロジック改善であり、パフォーマンスへの負の影響は予期されていません。

関連Issue

#135039
Main PR: #135132

その他

  • .NET 11新機能のバグ修正: 16進浮動小数点フォーマット・パースはJavaScript .NET 11で新規実装されたもので、この修正は回帰ではなく新機能内のバグ対応です
  • テスト実績: System.Runtime.Testsで77,838テスト合格、System.Runtime.Numericsで8,427テスト合格
  • リスク評価: 低。符号選択ロジックに限定された変更で、カスタム符号を含む回帰テストで網羅されています
  • 後付けReleaseブランチへのバックポート: Release/11.0ブランチへのバックポートであり、主要な修正はmainブランチで既に実施済み

#135274 Prevent ZstandardDictionary.Train crashes for small sample sets

概要

ZstandardDictionary.Trainメソッドが、最初の75%のサンプルが8バイト未満の場合にプロセスをクラッシュさせる問題を修正しました。zstdトレーナーが符号なし整数アンダーフローを引き起こす可能性があったため、マネージコード側で防御的なガードを追加し、不十分なトレーニングデータをIOExceptionとして拒否します。

変更内容

  • System/IO/Compression/Zstandard/ZstandardDictionary.cs: トレーニング前缀のバイト数を検証するマネージガードを追加(15行追加)。サンプル長検証ループ内で合計バイト数をカウントし、8バイト未満の場合はIOExceptionをスロー
  • Zstandard/ZstandardDictionaryTests.cs: 回帰テストを追加(41行追加)。クラッシュの再現、異なるサンプル数・前缀サイズ、8バイト/9バイト境界での成功ケース、引数検証順序の優先度などをカバー

パフォーマンスへの影響

影響なし。ガードは既存のサンプル長検証・コピーループ内に統合されており、追加の処理オーバーヘッドはありません。

関連Issue

#135264、facebook/zstd#4827

その他

  • バンドルされたzstdライブラリ自体は変更されていません。zstd側に修正が取り込まれた後、このマネージガードは削除できます
  • Windows x64での検証を実施済み(2,999テスト実行、すべてパス)。他プラットフォームの検証は実施されていません
  • 修正前は0xC0000005(アクセス違反)でクラッシュしていたテストケースが、修正後は正常にIOExceptionをスロー

#135246 [release/11.0] Fix many array marshalling regressions in CoreCLR

概要

.NET 11.0のリリースブランチにおいて、ネイティブコード間でのP/InvokeおよびCOM相互運用の配列マーシャリング時に発生していた複数の回帰バグを修正するバックポート。byte*[]、char[](CharSet.Ansi)、decimal[]、enum配列などのマーシャリング処理で、不正な値の受け渡しやメモリピニング処理の問題、例外発生、SAFEARRAY処理の不具合が修正される。

変更内容

  • ilmarshalers.cpp: LPArray、ByValArray、SAFEARRAYマーシャリング時の配列型処理を修正
  • olevariant.cpp: SAFEARRAYのバリアント型マーシャリング、特にbyrefバリアント型の値伝搬と型保持を修正
  • stubhelpers.cpp/StubHelpers.cs: ネイティブ側のヘルパー関数でのピニング処理とメモリ管理の改善
  • mlinfo.cpp: マーシャリング指令の検証ロジックを強化
  • テスト追加: SafeArray、LPArray、ByValArrayの包括的な回帰テストが多数追加(1000行以上)

パフォーマンスへの影響

影響なし。本修正は正確性(correctness)の問題対応であり、パフォーマンス面への言及なし。

関連Issue

#134174 #134576 #134577 #134575 #134573 #134579 #134580 #134581 #134574

その他

  • リスク評価: 中程度以下。回帰テストを大幅に追加し、.NET 10との動作一致を検証済み
  • 互換性影響: クラッシュしていた以前の動作(関数ポインタ配列など)は正常に機能するようになり、一部のケースではMarshalDirectiveExceptionを発生させるようになった
  • 根本原因: PR #126911で導入された回帰に対する修正であり、P/Invoke/COM相互運用の配列マーシャリング全般にわたる問題が解決される

#135093 [cDAC][wasm] Filter unexpected register slots in non-active frames

概要

Wasm GC情報において、非アクティブフレーム内の予期しないレジスタスロットをフィルタリングする修正です。WasmGCInfoTraits.IsScratchRegisterメソッドを更新し、レジスタスロットが存在しないことを強制することで、ネイティブデコーダーのフォールバック動作と一致させます。既存のGC情報デコード、アクティブフレームの動作、エンコーディング定数、およびHAS_INTERRUPTIBLE_RANGESは変更されません。

変更内容

  • GCInfo.md: GCInfo契約仕様にWasm GCがレジスタスロットを含まないという不変条件を文書化(+3行)
  • WasmGCInfoTraits.cs: IsScratchRegisterメソッドを更新し、Debug.Failを呼び出してfalseを返すように変更。これにより予期しないレジスタスロットへのアクセスを検出します(+11行)

パフォーマンスへの影響

影響なし

関連Issue

#135055に対するフォローアップ

その他

  • 検証済み: マネージドcDAC ビルド成功(警告・エラー0件)、既存Wasm GCInfoテスト4件全て成功、cDACユニットテストスイート3,236件全て成功
  • ネイティブ/ランタイム/ブラウザのリビルドおよびライブWasmデモは実施されていません
  • 汎用デコーダー、インタープリタ、スタックウォーカー、テストソースへの変更は含まれていません

#134970 JIT: Account for partial SIMD callee saves in hoisting

  • 作成者: @EgorBo
  • 作成日時: 2026年09月30日 18:22:14(UTC)
  • マージ日時: 2026年10月08日 23:12:05(UTC)
  • ラベル: area-CodeGen-coreclr

概要

ループ内での関数呼び出しを含む場合に、広いSIMD値のカリー保存レジスタ予算を過大評価しないようにJITを修正しました。部分的なSIMDカリー保存を適切に考慮することで、ホイスティング最適化時のレジスタ割り当てが改善されます。

変更内容

  • src/coreclr/jit/optimizer.cpp: ループのホイスティング処理でSIMDカリー保存レジスタの予算計算を修正。部分的なSIMD値の保存に対応し、過大評価を排除(+6行)
  • src/tests/JIT/Regression_ro_2/Runtime_134935.cs: Issue #134935に対応するリグレッションテストケースを追加(+33行)

パフォーマンスへの影響

ホイスティング最適化時のレジスタ割り当てが正確になることで、ループ内でのメモリアクセス削減およびコード生成品質の向上が期待されます。具体的なベンチマーク数値は提供されていません。

関連Issue

#134935

その他

なし


#134732 Avoid namespace formatting in ILLink analyzer type checks

概要

ILLinkのRoslynアナライザーが既知型の検証時に、型名チェック前に不要な名前空間フォーマットを行っていた問題を修正しました。メタデータ名を先に確認して不一致時に名前空間フォーマットをスキップすることで、大規模な生成コンパイルでのパフォーマンスを向上させます。

変更内容

  • ITypeSymbolExtensions.cs: 既知型チェックのロジックを最適化。メタデータ名の早期チェック、Roslyn特殊型の直接処理、名前空間/名前の比較方式の改善
  • WellKnownType.cs: 無効な既知型値の結果処理を保持
  • DynamicallyAccessedMembersAnalyzerTests.cs: 既知型、派生型、無関連型に対する診断と位置情報の検証テストを追加(58行)

パフォーマンスへの影響

20,001ファイル・160,000メソッドの合成相互運用型コンパイルでの測定結果(Windows x64、SDK 11.0.100-rc.1.26420.103、Release、ILLink・NETアナライザー・XML文書化有効):

  • 中央値ビルド時間: 32.30秒 → 25.32秒
  • 中央値削減量: 7.20秒(22%改善)

名前空間フォーマットの不要な呼び出しとメモリ割り当てを削減。ILLink警告出力は完全に一致。

関連Issue

なし

その他

  • 51個のILLinkアナライザーテストすべてが合格(データフロー・生成コード対応)
  • 内部実装の最適化であり、公開APIの変更なし

#134717 Size the RESOLVE_UPDATE_METADATA events in DbgTransportSession::GetEventSize

概要

LinuxおよびmacOSの debugger transport におけるDB_IPCE_RESOLVE_UPDATE_METADATA_*イベントのサイズ計算が欠落していた問題を修正します。プロファイラがSetILFunctionBodyでメソッドに新しいローカル変数を追加した場合、debuggerがそのメソッドのローカル変数を要求すると、デバッグ対象プロセスが不正なメモリを読み取ってSIGSEGVで クラッシュしていました。本修正により、3つのペイロード保有イベント(_1_RESULT、_2)と1つのヘッダーのみイベント(_2_RESULT)をGetEventSizeの switch文に追加することで問題を解決します。

変更内容

  • src/coreclr/debug/shared/dbgtransportsession.cpp: DbgTransportSession::GetEventSizeに4つのDB_IPCE_RESOLVE_UPDATE_METADATA_*イベントのサイズ計算ケースを追加
    • DB_IPCE_RESOLVE_UPDATE_METADATA_1_RESULT:MetadataUpdateRequestペイロード(pMetadataStart、nMetadataSize)を含む
    • DB_IPCE_RESOLVE_UPDATE_METADATA_2:バッファポインタ(pMetadataStart)を含む
    • DB_IPCE_RESOLVE_UPDATE_METADATA_2_RESULT:ヘッダーのみ(hrフィールド)
    • 既存のゼロペイロードグループに該当イベントも統合

修正はmscordbi.soとcoreclr.soの両方に含まれるdebug/di/shared.cppとdebug/ee/shared.cppで必要なため、両バイナリで同じ変更が必要です。

パフォーマンスへの影響

影響なし

関連Issue

#134714 #134715 #97476 #110122

その他

  • 互換性: 破壊的変更なし。送信される3つのイベントの長さがペイロード分だけ増加するのみで、他のイベント・構造体・フレーミングは変更なし。
  • サポート範囲: 6.0以降の全サポートブランチで発生していた既知問題。release/11.0、10.0、9.0、8.0へのバックポートが推奨されます。
  • テスト: 検証は最小限の再現コード(新しいローカル変数を追加するCプロファイラと例外停止時にローカル変数を要求するdebugger)で実施。10.0.12(release/checked, linux-x64/arm64)、11.0 RC1、main で検証済み。release ビルド: 修正前は SIGSEGV 3/3、修正後は正常なローカル変数 3/3; checked ビルド: 修正前は assert 3/3、修正後は assert なし。
  • リスク: Low。Windows標準ビルドは本 transport を使用しないため影響なし。mscordbiとcoreclrは常に同じパッケージで配布されるべき。

#134418 Avoid building SslStreamCertificateContexts inside Listener in Quic tests

  • 作成者: @rzikm
  • 作成日時: 2026年09月22日 13:35:49(UTC)
  • マージ日時: 2026年10月08日 09:19:39(UTC)
  • ラベル: area-System.Net.Quic

概要

QUIC テストにおいて、SslStreamCertificateContext の構築をキャッシュ化することで、テスト実行時のオンライン証明書失効確認(AIA ダウンロード)による遅延を排除します。Windows の Schannel では、リーフ証明書のみの設定により MsQuic がマネージド層で AIA ダウンロードを実行し、テストのハンドシェイクタイムアウト(10秒)を超過していました。この PR により、オフライン環境での事前構築コンテキストを QuicTestCollection レベルでキャッシュし、テスト間で再利用することで、AIA リクエストを完全に排除し、ハンドシェイク時間を約12.2秒から44ms に短縮します。

変更内容

  • QuicTestCollection.cs: QuicTestCollection フィクスチャレベルでデフォルト サーバー証明書とデフォルト クライアント証明書の SslStreamCertificateContext をキャッシュします。
  • MsQuicTests.cs: キャッシュされたコンテキストをテスト間で再利用。異なる証明書を使用するテストでは明示的にサーバーコンテキストをクリア。ループバック IP 用の証明書テストでは発行者チェーン情報を含むオフラインコンテキストを構築・使用。
  • QuicStreamConnectedStreamConformanceTests.cs / QuicTestBase.cs: 相微的な調整(カウント変更)。

パフォーマンスへの影響

大幅な改善:

  • オンライン AIA 検出を実施する leaf-only 設定:12.231秒(2 回の AIA リクエスト)
  • 事前構築オフラインサーバーコンテキスト:44ms(AIA リクエストなし)

改善率は約99.6%。AIA 遅延による Schannel のタイムアウト問題を完全に解決。

関連Issue

#133645、#134585

その他

  • テスト検証済み:479 total、478 passed、1 expected platform skip、0 failures
  • ループバック証明書テストの動作不変性を維持(TargetHost、IP SAN、DNS ミスマッチ検証、X509RevocationMode.NoCheck、10秒ハンドシェイク期限)
  • リトライ、タイムアウト拡大、検証バイパス、信頼ルート変更は導入されていません
  • 一時的な証明書プロビジョニング実験、セレクタ、スタンドアロンチェーンプローブ、およびランブックは削除

#134221 Remove JsonToItemsTaskFactory

  • 作成者: @rainersigwald
  • 作成日時: 2026年09月18日 20:28:48(UTC)
  • マージ日時: 2026年10月08日 14:30:35(UTC)
  • ラベル: area-Build-mono

概要

マルチスレッドモードでのMSBuild実行時に非対応だったカスタムタスクファクトリ JsonToItemsTaskFactory を削除し、明示的な入力出力を持つコンパイル済みMSBuildタスクに置き換えました。WASM および Mono コンポーネントマニフェストの JSON 解析機能は、新しく追加された固定タスク実装で代替されます。

変更内容

  • 削除: JsonToItemsTaskFactory クラスとその関連ドキュメント(合計 478 行削除)
  • 追加: 新しいコンパイル済みタスク実装
    • JsonToItemsTasks.cs: WASM および Mono コンポーネント向けの固定タスク定義
    • JsonToItemsReader.cs: マニフェスト JSON 解析の共有ロジック(203 行)
  • 更新: タスク登録設定
    • WasmApp.Common.targets: WASM タスク登録を更新
    • MonoTargetsTasks.props: コンポーネントタスク登録を更新
    • CommonMobileBuild.props: モバイルタスク登録を更新
  • 追加: テストカバレッジ(JsonManifestReaderTests.cs で 283 行追加)
    • レガシーおよびマルチスレッド MSBuild 実行モード両対応

パフォーマンスへの影響

影響なし

関連Issue

dotnet/msbuild #15010

その他

  • 変更はマルチスレッド MSBuild モードでのカスタムタスクファクトリ非対応という制限に対応するもの
  • 機能的には置き換え前後で等価性を保証
  • スコープ付き出力の機能は新しいタスク実装でも保持される

#133658 Move custom attribute materialization and invocation to managed code

概要

カスタム属性の具現化と呼び出し処理をネイティブコード(C++)からマネージドコード(C#)に移行するレイヤー2の改善です。従来のQCallsを廃止し、バウンド済みマネージドBlobリーダーを再利用して、中間データグラフを構築せずにカスタム属性を処理します。プリミティブ/Enum型のコンストラクタ引数はアンボックス状態を保持し、InlineArray4<T>ストレージと必要時のヒープフォールバックを活用します。パフォーマンスは基準実装の0.73~0.82倍の処理時間に改善されました。

変更内容

  • RuntimeCustomAttributeData.CoreCLR.cs: CustomAttribute_CreateCustomAttributeInstanceとCustomAttribute_CreatePropertyOrFieldDataをマネージドコードに移植(+345行)。スカラー幅、Enum識別、型配列、名前付き引数順序、例外境界、型解決動作を保持
  • customattribute.cpp/h: ネイティブ実装の削除(-815行/-20行)。ただしネイティブCaArg/CaValueパース処理と属性使用パース処理は保持
  • qcallentrypoints.cpp: 古い物質化QCallsの削除(-2行)
  • テストケース追加: Reflection.Emit(78+73行)とカスタム属性(365行)の包括的なテストを追加。不正形式/切断されたBlob、Enum幅、浮動小数点ビット、移動GC、17引数ヒープフォールバック、Collectible/Contextual型解決をカバー

パフォーマンスへの影響

改善: ウォーミング済みの参照引数、名前付き引数、配列、タグ付きオブジェクトケースで基準比0.73~0.82倍(最大27%高速化)。マネージド割り当ては変化なし。

注記: フレッシュプロセス結果は混在的で、パーサー/ボックスキャッシュ初期化を含むため、ユニバーサルなスタートアップ最適化やクロスプラットフォーム性能改善ではありません。

関連Issue

#123864(親要件)、#126542(先行作業)

その他

  • 互換性: 破壊的変更なし。公開APIレベルでの変更なし
  • スコープ: CoreCLRのみ(Browser/WASIマネージドCoreLiband ABI入力は検証済みだが、実行時テストは未実施)
  • 次のレイヤー: #133659(func-eval)と#133660(ネイティブ機構クリーンアップ)が後続予定
  • 実装準備: GitHub Copilotで支援。am11のコード再利用部はコ・オーサー帰属を保持

#133570 Add load context identifier option for COM and IJW

  • 作成者: @elinor-fung
  • 作成日時: 2026年09月10日 03:28:29(UTC)
  • マージ日時: 2026年10月08日 03:51:46(UTC)
  • ラベル: area-Host

概要

COMおよびC++/CLI(IJW)ホスティングに対して、System.Runtime.InteropServices.[COM|CppCLI].LoadContextIdentifier設定プロパティを通じてコンポーネントロードコンテキスト(ALC)の指定機能を実装しました。同じ識別子を持つコンポーネントは同一のコンテキストを共有でき、リゾルバーは読み込み順序に基づいて登録されます。分離コンテキストまたはデフォルトコンテキストを使用するコンポーネントは影響を受けません。

変更内容

マネージドコード側:

  • ComponentLoadContext/ComponentLoadContextManagerを新規実装し、デフォルト、分離、識別子共有の各ALCタイプを管理
  • ComActivator.csとInMemoryAssemblyLoader.csでロードコンテキスト指定に対応
  • IsolatedComponentLoadContext.csを廃止し、汎用的なComponentLoadContext.csに置き換え

ネイティブコード側:

  • comhost.cppとijwhost.cppでruntimeconfigプロパティを読み込み、ロードコンテキスト指定(名前付き識別子含む)をマネージド起動エントリポイントに渡す
  • load_context_storage.h(新規)でロードコンテキスト表現と識別子データの保持を管理
  • coreclr_delegates.hにCORECLR_LOAD_CONTEXT_ISOLATEDとcoreclr_load_context構造体を追加

テスト:

  • COM/IJWテストで識別子ベースの共有ロードコンテキスト動作を検証
  • ComLibrary2(第二COM ライブラリテストアセット)を追加

パフォーマンスへの影響

影響なし

関連Issue

#133570

その他

セキュリティ懸念(Copilotレビュー指摘、既に解決):

  • comhost.cppとijwhost.cppでhostfxr_get_runtime_property_valueのシンボル取得結果をnullチェックなしで呼び出す可能性があるため、nullポインタ呼び出しによるクラッシュリスク(高度な問題)→ 対応済み

ビルド懸念:

  • comhost_test.hとijwhost_test.hでstd::vectorを使用しているが<vector>をインクルードしておらず、インクルード順序によりコンパイルが失敗する可能性あり

目次