Pull Request on 2026年07月25日

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

注意点

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



#131357 Add DbgShimCreateInstanceFromContractDescriptor cDAC export

概要

cDAC(Compact DAC)エクスポート層に新しいアンマネージエクスポート DbgShimCreateInstanceFromContractDescriptor を追加し、ICLRContractLocator の実装をデータターゲットに要求せずにコントラクト記述子アドレスから直接DAC/SOSインターフェースを作成できるようにします。同時に既存のコード構造をリファクタリングし、QueryInterfaceのHRESULT処理の潜在的なバグを修正します。

変更内容

  • Entrypoints.cs:
    • DbgShimCreateInstanceFromContractDescriptor 新規エクスポート関数を追加(内部API、dbgshim用)
    • CLRDataCreateInstanceCore をリファクタリング:コントラクト記述子探索ステップと共有の CreateInstanceFromContractDescriptorCore ヘルパーに分割
    • QueryInterface 失敗時に誤って S_OK を返していたバグを修正。現在は実際のHRESULT値を返すように改正

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • このPull RequestはGitHub Copilotのサポートで説明書が作成されています
  • 内部API(dbgshim向け)の追加であり、公開APIには影響しません
  • QueryInterfaceのHRESULT処理修正は正確性の向上を目的とした重要な修正です

#131353 JIT: fold wasm R2R address constants into load memarg offsets

概要

WebAssemblyのR2R (Ready-to-Run) コード生成において、メモリロード操作の最適化を実施しました。再配置可能なアドレス定数をロード命令に統合し、別個のi32.const/i32.addの組み合わせの代わりに、memargオフセットに直接再配置情報を埋め込むことで、System.Private.CoreLib のWasmコードセクションを削減しています。

変更内容

  • emitwasm.cpp/h: メモリアクセス命令の再配置情報をmemargオフセットに直接埋め込むための新しい再配置タイプと出力ロジックを追加
  • codegenwasm.cpp: ロード/ストア命令生成時に定数式の再配置可能性を検出し、最適化経路へ導くロジックを実装
  • lowerwasm.cpp: 最適化対象となるアドレス定数パターンの認識ロジックを追加

パフォーマンスへの影響

コードサイズ削減: System.Private.CoreLib のWasmコードセクションで814,971バイト (3.60%) の削減を実現

  • 従来: 別個のi32.const + i32.add命令の使用
  • 改善後: memargオフセットへの直接埋め込みにより命令数削減

メモリアクセス性能に対する直接的な改善効果は記載されていません。

関連Issue

なし

その他

WebAssemblyのRTCイメージ生成における最適化であり、Wasmランタイムの再配置情報処理に影響します。これは内部実装の最適化であり、公開APIには影響しません。


#131348 Remove host_mode_t::split_fx

  • 作成者: @Copilot
  • 作成日時: 2026年07月24日 20:44:13(UTC)
  • マージ日時: 2026年07月25日 02:11:37(UTC)
  • ラベル: area-Host

概要

host_mode_t::split_fxモードを削除するPRです。このモードは.NET 1.x時代の古いシナリオ(coreclrが.NETルートの隣にあり、ルートに<app>.deps.jsonがなく、カレントディレクトリに<app>.runtimeconfig.jsonがある場合)に対応していましたが、多年前から存在しないシナリオであり、現在は混乱や不正な動作を引き起こす可能性があるため削除されます。

変更内容

  • src/native/corehost/fxr/command_line.cpp: split_fxモードの処理を削除(+2/-8)
  • src/native/corehost/fxr/fx_muxer.cpp: split_fx関連のロジックを削除(+3/-31)
  • src/native/corehost/host_interface.h: host_mode_t列挙型からsplit_fxを削除(+2/-4)
  • src/native/corehost/hostpolicy/hostpolicy.cpp: split_fx処理を削除(+0/-3)

パフォーマンスへの影響

影響なし

関連Issue

#64517

その他

このPRはホストシステムの内部実装変更であり、公開APIへの直接的な影響はありません。削除されるのは非常に古い.NET 1.x時代のシナリオに対応した実装のため、実際の運用環境への影響は最小限と考えられます。


#131338 Implement cDAC method definition enumeration by address

概要

