Pull Request on 2026年05月23日

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

注意点

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



#128503 [cDAC] Implement CheckContext for cDAC

  • 作成者: @barosiak
  • 作成日時: 2026年05月22日 21:20:12(UTC)
  • マージ日時: 2026年05月23日 00:38:10(UTC)
  • ラベル: area-Diagnostics-cdac

概要

cDAC(Compact Data Access Components)の管理側実装にCheckContext機能を実装し、スタックポインタの範囲検証をサポートします。同時にネイティブDAC側からDbgSkipStackCheck設定による検証スキップ機能を削除し、セキュリティと一貫性を向上させます。

変更内容

  • 管理側cDAC実装(DacDbiImpl.cs): CheckContextメソッドを実装。コンテキストバッファをパースし、コントロールフラグが存在する場合、スレッドのキャッシュされたスタック境界に対してスタックポインタの範囲検証を実行
  • プラットフォームコンテキスト抽象化: IPlatformContextとIPlatformAgnosticContextインターフェースにContextControlFlagsプロパティを追加。AMD64、ARM、ARM64、LoongArch64、RISC-V64、x86の6つのアーキテクチャ固有の実装で対応するフラグ値を提供
  • ネイティブDAC側(dacdbiimplstackwalk.cpp): UNSUPPORTED_DbgSkipStackCheck設定オプションと関連する不要なグローバル変数を削除。コントロールフラグが存在する場合は常にスタック範囲チェックを実行
  • HRESULT定義(CorDbHResults.cs): 管理側での整合性のためCORDBG_E_NON_MATCHING_CONTEXT定数を追加
  • ユニットテスト(DacDbiImplTests.cs): コントロールフラグあり/なしのシナリオと、全6アーキテクチャでのスタックポインタ範囲内・超過・境界値検証をカバーするテストを追加

パフォーマンスへの影響

影響なし。この変更はデバッグ時のスタック検証ロジックの実装場所を移行するもので、パフォーマンス特性には影響しません。

関連Issue

なし

その他

  • 破壊的変更:DbgSkipStackCheck設定オプションは削除されるため、この機能に依存していた場合は対応が必要です
  • テストは「SP in-range、out-of-range、at-boundary検証」と「コントロールフラグなし時の早期終了でスタックデータが照会されないことの検証」をカバーしており、堅牢性が確保されています
  • 内部実装(非公開API)の変更です

#128500 JIT: fold isinst using reaching VNs and compareTypesForCast

  • 作成者: @EgorBo
  • 作成日時: 2026年05月22日 18:45:27(UTC)
  • マージ日時: 2026年05月23日 11:30:25(UTC)
  • ラベル: area-CodeGen-coreclr

概要

JITの全局アサーション伝播機能を強化し、PHIノードと値番号(VN)を活用して、常にtrueになるisinst/chkcastキャストをコンパイル時に折り畳むことを可能にしました。複数の分岐で異なる型のオブジェクトを生成していても、すべてが共通の基底クラスを継承している場合、冗長なキャストチェックを削除します。

サンプルコード:

static void Test(int len)
{
    object bc;
    if (len > 100)
        bc = new DerivedClass1();
    else
        bc = new DerivedClass2();
    
    if (bc is BaseClass) // コンパイル後は常にtrueとして最適化される
        Console.WriteLine("bc is a BaseClass");
}

変更内容

  • assertionprop.cpp: optAssertionIsSubtypeをリファクタリングしてboolを返すように改善し、optAssertionVNIsSubtypeを新規実装。VNベースのオブジェクト型情報とPHI到達分析を組み合わせてキャスト成功を証明
  • compiler.h/hpp: アサーション伝播ヘルパー関数の署名を更新し、新しいVNベースサブタイプヘルパーを宣言
  • valuenum.cpp/h: PHIノードからの型情報をVNレベルで復元する機能を追加
  • テスト: IsInstReachingVN.csにて新規最適化パターンのテストケースを追加

パフォーマンスへの影響

示例コード:

  • 改善前: 104バイトのコード生成(型チェック、分岐、HELP_ISINSTANCEOFCLASS呼び出し含む)
  • 改善後: 26バイトのコード生成(キャストチェック完全削除、常にtrueの分岐のみ残存)

約75%のコード削減とランタイムキャスト検証コストの除去による実行速度の向上が期待できます。

関連Issue

なし

その他

  • 内部実装の変更であり、公開APIへの影響はなし
  • 互換性への破壊的変更なし
  • PHI分析の深さに予算制限を設けることで、過度な解析オーバーヘッドを防止

#128499 Restore E_NOTIMPL fallback in DacDbiInterfaceImpl::GetContext

概要

マネージドデバッグのスタックウォーク機能が非Windows platforms で正常に動作するよう、DacDbiInterfaceImpl::GetContext に E_NOTIMPL フォールバック機能を復元しました。ICorDebugDataTarget::GetThreadContext が E_NOTIMPL を返すプラットフォームで、Thread の Frame chain をウォークして REGDISPLAY から レジスタコンテキストを再構築します。

このフォールバックは以前の変更で削除されており、今回の修正によって復元されます。

