Pull Request on 2026年06月16日

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

注意点

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


目次

  1. #129462 [cDac] Fix failing cDac test on OSX
  2. #129461 [ci-scan-feedback] Strengthen dedup queries and block JIT/GC workarounds
  3. #129449 Wasm R2R: emit trailing end after retless BBJ_CALLFINALLY
  4. #129448 [cDAC] Implement GetILCodeVersionNodeData in DacDbi
  5. #129443 [cDAC] Add IsManagedCode DacDbi API
  6. #129435 Keep OSSL_LIB_CTX handles alive forever
  7. #129433 Redo resume after catch for interpreter via native EH
  8. #129430 [release/9.0-staging] Wait to complete the test before releasing the agile reference.
  9. #129410 Optimize delegate layout on CoreCLR
  10. #129392 JIT: recognize CORINFO_HELP_BOX in impThrowIfNull
  11. #129391 Wasm R2R: implement support for resume after catch
  12. #129390 Improve RangeOps::Merge
  13. #129371 Don't give up on folding obj.GetType if obj can be null
  14. #129349 JIT: clone array loops with stride > 57
  15. #129317 Revert "[HTTP] Remove peer.address from connection OTel counters"
  16. #129291 cDAC: dereference OBJECTHANDLE in collectible thread-statics
  17. #129260 Reduce raw global / typeinfo usage in cDAC Legacy interfaces
  18. #129215 Fix MemoryCache negative _cacheSize drift that permanently latches a size-limited cache
  19. #129201 [Wasm RyuJit] Enable Hardware Intrinsics
  20. #129145 GCRoot: Report GCFrame and in-flight exception objects
  21. #129069 ManagedWebSocket: report actual messageType in invalid-type ArgumentException
  22. #129059 [Wasm RyuJIT] Spill live ref/byref values to pinned stack slots at calls
  23. #128409 [clr-ios] Preserve inherited MemberData statics on maccatalyst CoreCLR
  24. #127498 [clr-ios] Enable Debug CoreCLR Apple Mobile jobs in extra-platforms pipelines

#129462 [cDac] Fix failing cDac test on OSX

  • 作成者: @leculver
  • 作成日時: 2026年06月16日 13:12:49(UTC)
  • マージ日時: 2026年06月16日 18:17:37(UTC)
  • ラベル: area-Diagnostics-cdac

概要

cDACにおけるポインタ型フィールドの処理を改善し、OSX上でのテスト失敗を修正しました。IntPtr/UIntPtr型のフィールドが"nint"/"nuint"として報告される場合、これらをポインタとして扱えるよう対応しました。これにより、マネージドコード内のポインタサイズフィールドの読み取りが適切に機能するようになります。

変更内容

  • TargetFieldExtensions.cs: AssertPointerTypeメソッドを拡張し、既存の"pointer"に加えて"nint"と"nuint"を有効なポインタ型名として受け入れるように更新(内部実装、デバッグ時検証のみ)
  • ObjectiveCMarshalTests.cs: ObjcTrackingInformation._memoryフィールドのモック契約記述子をTypeName = "nint"に変更し、実際のマネージド契約記述子と一致させた

パフォーマンスへの影響

影響なし

関連Issue

#128961(回帰の原因となったPR)

その他

  • 変更は cDAC(Compact Data Contract)の内部実装に限定されており、公開APIへの影響はありません
  • macOS環境でのテスト失敗を解決するための修正です
  • ポインタ型の検証ロジックはデバッグ時のみ使用されます

#129461 [ci-scan-feedback] Strengthen dedup queries and block JIT/GC workarounds

  • 作成者: @Copilot
  • 作成日時: 2026年06月16日 10:21:02(UTC)
  • マージ日時: 2026年06月16日 13:08:32(UTC)
  • ラベル: area-Infrastructure

概要

CI Outer-Loop Failure Scanner の重複排除(dedup)精度を向上させ、JIT/GC/PGO コードジェン関連の失敗に対する修正ポリシーを強化するもの。最近クローズされた KBE(Known Build Error)の検索を 2 クエリから 4 クエリ変形に拡張し、タイトル言い換えや整合性フィルタリングを経た前例を捕捉。また、無関係なコード変更によるコードジェン バグ回避を禁止し、所有者への引き継ぎコメントを要求するよう方針を明確化。

変更内容

  • .github/workflows/shared/create-kbe.instructions.md — Recently-closed KBE 検索クエリを 4 パターンに拡張

    • [ci-scan] タイトル + テスト名ステムの検索を追加(例:Runtime_105619 と異なる表現の先行タイトルを検出)
    • distinctive-assertion-substring による本文検索を追加(assertion テキストはタイトルより安定)
  • .github/workflows/ci-failure-fix.md — JIT/GC/PGO(コードジェン)修正ポリシーを明確化

    • 無関係なコード内のワークアラウンド(バッファサイズ変更、API 呼び出しパターン変更など)を禁止
    • 代わりに所有者への引き継ぎコメントを要求

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

これはドキュメント変更(agentic workflow 指示ファイル)のみで、ランタイム/コンパイラのコード変更ではない。目的は CI スキャナーの重複クローズ率を低減し、拒否されたワークアラウンド PR の提案を削減すること。


#129449 Wasm R2R: emit trailing end after retless BBJ_CALLFINALLY

概要