cDAC(Compact DAC)に対してメソッド定義をアドレスで列挙する機能を実装しました。StartEnumMethodDefinitionsByAddress、EnumMethodDefinitionByAddress、EndEnumMethodDefinitionsByAddress の3つのメソッドを ClrDataProcess に追加し、モジュールメタデータとILアドレスからメソッド定義を解決します。Tiny/Fat形式のメソッドヘッダに対応し、レガシーDAC の動作と互換性を保ちながら、複数のアーキテクチャでテストされています。

変更内容

  • SOSDacImpl.IXCLRDataProcess.cs: メソッド列挙の開始・実行・終了処理を実装。モジュールメタデータからILアドレスに基づいてメソッド定義を解決し、異なるメソッドヘッダ形式(Tiny/Fat)に対応。列挙ハンドルの管理と例外からHRESULT への例外マッピングを実装。
  • IXCLRDataProcessTests.cs: Tiny/Fat形式ヘッダ、空、無効、境界値など複数のテストケースを追加。
  • task.cpp: 軽微な変更(1行削除・1行追加)。

パフォーマンスへの影響

影響なし

関連Issue

#131338

その他

  • 互換性: レガシーDACとの動作互換性を保つように設計されており、デバッグビルドではレガシーDAC の結果と照合検証。
  • 指摘事項: Copilotの低信頼度コメントで以下が指摘されています:
    • Tiny形式ヘッダの境界テストケースの検証ロジックに関する指摘
    • Tiny形式での0バイト調整がレガシーDAC互換性のためであることを明確にするためのコメント追加提案
    • GCHandle の無効値処理における例外マッピングの改善提案(IsAllocated ガード追加)

#131336 Implement TypeHandle::GetName in managed cDAC

  • 作成者: @Copilot
  • 作成日時: 2026年07月24日 17:59:26(UTC)
  • マージ日時: 2026年07月25日 01:48:03(UTC)
  • ラベル: area-Diagnostics-cdac

概要

マネージド型ハンドル命名機能を実装し、ネイティブ TypeHandle::GetName の出力と一致する動作を提供します。本実装により、ClrDataTypeInstance.GetName などの診断機能が利用可能になります。

MethodTables、TypeDescs、修飾子、ジェネリック変数、関数ポインタ、インスタンス化、配列のフォーマットを対応し、既存の TypeNameBuilder のジェネリック・インスタンス化フォーマット処理を再利用しています。

変更内容

  • TypeHandleExtensions.cs (新規, 154行追加): マネージド型ハンドル命名の主要実装。MethodTable、TypeDesc、修飾子、ジェネリック変数、関数ポインタ、インスタンス化、配列などの型フォーマットロジックを追加。
  • IRuntimeTypeSystem.cs: IsGenericVariable メソッドのシグネチャを変更し、ジェネリック変数のインデックス情報を返すよう拡張(out uint index パラメータ追加)。
  • RuntimeTypeSystem_1.cs: 契約実装の更新に対応。
  • TypeNameBuilder.cs: 軽微な変更。
  • TypeHandleTests.cs (251行追加): 複数の型形状と配列ランク動作に関するクロスアーキテクチャテストを追加。
  • TypeDesc.cs、datadescriptor.inc、typedesc.h、RuntimeTypeSystem.md: 型記述子データ定義の更新。

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

互換性に関する注意: IRuntimeTypeSystem.IsGenericVariable のシグネチャ変更は、Abstractions プロジェクト(パッケージ化可能)を実装・呼び出す外部コンシューマーに対する破壊的変更です。既存の3パラメータオーバーロードを保持し、新しい4パラメータオーバーロードを追加するか、デフォルトインターフェース実装で互換性を維持することを検討する必要があります。

関数ポインタは TypeNameBuilder と異なる動作を示し、詳細を解決するのではなく "FNPTR" として表示されます。


#131333 Vectorize Base64 DecodeFromUtf8InPlace

概要

Base64.DecodeFromUtf8InPlaceにSIMD高速化パスを追加し、既存のDecodeFromで使用されているAVX-512/AVX2/AdvSimd/Vector128ヘルパー関数を再利用しました。これまでスカラーループのみであった実装を、ハードウェアの機能に応じた最適化パスに対応させることで、大規模なインプレース復号のスループットを大幅に改善します。

変更内容

  • Base64DecoderHelper.cs: DecodeFromUtf8InPlaceメソッドにSIMD高速化パスを追加
    • 既存のAvx512Decode / Avx2Decode / AdvSimdDecode / Vector128Decodeヘルパー関数をインプレース復号で再利用
    • 読み取りカーソルが書き込みカーソルより25%進んでいるため(4バイト読み込みあたり3バイト書き込み)、メモリ上安全にインプレース復号が可能
    • SIMDフェーズ完了後、既存のスカラーループと末尾ブロック処理を継続実行

