Pull Request on 2026年09月26日

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

注意点

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



#134708 JIT: expand Object.GetType at Tier0

  • 作成者: @EgorBo
  • 作成日時: 2026年09月26日 14:20:28(UTC)
  • マージ日時: 2026年09月26日 16:54:22(UTC)
  • ラベル: area-CodeGen-coreclr

概要

Object.GetType()をTier0のJITで組み込み関数として展開し、obj.GetType() == typeof(X)の型比較がコンパイル時に畳み込まれるようにします。これにより、デッドコードブランチがILインポート段階で除外されます。

変更内容

  • src/coreclr/jit/importercalls.cpp: Object.GetTypeをTier0での組み込み関数展開対象に追加(+3行)

パフォーマンスへの影響

型チェックに基づく条件分岐で、到達不可能なコードパスがコンパイル初期段階で削除されるため、以下の効果が期待できます:

  • JIT処理時間の短縮(不要なコード解析が削減)
  • 生成コードサイズの削減(デッドコードの除外)
  • Tier0でも型ガード最適化の恩恵を受ける

関連Issue

なし

その他

この変更はランタイムのJITコンパイラ内部実装に関わるもので、公開APIへの影響はありません。Tier0(迅速なコンパイル)での最適化強化により、起動性能や動的型チェックを含むコードの実行性能が向上します。


#134689 [wasm][coreclr] Strip R2R debug info by default for browser-wasm publish

  • 作成者: @lewing
  • 作成日時: 2026年09月25日 22:50:36(UTC)
  • マージ日時: 2026年09月26日 01:19:42(UTC)
  • ラベル: area-ReadyToRun

概要

browser-wasm向けCoreClR ReadyToRun(R2R)発行時に、crossgen2に--strip-debug-infoフラグを既定で渡し、R2Rデバッグ情報(ネイティブ-IL オフセットマップと変数ロケーション)を削除することで配布イメージサイズを削減します。PublishReadyToRunStripDebugInfo=falseで無効化できます。また、crossgen2引数の変更が古いR2Rイメージを無効化するよう改善されました。

変更内容

  • Microsoft.NET.Sdk.WebAssembly.Browser.CoreCLR.targets: crossgen2呼び出しに--strip-debug-infoフラグを追加。デバッグ情報削除のオプト イン/アウトを制御するPublishReadyToRunStripDebugInfoプロパティを実装
  • R2Rイメージのキャッシュ無効化: crossgen2引数の変更を検出するためにobj/wasm-r2r-args.stampファイルを導入し、_ReadyToRunCompilerInputsに追加することで、引数変更時に古いイメージを再コンパイル

パフォーマンスへの影響

イメージサイズ削減(複数アセンブリの合計):

  • Raw: 859,712 B削減(2.4%削減)
  • gzip -9: 624,690 B削減(7.1%削減)
  • brotli -q 11: 565,366 B削減(9.4%削減)

特にSystem.Private.CoreLibで著しい削減効果あり(brotli: 4.8MB → 4.3MB)。変数情報機能追加時はさらに削減効果向上(brotli: 17.0%削減)。

関連Issue

#134618(このPRが積み上がっているベースPR) #133086(cDACデバッグ対応) #133890(cDACデバッグ対応)

その他

  • --strip-inlining-infoは意図的に含めていません(cross-module inliningがWebAssembly上で必須のため)
  • runtime-packフレームワークR2Rイメージは変更なし
  • 検証項目:MSBuild評価、インクリメンタルビルド動作は確認済み。ブラウザでの実行は未検証(CI側でカバー予定)

#134686 [wasm][RyuJIT] Restore __stack_pointer in reverse P/Invoke epilogs

概要

WebAssembly逆P/Invoke(UnmanagedCallersOnly)メソッドのエピログで、__stack_pointerグローバル変数を正しく復元するための修正です。R2Rコードがインライン化されたP/Invokeを実行する際、__stack_pointerがスタレな状態のまま復帰していたため、ネイティブABIが破損していました。エピログで__stack_pointerを呼び出し元の値に復元することで問題を解決します。

