Pull Request on 2026年03月30日

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

注意点

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


目次

  1. #126323 Add area-Diagnostics-cdac label owners
  2. #126296 Fix jit format
  3. #126282 Remove PSEUDORANDOM_NOP_INSERTION and associated code including GT_PINVOKE_PROLOG, GT_PINVOKE_EPILOG, GT_EMITNOP
  4. #126280 Remove unsafe code from BlobUtilities.cs
  5. #126266 JIT: Remove SSE2 CmpOp/BinOp emulation code
  6. #126225 Remove assertion for unmanaged return frame
  7. #126223 JIT: yet another pass of unreachable block removal
  8. #126218 Pass Creator to Helix only for open queues
  9. #126214 Fix NativeAOT ILC failure on android
  10. #126207 Fix Helix work item premature exit in cDAC dump tests
  11. #126203 Support all ldloc/ldarg variants in TypeEqualityPatternAnalyzer
  12. #126193 Fix Handle Leak
  13. #126192 Introduce SafeProcessHandle.Start and ProcessId
  14. #126175 Fix KeyError in crossgen2_comparison.py for omitted_from_diff_dir lookups
  15. #126170 Rename duplicate project names under the same merged runner
  16. #126169 [RyuJit] Coalesce adjacent no-GC regions on x86
  17. #126146 Add built-in OpenTelemetry metrics to MemoryCache
  18. #126089 Fix stems handling.
  19. #126000 ARM64: Display method names for indirect calls in JitDisasm output
  20. #125981 SPMI: Fixes to record-and-replay workflows
  21. #125884 Split Dictionary.Remove inner loops for value-type key optimization
  22. #125874 SPMI: Fix invalid format string and allow parsing full uint32 range
  23. #125868 Fix JIT assert with UnsafeAccessor and delegate ctor
  24. #125761 [main] Update dependencies from dotnet/hotreload-utils, dotnet/icu, dotnet/runtime-assets
  25. #125759 Use checked context for memcpy's like API invocations
  26. #124926 Implement cDAC memory region APIs (GetHandleTableMemoryRegions, GetGCBookkeepingMemoryRegions, GetGCFreeRegions)
  27. #121985 JIT: Constant fold SequenceEqual with the help of VN

#126323 Add area-Diagnostics-cdac label owners

  • 作成者: @steveisok
  • 作成日時: 2026年03月30日 16:16:59(UTC)
  • マージ日時: 2026年03月30日 16:18:17(UTC)
  • ラベル: area-Diagnostics-coreclr

概要

Diagnostics-cdac領域のオーナーを定義するため、docs/area-owners.md.github/policies/resourceManagement.ymlarea-Diagnostics-cdacラベルを追加しています。オーナーはarea-Diagnostics-coreclrと同じく@steveisok、@tommcdon、@dotnet/dotnet-diagです。

変更内容

  • .github/policies/resourceManagement.yml: area-Diagnostics-cdacラベルの設定を追加(16行追加)
  • docs/area-owners.md: area-Diagnostics-cdacのオーナー情報を追加(1行追加)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

この変更はドキュメントとポリシー設定の追加であり、ランタイムコードやAPIに直接の影響はありません。cdac(Compact Diagnostic Aggregate Converter)関連のPull Requestに対して、適切なオーナーによるレビューを自動化するための基盤整備です。


#126296 Fix jit format

  • 作成者: @MichalStrehovsky
  • 作成日時: 2026年03月30日 08:19:09(UTC)
  • マージ日時: 2026年03月30日 10:55:48(UTC)
  • ラベル: area-CodeGen-coreclr

概要

JIT形式に関する問題を修正するPull Requestです。PR #126282に関連した問題が発生していたため、それに対応しています。

変更内容

  • src/coreclr/jit/compiler.cpp: 1行の追加、1行の削除(計2行の変更)

パフォーマンスへの影響

影響なし

関連Issue

#126282

その他

提供された情報が限定的なため、詳細な変更内容は確認できません。変更の具体的な内容についてはPull Requestの詳細ページを参照してください。


#126282 Remove PSEUDORANDOM_NOP_INSERTION and associated code including GT_PINVOKE_PROLOG, GT_PINVOKE_EPILOG, GT_EMITNOP

  • 作成者: @Copilot
  • 作成日時: 2026年03月29日 20:18:04(UTC)
  • マージ日時: 2026年03月30日 01:16:15(UTC)
  • ラベル: area-Infrastructure

概要

PSEUDORANDOM_NOP_INSERTION(JIT Spraying対策)および関連する不要なコードを削除。部分信頼(Partial Trust)はランタイムに復帰しないため、数年前からコメントアウトされていたPSEUDORANDOM_NOP_INSERTION定義とそれに関連するGT_PINVOKE_PROLOGGT_PINVOKE_EPILOGGT_EMITNOPのGenTreeノード型を完全に削除。

変更内容

18ファイルにわたるデッドコードの削除:

  • JIT Compiler基盤: target.hPSEUDORANDOM_NOP_INSERTION定義を削除
  • emit関連: emit.h/emit.cppからランダムNOP挿入ロジック(emitNextNopemitRandomNopsフィールドと関連メソッド)を削除
  • Compiler: compiler.h/compiler.cppからcompChecksumcompRNGフィールドおよびadler32()getMethodBodyChecksum()関数を削除
  • GenTree定義: gtlist.hから3つのノード型定義を削除
  • コード生成: lower.cpp、各アーキテクチャ別コード生成ファイル(codegenxarch.cppcodegenarmarch.cpp等)からGT_PINVOKE_PROLOG処理を削除
  • その他: gentree.cppliveness.cpplsraarm.cppinstr.cpp、デバッグモジュールから関連コードを削除