変更内容

  • src/coreclr/debug/daccess/dacdbiimpl.cpp: GetContext メソッドの実装を更新
    • GetThreadContext が E_NOTIMPL を返した場合、エラーをスローせずフォールバック処理を実行
    • Thread の Frame chain をウォークして UpdateRegDisplay と UpdateContextFromRegDisp を使用し、マネージドスタックウォーク用のコンテキストを合成
    • FEATURE_INTERPRETER が定義されている場合、InterpreterFrame から SetContextToInterpMethodContextFrame を使用してコンテキストを合成する高速パス
    • 適切なマネージドフレームコンテキストを再構築できない場合、出力コンテキストをゼロクリア

パフォーマンスへの影響

影響なし(デバッグ実行時のフォールバック処理のため、パフォーマンスクリティカルパスではない)

関連Issue

なし

その他

  • DAC/DBI(Data Access Component / Debug Interface)に関連する内部実装の修正
  • 非Windows platforms(Linux、macOS等)でのマネージドデバッグ機能の復旧
  • Visual Studio内部テストを通じて検出された不具合の修正

#128496 Fix async stack walk crash for continuations with null DiagnosticIP

概要

CoreCLRデバッガーの非同期スタックウォーク機能において、CordbAsyncStackWalk::PopulateFrame()がnull DiagnosticIPを持つcontinuation(例:#127973で導入されたValueTaskContinuation)に遭遇した際のクラッシュを修正します。DiagnosticIPがnullのcontinuationをスキップするようにすることで、null アドレスに対するGetNativeCodeInfoForAddr呼び出しを回避します。

変更内容

  • src/coreclr/debug/di/rsstackwalk.cpp: CordbAsyncStackWalk::PopulateFrame()内にDiagnosticIPのnull/ゼロチェックを追加し、デバッグフレーム化を試みるのではなく次のcontinuationへ進むようにしました。DiagnosticHiddenフレームと同様の扱いでスキップされます。(+9/-0)

パフォーマンスへの影響

影響なし。本修正はデバッガーのスタックウォーク機能におけるエラーハンドリングの改善であり、スキップされるcontinuationは通常処理では無視されるため、パフォーマンス上の利得・低下はありません。

関連Issue

#127973(ValueTaskContinuation導入に関連)

その他

本修正は内部実装(デバッガーエンジン)に限定される変更です。公開APIへの影響はありません。


#128336 JIT: don't stress-tailcall named intrinsics (#122479)

概要

STRESS_TAILCALLモードでJIT importerが名前付きintrinsicを明示的なテイルコールとしてマークすることにより、GT_KEEPALIVE等の非CALL IRにインポートされるintrinsicで不正な状態が発生する問題を修正しました。この状態により後続の「GC Polls挿入」フェーズでアサートが発生していました。修正内容は、呼び出し先がCORINFO_FLG_INTRINSICフラグを持つ場合、stress-tailcall昇格をスキップすることです。

変更内容

  • src/coreclr/jit/importer.cpp: tailcall-stress昇格時にintrinsic フラグをチェック追加(44行追加、30行削除)
  • src/coreclr/System.Private.CoreLib/src/System/Threading/Thread.CoreCLR.cs: Thread.ClearWaitSleepJoinState()から一時的なworkaround属性([MethodImpl(NoInlining | NoOptimization)])を削除(2行削除)
  • テスト追加: Runtime_122479向けの回帰テストを新規追加

パフォーマンスへの影響

影響なし(stress-tailcall処理のロジック調整のため、通常ビルドでの性能変化なし)

関連Issue

#122479、#122652

その他

本修正により、[SuppressGCTransition]呼び出しを含むメソッドでの不正なBBJ_RETURNブロック生成が防止されます。importer.cppでのロジック修正により、workaroundアトリビュートの削除が可能になりました。


#125412 [main] Update dependencies from dnceng/internal/dotnet-optimization

概要

dotnet-optimization内部リポジトリからの依存関係を更新します。MIBC(Microsoft Intermediate Bytecode)ランタイム最適化データとPGO(Profile-Guided Optimization)CoreCLRパッケージを、バージョン1.0.0-prerelease.26080.1から1.0.0-prerelease.26180.1に更新します。これらはランタイムのJITコンパイル最適化に使用されます。

変更内容

  • eng/Version.Details.props: 依存関係バージョン情報の更新(+6/-6行)
  • eng/Version.Details.xml: 依存関係バージョン情報の更新(+12/-12行)

更新される依存関係パッケージ:

  • optimization.linux-arm64.MIBC.Runtime
  • optimization.linux-x64.MIBC.Runtime
  • optimization.windows_nt-arm64.MIBC.Runtime
  • optimization.windows_nt-x64.MIBC.Runtime
  • optimization.windows_nt-x86.MIBC.Runtime
  • optimization.PGO.CoreCLR

パフォーマンスへの影響

MIBC/PGO最適化データの更新により、ランタイムのJITコンパイル効率が向上する可能性があります。具体的な改善数値は提供されていません。

関連Issue

なし

その他

このPRは自動化されたMaestroボット(dotnet-maestro[bot])により生成されたものです。2026年3月30日時点での最新の最適化データが適用されます。


目次