パフォーマンスへの影響

200 MB インプレース復号(win-x64 AVX-512対応環境、リリースランタイム)での改善:

構成 実行時間 スカラー比
スカラー(改善前) 63.9 ms 1.0x
Vector128 24.4 ms 2.6x
AVX2/AVX-512 10.9 ms 5.9x

改善前のスカラー実装と比較して、2.6~5.9倍のスピードアップを実現。これにより#105262で報告された12%の回帰も完全に解消されます。

関連Issue

#105707、#105262

その他

  • テスト: System.Memory.Testsの全52,929テストがパス。AssertRead/AssertWriteの境界チェックを含む。
  • 互換性: 破壊的変更なし。既存スカラーループとの互換性を維持しながらSIMD高速化を追加(NET条件付き)。
  • 検証: EncodeAndDecodeInPlaceテストで長さ1~256のすべての組み合わせをラウンドトリップテスト済み。JIT変更なし。

#131331 Fix nested type forwarder preservation

概要

ネストされた型フォワーダーをリフレクション経由で解決する際に、エクスポートされた型チェーン全体を保持するよう ILLinker の型名解決の記録機構を改善しました。型名文字列から解決されるすべての単純型をトラッキングすることで、ネストされたフォワーダー(ジェネリック・非ジェネリック両方)が適切に保存されるようになります。

変更内容

  • src/tools/illink/src/linker/Linker/TypeNameResolver.cs: ネストされた型の解析中に型解決の記録をより広くカバーするよう拡張(26行変更)
  • ネストされた型フォワーダーの回帰テスト追加:
    • NestedTypeForwarderUsedViaReflection.cs: Type.GetType() 文字列経由でアクセスされるネストされたフォワーダーの包括的なテストケース
    • ForwardedNestedTypeLibrary.cs: フォワードされたジェネリック型のネストされた型を追加
    • IL アセンブリファイル 3 個: ネストされた型フォワーダーのフォールバック実装
  • src/libraries/System.Collections.Concurrent/tests/ConcurrentDictionary/ConcurrentDictionary.Generic.Tests.cs: トリミングプラットフォームでスキップされていた NonRandomizedToRandomizedUpgrade_FunctionsCorrectly テストを再度有効化

パフォーマンスへの影響

影響なし

関連Issue

#81945

その他

このPull Requestは GitHub Copilot の支援で作成されました。ILLinker のツールチェーンに関連する内部実装の変更で、公開API への影響はありません。トリミング・モバイルプラットフォームにおけるネストされた型の処理が正確になります。


#131284 Implement IXCLRDataProcess3::GetFunctionTable in cDAC

概要

cDAC(COMPLUS Debugging Access Component)で IXCLRDataProcess3::GetFunctionTable を実装し、WinDbgなどのアウト・プロセス・アンワインダーが DAC の OutOfProcessFunctionTableCallbackEx エクスポートに依存せず、動的関数テーブルを列挙できるようにしました。ExecutionManager コントラクトに GetDynamicFunctionTableEntries API を追加し、ニブル・マップを逆向きに走査してランタイム関数エントリを収集します。

変更内容

  • ExecutionManager コントラクト API: IExecutionManager.GetDynamicFunctionTableEntries(tableAddress) を追加。対象の DYNAMIC_FUNCTION_TABLE を読み込み、コンテキスト・フラグビットをストリップして所有する EEJitManager を特定し、コード・ヒープを走査。モジュール・ベース・マッチング(パーソナリティ・ルーチンが設定されていればそれを、そうでなければマップ・ベースを使用)とニブル・マップの逆向き走査によって、インラインの RUNTIME_FUNCTION エントリを収集します。
  • データ記述子: DynamicFunctionTable(Context、MinimumAddress)と CodeHeapListNode.CLRPersonalityRoutine(64ビットのみ)を追加。
  • SOS シム: SOSDacImpl.IXCLRDataProcess3.GetFunctionTable を実装。IDL コントラクトに準じて、null出力パラメータに対して E_POINTER を返し、必要なバイト/エントリ数を常に報告。空または不一致のテーブルに対して S_OK(ゼロ)を返し、サイズ・クエリまたはバッファ不足時に S_FALSE を返し、コピー成功後に S_OK を返します。
  • ドキュメント: ExecutionManager.md を新 API、記述子フィールド、アルゴリズムで更新。