パフォーマンスへの影響

影響なし。削除されたのはデッドコードのみで、ランタイムの機能や実装パスに変更なし。

関連Issue

なし

その他

  • 純粋なデッドコード削除であり、互換性への影響なし
  • 部分信頼は.NET Frameworkのレガシー機能であり、.NET Coreでは実装されていないため、このコード削除は安全

#126280 Remove unsafe code from BlobUtilities.cs

  • 作成者: @EgorBo
  • 作成日時: 2026年03月29日 18:04:04(UTC)
  • マージ日時: 2026年03月30日 01:48:35(UTC)
  • ラベル: area-System.Reflection.Metadata reduce-unsafe

概要

System.Reflection.Metadata内のBlobUtilities.csからアンセーフコードと手動展開されたプリミティブ書き込みロジックを削除し、BinaryPrimitives/BitConverterAPIに統一します。ダウンレベルターゲット向けのPolyfillsを追加することで、既存の機能を保ちながらコード安全性を向上させます。

変更内容

  • BlobUtilities.cs: アンセーフなプリミティブ書き込みをBinaryPrimitives.Write*LittleEndian/BigEndianおよびBitConverter.*To*Bitsに置き換え。GUID シリアライゼーションをGuid.TryWriteBytesで統一し、条件付きコンパイル分岐を削除(62行削減)。
  • Polyfills.cs(新規): .NETCoreApp以外のターゲット向けにBitConverter.*To*BitsGuid.TryWriteBytesのPolyfillを提供。
  • BlobBuilder.cs: 削除されたWriteByteヘルパーメソッドの呼び出し箇所を予約済みバッファスロットへの直接書き込みに変更。
  • System.Reflection.Metadata.csproj: 非.NETCoreApp TFMに対して条件付きでPolyfills.csをインクルード。

パフォーマンスへの影響

影響なし(標準APIへの置き換えであり、パフォーマンス特性は同等と想定されます)

関連Issue

#126269から抽出

その他

  • PR説明はAI/Copilotで生成されている
  • 作成者は、NS(NetStandard)/NETF(.NET Framework)向けPolyfillsを複数ライブラリで個別に定義するのではなく、共通の場所に集約することを検討提案している
  • 内部実装の変更で、公開APIへの影響なし

#126266 JIT: Remove SSE2 CmpOp/BinOp emulation code

  • 作成者: @saucecontrol
  • 作成日時: 2026年03月28日 21:43:26(UTC)
  • マージ日時: 2026年03月30日 13:59:02(UTC)
  • ラベル: area-CodeGen-coreclr community-contribution

概要

JITのベースラインがSSE4.2に引き上げられたことに伴い、SSE2エミュレーション実装が到達不可能になったため、SIMD整数比較演算の古いフォールバック実装を削除しました。これにより、コンパイラの複雑性を低減し、保守性を向上させます。

変更内容

  • src/coreclr/jit/gentree.cpp: SSE2フォールバック実装を削除(-200行)、符号なしGT_GT/GT_LT演算の処理を簡略化(+61行)
    • Vector<long>の等値比較実装を削除
    • long型の大小比較のSSE2エミュレーション実装を削除
    • バイアス定数ベクトル処理をEvaluateBroadcastInPlaceで統一
    • xarch固有の不変条件(整数基本型、非EVEX経路、対応SIMDサイズ)をアサーションで明確化

パフォーマンスへの影響

影響なし。この変更はデッドコード削除のため、実行時パフォーマンスへの影響はなく、むしろコンパイルサイズが減少します。

関連Issue

なし

その他

この変更はJITの内部実装(コンパイラバックエンド)に限定されており、公開APIへの影響はありません。xarch/x64プラットフォームにおけるSIMD比較演算の生成は、SSE4.2以上の直接ハードウェア命令を使用します。


#126225 Remove assertion for unmanaged return frame

  • 作成者: @jkoritzinsky
  • 作成日時: 2026年03月27日 20:22:28(UTC)
  • マージ日時: 2026年03月30日 20:28:49(UTC)
  • ラベル: area-Diagnostics-coreclr

概要

CoreCLR デバッグのスタックウォークにおけるアサーションを削除します。インタロップデバッギングが有効な場合、スタック全体がアンマネージドコード(C++など)で構成されているシナリオでは、アンマネージド「リターンフレーム」(Frame* フレーム)が存在しない可能性があるため、このアサーションは不正確でした。

変更内容

  • src/coreclr/debug/ee/controller.cpp: スタックウォーク完了時(SWA_DONE)にアンマネージドリターンフレームが常に存在すると仮定していたデバッグアサーションを削除

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

この変更は内部デバッグロジックの修正であり、公開APIへの影響はありません。インタロップデバッギング機能に関連する既存の不正な仮定を削除するもので、破壊的変更ではありません。


#126223 JIT: yet another pass of unreachable block removal

  • 作成者: @AndyAyersMS
  • 作成日時: 2026年03月27日 19:45:14(UTC)
  • マージ日時: 2026年03月30日 19:23:51(UTC)
  • ラベル: area-CodeGen-coreclr

概要

JITの最適化フェーズ終了後、フローグラフ修正時に到達不可能なブロック(特にEH関連エントリブロック)を削除する新しいパスを追加しました。これにより、後続のクリーンアップフェーズで到達不可能なtry領域をより効率的に処理できるようになります。

