Pull Request on 2026年09月18日

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

注意点

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


目次

  1. #134203 JIT: Fix vector IsSupported folding for constrained interface calls
  2. #134190 [cDAC] Export interpreter JIT manager descriptor
  3. #134181 Defer WinHTTP HTTP/2 loopback connection closure until server disposal
  4. #134175 Add StackTraceHidden to a few more infrastructure runtime async mehods
  5. #134168 Store prepare code config on CEEInfo
  6. #134160 JIT: Fix value profiling in optimized instrumented tiers
  7. #134159 [release/11.0] Fix VSD cache lock ordering during unload (backport #133213)
  8. #134151 Fix XARCH importation of isPositive and isNegative
  9. #134149 Fix NLS ordinal casing of supplementary characters to agree with OrdinalIgnoreCase
  10. #134140 JIT: Ensure the importer does not reorder GTF_ORDER_SIDEEFF with GTF_GLOB_REF
  11. #134139 [release/11.0] [iOS] Avoid debugger patches in R2R code without dynamic code support
  12. #134134 [ci-fix] Mark Apple test runner LibraryImports safe (refs #134061)
  13. #134127 Fix GC on Windows with multiple CPU groups
  14. #134125 [release/11.0] Set PRERELEASE to 0
  15. #134100 JIT: use a call GC poll for blocks that end an EH region
  16. #134098 JIT: don't elide the MD-array covariance check for covariant element types
  17. #134093 Avoid embedding PGO data for Wasm targets
  18. #133928 [release/11.0] [CreateDump] Use _exit after createdump launch failures
  19. #133803 JIT: Fix block-store address containment boundary
  20. #133773 Classify Wasm P/Invokes before R2R codegen
  21. #133748 Enable Roslyn compiler output caching in non-official builds
  22. #133703 JIT: Fix promoted liveness in forward substitution
  23. #133701 [release/11.0] Remove RCPC2 from the optimistic set on arm64
  24. #133693 [release/11.0] Fix cgroup v2 memory limit traversal at hierarchy root
  25. #133664 [release/11.0] Fix CoreLib trimming substitutions for interpreter-only CoreCLR
  26. #133573 Remove ActiveIssue attribute from TypeTests
  27. #133211 Stop the DBI from unloading any DAC on non-Windows
  28. #133183 [release/11.0] Fix generic virtual dispatch hang after multiple AssemblyLoadContext unloads
  29. #129369 Two code heaps

#134203 JIT: Fix vector IsSupported folding for constrained interface calls

概要

制約付きインターフェース呼び出しに対するSIMD IsSupported の JIT folding で、誤った型引数を使用していた問題を修正しました。ISimdVector<TVector, T> インターフェースから要素型 T を正しく解決するメソッドシグネチャの型引数を使用するように改善しました。

変更内容

  • src/coreclr/jit/importercalls.cpp: SIMD intrinsic folding 時の要素型解決ロジックを修正。sig->sigInst.classInst[0] から要素型を読み取るよう改正し、型引数の期待値に対するアサーションを追加。

パフォーマンスへの影響

影響なし(バグ修正のため、正しい型引数を使用することで JIT folding の正確性が向上)

関連Issue

#134201

その他

レビュワーから、制約付き静的インターフェース呼び出しのリグレッションテスト追加が推奨されています。


#134190 [cDAC] Export interpreter JIT manager descriptor

概要

CoreCLR が FEATURE_INTERPRETER でビルドされる際、ExecutionManager::m_pInterpreterJitManager のアドレスを cDAC データディスクリプタグローバルとして InterpreterJitManagerAddress で公開する変更。外部ツール(例:デバッガーやダンプ解析ツール)がインタープリタ JIT マネージャーを発見可能にするための機能追加です。

変更内容

  • src/coreclr/vm/datadescriptor/datadescriptor.inc: FEATURE_INTERPRETER ガード下で新しいオプショナルグローバルポインタ InterpreterJitManagerAddress をエクスポート
  • src/coreclr/vm/codeman.h: cdac_data<ExecutionManager> に InterpreterJitManagerAddress ポインタソース(ExecutionManager::m_pInterpreterJitManager のアドレス)を定義。同じ FEATURE_INTERPRETER ガード配下

パフォーマンスへの影響

影響なし(機能ゲート化された静的なデータディスクリプタ追加のみ)

関連Issue

#134072(cDAC ダンプ列挙で使用予定)

その他

  • 内部実装向けの cDAC ディスクリプタの拡張(公開API の変更なし)
  • インタープリタ機能が無効なビルドには影響なし(FEATURE_INTERPRETER でフィーチャーゲート化)
  • 既存の cDAC グローバルポインタエクスポートパターンに準じた小規模な追加

#134181 Defer WinHTTP HTTP/2 loopback connection closure until server disposal

  • 作成者: @rzikm
  • 作成日時: 2026年09月18日 10:50:52(UTC)
  • マージ日時: 2026年09月18日 15:54:26(UTC)
  • ラベル: area-System.Net.Http

概要

WinHTTPのHTTP/2ループバック接続がサーバー配置前にクライアント未消費のバッファレスポンスを破棄してエラー12030を発生させる問題を修正しました。接続の物理的なクローズをサーバー廃棄まで遅延させることで、レスポンスデータの保持を保証し、WinHTTP HTTP/2クッキーテストおよび関連テストを再度有効化しています。

変更内容

  • Http2LoopbackConnection.cs: 遅延GOAWAY追跡とクローズ遅延動作の実装を追加
  • Http2LoopbackServer.cs: 保持接続管理とサーバークリーンアップ時のライフサイクル処理を強化
  • WinHttpHandlerTest.cs: 遅延廃棄に関する回帰テスト(廃棄後のレスポンス読取可能性確認、非同期廃棄中の接続クローズ対応)を追加
  • PlatformHandlerTest.cs: WinHTTP HTTP/2クッキーテストの再有効化(テスト4分類を復活)