パフォーマンスへの影響

影響なし(新機能追加により、既存のパフォーマンスに変化なし)

関連Issue

#130762

その他

  • 全4アーキテクチャ(c1/c2 ニブル・マップ版)にわたる包括的なユニット・テストを追加。列挙順序、スタブ・フィルタリング、モジュール・ベース・マッチング(ゼロ・パーソナリティ・ルーチンの場合のマップ・ベースへのフォールバック含む)、および COM バッファ・セマンティクス(サイズ・クエリ、バッファ不足、成功コピー、不一致テーブル)をカバーしています。
  • 全 cDAC ユニット・テスト スイートがパス;build.cmd clr 成功を確認。
  • 変更内容は Windows 以外のプラットフォームおよび x86 では該当記述子が未発行のため、エラー処理に関する指摘があります(低確度)。

#131241 [wasm] Export cDAC contract descriptor getter on non-emscripten wasm (wasi-sdk)

概要

非Emscripten WebAssembly(WASI経由wasi-sdk)ビルドにおいて、cDAC契約記述子ゲッターGetDotNetRuntimeContractDescriptorがエクスポートされず、--gc-sectionsによってモジュールから削除されていた問題を修正します。Emscripten向けのEMSCRIPTEN_KEEPALIVEと同様の効果を、wasi-sdk向けに__attribute__((export_name(...)))を使用して実現し、ネイティブホストがWASI上でランタイムデータコントラクト記述子を発見できるようにします。

変更内容

  • src/coreclr/debug/datadescriptor-shared/contract-descriptor.c.in:
    • トークンペースマクロGETTER_NAMEを#ifブロック上に移動し、両方の実装で共有可能に
    • GETTER_NAME_STR文字列化マクロペアを追加して、リテラルエクスポート名"GetDotNetRuntimeContractDescriptor"を生成
    • 非Emscripten WebAssembly向けの#elif defined(EXPORT_CONTRACT) && defined(__wasm__)ブランチを追加
    • __attribute__((export_name(...)))を使用したゲッターのエクスポート処理を実装

パフォーマンスへの影響

影響なし

関連Issue

#131161(cDAC-wasmバリデーション関連)

その他

  • WASI CoreCLRビルド(clr -os wasi -c Release)で動作確認済み、コンパイル成功(警告0、エラー0)
  • コンパイル済みオブジェクトがno_stripフラグ付きでGetDotNetRuntimeContractDescriptorをエクスポート、--gc-sections下でも保持確認
  • Copilotレビューでは、ビルドシステム定義(HOST_WASM)と併せて__wasm__チェックを含める検討を提案(他のCoreCLRコードの一貫性)

#131223 [browser] Move boot config tests to Wasm.Build.Tests

概要

WebAssembly SDK タスクのユニットテストを整理し、GenerateWasmBootJson テストを一時的な Pack.Tasks.Tests プロジェクトから主要な Wasm.Build.Tests プロジェクトへ移動しました。テスト基盤の統合と不要なプロジェクト構成の削減が目的です。

変更内容

  • GenerateWasmBootJsonTests を src/mono/wasm/Wasm.Build.Tests に移動([TestCategory("no-workload")] を付与)
  • 一時的な src/tasks.tests/Microsoft.NET.Sdk.WebAssembly.Pack.Tasks.Tests プロジェクトを削除
  • Microsoft.NET.Sdk.WebAssembly.Pack.Tasks.csproj から不要な InternalsVisibleTo エントリを削除

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • テストコードは削除対象プロジェクトから新しい場所へ移行される形で、本質的なテストロジックは変わらない
  • Copilot レビューより:移動後のテストで GenerateWasmBootJson.ReadRuntimeConfigFiles(internal メソッド)への呼び出しにリフレクションが使用されている可能性があり、コンパイル時の署名変更検出が困難になる指摘あり。直接呼び出しが推奨される

#130991 [RyuJIT Wasm] Handle all codegen cases for PackedSimd.Shuffle

概要

WebAssembly SIMD対応のRyuJIT JITコンパイラに、PackedSimd.Shuffleの完全なコード生成サポートを追加します。定数マスクの場合はネイティブシャッフル命令を生成し、非定数マスクの場合はSwizzle+Swizzle+Or演算に変換します。これにより、System.Private.CoreLibの内部SIMD処理が適切にコンパイル可能になります。