変更内容

  • src/coreclr/jit/compphases.h: 新フェーズ識別子 PHASE_OPT_DFS_BLOCKS を追加
  • src/coreclr/jit/compiler.cpp: fgUpdateFlowGraphPhase 後、fgModified フラグが設定されている場合に fgDfsBlocksAndRemove を実行する処理を追加

パフォーマンスへの影響

影響なし(追加のパス実行により解析オーバーヘッドが若干増加する可能性がありますが、到達不可能ブロックの除去により後続フェーズの処理量が削減されることで相殺される見込み)

関連Issue

なし

その他

  • 内部実装の改善(JIT最適化パイプラインの強化)
  • 公開APIへの影響なし
  • コンパイル時間への影響を最小化する設計

#126218 Pass Creator to Helix only for open queues

  • 作成者: @github-actions[bot]
  • 作成日時: 2026年03月27日 18:43:47(UTC)
  • マージ日時: 2026年03月30日 08:02:45(UTC)
  • ラベル: area-Infrastructure

概要

Helixテスト実行時に、認証されたアクセスが使用される場合はCreatorパラメータを渡さないようにする修正です。オープンキューのみにCreatorを渡すことで、Creator is forbidden when using authenticated accessエラーを解決します。

変更内容

  • eng/pipelines/installer/helix.yml: Helixタスク設定を修正し、Creatorパラメータの指定を条件付きにしました。認証されたアクセス(非オープンキュー)ではCreatorを渡さないようになります。

パフォーマンスへの影響

影響なし

関連Issue

#125970(このPRがバックポートされたオリジナルPR)

その他

  • このPRは#125970のmainブランチへのバックポートです
  • Azure Pipelines テストランの失敗を修正するもので、Helixテスト実行のビルドエラーを解決します

#126214 Fix NativeAOT ILC failure on android

  • 作成者: @sbomer
  • 作成日時: 2026年03月27日 18:10:04(UTC)
  • マージ日時: 2026年03月30日 08:03:46(UTC)
  • ラベル: area-NativeAOT-coreclr

概要

NativeAOT の ILC (Intermediate Language Compiler) がandroidでビルド失敗する問題を修正しました。RuntimeFiles と LibrariesRuntimeFiles から発行されるアセットに対して、ファイル拡張子に基づいて正しい AssetType を割り当てるようにしました。従来は全ファイルに AssetType="runtime" が設定されており、.pdb、.so、.dbg、.dwarf などの非PE形式ファイルまで管理アセンブリとして扱われ、ILC に -r: 参照として渡されることで BadImageFormatException: Unknown file format が発生していました。

変更内容

  • src/tests/Common/mergedrunnermobile.targets: RuntimeFiles と LibrariesRuntimeFiles のアセット分類ロジックを修正
    • .dll ファイルのみ AssetType="runtime" を割り当て
    • その他の拡張子(.so、.pdb、.dbg、.dwarf など)は AssetType="native" に分類

パフォーマンスへの影響

影響なし

関連Issue

#126117

その他

なし


#126207 Fix Helix work item premature exit in cDAC dump tests

  • 作成者: @max-charlamb
  • 作成日時: 2026年03月27日 15:39:48(UTC)
  • マージ日時: 2026年03月30日 22:14:56(UTC)
  • ラベル: area-Diagnostics-cdac

概要

cDAC Helix ダンプテストにおいて、exitコマンドによるシェル強制終了を防ぎ、テスト後処理とxUnit結果報告が正常に実行されるよう修正しました。Windows では %ComSpec% /C exit <code> でサブシェルを使用し、Unix では set_return パターンで exit の代わりに return を使用することで、親シェルを保持しながら終了コードを伝播させます。

変更内容

  • cdac-dump-helix.proj: HelixCommand 構築パターンを helixpublishwitharcade.proj に統一。_HelixCommandLines ItemGroup にコマンドラインを組み立て、WriteLinesToFileHelixCommand.txt に書き込み、$([System.IO.File]::ReadAllText()) で読み込む方式に変更
  • cdac-dump-xplat-test-helix.proj: 同様にコマンド構築パターンを更新
  • Windows: exit /b から %ComSpec% /C exit %test_exit_code% に変更、%(metadata) 構文との競合回避のため %VAR% 参照を %25 エンコード
  • Unix: インラインコマンドから run-cdac-dump-tests.sh スクリプト生成方式に変更、exitreturn に置き換え

パフォーマンスへの影響

影響なし

関連Issue

#126196

その他

本PRはGitHub Copilot の支援を受けて作成されました。変更パターンは既存の helixpublishwitharcade.proj に確立されたベストプラクティスに準拠しており、Helix ワークアイテムの正常な完了とテスト結果の適切な報告を保証します。


#126203 Support all ldloc/ldarg variants in TypeEqualityPatternAnalyzer

  • 作成者: @larkliy
  • 作成日時: 2026年03月27日 14:13:20(UTC)
  • マージ日時: 2026年03月30日 11:09:36(UTC)
  • ラベル: community-contribution area-NativeAOT-coreclr

概要

TypeEqualityPatternAnalyzerが、従来の短形式opcodeだけでなく、長形式(ldloc.s/ldarg.s)や他のバリアント(ldloc.0-3/ldarg.0-3など)のldloc/ldargオペコードにも対応するようになりました。これにより、様々な形式の型等値パターンが正しく認識されます。同時にファイルを現代的なC#パターンマッチングに更新しています。