Wasm R2R コード生成で、retless BBJ_CALLFINALLY がwasm関数/funcletを終了する際に、必要な末尾の end opcode が欠落してモジュール検証エラー(function body must end with end opcode)が発生していた問題を修正します。ブロックが最後のブロックまたはfunclet開始の直前にある場合、unreachable の後に end opcodeを発行するようになります。

変更内容

  • src/coreclr/jit/codegenwasm.cpp: retless BBJ_CALLFINALLY に対して、ブロックが関数/funcletの最後または funclet 開始の直前にある場合、INS_unreachable の後に INS_end を発行するロジックを追加(+8行)

パフォーマンスへの影響

影響なし

関連Issue

#129335

その他

この修正は BBJ_THROW ガード(同様のケースを処理)に対応する形で実装されました。Wasm R2R 生成時のコード検証エラーによるモジュール読み込み失敗を防ぎます。


#129448 [cDAC] Implement GetILCodeVersionNodeData in DacDbi

  • 作成者: @rcj1
  • 作成日時: 2026年06月15日 23:48:50(UTC)
  • マージ日時: 2026年06月16日 21:29:54(UTC)
  • ラベル: area-Diagnostics-cdac

概要

コンパイル時データアクセス層(cDAC)において、計測済みILオフセットマッピングのサポートを追加し、これをレガシーDacDbiのGetILCodeVersionNodeDataフローに統合する変更です。InstrumentedILOffsetMappingの格納タイプをUINTに統一し、cDACデータディスクリプタとコントラクトAPIを拡張して、デバッガが実行時のILコードバージョン情報にアクセスできるようにします。

変更内容

  • CoreCLR VM層: ilinstrumentation.h/cppでマッピングカウント(m_cMap)をUINT型に変更、codeversion.h/cppでSetInstrumentedILMapシグネチャを更新
  • cDACデータディスクリプタ: InstrumentedILOffsetMapping型をDataTypeに追加し、ILCodeVersionNodeに埋め込みマッピングアドレスとして公開
  • cDACコントラクトAPI: ICodeVersionsに新規メソッドTryGetInstrumentedILMap(ILCodeVersionHandle ilCodeVersionHandle, out uint mapEntryCount, out TargetPointer mapEntries)を追加
  • DacDbiレガシー層: DacDbiImpl.GetILCodeVersionNodeDataを実装し、IL情報と計測済みマップデータを返却
  • 構造体クリーンアップ: DacSharedReJitInfoから未使用フィールドを削除
  • テスト追加: cDAC単体テストとモックデスクリプタを拡張し、新機能をカバー

パフォーマンスへの影響

影響なし(リファクタリングと新API追加)

関連Issue

なし

その他

本変更は内部実装とデバッガ向けAPIの拡張であり、公開APIへの破壊的変更はありません。UINTへの型統一は既存のサイズ制約に合わせた改善です。ドキュメント(CodeVersions.md)で新しいデータディスクリプタとAPIの仕様が記載されています。


#129443 [cDAC] Add IsManagedCode DacDbi API

  • 作成者: @rcj1
  • 作成日時: 2026年06月15日 21:50:10(UTC)
  • マージ日時: 2026年06月16日 12:56:08(UTC)
  • ラベル: area-Diagnostics-cdac

概要

DAC/DBI API の「アドレス分類」機能を簡略化し、未使用だった GetAddressType/AddressType enum を単一の IsManagedCode ブール値クエリに置き換えました。ネイティブ CoreCLR 側と管理された cDAC レガシー実装、デバッガー DI(Debugging Interface)の両方を新しい API に対応させています。

変更内容

  • IDL & ネイティブヘッダ: dacdbi.idl と dacdbiinterface.h から AddressType enum を削除し、GetAddressType を IsManagedCode に置き換え
  • ネイティブ実装: dacdbiimpl.h/cpp で IsManagedCode を実装(IsPossibleCodeAddress + ExecutionManager::IsManagedCode を使用)
  • 管理コード投影: IDacDbiInterface.cs を更新して IsManagedCode を公開
  • cDAC 実装: DacDbiImpl.cs に IsManagedCode 実装を追加し、レガシー実装との整合性を検証
  • デバッガー DI: process.cpp の例外トリアージロジックを IsManagedCode 呼び出しに変更

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • この変更は API サーフェスの簡略化を目的とした内部実装の改善です。GetAddressType は外部で広く使用されていなかったため、より単純な IsManagedCode ブール値のみを公開することでコードの複雑度を削減しています。
  • ネイティブとマネージド実装の両側で一貫性が取られており、既存の ExecutionManager::IsManagedCode 機能を活用しています。

#129435 Keep OSSL_LIB_CTX handles alive forever

  • 作成者: @vcsjones
  • 作成日時: 2026年06月15日 18:25:00(UTC)
  • マージ日時: 2026年06月16日 16:43:41(UTC)
  • ラベル: area-System.Security

概要

OpenSSL 3.0のOSSL_LIB_CTXコンテキストをプロセス期間中有効に保つように変更しました。従来はスレッド終了時に無効メモリアクセスが発生していましたが、コンテキストとプロバイダーをキャッシュして再利用することで問題を解決しています。これにより、名前付きキー(TPM等)のテストカバレッジも復活させています。