変更内容

  • src/coreclr/jit/codegenwasm.cpp: CodeGen::genFnEpilogで、逆P/Invokeメソッドのreturn/end前に__stack_pointer復元シーケンスを追加。フレームポインタ(またはFPがない場合はSPローカル)にフレームサイズを加算してグローバル変数に設定します。パターンは#130924のSuppressGCTransition publishと一致しています。
  • src/tests/readytorun/wasm/WasmInterpreterTransitions/WasmInterpreterTransitions.cs: 回帰テストR2RCallsNestingUcoを追加。R2Rメソッドがdelegate* unmanaged calliでUcoWithInlinedPInvokeを呼び出し、さらに別のUCO(UcoLeaf)に呼び出す多重ネスト構造のテストです。

パフォーマンスへの影響

逆P/Invokeメソッドのエピログに4命令(local.get、i32.const、i32.add、global.set)が追加されます。実行パス上でのオーバーヘッドは最小限ですが、メモリ(Wasm operand stack)への影響はなく、既にプッシュされた戻り値は保持されます。

関連Issue

#134681(このPRで解決)
#134606(このPRがブロック解除)
#134355(関連)
#130924(参考)

その他

  • 検証済み: Checked browser runtime(build 1612477含む#134606の変更)に対して新JITでテスト合格(exit 100、アサート無し)
  • composite-r2r.wasmのディスアセンブリ確認で、追加された2つのUCOエピログ以外は完全に一致
  • 他の6つのHelix readytorunテストは全て合格
  • ./build.sh clr.alljits -c checkedでビルド成功、jit-formatでの変更なし

#134682 Support private scalar-only imports on iOS

  • 作成者: @vcsjones
  • 作成日時: 2026年09月25日 21:46:06(UTC)
  • マージ日時: 2026年09月26日 12:22:35(UTC)
  • ラベル: area-System.Security

概要

iOS/tvOS/MacCatalyst上でEC秘密鍵(スカラー値dのみ)のインポートサポートを実装しました。CryptoKitの利用可能化により、プライベートスカラーのみからの公開鍵導出が可能になりました。これにより、HPKEの統合テストがAppleモバイルプラットフォームで機能するようになります。

変更内容

  • pal_swiftbindings.swift (+43行):CryptoKitを使用したNIST P-256/P-384/P-521の公開鍵導出機能を追加
  • pal_swiftbindings.h (+2行):Swift実装の関数宣言を追加
  • Interop.Ecc.cs (+51行):マネージド側からSwiftへの相互運用ロジックとエラーハンドリングを実装
  • EccAppleCrypto.iOS.cs (+29行, -2行):モバイルプラットフォーム向けキーインポートに公開鍵導出を統合
  • entrypoints.c (+1行):ネイティブエントリーポイント登録
  • DefaultECDiffieHellmanProvider.Unix.cs (+1行, -1行):既存の導出テストをAppleモバイルプラットフォームで有効化

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • 互換性への影響:既存API(ECDiffieHellman.ImportParametersなど)の互換性に影響なし。iOS/tvOS/MacCatalystプラットフォーム上での機能追加
  • スコープ:System.Security.Cryptographyライブラリのネイティブ暗号化層(Apple CryptoKit統合)への変更で、公開APIの変更なし
  • テスト:HPKE関連の統合テストがAppleモバイルプラットフォームで解禁される

#134670 Add OpenHarmony platform identity and exclude unsupported NUMA calls

概要

OpenHarmonyプラットフォームのサポートを追加し、OpenHarmonyで利用できないNUMA関連のシステムコールを除外する変更です。OperatingSystemクラスにOpenHarmony判定機能を追加し、コンパイル時にOpenHarmony環境を識別できるようにします。

変更内容

  • OperatingSystem.cs: OSPlatformNameからOPENHARMONYを報告し、内部メソッドIsOpenHarmony()を追加
  • System.Private.CoreLib.Shared.projitems: MSBuildプロパティTargetsOpenHarmonyがtrueの場合にTARGET_OPENHARMONYを定義
  • numasupport.cpp: OpenHarmonyでサポートされていないget_mempolicy/mbindのNUMA呼び出しをコンパイルアウト(Androidと同じ処理)

パフォーマンスへの影響

影響なし

関連Issue

#132827(親Issue、shared-memory/named-mutex関連の部分は別途対応待ち) #132953(MSBuildプロパティTargetsOpenHarmony追加)

その他

  • 本PRはOpenHarmonyサポートの一部であり、shared-memory/named-mutex関連の変更(SharedMemoryManager.Unix.cs、NamedMutex.Unix.cs、MutexTests.cs)は別途のshared-memoryデザイン変更を待つ予定
  • 変更は公開APIではなく、プラットフォーム識別の内部実装とコンパイル時の条件分岐であるため、既存コードへの互換性影響はなし

#134658 JIT: handle redefined enumerators in conditional escape analysis

概要

JIT条件付きエスケープ分析(Conditional Escape Analysis)でエニューメータローカル変数が複数の定義を持つ場合の処理を修正。RPOウォークで後続の定義が保護されたユースに到達する可能性がある場合、早期のクローン候補を棄却しながら、支配された順序の再定義は保持する改善。Issue #134605を解決。

変更内容

  • objectalloc.cpp: エニューメータ再定義の検出と不安全なクローン候補の棄却ロジックを追加(+30行)
  • objectalloc.h: クローン候補の競合状態を追跡するための状態フィールドを追加(+4/-3)
  • Runtime_134605.cs: エニューメータの再割り当てと割り当てシナリオを検証するリグレッションテスト追加(+208行)
  • テスト設定ファイル: クラス型およびボックス化スタイル構造体の回帰テスト用プロジェクト設定を追加

パフォーマンスへの影響

影響なし。本変更はJIT最適化の正確性向上を目的とした修正であり、パフォーマンスベンチマークへの直接的な影響はない。

関連Issue

#134605、Runtime_127075、Runtime_131713

その他

  • Copilot Code Reviewで高い重要度の指摘あり:後続のマップ定義でスタック割り当て不可能な場合と、テスト実行時ゲーティングの欠如による正確性・テスト信頼性の問題が未解決としてフラグされている
  • 内部実装(JIT最適化パス)の修正であり、公開APIへの影響なし
  • クラス型およびボックス化スタイル構造体の回帰テストで検証済み

#134644 JIT: Type implicit byref args as TYP_I_IMPL

  • 作成者: @EgorBo
  • 作成日時: 2026年09月25日 10:01:09(UTC)
  • マージ日時: 2026年09月26日 10:56:39(UTC)
  • ラベル: area-CodeGen-coreclr

概要

JITコンパイラが暗黙的なbyref引数の型付けをTYP_BYREFからTYP_I_IMPLに変更し、GCヒープに存在しないため不要なGCレポートと書き込みバリアを削減します。ただし、async メソッドの場合はTYP_BYREFを保持します(再開時にストレージが変わるため)。また、戻り値バッファをnull非許容として扱い、書き込みバリア選択時にfgAddrCouldBeHeapを使用します。

変更内容

  • JIT型付け: 暗黙的byref引数をTYP_I_IMPLとして型付けし、GC報告を避ける(内部実装変更)
  • flowgraph.cpp: fgAddrCouldBeNullで戻り値バッファをnon-nullとして扱い、fgAddrCouldBeHeapを使用して暗黙的byrefを認識
  • morph.cpp: 型付けと非同期メソッドの処理ロジック更新
  • lclvars.cpp: ローカル変数の型付けと初期化処理更新
  • asyncanalysis.cpp/scopeinfo.cpp: async解析とスコープ情報の処理更新
  • gcinfo.cpp: GC情報生成の対応調整
  • clr-abi.md: ABI仕様ドキュメント更新

パフォーマンスへの影響

改善が期待される:

  • 暗黙的byref引数に対する不要なGC報告が削減されることで、GC情報生成のオーバーヘッド低減
  • 書き込みバリア生成が削減されることで、JITコンパイル後のコード品質向上(実行時オーバーヘッド削減)

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

関連Issue

#82166、#133304

その他

  • 変更は内部JIT実装に限定され、公開APIへの影響なし
  • async メソッドは既存動作を保持(互換性維持)
  • Copilotレビューでは「GC回帰テストカバレッジの追加」と「ABIドキュメント例外の明確化」が推奨されています

#134606 [wasm][coreclr][R2R] Publish existing method bodies before interpreter fallback

概要

ブラウザ向けWasm環境でのReadyToRun(R2R)固定化プロセスを改善し、ExternalMethodFixupWorkerが非仮想メソッドインポートセルをパッチする前に、標準的なShouldCallPrestub()/DoPrestub()パターンでターゲットメソッドを準備するようにしました。これにより、既存のプリコンパイル済みR2Rボディをインタープリタースタブではなく直接呼び出し、クローズド汎用MethodSpecインポートが最適化された完全特殊化ボディを利用できるようになります。

変更内容

  • src/coreclr/vm/prestub.cpp: ExternalMethodFixupWorkerに協調的なR2R発行プローブを統合。非仮想ブランチでpMD->DoPrestub(NULL)を呼び出し、既存のR2Rボディを発行するか、存在しない場合はインタープリタパスを準備。EnsurePortableEntryPointIsCallableFromR2Rをポータブルエントリポイントに対して呼び出し、R2Rコードが呼び出し可能でないエントリポイントを観測しないようにする。
  • src/coreclr/vm/method.cpp: MethodDescに新しい発行ヘルパーを宣言。

パフォーマンスへの影響

MemoryExtensions.Contains<int>の完全特殊化ボディが発行された場合、512呼び出し実測で長さ8では約0.0~0.1ms、長さ512でも約0.0~0.1msに改善(インタープリタ実装では長さ8で約2~2.5ms、長さ512で約110~140ms)。ボディが存在しない場合でもインタープリタフォールバック経路は正常に動作し、機能的な後退はなし。

関連Issue

#134565

その他

  • 互換性: ReadyToRunフォーマット、ABI、署名エンコーディング、バージョン変更は不要。非ポータブルエントリポイントのパスは変更なし。
  • 制限事項: Wasm R2Rテスト基盤がポータブルエントリポイントターゲット選択の詳細を公開していないため、CDP(Chrome DevTools Protocol)による手動検証のみ実施。自動回帰テスト(ランタイムメソッド-jittingイベントに基づく)は今後の実装予定。
  • 未解決: #134200で報告されている、必須R2Rボディが完全に欠落する問題には対応していません。
  • 検証: ブラウザ CoreCLR R2RAssemblyLoadEvent_ReentrantMethodCompilationテストで1 passed/0 failed、System.Runtime.Loader.Tests全体ではWasm非対応のFEATURE_METADATA_UPDATER関連のみ21件失敗。

#134360 Fix concurrent publication of interface GUID cache entries

  • 作成者: @Copilot
  • 作成日時: 2026年09月21日 18:34:30(UTC)
  • マージ日時: 2026年09月26日 02:18:17(UTC)
  • ラベル: area-VM-coreclr

概要

CoreCLRのインターフェースGUID キャッシュ公開時に、ペイロード初期化とメモリ順序付けが不適切であり、ComWrappers登録後に読み取りスレッドが未初期化のIIDをQueryInterfaceに渡す可能性がありました。本修正はVolatileStore/VolatileLoadを使用して、GUIDと生成分類の両方が消費前に可視化されることを保証します。

変更内容

  • src/coreclr/vm/class.h: SetGuidInfoでVolatileStoreを、ライブプロセスのGetGuidInfoでVolatileLoadを追加し、acquire/release順序付けを実装

パフォーマンスへの影響

影響なし。volatile操作はメモリ順序付けのみを保証し、ロックや比較交換(CAS)は導入されていません。既存の並行書き込み割り当て/ライフタイム動作が保持されます。

関連Issue

#134231

その他

  • DACリード、フィールドレイアウト、単一リーダースナップショット、既存の並行動作セマンティクスが保持されます
  • Copilot review(Lite)では、コールドな並行GUID公開とマーシャリングの回帰テストカバレッジ追加が推奨されています

#134354 Add interface-selecting ComWrappers overloads

概要

COM相互運用性を簡素化するため、ComWrappersに特定のCOM インターフェースを取得する便利なオーバーロードを追加します。手動でQueryInterfaceやラッパー作成・参照クリーンアップを行う必要がなくなります。

Guid ベースおよびジェネリックオーバーロード(AOT対応メタデータ検索付き)により、呼び出し元所有のインターフェース参照を返します。

nint ifoo = wrappers.GetOrCreateComInterfaceForObject<IFoo>(
    foo, CreateComInterfaceFlags.None);
// 使用後は ifoo を Release する

変更内容

  • ComWrappers.cs: in Guid interfaceId パラメータを持つオーバーロードを追加(24行追加)
  • StrategyBasedComWrappers.cs: ジェネリック版オーバーロードを追加(27行追加)
  • ref/System.Runtime.InteropServices.cs: 公開APIの参照宣言を追加(2行追加)
  • ComWrappers.PlatformNotSupported.cs: プラットフォーム非対応の実装スタブを追加(5行追加)
  • Strings.resx: エラーメッセージリソースを追加(3行追加)
  • GeneratedComClassTests.cs: インターフェース選択、参照所有権、キャッシュ保持、重複クエリ、カスタム戦略の包括的なテストを追加(115行追加)

パフォーマンスへの影響

影響なし

関連Issue

#106979

その他

  • セマンティクス: クエリ前にラッパーをキャッシュし、クエリ失敗時もキャッシュを保持します。サポートされていないインターフェースはInvalidCastExceptionをスロー
  • 相互運用性: 複数の環境(Windows、Linux等)でのプラットフォーム非対応対応を含む
  • ドキュメント: XML ドキュメンテーションを含む

#134281 Fix type-event cache lifetime race during tracing

  • 作成者: @steveisok
  • 作成日時: 2026年09月19日 16:36:47(UTC)
  • マージ日時: 2026年09月26日 18:32:44(UTC)
  • ラベル: area-VM-coreclr

概要

CoreCLRのイベントトレーシング機能における型キャッシュのライフタイム管理に関連する競合状態を修正しました。GetHashCrst()クリティカルセクション内でキャッシュアクセスを保持し、ロック解放後のポインタ参照を防ぎます。トレーシング無効化やコレクション可能なモジュールのアンロード中に、ロギングスレッドがキャッシュオブジェクトを使用している場合のUse-After-Freeを回避します。

変更内容

  • eventtrace.cpp: 型キャッシュの同期化とライフタイム管理を改善
    • グローバルおよびモジュール単位の型キャッシュアクセスをGetHashCrst()クリティカルセクション内に統合
    • プライベートな候補キャッシュをロック外で割り当て、ロック内で再検証・所有権譲渡
    • ロック解放後のポインタ保持を排除し、OnTypesKeywordTurnedOffやOnModuleUnloadによる削除から保護

パフォーマンスへの影響

影響なし。エンドツーエンドの型イベントベンチマークでは検出可能な回帰は見られませんでした。

関連Issue

#134242

その他

  • Debug/Release構成でCoreCLRビルド済み
  • EventPipe有効化/無効化、GCヒープダンプ、ランダム化割り当てサンプリング、ランダウン検証テストをパス
  • 決定論的な回帰テストは古いロック境界への侵襲的なネイティブ同期フックが必要なため追加されていません
  • この修正のないテストでは確率的ストレステストが確実に失敗しないため、テストソースは追加されていません

#133917 [cDAC][wasm] Resolve ReadyToRun virtual IP ranges

概要

cDAC(CoreCLR Diagnostic Access Component)の WebAssembly ReadyToRun 仮想IP解決をランタイムの既存モデルと一致させるための修正。主な変更は、ExecutionManager::s_pVirtualIPRangeList をデータディスクリプタ経由で公開し、サイクル検出と65,536ノード予算付きの境界安全なリスト走査により仮想IPを解決。WASM funclet フラグをマスクして正確な関数アイデンティティを保証し、仮想コードベースと読み込み済みイメージベースを分離。WASM形式の実際の descriptor(hot/cold メタデータとdelay-load thunkメタデータが不在)に対応。

変更内容

  • ExecutionManager コア変更: 仮想IP範囲リストの走査ロジック追加、サイクル検出、ノード予算管理(ExecutionManagerCore.cs)
  • ReadyToRun JitManager: WASM descriptor形状対応、funclet マスキング、フィルター funclet分類をリアルアドレス解決経由で実装(ExecutionManagerCore.ReadyToRunJitManager.cs)
  • データ型: VirtualIPRangeSection 新規追加、DataType.cs と DataType.json に対応型定義を追加
  • ランタイムヘッダー: codeman.h で s_pVirtualIPRangeList と VirtualIPRangeSection 構造を公開
  • テスト大幅強化: WASM固有の descriptor形状、サイクル検出、予算境界条件、funclet分類など221項目の ExecutionManager テスト追加;65,536ノード予算の正確性を読み取りカウンターで検証

パフォーマンスへの影響

オンデマンド仮想IP走査時に最大65,536ノード読み取り予算を適用。予算超過時は診断的にfail-closed。ランタイムリスト登録限界はなく、予算は読取りリソース政策。影響なし(診断シナリオのバウンド化)

関連Issue

#130988、#133086、#133890、#133932

その他

  • 互換性: ランタイムの既存動作に合わせる修正なため、cDAC 内部(診断ツール向けインタフェース)
  • 破壊的変更: なし(診断専用 API)
  • 検証: ./build.sh clr+libs+host、./build.sh -os browser -c Debug -subset clr+libs でビルド確認;cDAC UnitTests 3162件パス、DataGeneratorTests 46件パス、UsageTests 4件パス
  • 未解決懸念: Copilot が WASM delay-load フィールドのオプション化と framed GC 参照マップ走査の loaded-image-to-module 解決パス追加を推奨(別途対応予定)
  • テスト検証: 突然変異試験により VIP リスト分岐削除、raw BeginAddress 使用、startVIP をベース使用、予算+1、フィルター解決変更の各5パターンで失敗確認

#133197 [main] Update dependencies from dotnet/xharness

概要

dotnet/xharnessの依存パッケージを最新版に更新します。Microsoft.DotNet.XHarness.CLI、Microsoft.DotNet.XHarness.TestRunners.Common、Microsoft.DotNet.XHarness.TestRunners.Xunitが11.0.0-prerelease.26413.1から11.0.0-prerelease.26474.1へ更新されます。

変更内容

  • .config/dotnet-tools.json: dotnet-toolsバージョン情報の更新
  • eng/Version.Details.props: プロパティファイルのバージョン参照の更新(3行変更)
  • eng/Version.Details.xml: バージョン詳細情報の更新(6行変更)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

このはMaestro自動更新PRであり、dotnet-maestro[bot]によって自動生成されています。


目次