変更内容

  • src/coreclr/tools/aot/ILCompiler.Compiler/IL/TypeEqualityPatternAnalyzer.cs: TypeEqualityPatternAnalyzerのオペコード検出ロジックを拡張し、すべてのldloc/ldargバリアント(短形式、パラメータ固定形式を含む)に対応。同時にコードをC#パターンマッチングを使用した現代的な形式に更新

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

この変更は内部実装の改善であり、公開APIへの影響はありません。AOT(Ahead-of-Time)コンパイラのIL分析ツール側の改善です。


#126193 Fix Handle Leak

  • 作成者: @AristidesASm
  • 作成日時: 2026年03月27日 09:58:26(UTC)
  • マージ日時: 2026年03月30日 03:33:01(UTC)
  • ラベル: area-crossgen2-coreclr community-contribution

概要

JsonDocument.Parse()で作成されたオブジェクトがスコープを抜ける際に破棄されていないハンドルリークを修正しました。文字列値の抽出後にJsonDocumentが不要になるため、usingステートメントで適切に破棄するようにしました。

変更内容

  • src/coreclr/tools/Common/Microsoft/SourceLink/Tools/SourceLinkMap.cs: JsonDocument.Parse()の呼び出しをusingステートメントでラップし、使用完了後に確実にリソースを破棄するように修正(+2/-1行)

パフォーマンスへの影響

影響なし

関連Issue

#126193

その他

本修正はLinux Verification Center (linuxtesting.org) のSVACE静的解析ツールで検出されました。JsonDocumentIDisposableを実装しており、アンマネージドリソースを保有するため、適切な破棄が必要です。


#126192 Introduce SafeProcessHandle.Start and ProcessId

  • 作成者: @adamsitnik
  • 作成日時: 2026年03月27日 09:47:12(UTC)
  • マージ日時: 2026年03月30日 12:52:19(UTC)
  • ラベル: area-System.Diagnostics.Process

概要

SafeProcessHandleStart メソッドと ProcessId プロパティを導入し、プロセス起動とハンドル管理のロジックを再構成しました。プロセス起動に関するヘルパーメソッドを Process.[Unix/Win32/Windows].cs から ProcessUtils.$platform.cs に移動し、起動ロジックを SafeProcessHandle.StartCore に統合しました。

変更内容

  • SafeProcessHandle(Unix/Windows): プロセス起動機能を新たに実装。StartCore メソッドでプラットフォーム固有の起動ロジックを統一
  • ProcessUtils(Unix/Windows): Process から分離したプロセス起動ヘルパーメソッドを新規作成(合計505行)
  • Process クラス: プラットフォーム固有実装(Process.Windows.cs 廃止)を削減し、起動ロジックを SafeProcessHandle へ委譲
  • ProcessStartInfo: キャプチャ関連メソッドを追加(75行)
  • ShellExecuteHelper: 新規作成(94行)
  • 公開API: SafeProcessHandle.ProcessId プロパティ(ProcessId プロセス ID 取得)と SafeProcessHandle.Start メソッドを ref アセンブリに追加
  • テスト: SafeProcessHandleTests.cs に基本的なテストを追加(98行)

パフォーマンスへの影響

影響なし

関連Issue

その他

このPRはリファクタリングを主目的としており、公開APIの追加は SafeProcessHandle.StartSafeProcessHandle.ProcessId のみです。今後、SafeProcessHandle.KillSignalWaitForExit* などの追加メソッド実装が予定されています。変更は Process クラスを直接参照せずに新しい「シナリオ」メソッドを実装可能にするための基盤を提供します。


#126175 Fix KeyError in crossgen2_comparison.py for omitted_from_diff_dir lookups

  • 作成者: @Copilot
  • 作成日時: 2026年03月26日 22:43:17(UTC)
  • マージ日時: 2026年03月30日 18:25:38(UTC)
  • ラベル: area-crossgen2-coreclr

概要

crossgen2_comparison.pyスクリプトにおいて、ベース出力に存在するがdiff出力に存在しないアセンブリに対するXML結果生成時に発生していたKeyErrorを修正しました。原因は、omitted_from_diff_dirループで誤ってdiff_results_by_name(該当データが存在しない辞書)を参照していたもので、base_results_by_nameへの参照に修正しました。

変更内容

  • src/tests/Common/scripts/crossgen2_comparison.py:
    • line 922付近でomitted_from_diff_dirループの辞書参照をdiff_results_by_nameからbase_results_by_nameに修正(コピーペーストエラーの修正)
    • 隣接するomitted_from_base_dirループとの一貫性を確保

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

このバグはcrossgen2-comparisonアウターループテストの間欠的な失敗(例:KeyError: 'System.DirectoryServices')の原因となっていました。修正により、ベースのみに存在するアセンブリの処理が正常に動作するようになります。


#126170 Rename duplicate project names under the same merged runner

  • 作成者: @jkoritzinsky
  • 作成日時: 2026年03月26日 21:46:03(UTC)
  • マージ日時: 2026年03月30日 06:50:26(UTC)
  • ラベル: area-Infrastructure

概要

pri1テストビルドで失敗を引き起こしていた、マージされたランナー配下の重複するプロジェクト名をリネームする変更です。プロジェクト名の一意性を確保することでビルド失敗を解決しています。

変更内容

  • src/tests/GC/API/WeakReference/WeakReferenceTarget.csproj: プロジェクト名のリネーム(ファイル内容の変更)
  • src/tests/Regressions/coreclr/GitHub_61104/test61104.cs: テストコード修正(13行追加、4行削除)
  • src/tests/baseservices/exceptions/regressions/V1/SEH/COOL/finally_SEH.csproj: プロジェクト名のリネーム(ファイル内容の変更)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