変更内容

  • pal_evp_pkey.c: グローバルプロバイダー/libctxキャッシュを追加し、従来のextra-handle参照カウント方式を削除
  • pal_evp_pkey.h: EvpPKeyExtraHandle構造体を削除し、関数シグネチャを簡略化
  • SafeEvpPKeyHandle.OpenSsl.cs: ExtraHandleの破棄パラメータを削除し、セマンティクスを明確化
  • Interop.EvpPkey.cs: P/Invoke署名を更新
  • pal_ssl.c: EVP_PKEY破棄呼び出しを新しいシグネチャに対応
  • OpenSslNamedKeysTests.manual.cs, SslStreamOpenSslNamedKeysTests.manual.cs: 従来のActiveIssue属性を削除し、テストを復活

パフォーマンスへの影響

影響なし。プロバイダーキャッシュはミューテックスで同期化され、配列サイズ変更時のみ発生します。アプリケーション当たり2~3個程度の少数プロバイダーしか使用されることが想定されるため、パフォーマンス低下リスクは最小限です。

関連Issue

#129339

その他

このPRは#129367をリバートしており、データ依存関係の問題を根本的に解決しています。OSSL_LIB_CTX_freeの代わりにOPENSSL_thread_stop_exを全スレッドで呼び出す必要があるというOpenSSLの制約に対する実用的な回避策です。


#129433 Redo resume after catch for interpreter via native EH

概要

CoreCLRインタープリタの「catch後の再開(resume after catch)」機能を修正するPRです。ネイティブ例外処理を通じてマネージド例外を正しく処理し、GCがスタック走査を開始する際の参照フレームを確保することで、ControlledExecutionTestsで発生していたAccessViolationエラーを解決します。主な修正は、明示的フレーム削除時にもResumableFrameを追加してGCの起点を提供することです。

変更内容

  • 例外処理フレームワーク(exceptmacros.h、exceptionhandling.cpp):resume-after-catch処理のインストール/アンインストール機構を追加
  • インタープリタ実行エンジン(eetwain.cpp、interpexec.cpp):resume-after-catchを単純にマーカー例外を投げる方式に簡素化し、ネイティブコンテキストから適切に再スロー
  • ネイティブ↔マネージド境界(QCall、prestub、仮想ディスパッチスタブ、メモリ割り当て/throw補助関数、P/Invoke import worker など):各境界にresume-after-catch処理を追加
  • フレーム管理(frames.h、frames.cpp、interpexec.cpp):保存SP(Saved Stack Pointer)フィールドの削除、防御的なnullチェック追加
  • アセンブリ(複数アーキテクチャのasmhelpers.S、umthunkstub.S):UM entry prestub unwindハンドラアノテーションをNoHandlerに変更

パフォーマンスへの影響

影響なし。本変更は例外パスの正確性を修正するもので、正常系パスへの影響はありません。

関連Issue

#129270

その他

  • 複数のアーキテクチャ(amd64、arm64、i386、loongarch64、riscv64)にわたる一貫した変更
  • 防御的プログラミング(null チェック追加)で堅牢性向上
  • 以前の試みで発生した問題(GCスタック走査の起点喪失)に対する根本的な解決策を実装

#129430 [release/9.0-staging] Wait to complete the test before releasing the agile reference.

概要

COM Wrappers API テストの競合状態に対する修正をバックポート。テスト完了を待たずに agile reference を解放していた問題を修正し、テストの信頼性を向上させます。元の修正は.NET 10/11で実装済みですが、9.0 branchに漏れていました。

変更内容

  • src/tests/Interop/COM/ComWrappers/API/Program.cs: テスト実行完了までの待機処理を追加(+1/-2行)

パフォーマンスへの影響

影響なし

関連Issue

#129421(本PR でクローズ) 元の修正:#112387

その他

  • この修正は.NET 10および11で既に実装済みで、追加の問題報告はなし
  • 製品コード(ランタイム)への影響なし、テストのみの変更
  • 内部発見のflaky testの修正
  • 破壊的変更なし、リスクなし

#129410 Optimize delegate layout on CoreCLR

概要

CoreCLRにおけるデリゲートレイアウトの最適化。PR #129304に相当するCoreAOTの変更をCoreClrに適用し、デリゲートオブジェクトのメモリレイアウトを改善しています。

変更内容

  • src/coreclr/System.Private.CoreLib/src/System/Delegate.CoreCLR.cs: デリゲートフィールドレイアウトの調整(4行追加、4行削除)
  • src/coreclr/inc/readytorun.h: Ready2Runヘッダー定義の更新(フラグまたはバージョン情報の変更)
  • src/coreclr/vm/object.h: デリゲートオブジェクト構造体定義の最適化(メモリレイアウト関連)
  • src/coreclr/tools/Common/Internal/Runtime/ModuleHeaders.h: モジュールヘッダー定義の調整
  • src/coreclr/tools/Common/JitInterface/CorInfoImpl.cs: JIT インターフェース実装の更新

パフォーマンスへの影響

デリゲートメモリレイアウト最適化による以下の改善が期待されます:

  • デリゲートインスタンスのメモリフットプリント削減
  • キャッシュ局所性の向上

具体的なベンチマーク結果は提供されていません。

関連Issue

#129304(CoreAOT版の相当する変更)