パフォーマンスへの影響

影響なし。テストインフラストラクチャの変更であり、製品コードのパフォーマンスに直接的な変更なし。

関連Issue

#133779 #130458 #126867

その他

検証結果:

  • WinHTTP機能テスト: .NET 11で1,749テスト(失敗0件、既知スキップ41件)、.NET Frameworkで667テスト(失敗0件、既知スキップ28件)
  • WinHTTP単体テスト: 173パス
  • SocketsHttpHandler HTTP/2: 212パス
  • クッキー/証明書/ライフタイム関連テストの10回繰り返し実行: 800パス、失敗なし

注記: Copilot レビューが2つの中程度の問題を指摘しています。

  1. Http2LoopbackServer.cs:94 の _closeDeferred 状態遷移が同期なく実行され、新接続確立時に古い状態観測のリスク
  2. Http2LoopbackConnection.cs での並行フィールドクリーンアップが活動中の入出力とレースして NullReferenceException を引き起こす可能性

デフォルトではWinHTTPテストのみで有効化され、DeferConnectionClose = false 設定で元の廃棄動作へ切り替え可能です。


#134175 Add StackTraceHidden to a few more infrastructure runtime async mehods

概要

非同期処理に関連するインフラストラクチャメソッドのスタックトレースから内部フレームを隠すため、StackTraceHidden属性を追加するPRです。従来これらのメソッドがスタックトレースに表示されていた問題(#131951など)を改善します。

変更内容

  • RuntimeAsyncTaskContinuation.cs: Task継続のタスク結果ヘルパーメソッド(GetResult)にStackTraceHidden属性を追加
  • AsyncHelpers.ValueTaskSourceContinuation.cs: ValueTask継続ソースの結果ヘルパーメソッドにStackTraceHidden属性を追加
  • StackTraceTests.cs: ジェネリック継続パスの範囲を含むようにスタックトレーステストを拡張(非ジェネリックIValueTaskSourceパスのカバレッジは追加されていない)

パフォーマンスへの影響

影響なし

関連Issue

#131951

その他

Copilot reviewerが、非ジェネリックGetResultパスのカバレッジが不足している点を指摘しています。


#134168 Store prepare code config on CEEInfo

  • 作成者: @jkotas
  • 作成日時: 2026年09月18日 01:11:33(UTC)
  • マージ日時: 2026年09月18日 05:18:59(UTC)
  • ラベル: area-VM-coreclr

概要

PrepareCodeConfigの管理をスレッドローカルな状態からCEEInfoインスタンスに移行しました。これにより、スレッド側の状態管理が削除され、ネストされたコンパイレーションはJIT情報オブジェクトごとに独立して分離されます。

変更内容

  • threads.h/threads.inl/threads.cpp: スレッドローカル状態のPrepareCodeConfigホルダー実装と宣言を削除
  • jitinterface.h/jitinterface.cpp: CEEInfoインスタンスに設定ストレージを追加し、コールバック処理を更新
  • method.hpp: スレッドあたりの設定連結リストへの参照を削除
  • prestub.cpp: スレッドローカルホルダーのインストール処理を削除
  • ceemain.cpp: シャットダウン時の構造の初期化リストを更新

パフォーマンスへの影響

影響なし。スレッドローカルストレージへのアクセス削減により、わずかなオーバーヘッド低下の可能性がありますが、具体的なベンチマーク結果は提供されていません。

関連Issue

なし

その他

  • 変更はJIT/Interpreterの内部実装(ランタイムの準備フェーズ)に限定されており、公開APIには影響ありません
  • ネストされたコンパイレーション間の分離が維持されるため、互換性への懸念はありません
  • すべての参照が追跡されており、設定がJIT情報インスタンスを通じて一貫して伝播されることが確認されています

#134160 JIT: Fix value profiling in optimized instrumented tiers

  • 作成者: @EgorBo
  • 作成日時: 2026年09月17日 22:20:40(UTC)
  • マージ日時: 2026年09月18日 22:49:57(UTC)
  • ラベル: area-CodeGen-coreclr

概要

最適化されたインストルメンテッドティア(Tier1)におけるMemmoveとSequenceEqualの値プロファイリングを修正し、インライン候補を含めた対象で実行されるようにしました。これにより、デフォルトティアリングとReadyToRunが有効な状態でPGO駆動のアンローリングが機能するようになります。

提供されたサンプルコードでは、Memmoveの値プロファイリング情報を活用することで、40文字のCopyTo操作が動的にアンロールされ、事前にプロファイリング済みの長さに対して特殊化されたコードが生成されます。

変更内容

  • src/coreclr/jit/importercalls.cpp: Memmove/SequenceEqualの値プロファイルメタデータをインストルメンテッドティアで収集する処理を追加。インライン候補のインストルメンテーション処理に対応。
  • src/coreclr/jit/compiler.h: 値プロファイル関連の新しいフラグを追加(+4行)。
  • src/coreclr/jit/namedintrinsiclist.h: 新しい名前付きイントリンシックNI_System_Buffer_Memmoveを追加。

パフォーマンスへの影響

ベンチマーク結果では、特に短い長さ(2-32文字)で大幅な改善が見られます:

長さ Apple M1 Cobalt 100 (ARM64) AMD EPYC 9V45 (x64)
2 2.58X 2.04X 2.51X
5 1.83X 1.74X 1.85X
20 1.92X 1.59X 1.64X
32 1.75X 1.51X 2.10X

長さ50-64では若干の低下も見られますが、全体的には中程度の長さでの性能向上が主な利益です。SIMD命令を活用した特殊化されたコードパスによる改善。

関連Issue

なし

その他

  • 注記1: Copilotのレビュー指摘によると、定数長のMemmove/SequenceEqual呼び出しがインストルメンテッドティアで既存のアンローリング最適化を失う可能性があるため、定数長の場合はインストルメンテーションを回避する必要がある。
  • 注記2: SuperPMI互換性の問題として、新しいgetHelperFtnクエリが既存のコンテキストで再現できない可能性が指摘されている。
  • 注記3: PGO回帰テストの追加が推奨されており、特に変数長での値ヒストグラム収集と最適化ティアでの利用を検証するテストが必要。

#134159 [release/11.0] Fix VSD cache lock ordering during unload (backport #133213)

概要

.NET 11のリグレッション(PR #128868で導入)による VirtualCallStubManager デストラクタ内でのロック順序問題を修正するバックポートです。AssemblyLoadContext のアンロード時に g_resolveCache ロック取得で発生していたデッドロック/ロック競合を、キャッシュロックのスコープを狭めることで解決します。

変更内容

  • virtualcallstub.cpp: キャッシュロックをローダーヒープのクリーンアップ前に解放し、ロック順序の問題を解決
  • test132982.cs: collectible AssemblyLoadContext のアンロード時の VSD キャッシュ成長を検証するリグレッションテストを追加
  • test132982.csproj: 回帰テストプロジェクトの登録(Copilot により process-isolation 設定の追加推奨)

パフォーマンスへの影響

影響なし

関連Issue

#133213、#128868

その他

  • リスク評価: Low
  • 内部で発見されたリグレッション(顧客報告なし)
  • 回帰テストにより問題が再現・修正確認済み
  • Copilot レビュー: test132982.csproj に process-isolation プロパティの追加を推奨

#134151 Fix XARCH importation of isPositive and isNegative

概要

256ビット浮動小数点ベクトルのIsNegativeおよびIsPositiveのJIT展開時に、AVX2が無効な環境でも実行されていた問題を修正します。varTypeIsSignedチェックが不十分だったため、AVX2が必須の命令が黙って通過していました。

変更内容

  • src/coreclr/jit/hwintrinsic.cpp: AVX2機能検出を強化し、256ビットベクトルの符号チェック(IsPositive/IsNegative)に対してAVX2要件を厳密に適用。符号付き整数型および浮動小数点型の符号チェックではAVX2が必須となるよう修正(+9/-1)。

パフォーマンスへの影響

影響なし。本修正は不正な最適化を防止するための制御フロー修正です。

関連Issue

#134150

その他

  • AVX2が無効(EnableAVX2=0)な環境での256ビット浮動小数点ベクトル演算の回帰テストカバレッジ追加が推奨されています。
  • AVX限定の処理(符号なしベクトルおよびVector.Abs)は既存動作を保持。

#134149 Fix NLS ordinal casing of supplementary characters to agree with OrdinalIgnoreCase

概要

Windows NLS環境において、序数大文字小文字変換(ToUpperOrdinal/ToLowerOrdinal)と序数比較(OrdinalIgnoreCase)が補助文字(Supplementary characters)の扱いで不一致だった問題を修正します。LCMapStringExとCompareStringOrdinalというWindows APIの仕様差により、Deseret文字ブロック(U+10400~U+1044F)などの補助文字ペアで、大文字小文字変換後の値が比較の同値クラスと一致しない問題を解決します。修正はNLSモード専用で、バイナリサイズへの影響はありません。

変更内容

  • src/libraries/System.Private.CoreLib/src/System/Globalization/Ordinal.cs: NLS向けの補助文字検証ロジックを追加。大文字小文字変換後の値をCompareStringOrdinalで検証し、OrdinalIgnoreCaseの同値クラスから外れた場合は元の文字を復元する処理を実装
  • src/libraries/System.Private.CoreLib/src/System/Text/Rune.cs: Rune.ToUpperOrdinal/Rune.ToLowerOrdinalで同様の検証ロジックを適用
  • src/libraries/System.Runtime/tests/System.Globalization.Tests/System/Globalization/OrdinalCasingTests.cs: Deseret文字ブロック全体(U+10400~U+1044F)をカバーする専用テストを追加。文字列/Span/Runeの序数大文字小文字変換がOrdinalIgnoreCase比較と一致することを検証

パフォーマンスへの影響

NLSモード専用の影響:

  • ASCII: ~1.0(高速パス未変更)
  • BMP(サロゲート無し): ~1.09(1回のベクトル化サロゲートスキャンを追加)
  • Emoji(サロゲート密集): ~1.24(変更されないサロゲート実行は一括スキップ)
  • Deseret(補助文字ペア変更): 正確性パス(稀);変更された補助文字ペア毎に1回のネイティブ検証

オーバーヘッドはNLSモード限定。ASCIIは高速パスを維持し、純粋なBMPは単一スキャン追加、サロゲート密集テキストではスキップが一括化されるため許容範囲内です。

関連Issue

#133950

その他

  • ICUモード(ユニコース標準化)は変更なし
  • レビュアーから指摘:Rune.csの1616行目の既存コメントがNLSブランチで不正確になったため、NLS検証ロジックの説明を追加すべき
  • テスト結果:OrdinalCasingTests 91 passed, 0 failed

#134140 JIT: Ensure the importer does not reorder GTF_ORDER_SIDEEFF with GTF_GLOB_REF

概要

JIT インポーターのスピル処理において、GTF_ORDER_SIDEEFF(順序付き副作用)がGTF_GLOB_REF(グローバル参照)と再順序付けされないようにする修正です。インポーターのスピル処理がこのケースをチェックしていなかったため、正しい順序付けを強制するよう改善しました。

変更内容

  • src/coreclr/jit/importer.cpp: スピル処理中に順序付き副作用(GTF_ORDER_SIDEEFF)を保護するロジックを追加
  • src/coreclr/jit/importervectorization.cpp: ベクトル化比較の一時変数に対して完全なスピルハンドリングを適用

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • 最小限の変更(合計差分:2ファイル、+10/-14行)を保つ予定
  • Copilotレビューでは、順序付けの組み合わせをカバーした回帰テストの追加が推奨されています

#134139 [release/11.0] [iOS] Avoid debugger patches in R2R code without dynamic code support

概要

iOS/tvOS物理デバイスでのデバッグが失敗する問題を修正します。デバッガーがR2Rイメージにブレークポイントを設定しようとすると、コード署名エラーが発生してアプリが起動できなくなっていました。本PRは、動的コード生成が無効な設定(iOS/tvOS)でのデバッガーパッチ適用をR2Rコードに対してブロックします。

変更内容

  • controller.cpp: パッチ適用ロジックの修正(+73/-42)
    • FEATURE_DYNAMIC_CODE_COMPILEDフラグで保護され、R2Rコードへのパッチ適用をブロック
    • ActivatePatchの戻り値がfalseの場合の結果伝播処理を追加
  • controller.h: 関数シグネチャの更新(+2/-2)
  • debugger.cpp: デバッガーロジックの更新(+18/-1)

パフォーマンスへの影響

影響なし

関連Issue

#133577

その他

  • 本変更はrelease/11.0へのバックポートです
  • 変更はFEATURE_DYNAMIC_CODE_COMPILEDマクロで条件付けされており、他の構成には影響しません
  • CSIの手動テストおよびVisual StudioとVS Codeのデバッガーで物理iOS デバイス上での動作確認済み
  • リスク度合いは低いと評価されています

#134134 [ci-fix] Mark Apple test runner LibraryImports safe (refs #134061)

概要

Apple NativeAOT テストランナーの LibraryImport 宣言に安全修飾子を追加し、メモリ安全性ルール更新に対応するビルド診断を解決しました。UTF-8 マーシャリング時のポインタ操作なしの同期的コピーを行うネイティブエントリポイントを safe とマークしています。

変更内容

  • AppleTestRunner.cs: Apple 出力およびサマリー P/Invoke 宣言に安全修飾子を追加(2箇所)
    • 既存の SYSLIB1064 警告を解決しつつ、呼び出し箇所での CS9362 エラー発生を回避

パフォーマンスへの影響

影響なし

関連Issue

#134061

その他

  • iOS シミュレータ再現手順および対象リポジトリビルドで、更新されたメモリ安全性ルール(Features=updated-memory-safety-rules)を使用して検証済み
  • 検証時は警告・エラーなしで完了
  • ネイティブエントリポイントはマーシャル済みの UTF-8 入力を NSString に同期的にコピーし、呼び元バッファに対する保持・変更・ポインタ操作は行わない

#134127 Fix GC on Windows with multiple CPU groups

  • 作成者: @janvorli
  • 作成日時: 2026年09月17日 12:02:10(UTC)
  • マージ日時: 2026年09月18日 19:52:17(UTC)
  • ラベル: area-GC-coreclr

概要

Windows上で複数のCPUグループがある環境でGCが正常に動作しない問題を修正します。GC CPU グループサポートが無効な場合、プロセッサインデックスの計算がプロセッサ・ヒープマッピング配列の範囲を超過し、ヒープ領域の破損につながっていました。本修正はOS上の最大CPUグループ数に基づいて最大プロセッサ数を取得することで、配列のサイズング問題を解決します。

変更内容

  • src/coreclr/gc/windows/gcenv.windows.cpp: Windows上の最大プロセッサ数計算を更新。OS上の最大CPUグループ数に基づいて、プロセッサおよびNUMAノードとヒープのマッピング配列が適切なサイズになるよう修正しました。

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • Copilot レビューで「APIコールが失敗時にゼロを返す可能性があり、ゼロ長配列やアウト・オブ・バウンズアクセスが発生する可能性」という指摘がありましたが、その後のレビューで「プロセッサ数が境界値内に収まり、クエリ失敗を正しく処理している」と承認されています
  • 内部実装(GCランタイム)への変更であり、公開APIへの影響はありません

#134125 [release/11.0] Set PRERELEASE to 0

概要

.NET 11リリースブランチにおいて、PRERELEASEを0に設定することで、C/C++コンパイラの無関係な警告がエラーとして扱われるのを防ぐための設定変更です。

変更内容

  • eng/native/configureplatform.cmake: PRERELEASE設定を更新(+1/-1)
    • ネイティブビルド設定をプレリリース以外のブランチとしてマークし、リリース専用の警告エラー化動作を無効化

パフォーマンスへの影響

影響なし

関連Issue

#134120

その他

  • リリースブランチの設定変更であり、公開APIへの影響なし
  • ネイティブビルド設定の内部実装に関する変更

#134100 JIT: use a call GC poll for blocks that end an EH region

  • 作成者: @EgorBo
  • 作成日時: 2026年09月16日 19:54:18(UTC)
  • マージ日時: 2026年09月18日 13:06:46(UTC)
  • ラベル: area-CodeGen-coreclr

概要

JITコンパイラが例外処理(EH)領域を終了するブロック内に挿入されたGCポール(Thread.FastPollGC())を正しく処理するよう修正しました。従来はインラインポール展開でこのようなブロックの分割に失敗していましたが、呼び出しGCポールを使用することで対応します。finallyやcatchブロック内のSpan<object>.CopyToのようなケースでアサーション失敗していた問題を解決します。

変更内容

  • src/coreclr/jit/flowgraph.cpp: fgInsertGCPolls内でEH境界を持つブロック(hasEHBoundaryOut())に対してコールGCポールを選択するロジックを追加。既存のswitch文の処理と同様に、EH境界を持つブロックは呼び出しGCポール経由で処理され、ブロック分割時に適切にアウトフローを処理します。
  • src/tests/JIT/Regression_ro_2/Runtime_134005.cs: finallyおよびcatchブロック内でのGCポール挿入シナリオに対する回帰テストを追加。

パフォーマンスへの影響

影響なし(バグ修正)

関連Issue

#134005

その他

本修正はJIT制御フローのEH境界での変更のため、入念なレビューが必要とされています。ビルド結果に差分がないことが確認されています。


#134098 JIT: don't elide the MD-array covariance check for covariant element types

  • 作成者: @EgorBo
  • 作成日時: 2026年09月16日 19:14:15(UTC)
  • マージ日時: 2026年09月18日 13:07:09(UTC)
  • ラベル: area-CodeGen-coreclr

概要

MD配列のSet/Address操作における共変性チェック(covariance check)の不正な省略を修正しました。JITコンパイラがsealedフラグのみに基づいてチェックを省略していたため、配列型やバリアント型といった共変なシール型でも実際のランタイム要素型が異なる場合にArrayTypeMismatchExceptionを投げずに互換性のない参照を格納してしまう問題がありました。修正では、より厳密なisExactType判定を使用し、SZ配列のstelem.refケースと同様の処理に統一しました。

変更内容

  • src/coreclr/jit/importercalls.cpp: impArrayAccessIntrinsicで共変性チェックの省略判定を変更。sealedフラグの確認からisExactType(その型ハンドルが完全に1つの型のみを示す場合)の確認に変更し、より正確な型チェックを実施
  • src/tests/JIT/Regression_ro_2/Runtime_133975.cs: issue #133975の回帰テストを追加。Set、Address、バリアント型、正当な正確型ストアのケースをカバー

パフォーマンスへの影響

影響なし(正確性の修正であり、パフォーマンス上の改善や低下の報告なし)

関連Issue

#133975

その他

なし


#134093 Avoid embedding PGO data for Wasm targets

概要

Crossgen2のWasm対象ビルドに対して、--embed-pgo-dataフラグの埋め込みを無効化しながら、MIBC プロファイルデータは引き続き使用する変更です。Wasmターゲットでは埋め込みPGOデータが不要なため、コンパイルガイダンスとしてのMIBCは保持されます。

変更内容

  • eng/codeOptimization.targets: Wasm以外のターゲットの場合のみ--embed-pgo-dataを適用するよう条件分岐を追加
  • src/coreclr/crossgen-corelib.proj: MIBC入力は保持しつつ、Wasmターゲットでのみ--embed-pgo-dataを除外
  • src/coreclr/tools/r2rtest/Crossgen2Runner.cs: r2rtest実行時にWasm対象では埋め込みPGOデータフラグを除外
  • src/installer/pkg/sfx/Microsoft.NETCore.App/Microsoft.NETCore.App.Runtime.CoreCLR.sfxproj: ブラウザビルドのMIBC除外設定を削除
  • src/tests/Common/CLRTest.CrossGen.targets: テスト実行時にWasm対象の場合PGO引数を調整

パフォーマンスへの影響

Wasmターゲットのバイナリサイズが削減される可能性があります(埋め込みPGOデータセクション削除)。MIBC入力は継続的に使用されるため、コンパイル最適化へのパフォーマンスガイダンスは失われません。

関連Issue

なし

その他

重要: レビューコメントで複数の懸念事項が指摘されています:

  • Crossgen2コンパイラ自体は--embed-pgo-dataフラグをWasmに対して継続的に処理するため、直接的なcrossgen2コマンドラインでの実行時に埋め込みが発生する可能性がある
  • Wasmターゲット検出がTargetArchitectureとPublishReadyToRunContainerFormatで一貫性がない
  • WASIハンドリングに未対応エリアがある
  • 回帰テストカバレッジが不足している
  • PR説明に記載されている「ドキュメント更新」が未実装

#133928 [release/11.0] [CreateDump] Use _exit after createdump launch failures

概要

createdumpの起動に失敗した場合にexit()の代わりに_exit()を使用するように修正。これにより、フォーク後にexecveが失敗した子プロセスが、親プロセスの終了時処理(atexit ハンドラーやデストラクターなど)を実行してしまうことで、診断ポートが不正にクローズされる問題を回避します。

変更内容

  • src/coreclr/nativeaot/Runtime/unix/PalCreateDump.cpp: exit(EXIT_FAILURE)を_exit(EXIT_FAILURE)に変更
  • src/coreclr/pal/src/thread/process.cpp: exit(EXIT_FAILURE)を_exit(EXIT_FAILURE)に変更

パフォーマンスへの影響

影響なし

関連Issue

#133742(オリジナルのPR)

その他

  • 修正内容:createdump実行ファイルに実行権限がない場合に、execveがEACCESエラーで失敗した際、子プロセスがexit()を呼び出すと親プロセスの継承したatexitハンドラーやデストラクターが実行され、診断ソケットなどのリソースが不正にクローズされていました。_exit()を使用することでこれを防ぎます。
  • テスト結果:修正前はcreatedumpの権限エラー時に診断ソケットが消失。修正後は同じソケットが保持され、その後の操作が正常に完了。
  • リスク評価:Low。正常なexecve/execvの動作は変わらず、親プロセスはエラーパイプで失敗を検出しwaitpidで子プロセスを回収します。_exitはマルチスレッド環境でフォーク後のexec前に子プロセスを終了させる標準的な方法。
  • バックポート対象:release/11.0ブランチ

#133803 JIT: Fix block-store address containment boundary

  • 作成者: @EgorBo
  • 作成日時: 2026年09月12日 21:23:28(UTC)
  • マージ日時: 2026年09月18日 22:51:16(UTC)
  • ラベル: area-CodeGen-coreclr

概要

JIT コンパイラの block-store 命令アドレス containment 境界がコード生成アサーションと一致していない問題を修正します。xarch(x86/x64)および ARM64 プラットフォームで containment 境界を調整し、チェックビルドで発生するアサーション違反を防ぎます。

変更内容

  • src/coreclr/jit/lowerxarch.cpp: xarch プラットフォーム向けに unsupported boundary displacement を拒否する処理を追加(2行追加/1行削除)
  • src/coreclr/jit/lowerarmarch.cpp: ARM64 プラットフォーム向けに同等の境界処理を適用(3行追加/1行削除)
  • src/tests/JIT/Regression_ro_2/Runtime_133785.cs: 初期化、コピー、読み込みパスに対する block-store 境界回帰テストを追加(37行追加)

パフォーマンスへの影響

影響なし。本修正は正当でない block-store アドレッシングを拒否するもので、コード生成ロジックの適正性確保が目的です。

関連Issue

#133785

その他

チェックビルド(DEBUG ビルド)で発生していた JIT アサーション違反を修正する内部実装の変更です。公開 API への影響はありません。


#133773 Classify Wasm P/Invokes before R2R codegen

概要

WebAssembly ReadyToRun (R2R) 構築における P/Invoke 呼び出しの意味論を保持するため、Crossgen2 でコンパイル時に P/Invoke の分類を実施します。--directpinvoke で供給されたモジュール、QCall、および静的インポートは直接 R2R P/Invoke として保持される一方、静的に利用可能と証明されない通常のインポートはマーシャリングが必要なものとして扱われ、実行時の解決は呼び出し地点で発生します。これにより、IL ストリッピング時のランタイムフォールバックに依存せず、R2R イメージの P/Invoke 呼び出しサイト処理を確保します。

変更内容

  • Crossgen2/ReadyToRun ツール: P/Invoke 分類ロジックを追加(MarshalHelpers.cs、ReadyToRunCompilationModuleGroupBase.cs)。直接実行可能な P/Invoke と実行時解決が必要な P/Invoke を区別
  • WASM ビルドシステム: ComputeWasmPInvokeModules.cs を新規追加し、Browser/WASI アプリケーション構築用の統一的なモジュールリストを計算。プラットフォーム適用性、不変グローバリゼーション、ネイティブ入力対応を考慮
  • ビルド設定: WasmPInvokeModules.props、BrowserWasmApp.CoreCLR.targets、WasiApp.CoreCLR.targets を更新し、CoreCLR R2R 生成に対応するモジュールリストを提供
  • テスト追加: UnresolvedPInvokeTests.cs で P/Invoke 呼び出し地点の失敗タイミングをカバー。Runtime_58874 のWASM/R2R 隔離を削除
  • ネイティブコード: WASM 特定の P/Invoke ヘルパー実装を更新

パフォーマンスへの影響

直接 R2R P/Invoke(--directpinvoke で構成)は既存の直接 PINVOKE_TARGET コード生成を保持し、ランタイムブランチを追加しません。パフォーマンス上の懸念なし。

関連Issue

#133259、#133614

その他

  • VM レベルのメソッド拒否実装は削除済み。これにより R2R から IL へのフォールバックパスを回避し、--strip-il-bodies との互換性を維持
  • WasmImportLinkageAttribute は直接のまま保持され、WebAssembly インポートテーブルを経由して解決
  • モジュールリスト変更時に対応する R2R イメージを無効化するためのインクリメンタルビルドマニフェスト機構を実装
  • Copilot レビューにおいて、テスト初期化と一部プラットフォーム互換性の懸念が指摘されているものの、主要な検証(CoreCLR ブラウザサンプル発行、R2R + ネイティブリンク含む)は成功

#133748 Enable Roslyn compiler output caching in non-official builds

  • 作成者: @agocke
  • 作成日時: 2026年09月11日 22:15:59(UTC)
  • マージ日時: 2026年09月18日 18:06:10(UTC)
  • ラベル: area-Infrastructure

概要

Roslyn実験的コンパイラ出力キャッシュをUnix x64/arm64の非公式ビルドで有効化します。Azure Pipelinesキャッシュを使用してローリングビルドがPRビルドにキャッシュを提供し、SourceLinkを無効化することでコンパイラキャッシュ無効化を防ぎます。公式ビルドは影響を受けず、SourceLink有効のまま継続します。

変更内容

  • Directory.Build.props: プロパティ追加(1行)
  • eng/pipelines/coreclr/templates/setup-roslyn-cache.yml: キャッシュ復元・設定・永続化機能(28行)
  • eng/pipelines/coreclr/templates/roslyn-cache-stats.yml: ビルドごとのキャッシュ統計収集(24行)
  • eng/pipelines/coreclr/templates/setup-sccache.yml: Roslyn キャッシュセットアップ統合(7行)
  • eng/pipelines/common/global-build-job.yml: キャッシュ固有のビルド引数転送

パフォーマンスへの影響

  • libs.tests実験結果(dotnet/roslyn#84916使用):SourceLink無効時、359回のコンパイラ呼び出しで358回のヒット、1回のストア。キャッシュ無効時の6m32sから4m53sへ短縮、25.25%削減(1.338倍高速化)
  • SourceLink有効時は13回のみヒット
  • ローカル統合プローブ:1回目再ビルド時41ストア、2回目41ヒット
  • 懸念:ローリングキャッシュの無制限成長、メモリフットプリント管理未実装

関連Issue

なし

その他

  • Roslyn コンパイラ出力キャッシュは実験的段階。キャッシュ読み書き失敗は通常コンパイルにフォールバック
  • キャッシュキーはバージョン化されており、暫定フォーマットは独立して無効化可能
  • Copilot レビューで懸念指摘:ローリングキャッシュの無制限成長対策、ネイティブのみジョブでのキャッシュ不要設定など

#133703 JIT: Fix promoted liveness in forward substitution

概要

JIT の forward substitution で promoted struct のパレントに stale な last-use フラグが残り、生存している struct copy が誤って削除される問題を修正。 last-use invalidation logic を promotion-aware に改善し、single-use と multi-use substitution で同じロジックを共有するようにしました。

変更内容

  • src/coreclr/jit/forwardsub.cpp: Last-use invalidation ロジックを promotion-aware に更新(+8/-85)。Multi-use forward substitution でも single-use 時と同様に promotion を考慮した last-use フラグのクリアを実施。
  • src/coreclr/jit/compiler.h: Shared helper 関数の宣言を追加。
  • src/tests/JIT/Regression/JitBlue/Runtime_133641/Runtime_133641.cs: Issue #133641 の回帰テストを追加(+33)。
  • src/tests/JIT/Regression/Regression_ro_2.csproj: 回帰テストの登録。

パフォーマンスへの影響

影響なし

関連Issue

#133641

その他

JIT の liveness 変更は correctness に直結する敏感な修正であり、最終的なヒューマンレビューが推奨されています。


#133701 [release/11.0] Remove RCPC2 from the optimistic set on arm64

概要

ARM64プロセッサ上でRCPC2命令セットを最適化セットから削除するバックポート。Android環境で古いデバイス(数年前の機種)上のReady2Runメソッドが大量に拒否される問題を解決し、起動時間を約10%改善します。

変更内容

  • src/coreclr/tools/Common/InstructionSetHelpers.cs: ARM64向けの最適化セット定義からRCPC2命令セットを削除(3行変更)

パフォーマンスへの影響

  • 改善: Android環境で約10%の起動時間短縮を期待
  • 古いARM64デバイス上でReady2Run最適化が正常に機能し、メソッド拒否率が低下
  • CoreCLRのAndroid起動パフォーマンスがMono比で改善される

関連Issue

#133576(元のPR)、 dotnet/android#12722(詳細なテスト結果)

その他

  • 内部で発見された最適化で、カスタマー報告ではなし
  • リスク評価: 低。比較的新しい命令セットを最適化セットから削除するのみで、システムの安定性への影響は最小限
  • Mono ベース .NET Android との比較でパフォーマンス低下を防ぐ措置
  • 複数のARM64デバイスでのテスト実施済み

#133693 [release/11.0] Fix cgroup v2 memory limit traversal at hierarchy root

概要

Linux環境でcgroup v2を使用し、現在のプロセスがcgroup階層のルートに割り当てられている場合、マネージドcgroupメモリリミット走査が階層マウントを超えて継続しNullReferenceExceptionをスローする問題を修正します。この不具合はSystem.Diagnostics.Process.MaxWorkingSet/MinWorkingSetプロパティへのアクセス時に発生していました。.NET 9で導入された回帰を修正し、ネイティブ実装との一貫性を確保します。

変更内容

  • Interop.cgroups.cs: マネージドcgroup v2メモリリミット走査を階層マウントで制限。走査が可視階層マウント以上を超えないよう境界を設定し、ネイティブ実装と一貫した動作を実現
  • cgroupsTests.cs: 回帰テストを追加。ルートパスでのメモリ.max読み込み、ネストされたcgroupでの走査停止、階層マウント時のcgroupパス構築を検証

パフォーマンスへの影響

影響なし

関連Issue

#133470、#93611、#130377

その他

  • 回帰: .NET 9(#93611で階層的cgroupメモリリミット対応追加時)で導入
  • リスク: 低。変更はマネージドcgroup v2メモリリミット走査に限定され、現在のcgroupと祖先の走査は保持しつつ、階層マウント外のパス読み込みを防止
  • 注記: Copilotのレビューでは、ネストされたパスのテストが階層マウントを実際に処理して走査が停止することをより明確に検証すべきとの指摘がある点に留意

#133664 [release/11.0] Fix CoreLib trimming substitutions for interpreter-only CoreCLR

概要

iOS向けインタプリタおよびR2R+インタプリタ環境において、CoreLib のリンカー置換定義(linker substitution)が過度に広い対象を指定していたため、IsDynamicCodeCompiled プロパティが誤った値を返していた問題を修正します。この問題はMonoから値を復元することで対応されます。

変更内容

  • System.Private.CoreLib.csproj: リンカー置換定義ファイルの参照を修正(+1/-1)
  • ILLink.Substitutions.DynamicCodeCompiled.xml: リンカー置換定義ファイルの更新
  • RuntimeFeatureTests.cs: テストコード調整(+2/-4)

パフォーマンスへの影響

影響なし

関連Issue

#133639(本修正のオリジナルPR)

その他

  • 本PRはrelease/11.0ブランチへのバックポートです
  • 回帰バグ修正(regression fix)で、リスクレベルは低と評価されています
  • 内部テストで検証済みです
  • iOS環境での動的コード実行機能の検出ロジック(IsDynamicCodeCompiled)に関する修正であり、public APIの互換性への影響はありません

#133573 Remove ActiveIssue attribute from TypeTests

概要

NativeAOT環境で以前失敗していたリフレクション関連のコーナーケーステスト HideDetectionHappensAfterPrivateInBaseClassChecks() からActiveIssue属性を削除し、テストを再度有効化するテスト専用の変更です。

変更内容

  • src/libraries/System.Runtime/tests/System.Runtime.Tests/System/Reflection/TypeTests.Get.CornerCases.cs: HideDetectionHappensAfterPrivateInBaseClassChecks()メソッドから[ActiveIssue(... IsNativeAot)]属性を削除(1行削除)

パフォーマンスへの影響

影響なし

関連Issue

dotnet/runtimelab#865

その他

  • テスト専用の変更で製品コードへの影響はありません
  • NativeAOT環境でのテスト実行が現在正常に動作することが確認されたため、スキップを解除しています

#133211 Stop the DBI from unloading any DAC on non-Windows

概要

Unix環境でのCordbProcess::FreeDac呼び出し時のDAC(Debug Access Component)アンロードを防止するための修正です。DAC内に組み込まれたPALがスレッドローカルストレージ(TLS)デストラクタをプロセスグローバルに登録しており、アンロード時にそのデストラクタポインタが無効メモリを参照することで、スレッド終了時にfaultが発生していました。修正により、Unix環境ではDACモジュールをFreeLibraryで解放せずDetachで保持し続けることで、この問題を回避します。

変更内容

  • src/coreclr/debug/di/process.cpp: CordbProcess::FreeDac内で、Unix環境(HOST_UNIX)ではm_hDacModule.Free()からm_hDacModule.Detach()に変更。DAC内の組み込みPALが登録したpthread keyのデストラクタ(InternalEndCurrentThreadWrapper)がメモリリークを防ぐため、DACモジュールを意図的にマップ状態で保持し続けます。コメントとログメッセージを追加して意図を明記。

パフォーマンスへの影響

1マッピングあたり1つのDAC参照をメモリに残すため、デバッグセッションごとにメモリが蓄積します。ただし、診断デバッガテストで見られた4件のクラッシュを回避できるため、実用上の改善となります。

関連Issue

#133211(このPR自体) microsoft/clrmd#1499(ホスト側での同様の修正)

その他

  • この修正は既存のHOST_UNIXパターンを使用しており、新しいAPI面を導入していません
  • 修正前:Unix環境でのdlcloseによってDAC内のPALが登録したTLSデストラクタがメモリ上に宙ぶらりになり、スレッド終了時に__nptl_deallocate_tsdでfault
  • 修正後:DACモジュールをマップ状態で保持し、TLSデストラクタ参照が有効なままになります
  • NativeAOTランタイムはpthread_key_deleteを呼び出さないため、同様の問題がより顕著
  • レガシーDAC(universal DAC)は同じリスクを持つが、間欠的にしか発生しない

#133183 [release/11.0] Fix generic virtual dispatch hang after multiple AssemblyLoadContext unloads

概要

AssemblyLoadContext(ALC)の複数回アンロード後に汎用仮想メソッドディスパッチがハングする問題を修正します。センチネルキャッシュへのオフバイワンエラーにより、アンロード可能な型がキャッシュに永続的に保持され、型のアンロードが阻止されていました。#132859のbackportで、net 8.0のPR #89331が根本原因で、net 10.0のPR #106843により露出していました。

変更内容

  • CastCache.cs: センチネルキャッシュのサイズ判定ロジックを修正(+15/-5)
  • GenericCache.cs: センチネルキャッシュのサイズ判定ロジックを修正(+16/-5)
  • 新規テストケース追加:
    • GenericVirtualMethod.cs(汎用仮想メソッドテストケース)
    • GenericVirtualMethod.csproj
    • GenericVirtualMethodUnloaded.cs(アンロード検証)
    • GenericVirtualMethodUnloaded.csproj

パフォーマンスへの影響

影響なし。キャッシュ認識ロジックの修正であり、パフォーマンス特性に変更はありません。

関連Issue

#132562、#132859

その他

  • リスク評価: 低。off-by-oneエラーの修正で、センチネルキャッシュが常に満杯として正しく認識されるようになります
  • 重要度: 高。顧客報告の問題で、アンロード不可能な型の永続保持によるメモリリークやハングの原因となります
  • net 11.0のbackportです

#129369 Two code heaps

  • 作成者: @AndyAyersMS
  • 作成日時: 2026年06月13日 16:30:45(UTC)
  • マージ日時: 2026年09月18日 23:13:19(UTC)
  • ラベル: area-VM-coreclr

概要

Tier1 JITコンパイルされたコードを専用のコードヒープに分離し、ホットコードのキャッシュ/TLB局所性を向上させます。デフォルトで16MBの事前予約を行い、SeparateOptimizedCodeHeapsランタイム設定パラメータで制御可能です。大規模アプリケーションで測定可能なパフォーマンス改善が見られ、PMCデータからホットメソッドがより近くに配置され、使用ページ数が削減されることが確認されています。

変更内容

  • codeman.h/codeman.cpp: CodeHeapRequestInfoに最適化コードフラグ、HeapListにisOptimizedCodeフィールドとRangeSection::RANGE_SECTION_OPTIMIZEDCODEフラグを追加。Tier1コードヒープ割り当て時にこれらをタグ付け
  • loaderallocator.hpp/cpp: LoaderAllocatorに最適化コードヒープ用のキャッシュスロットm_pLastUsedOptimizedCodeHeapを追加
  • clrconfigvalues.h: SeparateOptimizedCodeHeaps設定オプションを追加(デフォルト有効)
  • dynamicmethod.cpp: ホストコードヒープのHeapList::isOptimizedCodeフィールドを初期化
  • jitinterface.cpp: IsOptimizedCode()判定ロジックの追加

パフォーマンスへの影響

  • 大規模顧客アプリケーションで測定可能なパフォーマンス改善(具体的な数値は未掲載)
  • ホットメソッドの局所性が向上し、占有ページ数が削減
  • 16MBの仮想アドレス空間を事前予約する初期コスト(複数ローダーアロケータでは倍数になる可能性)

関連Issue

#129369

その他

レビュー指摘事項:

  • アドレス制約付き割り当て(例:AllocJumpStubBlock)では最適化/非最適化チェックが適用されず、非Tier1スタブが最適化ヒープに混在する可能性があり、ヒープ分離要件を満たしていない
  • デフォルト有効化の判断に、仮想アドレス空間コスト、起動時間、Tier0/非階層化/動的コードに対する回帰テストを含むベンチマークデータが不足している
  • 現在レビュー過程中で、上記の問題が解決されるまでマージには至っていない可能性がある

目次