この変更は pri1 テストスイートのビルド問題に対する修正です。重複するプロジェクト名がビルドシステムで競合を引き起こしていた可能性があります。


#126169 [RyuJit] Coalesce adjacent no-GC regions on x86

  • 作成者: @SingleAccretion
  • 作成日時: 2026年03月26日 21:32:40(UTC)
  • マージ日時: 2026年03月30日 10:50:32(UTC)
  • ラベル: area-CodeGen-coreclr community-contribution

概要

x86アーキテクチャにおいて、隣接する複数のno-GC領域をコアレス(統合)することで、GCInfo サイズを約0.1%削減します。主な利点は、IGF_EXTEND IGs(透過的であるべき)による差分の導入を回避し、GCInfo生成の安定性を向上させることです。

変更内容

  • gcencode.cpp: no-GC領域のコアレス処理ロジックを追加・改善(+19/-5)
  • gcinfo.cpp: GCInfo生成時のno-GC領域統合処理を調整(+6/-1)

パフォーマンスへの影響

  • GCInfo サイズ: 約0.1%削減(小規模)
  • ランタイムパフォーマンスへの直接的な影響は記載なし

関連Issue

なし

その他

この変更は内部実装(ランタイムのGCInfo エンコーディング処理)に限定されます。公開APIへの影響はありません。emitGenNoGCLstメソッド内での実装ではなく、より一般的なアプローチで実装されています。


#126146 Add built-in OpenTelemetry metrics to MemoryCache

  • 作成者: @rjmurillo
  • 作成日時: 2026年03月26日 04:35:10(UTC)
  • マージ日時: 2026年03月30日 11:22:20(UTC)
  • ラベル: area-Extensions-Caching community-contribution

概要

MemoryCache に OpenTelemetry メトリクスサポートを追加します。TrackStatistics = true の場合、キャッシュヒット/ミス、エビクション数、エントリ数、推定サイズを観測可能なインストルメントとして公開します。System.Net.Http の実装パターンに従い、IMeterFactory をサポートし、ファクトリが提供されない場合は SharedMeter にフォールバックします。