その他

  • CoreAOT版(PR #129304)との一貫性を保つための変更
  • ランタイム内部実装(vm、readytorun)に関わる変更であり、公開APIへの影響なし

#129392 JIT: recognize CORINFO_HELP_BOX in impThrowIfNull

概要

Tier0 JITコンパイラで、ArgumentNullException.ThrowIfNull()が値型のボックス化に対して呼び出される場合の最適化を拡張しました。GT_BOXノードだけでなく、CORINFO_HELP_BOXヘルパー呼び出しとして表現されるボックス化パターンも認識し、不要なnull例外スロー処理を削除します。これにより、Tier0でのThrowIfNull(struct)が余分なアロケーションを行わなくなります。

変更内容

  • src/coreclr/jit/importercalls.cpp: Compiler::impThrowIfNullメソッドに新しいパターンマッチを追加。ArgumentNullException_ThrowIfNull(CORINFO_HELP_BOX(clsHnd, addr), valueName)パターンを検出し、副作用を保持しながら処理を最適化(NOP化)。

パフォーマンスへの影響

改善あり。Tier0でのstruct型に対するThrowIfNull呼び出しで、不要なアロケーションが削除されるため、メモリ効率とスループットが向上します。

関連Issue

#128574

その他

この最適化はTier0専用であり、評価順序と副作用の保持を確保するため、addrとvalueNameを適切にスピルして処理を行います(内部実装レベルの変更)。


#129391 Wasm R2R: implement support for resume after catch

概要

WebAssembly R2R(Ready-to-Run)実行時における例外処理後の実行再開(resume after catch)機能を実装しました。try_tableブロックごとに exnref型のラッパーブロックを配置し、キャッチされた例外をfunclet単位の exnrefローカル変数で管理します。また、RtlRestoreContextタグを簡略化(()->())し、try-fault funcletの多重エントリポイント標識を廃止しています。

変更内容

  • codegenwasm.cpp: try_tableラッパーブロック生成ロジックの実装と例外管理の再構成(+34/-41行)
  • fgwasm.cpp/fgwasm.h: WebAssembly固有のフローグラフ処理の拡張、exnref管理とfunclet処理の更新(+45/-2行)
  • emitwasm.cpp: コード生成時のexnref処理の実装(+13/-9行)
  • compiler.h: 新規フィールドの追加(+2行)
  • flowgraph.cpp: フローグラフレイアウト処理の調整(+11/-2行)
  • regallocwasm.cpp: レジスタ割り当て時のexnref対応(+10行)
  • WasmObjectWriter.cs: オブジェクトライターの軽微な修正(+1/-1行)
  • wasm/helpers.cpp: ランタイムヘルパー関数の簡略化(+7/-11行)

パフォーマンスへの影響

明記されていません。

関連Issue

#129391

その他

この変更は ランタイムのJITコンパイラレイヤーに限定された内部実装変更であり、公開APIへの影響はありません。WebAssemblyプラットフォーム上での例外処理の正確性と堅牢性向上を目的としています。


#129390 Improve RangeOps::Merge

  • 作成者: @EgorBo
  • 作成日時: 2026年06月14日 15:53:54(UTC)
  • マージ日時: 2026年06月16日 00:54:33(UTC)
  • ラベル: area-CodeGen-coreclr

概要

JITの範囲解析における RangeOps::Merge を改善し、PHI引数から範囲をマージする際の境界チェック最適化をより積極的に適用します。例えば [0..1] U [10..10] が [0..10] にマージされるような処理で、コードサイズを最大110k削減します。

変更内容

  • src/coreclr/jit/rangecheck.h: RangeOps::Merge のマージルールを2つ改善
    1. 定数上限と $bnd + cns 形式の上限をマージする際の"上限拡張"ヒューリスティックを緩和
    2. "binop-配列下限 + 定数下限"マージルールを汎化し、従来の cns <= 0 ゲーティング条件を削除

パフォーマンスへの影響

コードサイズ削減(最大110k diffs)。SuperPMIでの検証済みですが、具体的な実行速度やメモリへの影響の詳細は提供されていません。

関連Issue

なし

その他

本PR はGitHub Copilot CLIの支援により作成され、SuperPMI asmdifsにより検証済み。内部実装(JITコンパイラの最適化パス)の改善であり、公開APIへの影響なし。


#129371 Don't give up on folding obj.GetType if obj can be null

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

概要

JIT のコンパイラ最適化において、obj.GetType() の定数畳み込みを改善するPRです。オブジェクトが null である可能性がある場合でも、型が確定していれば定数畳み込みを行い、暗黙的な null チェック例外を VN 例外セットに保持することで NullReferenceException を抑制しません。これにより、不要な呼び出しが削除され、より効率的なコードが生成されます。

string _fld;
Type Foo() => _fld.GetType();
// 修正前:GetType()の呼び出しが残る
// 修正後:型が System.String と確定し、null チェック付きで定数に畳み込まれる

変更内容

  • src/coreclr/jit/valuenum.cpp: fgValueNumberIntrinsic で NI_System_Object_GetType の畳み込み条件を拡緩。レシーバが null の可能性がある場合は NullPtrExc を VN 例外セットに追加し、null チェック例外を保持。
  • src/coreclr/jit/gentree.cpp: gtGetClassHandle の非 null 推論を強化。構造的 null 可能性チェック(fgAddrCouldBeNull)と VN ベースの非 null 情報(vnStore->IsKnownNonNull)を活用して、より多くの場合で非 null を判定。

パフォーマンスへの影響

改善あり。提供例ではメソッド呼び出しが消去され、ダイレクトなメモリロードと定数化に置き換わることで、実行命令数が大幅に削減されています。

修正前:sub rsp, 40 → call GetType() → add rsp, 40(スタック調整とメソッド呼び出し) 修正後:メモリロード + 定数代入 + リターン(null チェックは暗黙的に保持)

関連Issue

#129371

その他

この変更は内部実装(JIT 最適化)の改善であり、公開 API に影響はありません。互換性への問題もなく、最適化による動作変更の一部としてスタック領域確保やメモリ参照パターンが改善されます。


#129349 JIT: clone array loops with stride > 57

概要

JIT ループクローニングの制限を緩和し、ストライド ≥ 58 の配列ループをサポートします。従来は stride < 58 で一律に拒否していましたが、大きなストライドに対しては実行時チェック arr.Length <= INT_MAX - s + 1 を追加することで対応。小さいストライドは暗黙的な Array.MaxLength バウンドで十分なため追加チェックなし。Span の同様の改善(#129309)に基づいています。

変更内容

  • src/coreclr/jit/loopcloning.cpp: optDeriveLoopCloningConditions のストライド上限チェックを削除し、必要に応じて大きなストライド用のオーバーフロー防止条件を動的に生成。配列長制限処理を整理し、単一の ArrIndex を複数の条件(逆参照/ゼロトリップ/オーバーフロー/制限判定)で再利用
  • src/tests/JIT/opt/Cloning/LargeStride.cs: ストライド > 57(60、256 など)の配列ループと関連ループパターンの機能テストを追加(127行)
  • src/tests/JIT/opt/Cloning/LargeStride.csproj: テストプロジェクトファイルを追加

パフォーマンスへの影響

大きなストライドのループでランタイムオーバーフロー検査が追加される場合がありますが、その条件は JIT コンパイル時に評価でき、ホットループでは期待値では偽となるため、実際のオーバーヘッドは限定的。小さいストライドは追加チェックなし。詳細なベンチマーク結果は提供されていません。

関連Issue

#129309(Span に対する同様の作業)

その他

  • この変更は JIT コンパイラ(内部実装)への最適化であり、公開 API への影響なし
  • 破壊的変更なし
  • ループクローニング最適化の適用範囲を拡大し、コンパイル後コードの性能向上を目指す

#129317 Revert "[HTTP] Remove peer.address from connection OTel counters"

  • 作成者: @ManickaP
  • 作成日時: 2026年06月12日 07:19:18(UTC)
  • マージ日時: 2026年06月16日 07:17:03(UTC)
  • ラベル: area-System.Net.Http

概要

PR #128940で削除されたnetwork.peer.addressタグをSystem.Net.Http接続レベルのOpenTelemetryメトリクスに復元するリバート変更です。OpenTelemetry仕様の確認により、.NET向けの仕様は安定版であることが判明したため、復元が必要になりました。

変更内容

  • ConnectionMetrics.cs: network.peer.addressタグを条件付きで接続メトリクスのタグセットに復元
  • HttpConnectionBase.cs: リモートエンドポイントアドレス情報をConnectionMetricsに渡すよう変更
  • MetricsTest.cs: ピアアドレスバリデーション補助関数を追加し、外部サーバーテストを更新(解決されたIPアドレスを許可)

パフォーマンスへの影響

影響なし

関連Issue

#128940

その他

  • 変更はhttp.client.open_connectionsおよびhttp.client.connection.durationメトリクスにnetwork.peer.addressタグを再度追加します
  • タグはリモートエンドポイントアドレスが利用可能な場合にのみ出力されます
  • OpenTelemetry仕様の異なるバージョンが存在することが判明し、.NET向けの仕様が安定版であることを確認した上でのリバートです

#129291 cDAC: dereference OBJECTHANDLE in collectible thread-statics

  • 作成者: @leculver
  • 作成日時: 2026年06月11日 14:41:30(UTC)
  • マージ日時: 2026年06月16日 13:27:30(UTC)
  • ラベル: area-Diagnostics-cdac

概要

cDAC(Common Data Access Component)におけるCollectible Thread-Static変数の処理を修正するPRです。従来、Collectible分岐ではスロットポインタそのものを返していましたが、NonCollectible分岐と同様にOBJECTHANDLEを逆参照して実際のオブジェクトを返すように変更します。これにより、request.cpp内のObjectFromHandleUncheckedの動作と一致させ、clrmdの期待値と揃えます。

変更内容

  • src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Contracts/Contracts/Thread_1.cs

    • Collectible TLS static-base検索ロジックを修正
    • TLSスロットをOBJECTHANDLEとして扱い、ProcessedData経由で逆参照してオブジェクトを取得
    • スロット値をそのままオブジェクトポインタとして扱う処理から変更
  • docs/design/datacontracts/Thread.md

    • データコントラクト設計ドキュメントを更新
    • ネイティブ動作との整合性に関する説明を追加

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

この変更は内部のデータアクセスコンポーネント(cDAC)の実装修正であり、ネイティブデバッグツール(clrmd)とのデータコントラクト互換性を確保するものです。公開APIへの影響はありません。


#129260 Reduce raw global / typeinfo usage in cDAC Legacy interfaces

概要

cDAC(Common Data Access Component)のLegacy実装をリファクタリングし、ランタイムグローバルおよびtypeinfoの直接読み取りを削除。代わりに型付きコントラクトアクセサを経由してルーティングしています。動作は保持されており、各リファクタリングは既存の読み取りを上位層(Legacy)から対応するContracts/*_1実装に移動するのみです。

変更内容

主要な変更:

  1. ILoader.GetLookupTablesによるModuleLookupMap.TableDataオフセット管理

    • ModuleLookupTablesレコード構造体にTableDataOffsetフィールドを追加
    • SOSDacImpl.GetModuleDataはGetTypeInfo(DataType.ModuleLookupMap)による直接読み取りを廃止
    • Legacyプロジェクト内の唯一のGetTypeInfo呼び出しを削除
  2. ILoader.GetDomainInfo()によるグローバルAppDomainポインタ管理

    • グローバルAppDomainポインタを読み取り・参照解決する新しいアクセサを追加
    • 従来のReadGlobalPointer + ReadPointerのインライン呼び出しをこの単一メソッドに統一
    • RuntimeDomainInfo構造体とDefaultADIDはコントラクトから削除
  3. IRuntimeTypeSystem.GetWellKnownMethodTable()によるランタイムシングルトンメソッドテーブル管理

    • WellKnownMethodTable列挙型(Object、String、Array、Exception、Free、Canon)を導入
    • RuntimeTypeSystem_1でTryReadGlobalPointer + TryReadPointerを実装
    • 初期化されていないグローバルに対してTargetPointer.Nullを返却(従来の遅延読み取り動作に対応)
    • SOSDacImpl、DacDbiImpl、HeapWalkで使用
  4. DAC: SystemDomainの特別扱いを削除

    • GetAppDomainStoreDataでsystemDomain = 0を報告
    • GetAppDomainData、GetAssemblyList、GetAppDomainNameのSystemDomainガード削除

パフォーマンスへの影響

影響なし(リファクタリングのため動作変化なし)

関連Issue

なし

その他

破壊的変更: DacpAppDomainStoreData::systemDomainがNULLになります。このフィールドが常に有効であると仮定するSOS消費者の更新が必要です。

テスト: cDAC単体テスト2493件が合格。以下のテスト更新:

  • ClrDataTaskTests.GetCurrentAppDomainでILoaderコントラクトを登録
  • DacDbiImplTests.IsExceptionObjectでIRuntimeTypeSystem.GetWellKnownMethodTableをモック

スコープ外: DacNotificationFlags、StressLogなど追加のLegacyグローバル読み取りサイトは後続PRで対応予定


#129215 Fix MemoryCache negative _cacheSize drift that permanently latches a size-limited cache

概要

MemoryCacheOptions.SizeLimitが設定されている場合、並行的なSet/Get/Remove操作下で内部の_cacheSizeカウンターが負の値にドリフトし、その後のすべてのSetが暗黙的に拒否される重大なバグを修正しました。この問題は.NET 9.0と10.0に影響します。

変更内容

  • src/libraries/Microsoft.Extensions.Caching.Memory/src/MemoryCache.cs: SetEntryメソッドの_cacheSizeの更新タイミングを修正。#103931で導入された回帰を修正し、前のエントリのサイズデクリメントをTryUpdateの原子的な後に実行するようにして、二重計算を防止。
  • src/libraries/Microsoft.Extensions.Caching.Memory/tests/MemoryCacheConcurrentSizeTrackingTests.cs: 並行性の回帰テストを追加。キャッシュサイズが負にならないこと、Set/Get/Remove嵐後もエントリが保持されること、およびSizeLimitによる削除が機能すること検証。

パフォーマンスへの影響

単一スレッドの純粋な置換マイクロベンチマークでは、現在のコードとの差異は実行時ノイズ範囲内(約±100 ns/op)。修正は置換パス上に1つのInterlocked.Addを復元するだけで、エントリ割り当てと辞書操作がコストの支配的な要因のため、パフォーマンス低下は無視できるレベル。

関連Issue

#129186、#103931(回帰源)、#36039(動作保持)、#124430、#111959

その他

  • 影響バージョン:8.0.x は未影響、9.0.x および 10.0.x が影響(#103931 が 9.0 で導入されたため)
  • 修正は#103931が導入した前エントリ対応の容量チェックは保持し、#36039の動作と既存テストは保持されます
  • 既存のCompareExchangeリトライループと「容量をコミット前にチェック」の順序を意図的に維持し、#124430で解決された問題(オーバーフロー・ロールバック破損と偽の拒否)を回避

#129201 [Wasm RyuJit] Enable Hardware Intrinsics

概要

WebAssembly(Wasm32)向けのハードウェア・イントリンシクス(SIMD)サポートをJIT層で有効化する基盤整備PR。FEATURE_SIMDおよびFEATURE_HW_INTRINSICSをWasm向けに有効化し、NYI_WASM_SIMDマクロと新たなJitWasmSimdNyiToR2RUnsupported設定オプションを導入。これにより、実装が進められるまでの間、R2R/crossgenの失敗を防止しながらインフラストラクチャの整備が進行される。

変更内容

  • 命令セット定義: Wasm32向けの命令セット定義(WasmBase、PackedSimd、Vector128)をJIT/ランタイムインターフェースに追加
  • JIT有効化: Wasm向けスタンドアロンJITビルドでSIMD/HWIntrinsic機能を有効化(CMakeLists.txt)
  • Wasm固有スタブ: hwintrinsicwasm.cpp、hwintrinsiclistwasm.h、hwintrinsiccodegenwasm.cppを新規作成し、Wasm向けのインポート/ロワリング/コード生成スタブを実装
  • 互換性対応: !TARGET_XARCH → TARGET_ARM64の仮定を修正し、Wasm環境での正確な分岐を実現。マスクレジスタが存在しないWasmではFEATURE_MASKED_HW_INTRINSICSの仮定を解除
  • 設定オプション: jitconfigvalues.hにJitWasmSimdNyiToR2RUnsupportedを追加し、WasmのcrossgenでNYI_WASM_SIMDをR2R非対応扱いに変換
  • 既存コード調整: 複数ファイル(valuenum.cpp、morph.cpp、gentree.cpp等)で条件付きコンパイルを調整し、Wasm環境での処理を分離

パフォーマンスへの影響

影響なし。本PRは基盤整備であり、実装は今後のフェーズで進行される。スタブ化されたNYI関数は、実装完了まではランタイム例外またはR2R非対応として動作する。

関連Issue

#129140

その他

  • 互換性: 破壊的変更なし。JIT/EE インターフェースGUID(jiteeversionguid.h)は更新されているため、JIT再コンパイルが必要。
  • 留意点: Copilotレビューで、abi.cppのSize==12(Vector3/TYP_SIMD12)の処理が、コメント「最小でもサイズ以上の型を返す」に矛盾しうる可能性が指摘されている。また、valuenum.cppの条件付きコンパイルが脆弱で、今後の保守時に注意が必要とされている。
  • 初期実装: Vector128クロスプラットフォーム演算の多くはスタブ状態であり、本実装は今後の段階で進行予定。

#129145 GCRoot: Report GCFrame and in-flight exception objects

  • 作成者: @leculver
  • 作成日時: 2026年06月08日 23:47:03(UTC)
  • マージ日時: 2026年06月16日 18:15:59(UTC)
  • ラベル: area-Diagnostics-cdac

概要

このPRはcDAC(Compact Data Access Contract)のスタック参照列挙機能を拡張し、従来報告されていなかった2つのGCルートソースを追加します:

  1. スレッドのGCFrame(GCPROTECT)チェーンで保護されたオブジェクト
  2. スレッドのExInfoチェーンに保持されたインフライト例外オブジェクト

これにより、IStackWalk.WalkStackReferencesがより完全なGCルート情報を報告できるようになります。

変更内容

  • cDAC データコントラクト拡張:

    • GCFrame型をデータコントラクトに追加(新規公開API)
    • Thread契約にm_pGCFrameフィールドを追加
    • GCFrame の ネイティブレイアウト記述用のマネージドデータコントラクト型を新規作成
  • StackWalk実装の拡張:

    • StackWalk_1.WalkStackReferencesでGCFrameルートとExInfo(例外トラッカー)ルートを報告するよう拡張
    • スタック参照走査ロジックを改善
  • テストの追加:

    • GCProtect デバッギー:AssemblyResolveハンドラ内のネイティブGCPROTECTスコープでFailFastする
    • NestedException デバッギー:ネストされた例外がインフライト中にクラッシュ
    • 両者のダンプベーステストを追加
  • ネイティブ側の変更:

    • threads.hでThread::m_pGCFrameオフセットをcdac_dataを通じて公開
    • frames.hでネイティブGCFrameレイアウト記述を追加
    • datadescriptor.inc に新規CDAC型記述子を追加

パフォーマンスへの影響

影響なし

関連Issue

#129145

その他

  • 作成者の初めての本格的なcDAC変更であり、詳細なレビューフィードバックが求められている
  • ドキュメント(StackWalk.md、Thread.md)も併せて更新
  • GCFrame保護ルートテストでは潜在的な偽陽性を回避する設計

#129069 ManagedWebSocket: report actual messageType in invalid-type ArgumentException

  • 作成者: @Copilot
  • 作成日時: 2026年06月06日 13:11:45(UTC)
  • マージ日時: 2026年06月16日 07:40:00(UTC)
  • ラベル: area-System.Net

概要

ManagedWebSocket.ThrowIfInvalidMessageTypeで、無効なWebSocketMessageType値に対するArgumentExceptionメッセージが常に"Close"をハードコードしていた問題を修正しました。実際に渡されたmessageType値(未定義の列挙値を含む)がエラーメッセージに正確に反映されるようになります。

// 修正前: 常に "Close" を報告
// 修正後: 実際の messageType 値を報告
throw new ArgumentException(SR.Format(
    SR.net_WebSockets_Argument_InvalidMessageType,
    messageType, nameof(SendAsync), nameof(WebSocketMessageType.Binary),
    nameof(WebSocketMessageType.Text), nameof(CloseOutputAsync)),
    paramName);

変更内容

  • src/libraries/System.Net.WebSockets/src/System/Net/WebSockets/ManagedWebSocket.cs: ThrowIfInvalidMessageTypeメソッドで、SR.Formatの第1引数プレースホルダー{0}にハードコードされたnameof(WebSocketMessageType.Close)を、実際のmessageTypeパラメータに置き換えました。
  • src/libraries/System.Net.WebSockets.Client/tests/SendReceiveTest.cs: テストを追加し、無効なmessageType値に対するエラーメッセージが正確に報告されることを検証しました。

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

この修正により、BrowserWebSocket.SendAsyncの実装と一致し、異なるWebSocketMessageType実装間で動作が統一されるとともに、将来追加される新しいWebSocketMessageType値に対しても対応可能になります。(内部実装の変更のため、公開APIへの影響はありません)


#129059 [Wasm RyuJIT] Spill live ref/byref values to pinned stack slots at calls

概要

WebAssembly (Wasm) RyuJIT コンパイラにおいて、GC参照/byref値がWasmシャドウスタック上に一時的に置かれ、GCに見えない状態でGCホール(GC holes)が発生する問題を修正します。新しいIRノード GT_WASM_SPILL_REF と専用パス WasmSpillRefs を導入し、ライブなref/byref値を専用のピンド(pinned)ローカル変数にスピルすることで、GCが参照を追跡できるようにします。

変更内容

  • fgwasm.cpp: Compiler::WasmSpillRefs パスを実装。呼び出し前後でスピルノードを挿入し、ピンドスタックスロット用のローカル変数を割り当てます。
  • gtlist.h: 新しいWasmノード種 GT_WASM_SPILL_REF を追加。
  • gentree.cpp: GT_WASM_SPILL_REF を単項ノードとして扱うようにオペランド反復処理を更新。
  • codegenwasm.cpp: GT_WASM_SPILL_REF のWasmコード生成と、呼び出し時のスピルインデックスリセットを実装。
  • compiler.h/cpp: m_wasmSpillSlots フィールドと WasmSpillRefs メソッド宣言を追加し、Wasmコンパイルパイプラインに統合。
  • regallocwasm.cpp: "splash zone"ローカル変数をレジスタ候補として強制的に処理。
  • compphases.h/compmemkind.h: PHASE_WASM_SPILL_REFS とメモリ種を追加。
  • codegenlinear.cpp: ブロック境界でWasm用スピルインデックスをリセット。

パフォーマンスへの影響

影響なし(スピル機構自体はGCの正確性を向上させるものであり、パフォーマンス数値の記載なし)

関連Issue

なし

その他

この変更はWasm固有の実装であり、公開API変更ではなくJITコンパイラの内部実装です。GCホールの修正により、Wasm環境での参照の安全性が向上します。


#128409 [clr-ios] Preserve inherited MemberData statics on maccatalyst CoreCLR

概要

macCatalyst-arm64 CoreCLR環境でILLinkがxUnitの[MemberData]属性により参照される継承された静的フィールドを削除してしまう問題を修正します。[DynamicDependency]属性を追加して基本クラスの静的メンバーを保護し、トリミング時のメンバーデータ検出失敗を防ぎます。

変更内容

  • System.Security.Cryptography/tests/System.Security.Cryptography.Tests.csproj: ILLink記述子XMLの参照を追加
  • System.Security.Cryptography/tests/ILLink.Descriptors.xml: ReadWrite_Success_MemberData静的フィールドを保護する記述子を追加(CryptoStreamTestsの基本クラス継承メンバー)
  • System.Net.Sockets/tests/FunctionalTests/System.Net.Sockets.Tests.csproj: ILLink記述子XMLの参照を追加
  • System.Net.Sockets/tests/FunctionalTests/ILLink.Descriptors.xml: CopyToAsync_AllDataCopied_MemberData静的フィールドを保護する記述子を追加(NetworkStreamTestの基本クラス継承メンバー)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

このPRはmacCatalyst上でのCoreCLRテスト実行を有効化するためのトリミング対応です。xUnitが派生クラスでオーバーライドされた[MemberData]を解決する際に、基本クラスで定義された静的フィールドをILLinkが削除してしまうため、ILLink記述子ファイルで明示的に保護する必要があります。テストコードのみの変更であり、ランタイムやライブラリの公開APIに影響はありません。


#127498 [clr-ios] Enable Debug CoreCLR Apple Mobile jobs in extra-platforms pipelines

概要

Apple モバイルプラットフォーム(tvOS arm64、iOS Simulator arm64、macCatalyst arm64)向けの Debug CoreCLR ライブラリスモークテストジョブを Azure Pipelines で再有効化します。これまでコメントアウトされていたジョブをコマンドから外し、テストカバレッジを復元するものです。

変更内容

  • eng/pipelines/extra-platforms/runtime-extra-platforms-ioslike.yml

    • tvOS arm64 Debug CoreCLR ライブラリスモークテストジョブと Helix 提出ステップを再有効化
  • eng/pipelines/extra-platforms/runtime-extra-platforms-ioslikesimulator.yml

    • iOS Simulator arm64 Debug CoreCLR ライブラリスモークテストジョブと Helix 提出ステップを再有効化
  • eng/pipelines/extra-platforms/runtime-extra-platforms-maccatalyst.yml

    • macCatalyst arm64 Debug CoreCLR ライブラリスモークテストジョブと Helix 提出ステップを再有効化

パフォーマンスへの影響

影響なし(ビルドパイプラインの設定変更であり、ランタイムのパフォーマンスには直接的な影響はありません)

関連Issue

なし

その他

本変更は CI/CD パイプラインの設定変更であり、Apple モバイルプラットフォーム向けの Debug ビルドのテストカバレッジを復元するものです。公開 API や runtime コンポーネントへの直接的な影響はありません。


目次