非定数マスク時の変換ロジック:マスク値の範囲[0,31]に対して、第1ベクトルの要素選択時と第2ベクトルの要素選択時でマスク値を調整(mask - 16)し、Swizzle操作(範囲外インデックスは0を出力)と論理OR結合で実現します。

変更内容

  • lowerwasm.cpp: LowerHWIntrinsicNativeShuffle関数を追加。定数マスク時はネイティブシャッフル、非定数マスク時はSwizzle+Or変換を行う
  • hwintrinsic.h: WebAssembly向けのHW_Flag_HasImmediateOperandフラグを追加。ロード/ストア命令の即値操作数処理を統一
  • hwintrinsiccodegenwasm.cpp: Shuffle用のv128即値生成コード、テーブル駆動型WASM メモリロード/ストア命令のコード生成を追加
  • codegenwasm.cpp: SIMD16ストア命令のNYIガード削除

パフォーマンスへの影響

影響なし。コード生成パスの追加であり、実行時パフォーマンスへの直接的な影響は検出されていません。

関連Issue

#130991

その他

  • PackedSimd.ShuffleはSystem.Private.CoreLib内部APIであり、公開APIではない
  • コメント内に不正確な記述あり(ArrayIndexOutOfBoundsException参照、実際はランタイムの範囲チェック例外)
  • テスト対象:定数/非定数マスク、クロスベクトル選択、範囲外動作のカバレッジが推奨される
  • 無効化されたテスト(LoadStoreNullCheckTest)がありカバレッジの懸念あり

#130646 [cDAC] Implement DacDbi GetStackWalkCurrentFrameInfo

  • 作成者: @rcj1
  • 作成日時: 2026年07月13日 20:40:42(UTC)
  • マージ日時: 2026年07月25日 01:31:17(UTC)
  • ラベル: area-Diagnostics-coreclr

概要

cDAC(Contracts Data Access Component)のスタックウォーク機能を拡張し、DacDbiImpl.GetStackWalkCurrentFrameInfo APIを実装しました。デバッガが各フレームの詳細情報(フレーム分類、funclet/interrupt状態、環境SP、正確なジェネリック引数トークン)を取得できるようになります。

変更内容

コア実装(内部API):

  • DacDbiImpl.GetStackWalkCurrentFrameInfo: 新規実装。StackWalk/GCInfo契約APIを使用してフレーム情報を構成し、マネージドEHヘルパー/ランタイムエントリーポイント/ネイティブランタイム巻き戻し不可マーカーを含むフレーム分類ロジックを拡張
  • StackWalk_1.cs: GetCurrentFrameInfoとGetExactGenericArgsTokenを実装。interrupt/fault状態追跡を追加
  • RuntimeTypeSystem_1.cs: IsVarArgメソッド、非同期メソッドフラグAPI、既知のMethodTable/MethodDesc グローバルアクセッサを追加
  • GCInfo 契約群:環境SPと汎用インスタンス化コンテキストスロット検出APIを拡張(x86とそれ以外のアーキテクチャで異なる実装)

抽象化層(公開API):

  • IStackWalk: StackWalkFrameInfo 構造体と新規フレーム情報API追加
  • IRuntimeTypeSystem: AsyncMethodFlags 列挙型追加、GetAsyncMethodFlags/IsVarArgメソッド追加
  • IGCInfo: 環境SP/汎用インスタンス化コンテキストAPI追加

設定・ドキュメント:

  • Constants.cs: 新規既知MT/MDグローバル名を追加
  • StackWalk/RuntimeTypeSystem/GCInfo設計ドキュメントを更新
  • ネイティブコード(datadescriptor.inc、eetwain.h、gcinfotypes.h)で新規グローバルを公開

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • 互換性: 新規公開API(AsyncMethodFlags、IRuntimeTypeSystem.GetAsyncMethodFlags/IsVarArg など)が追加されます
  • レビュー指摘事項:
    • GetStackWalkCurrentFrameInfo の出力ポインタのnullチェック欠落
    • ホットパスでの Enum.HasFlag のボックス化回避推奨
    • 既知値の繰り返し呼び出しキャッシング推奨
    • 新規の GetExactGenericArgsToken リカバリーパスのユニットテストカバレッジ不足
    • オプション的なベストエフォート読み取りで VirtualReadException を適切に処理する必要がある点

目次