変更内容

  • MemoryCacheStatistics (Microsoft.Extensions.Caching.Abstractions)

    • long TotalEvictions プロパティを追加
  • MemoryCacheOptions (Microsoft.Extensions.Caching.Memory)

    • string Name { get; set; } = "Default" プロパティを追加(メトリクス次元として使用)
  • MemoryCache コンストラクタ拡張

    • IMeterFactory? パラメータを受け取る新しいオーバーロードを追加
    • 既存コンストラクタの ILoggerFactory をnullableに変更
  • メトリクスインストルメント (メーター名: Microsoft.Extensions.Caching.Memory.MemoryCache

    • cache.requests (ObservableCounter): ヒット/ミス別にカウント
    • cache.evictions (ObservableCounter): エビクション数
    • cache.entries (ObservableUpDownCounter): 現在のエントリ数
    • cache.estimated_size (ObservableGauge): 推定メモリサイズ
  • 実装の特徴

    • TrackStatistics = false の場合はメーター作成をスキップ
    • IMeterFactory 未提供時は singleton SharedMeter にフォールバック
    • WeakReference コールバックを使用し、GC リークを回避
    • エビクションカウントは RemoveEntry のスレッドセーフな実装で重複カウントを防止

パフォーマンスへの影響

TrackStatistics = false の場合:影響なし(メーターが作成されない)

TrackStatistics = true の場合:

  • メトリクス公開時にのみ計測オーバーヘッド発生
  • WeakReference キャプチャとコールバック機構により、GC 圧力が軽減される設計

関連Issue

#124140#87319

その他

  • 142 個のテストが net11.0 で合格
  • 新規追加: 11 個のメトリクステスト、2 個のエビクション統計テスト
  • net11.0+ では DiagnosticSource がインボックス化され、条件付きで参照される
  • 既存の MemoryCacheServiceCollectionExtensions への変更なし(新しいコンストラクタは自動選択される)

#126089 Fix stems handling.

  • 作成者: @cincuranet
  • 作成日時: 2026年03月25日 12:59:47(UTC)
  • マージ日時: 2026年03月30日 11:21:43(UTC)
  • ラベル: area-Extensions-FileSystem

概要

Microsoft.Extensions.FileSystemGlobbingにおいて、ディレクトリトラバーサル時のステム(パス要素)の不正な累積を修正します。構造体フレームのコピー時に_stemItemsリストの参照が共有されていた問題を、フレームのクローン化により隔離することで解決します。

変更内容

  • PatternContextLinear.cs: PushDirectory時にFrame.Clone()を使用してステムリスト状態の共有を防止
  • PatternContextRagged.cs: フレームクローン化に切り替え、PopDirectory時のステム突然変異に対する回避策を削除
  • FunctionalTests.cs: 複数の兄弟ワイルドカードディレクトリ間でステムが累積しないことを検証する回帰テスト(60行追加)を新規追加

パフォーマンスへの影響

フレームのクローン化によるメモリ割り当て増加の可能性がありますが、この変更は正確性の修正が主目的のため、通常のグロビングパターン使用時のパフォーマンス影響は限定的と考えられます。

関連Issue

#97333#126089

その他

この修正はMicrosoft.Extensions.FileSystemGlobbingライブラリの内部実装(PatternContextクラス)に対するもので、公開APIへの破壊的変更はありません。ファイルシステムグロビングの動作正確性に関わる重要な修正です。


#126000 ARM64: Display method names for indirect calls in JitDisasm output

  • 作成者: @Copilot
  • 作成日時: 2026年03月23日 23:51:19(UTC)
  • マージ日時: 2026年03月30日 20:28:31(UTC)
  • ラベル: area-CodeGen-coreclr

概要

ARM64のJitDisasm出力において、間接呼び出し(blr/br_tail)命令にメソッド名のアノテーションコメントを追加する変更です。x64では既にcall [addr] ; MethodNameの形式でメソッド名が表示されていますが、ARM64では表示されていませんでした。メソッドハンドルはidMemCookieに格納されていたため、IF_BR_1Bの表示処理で読み込むようにしました。

変更例:

// Before:
            blr     x2

// After:
            blr     x2      // code for IndirectCallAnnotation:VirtualCallee():int

変更内容

  • src/coreclr/jit/emitarm64.cpp: emitDispInsHelp内のIF_BR_1Bケースで、emitDispCommentForHandleGTF_ICON_FTN_ADDRフラグで呼び出し、idMemCookieに格納されたメソッド名をコメントとして表示
  • src/tests/JIT/opt/Calls/IndirectCallAnnotation.csproj: ARM64向けFileCheckテスト用の新規プロジェクト設定
  • src/tests/JIT/opt/Calls/IndirectCallAnnotation.cs: 仮想呼び出しを強制し、ARM64のJitDisasm出力でblr命令にカリー先メソッド名が含まれていることを検証する新規テスト

パフォーマンスへの影響

影響なし(JitDisasm出力のみの変更で、実行時動作に影響なし)

関連Issue

#125951

その他

  • 変更はJIT診断出力機能(デバッグ補助)に限定され、他のアーキテクチャ(x64など)の既存動作との一貫性を確保
  • FileCheckテストが追加され、今後のARM64 Disasm出力の回帰防止に役立つ

#125981 SPMI: Fixes to record-and-replay workflows

  • 作成者: @jakobbotsch
  • 作成日時: 2026年03月23日 17:30:21(UTC)
  • マージ日時: 2026年03月30日 10:35:48(UTC)
  • ラベル: area-CodeGen-coreclr

概要

SuperPMI(コンパイラテスト用ツール)の記録・リプレイワークフローの3つの問題を修正します:

  1. リプレイ時に保存されたコンパイル結果の再利用を防止(既存結果があるとrecAllocMemなど記録関数が動作不正)
  2. -mch_filesオプションでディレクトリと.mcファイルの入力をサポート
  3. 成功したコンテキストがゼロの場合のdiffsレポート生成時の除算エラーを修正

変更内容

  • methodcontext.h/cpp: MethodContext::InitializereadCompileResultsパラメータを追加し、リプレイ時のコンパイル結果マップのデシリアライズをゲート制御
  • superpmi.cpp/streamingsuperpmi.cpp: リプレイパスでコンパイル結果読み込みを無効化
  • methodcontextreader.cpp/methodcontextiterator.cpp: ハッシュワークフローなど必要な箇所で明示的にコンパイル結果読み込みを要求
  • verbstrip.cpp: 新しいreadCompileResultsフラグを使用してCRストリッピング実装を簡素化
  • superpmi.py: ディレクトリ入力と.mcファイル検出に対応、パーセンテージ計算をゼロ除算から保護

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

Copilotのレビューで1件の低信頼度コメント指摘あり:methodcontext.cppの静的InitializeオーバーロードがreadCompileResultsを次の呼び出しに渡していない可能性がある旨の指摘があります。実装確認が推奨されます。


#125884 Split Dictionary.Remove inner loops for value-type key optimization

  • 作成者: @danmoseley
  • 作成日時: 2026年03月21日 06:46:32(UTC)
  • マージ日時: 2026年03月30日 17:41:38(UTC)
  • ラベル: area-System.Collections

概要

Dictionary<TKey, TValue>.Removeメソッドの内部ループを値型キーと参照型キーのパスに分割し、JITのレジスタ割り当て最適化を改善します。FindValueTryInsertで既に採用されている最適化パターンをRemoveに適用することで、値型キーの場合にスタックスピル/リロードを削減します。

変更内容

  • src/libraries/System.Private.CoreLib/src/System/Collections/Generic/Dictionary.cs
    • Remove(TKey key)メソッド:値型キー + comparer=nullの高速パスと、comparerベースのパスに内部ループを分割
    • Remove(TKey key, out TValue value)メソッド:同様に内部ループを分割
    • 両メソッドを同期させるためのコメント追加

パフォーマンスへの影響

値型キー(Guid, Int32)での大幅な改善:

  • Remove_Hit: 最大18%高速化(Guid: 0.83倍, Int32: 0.94倍)
  • TryRemove_Hit: 最大13%高速化(Guid: 0.82倍, Int32: 0.90倍)

コード生成レベルでの改善:

  • 修正前(単一マージループ):反復ごとに3つのスピル + 3つのリロード
  • 修正後(値型パス):反復ごとに0スピル + 0リロード(すべてレジスタで処理)

**参照型(String):**中立的(参照型は常に非nullのcomparerを保持するため、ループ分割による恩恵なし)

**Miss シナリオ:**中立的(ハッシュコード比較の時点で終了するため、等価比較最適化の影響は限定的)

関連Issue

なし

その他

このPRは、PR #75663で導入されたFindValueおよびTryInsertのループ分割パターンをRemoveメソッドに統一的に適用しています。ベンチマーク結果は、値型キーを使用するシナリオ(特にヒットケース)において、統計的に有意な改善を示しています。


#125874 SPMI: Fix invalid format string and allow parsing full uint32 range

  • 作成者: @jakobbotsch
  • 作成日時: 2026年03月20日 22:27:36(UTC)
  • マージ日時: 2026年03月30日 09:53:36(UTC)
  • ラベル: area-CodeGen-coreclr

概要

SuperPMI JITホスト設定の解析およびログ出力を修正するプルリクエストです。DOTNET_JitHashBreak=9b29601dのような16進数設定値がアサーションエラーを引き起こし、上位ビットが設定された値が受け入れられないという問題に対応しています。

変更内容

  • src/coreclr/tools/superpmi/superpmi/jithost.cpp:
    • LogWarningフォーマット指定子を%wsから%sに修正(UTF-8 char*文字列を正しく出力)
    • 16進数解析の範囲チェックをINT_MAXからUINT_MAXに拡張し、上位ビットが設定された値(uint32全域)をサポート

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

Copilotのレビューコメントでは、UINT_MAXまで許容する際に、unsigned longからintへのstatic_castが実装定義動作となる可能性が指摘されています。ビットパターンを確実に保持するため、uint32_tに直接解析してからintにビットキャストすることが推奨されています。


#125868 Fix JIT assert with UnsafeAccessor and delegate ctor

  • 作成者: @Copilot
  • 作成日時: 2026年03月20日 21:51:56(UTC)
  • マージ日時: 2026年03月30日 14:51:07(UTC)
  • ラベル: area-VM-coreclr

概要

UnsafeAccessor(UnsafeAccessorKind.Constructor)がデリゲート型をターゲットとする場合、JIT最適化フェーズで不正なアサーションが発火する問題を修正します。マルチレベルインライニング後に関数ポインタ引数がGT_FTN_ADDRノードに変換される際、ldftnTokenがnullであってもtargetMethodHndが非nullになり得るケースに対応しました。

[UnsafeAccessor(UnsafeAccessorKind.Constructor)]
extern static Del Construct(object o, IntPtr p);

// 修正前: Assert failed 'targetMethodHnd == nullptr'
Construct(null, (nint)Resolver<Program>.Resolve())();

変更内容

  • src/coreclr/jit/flowgraph.cpp: fgOptimizeDelegateConstructor関数の修正

    • 過度に厳格なアサーション(targetMethodHnd == nullptr)を削除
    • パターンマッチングが別のILストリームからインライン化されたldftn経由でGT_FTN_ADDRを検出した場合、ldftnTokenがnullでもtargetMethodHndが非nullになり得る状態を許可
    • R2R(ReadyToRun)パスでのldftnToken->m_tokenデリファレンス前にnullチェック追加(&& ldftnToken != nullptr
  • src/tests/baseservices/compilerservices/UnsafeAccessors/UnsafeAccessorsTests.cs: 回帰テスト追加

    • Verify_ConstructDelegateFromFunctionPointerテスト:静的仮想インターフェースメソッドの関数ポインタ経由でUnsafeAccessorがデリゲートを構築するシナリオを検証

パフォーマンスへの影響

影響なし

関連Issue

#125866

その他

なし


#125761 [main] Update dependencies from dotnet/hotreload-utils, dotnet/icu, dotnet/runtime-assets

  • 作成者: @dotnet-maestro[bot]
  • 作成日時: 2026年03月19日 02:01:57(UTC)
  • マージ日時: 2026年03月30日 07:25:56(UTC)
  • ラベル: area-codeflow

概要

dotnet/runtime リポジトリの依存関係を自動更新するPull Requestです。dotnet/icu、dotnet/hotreload-utils、dotnet/runtime-assets の3つの外部リポジトリからの最新ビルドに依存関係を更新します。

変更内容

  • eng/Version.Details.props: 依存関係バージョン情報を更新(+18/-18行)
  • eng/Version.Details.xml: 依存関係の詳細メタデータを更新(+36/-36行)

具体的な依存関係の更新内容:

  • Microsoft.NETCore.Runtime.ICU.Transport: 11.0.0-alpha.1.26167.1 → 11.0.0-alpha.1.26168.1
  • Microsoft.DotNet.HotReload.Utils.Generator.BuildTool: 11.0.0-alpha.0.26159.1 → 11.0.0-alpha.0.26173.1
  • runtime-assets 関連パッケージ群: 11.0.0-beta.26166.1 → 11.0.0-beta.26173.1
    • CilStrip、FuzzingTestData、HostModel、TypeConverter、Data、Drawing、Tar、Compression、Packaging、Net、UnicodeData、Numerics、TimeZone、X509Certificates、RegularExpressions、WindowsExtensions のテストデータやリソースパッケージ

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

本PRは自動依存関係更新ツール(Maestro)によって自動生成されたものです。変更は内部の依存関係管理ファイルに限定されており、公開APIへの影響はありません。


#125759 Use checked context for memcpy's like API invocations

  • 作成者: @Copilot
  • 作成日時: 2026年03月19日 01:35:11(UTC)
  • マージ日時: 2026年03月30日 22:18:57(UTC)
  • ラベル: area-System.IO

概要

memcpy関連API(Buffer.MemoryCopyBuffer.BlockCopyUnsafe.Copy*)に渡されるサイズ計算でオーバーフローが静かに発生しないようにするため、checked contextを導入します。サイズ計算時のオーバーフローを検出して例外をスロー(fail fast)することで、メモリ安全性を強化します。

変更内容

  • JSHostImplementation.cs: JSImport署名バッファのサイズ計算にchecked演算を適用し、割り当て前のオーバーフロー防止
  • SecureString.cs: Buffer.MemoryCopy実行前にコピー長が宛先バッファに収まることをデバッグ時に検証するアサーション追加
  • FieldMetadata.cs: カスタムメタデータのBuffer.BlockCopy実行前にデバッグ時の境界チェックアサーション追加
  • DataCollector.cs: バッファリング/コピー前の配列バイトサイズ計算にchecked乗算を使用

パフォーマンスへの影響

影響なし(checked演算はリリースビルドでも検出コストはほぼ無視できるレベル)

関連Issue

なし

その他

  • デバッグ時アサーション(Debug.Assert)と本番環境checked演算(checkedキーワード)を組み合わせた多層防御アプローチ
  • .NET標準ライブラリおよびJavaScript相互運用機能における整数オーバーフロー脆弱性への対策
  • 破壊的変更なし(既存の正常なコードの動作に影響しない)

#124926 Implement cDAC memory region APIs (GetHandleTableMemoryRegions, GetGCBookkeepingMemoryRegions, GetGCFreeRegions)

  • 作成者: @Copilot
  • 作成日時: 2026年02月26日 22:09:17(UTC)
  • マージ日時: 2026年03月30日 15:57:05(UTC)
  • ラベル: area-Diagnostics-coreclr area-Diagnostics-cdac

概要

ISOSDacInterface13の3つのメモリ領域列挙API(GetHandleTableMemoryRegionsGetGCBookkeepingMemoryRegionsGetGCFreeRegions)をcDACネイティブに実装しました。これらのAPIは従来はレガシーDACに委譲されるかE_NOTIMPLを返していました。SOSMemoryEnum実装パターンに従い、ハンドルテーブル、GCブックキープ、フリーリージョンのメモリ領域を効率的に列挙できます。

変更内容

  • SOSMemoryEnum実装SOSHandleEnumパターンに従い、DEBUG時のレガシーDAC検証機能(StartSizeExtraDataHeapフィール検証)を組み込み
  • IGC契約拡張:3つのメモリ領域列挙メソッドを追加、安全上限定数設定(MaxHandleTableRegions: 8192、MaxBookkeepingRegions: 32、MaxSegmentListIterations: 2048)
  • データ型追加CardTableInfoRegionFreeListなどの新規データクラス、GCHeapタイプディスクリプタの拡張(FreeableSohSegmentFreeableUohSegmentFreeRegionsフィールドはGCビルド設定に条件付き)
  • ネイティブ記述子更新:datadescriptor.incおよび.hに新規グローバルと型定義を追加
  • マージ競合解決:originn/mainとの競合を解決、GetHandleExtraInfo実装と統合、約130ファイルをリセット

パフォーマンスへの影響

影響なし。列挙APIはメモリ領域の読み取り専用操作であり、既存のGCパフォーマンスに直接影響しません。安全上限定数により過度なイテレーション(特にハンドルテーブルの8192上限)を防止しています。

関連Issue

なし

その他

  • 包括的なユニットテスト(GCMemoryRegionTests.cs)で単一/複数セグメント、空バケット、リンクセグメント、ブックキープエントリ、フリーリージョンをカバー(全36テスト)
  • ServerGCDumpTests.csWorkstationGCDumpTests.csにダンプテスト追加
  • TryReadGlobalを用いた非リージョンGCビルドの優雅な処理
  • サーバーGCパス内でheap.FreeRegions値のnullガード実装
  • ブックキープループにアンダーフロー保護(next > cardTableInfoSize)を追加
  • cDAC設計ドキュメント(GC.md)を更新、新APIの型・データディスクリプタ・グローバル・定数・疑似コードを記載
  • 全1362のcDACテスト合格確認(GCメモリリージョンテスト32個含)、マネージドプロジェクトはビルドエラー0

#121985 JIT: Constant fold SequenceEqual with the help of VN

  • 作成者: @hez2010
  • 作成日時: 2025年11月26日 12:09:31(UTC)
  • マージ日時: 2026年03月30日 21:18:46(UTC)
  • ラベル: area-CodeGen-coreclr community-contribution

概要

JIT コンパイラのValue Numbering(VN)を活用して、SequenceEqual操作の定数折りたたみを最適化します。異なる文字列定数の比較を、実行時の比較処理を省略して直接コンパイル時に計算結果に置き換えることで、コード生成を大幅に削減します。

示例のStr1.Equals(Str2) ("abcdef" vs "bcdefg") の比較では、生成されたアセンブリが50バイト・PerfScore 11.50から2バイト・PerfScore 0.25に削減されます。

変更内容

  • assertionprop.cpp: VNを活用したSequenceEqual定数折りたたみロジックを追加(+77行)
  • compiler.h: 関連ヘッダ定義を追加(+2/-1)
  • valuenum.cpp: Value Numbering処理の改善(+15/-5)
  • lower.cpp: 軽微な調整(+1/-1)

パフォーマンスへの影響

大幅な改善:

  • 定数文字列比較の場合、生成コードサイズを96%削減(50バイト→2バイト)
  • PerfScore を11.50から0.25に低減(95.8%改善)
  • コンパイル時に比較結果が確定するため、実行時の比較命令を完全に排除

これはJIT最適化の内部実装改善であり、公開APIへの影響はありません。

関連Issue

なし

その他

  • 変更はJITコンパイラのアサーション伝播とValue Numbering の内部実装に限定
  • 破壊的変更なし、互換性への影響なし

目次