Pull Request on 2026年04月18日

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

注意点

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



#127101 Suppress debugger filter notification for UCO entrypoint during EH dispatch

  • 作成者: @tommcdon
  • 作成日時: 2026年04月18日 00:48:04(UTC)
  • マージ日時: 2026年04月18日 14:57:11(UTC)
  • ラベル: area-Diagnostics-coreclr

概要

PR #126222でアプリケーションエントリポイントをネイティブCallDescrWorkerInternalからマネージドEnvironment.CallEntryPoint(UnmanagedCallersOnly属性付き)に移動した際、例外ハンドリング中のデバッガー通知が不正なタイミングで発生し、ハンドルされない例外の伝播が破損していた問題を修正します。Environment.CallEntryPointのフィルター句についてのみデバッガー通知を抑止し、プロファイラーとETW通知は維持します。

変更内容

  • src/coreclr/vm/exinfo.cpp: MakeCallbacksRelatedToHandler内のEEToDebuggerExceptionInterfaceWrapper::ExceptionFilter()呼び出しに対し、フィルターがEnvironment.CallEntryPoint内に存在する場合の通知を抑止する条件を追加(+9/-1)

パフォーマンスへの影響

影響なし

関連Issue

#126222

その他

  • プロファイラー通知(ExceptionSearchFilterEnter)とETW通知(ExceptionFilterBegin)は変更されず、デバッガー通知のみ対象メソッドで抑止される
  • 既知のUCOエントリポイントメソッドに限定した修正のため、他のフィルター句の動作には影響なし

#127099 Remove dead TEST_DATA_CONSISTENCY paths and obsolete DacDbi APIs

  • 作成者: @Copilot
  • 作成日時: 2026年04月17日 23:56:56(UTC)
  • マージ日時: 2026年04月18日 06:06:25(UTC)
  • ラベル: area-Diagnostics-coreclr

概要

TEST_DATA_CONSISTENCY関連の未使用コードとDacDbi APIの廃止インターフェースを削除し、親フレームチェックをコールサイトにインライン化してランタイムの保守性を向上させます。

変更内容

  • DacDbi APIの削除(ネイティブ/マネージド両対応):

    • TestCrstTestRWLockIsTransitionStubIsMatchingParentFrameメソッドをIDacDbiInterfaceから削除
    • dacdbi.idl、dacdbiinterface.h、DacDbiImplクラスから対応する宣言・実装を削除
    • Microsoft.Diagnostics.DataContractReader.Legacyのマネージド互換層も削除
  • TEST_DATA_CONSISTENCY関連コードの削除

    • DataTest実装クラスを完全削除
    • IPC イベントペイロード(DB_IPCE_TEST_CRST、DB_IPCE_TEST_RWLOCK)を削除
    • Crst/RWLock のテスト用デバッグヘルパーを削除
    • TestDataConsistency設定フィールド・アクセッサ・初期化処理を削除
    • ビルドスイッチ定義を削除
  • 親フレーム比較のインライン化

    • CordbNativeFrame::IsMatchingParentFrameの呼び出し元でフレームポインタ直接比較を実施
    • DacDbi経由の問い合わせを排除

パフォーマンスへの影響

デバッガ自己テスト機能の削除により、テストモードでのIPC通信オーバーヘッド削減。親フレーム比較をインライン化することで、DacDbiインターフェース経由の呼び出しコストを排除。通常の実行時には直接的なパフォーマンス改善は限定的ですが、デバッガ操作時の オーバーヘッドが軽減されます。

関連Issue

なし

その他

  • 削除ファイル:datatest.h、dacdbiimpllocks.cpp(完全削除)
  • 内部実装(debugger/daccess)レイヤーの変更であり、公開API互換性への影響なし
  • CrstTypesの再生成ファイル(crsttypes_generated.h)の更新により、DataTest関連の型定義が削除される

#127094 Add support for utilizing F16C instructions on xarch

  • 作成者: @tannergooding
  • 作成日時: 2026年04月17日 21:36:14(UTC)
  • マージ日時: 2026年04月18日 14:59:20(UTC)
  • ラベル: area-CodeGen-coreclr

概要

xarch(x86/x64)プラットフォームでF16C命令を利用したSystem.Halffloatの明示的変換の最適化を追加します。前回のABI関連問題を解決し、AVX2対応ハードウェアで動作する初期実装です。JITがHalf.op_Explicitをnamed intrinsicとして認識し、vcvtph2ps/vcvtps2ph命令に展開することで、関数呼び出しから直接的なHW命令に変換されます。

変更内容:

  • System.Halfと明示的な変換演算子に[Intrinsic]属性を追加
  • named intrinsic NI_System_Half_op_Explicitを追加
  • importerでAVX2変換HW intrinsicsへの展開ロジックを実装
  • xarch HW intrinsic一覧、containment/perf metadataを更新

変更内容

  • namedintrinsiclist.h: NI_System_Half_op_Explicit named intrinsic IDを追加
  • importercalls.cpp: Half.op_Explicit呼び出しを認識し、xarch上でAVX2変換intrinsic列に展開(HalfToSingle/SingleToHalf向け)
  • importer.cpp: スカラーHalf値をSIMDノードを通じてpack/unpackするヘルパールーチンを追加
  • compiler.h: ヘルパールーチンの宣言とisSystemHalfClass型認識ロジックを追加
  • hwintrinsiclistxarch.h: AVX2向けhalf↔single変換intrinsicsを追加
  • lowerxarch.cpp: 新しい変換/ストアパターンのcontainment ロジックを拡張
  • emitxarch.cpp: 新命令のperf特性エントリを追加
  • Half.cs: Half型と変換演算子を[Intrinsic]でマーク

パフォーマンスへの影響

HalfToSingle変換: 関数呼び出し(19バイト、スタック操作含む)から直接命令(13バイト、スタック無し)へ SingleToHalf変換: tail.jmp(6バイト)から直接命令(14バイト)へ

AVX2対応ハードウェアで動作する既存環境のほぼすべてで性能向上が期待できます。スタック操作の削減により、特にループ内での呼び出しで効果が顕著になる見込みです。

関連Issue

#122649 - 前回のABI関連の課題で再vert対象となった実装

その他

  • 本実装はAVX512-FP16対応ハードウェア限定ではなく、より広いAVX2対応ハードウェアで利用可能
  • AVX512-FP16向けの拡張(直接的な算術演算の高速化)は後続PRで予定されている

#127092 Fix build

  • 作成者: @radekdoulik
  • 作成日時: 2026年04月17日 19:48:28(UTC)
  • マージ日時: 2026年04月18日 00:53:13(UTC)
  • ラベル: area-Infrastructure

概要

ValueTask.csValueTaskSourceNotifier型のモディファイア順序を修正し、IDE0036スタイルルール違反を解決するビルドエラーを修正しました。

変更内容

  • src/libraries/System.Private.CoreLib/src/System/Threading/Tasks/ValueTask.cs: ValueTaskSourceNotifierの型宣言におけるモディファイア順序をIDE0036の規約に準拠するよう修正(882行目)

パフォーマンスへの影響

影響なし

関連Issue

#127092

その他

なし


#127091 [cDAC] Implement GetMethodDefinitionByToken in ClrDataModule

  • 作成者: @max-charlamb
  • 作成日時: 2026年04月17日 19:08:50(UTC)
  • マージ日時: 2026年04月18日 02:23:54(UTC)
  • ラベル: area-Diagnostics-cdac

概要

cDAC(Compact Data Access Component)のClrDataModuleGetMethodDefinitionByTokenの完全な実装を追加し、従来のDAC(Debugging Access Component)への完全な委譲から脱却させました。これにより、cDACの"no-fallback"カバレッジを拡大し、レガシーDAC依存性を減らします。

変更内容

  • ClrDataModule.cs: GetMethodDefinitionByTokenをレガシー委譲スタブから完全なcDAC実装に置き換え。トークンがmdtMethodDefであることを検証し、ClrDataMethodDefinitionを生成。DEBUG環境ではレガシー実装の結果との整合性を検証。
  • LegacyFallbackHelper.cs: GetMethodDefinitionByTokenをno-fallback許可リストから削除。代わりにStartEnumInstancesGetNameSetCodeNotificationHasClassOrMethodInstantiationの4つのIXCLRDataMethodDefinitionメソッドをレガシーフォールバックブロック対象に追加(これらはまだcDACに未実装)。

パフォーマンスへの影響

影響なし

関連Issue

#126752

その他

  • 実装パターンは既存のEnumMethodDefinitionByNameと同じ手法に従っています。
  • C++レガシー実装と同じロジック(トークンタイプ検証→ClrDataMethodDefinition生成)をミラーリングしています。
  • このPRはGitHub Copilotの支援で生成されました。

#127071 [release/10.0] Enhance createdump to detect alt stack execution

  • 作成者: @hoyosjs
  • 作成日時: 2026年04月17日 10:45:10(UTC)
  • マージ日時: 2026年04月18日 12:11:48(UTC)
  • ラベル: Servicing-approved area-Diagnostics-coreclr

概要

createdumpがalternate signal stack(sigaltstack/SA_ONSTACK)上でのクラッシュ時に、ネイティブスタック展開が不完全になる問題を修正します。libunwindのunw_is_signal_frameを使用してシグナルトランポリンフレームを検出し、スタックポインタ(SP)の単調性チェックを緩和することで、展開がシグナルトランポリンを越えて元のスタックに戻れるようにします。これにより、ダンプに元のスレッドスタックメモリが完全に含まれるようになります。

変更内容

  • src/coreclr/pal/src/exception/remote-unwind.cppunw_get_proc_infounw_is_signal_frameを使用してシグナルトランポリンフレームを検出し、結果を呼び出し元に返す
  • src/coreclr/pal/inc/pal.hPAL_VirtualUnwindOutOfProcの宣言にisSignalFrameアウトパラメータを追加
  • src/coreclr/debug/createdump/threadinfo.cpp:SP単調性チェックを緩和し、前のフレームがシグナルトランポリンの場合、alt stackから元のスタックへの遷移を許可
  • src/coreclr/debug/createdump/createdumppal.cpp:新しいシグネチャに対応するよう関数ポインタ定義とラッパーを更新

パフォーマンスへの影響

影響なし。変更はunw_get_proc_infoを既存のunw_stepと同じキャッシュを再利用するため、追加のリモートメモリ読み込みは不要。

関連Issue

#126981

その他

  • 適用範囲:.NET 10(release/10.0ブランチ)
  • リスク:低。変更はcreatedumpのネイティブ展開パスとDAC遅延ステートマシン展開に限定。unw_is_signal_frameがシグナルトランポリンを正しく検出できない場合でも、修正前と同じ動作となり回帰なし
  • テスト:PInvoke経由でネイティブライブラリに呼び出し、セカンダリスレッド上でnullrefに到達するシナリオで検証済み。DWARF展開情報の有無両方で動作確認済み

#127068 Enhance createdump to detect alt stack execution

  • 作成者: @hoyosjs
  • 作成日時: 2026年04月17日 09:51:46(UTC)
  • マージ日時: 2026年04月18日 03:48:39(UTC)
  • ラベル: area-PAL-coreclr

概要

createdumpがalternate signal stack上でのクラッシュ時にネイティブスタックの元のスレッドスタックをキャプチャできない問題を修正しています。信号トランポリンフレームを検出するためにunw_is_signal_frameを使用し、スタックポインタ(SP)の単一の低下を許容することで、unwinder が元のスタックへ遷移してメモリをダンプに含めることができるようになります。

変更内容

  • src/coreclr/pal/src/exception/remote-unwind.cpp: libunwindを使用して信号フレームを検出し、リモートアンワインド中に結果をoutパラメータで返すロジックを追加(unw_is_signal_frame呼び出し前にproc-info を強制ポピュレートしている)
  • src/coreclr/pal/inc/pal.h: PAL_VirtualUnwindOutOfProc APIに信号フレーム検出結果を返すためのoutパラメータを追加
  • src/coreclr/debug/createdump/threadinfo.cpp: UnwindNativeFrames の単調SP保護ガードを緩和し、信号トランポリンフレーム直後に1回のSP低下を許容
  • src/coreclr/debug/createdump/createdumppal.cpp: createdump PALシム内で新しいoutパラメータをパススルー

パフォーマンスへの影響

影響なし。本修正は既存のunwinding処理に追加検出ロジックを加えるもので、ダンプキャプチャの完全性向上がメインの目的です。

関連Issue

#127068

その他

  • 公開API(PAL_VirtualUnwindOutOfProc)の署名変更を伴いますが、outパラメータのため後方互換性は保たれています
  • リモートアンワインド時にlibunwindのunw_is_signal_frameを活用しており、signal stackの処理に特化した改善です

#127067 [release/9.0] Enhance createdump to detect alt stack execution

  • 作成者: @hoyosjs
  • 作成日時: 2026年04月17日 09:47:54(UTC)
  • マージ日時: 2026年04月18日 12:10:28(UTC)
  • ラベル: Servicing-approved area-Diagnostics-coreclr

概要

createdumpがシグナルハンドラ用の代替スタック(SA_ONSTACK)上で発生したクラッシュの場合、ネイティブスタックアンワインドに失敗する問題を修正します。libunwind の unw_is_signal_frame を使用してシグナルトランポリンフレームを検出し、スタックポインタの減少を許容することで、元のスタックへの復帰とメモリ取得を可能にします。

修正により、シグナルハンドラ経由のクラッシュダンプに元のスレッドスタックメモリが含まれるようになります。

変更内容

  • remote-unwind.cpp: PAL_VirtualUnwindOutOfProc にシグナルトランポリンフレーム検出機能を追加(unw_is_signal_frame 呼び出し)
  • pal.h: PAL_VirtualUnwindOutOfProc のシグネチャを更新し、シグナルフレーム判定を示す出力パラメータ(isSignalFrame)を追加
  • threadinfo.cpp: UnwindNativeFrames のスタックポインタ単調性ガードをシグナルトランポリン検出時に1回の減少を許容するよう変更
  • dacfn.cpp: DAC側の最小プロトタイプと呼び出し箇所を新パラメータに対応(nullを渡す)
  • createdumppal.cpp: 動的ロードされるPAL関数ポインタのシグネチャを更新し、新引数を転送

パフォーマンスへの影響

影響なし。変更は既存の unw_get_proc_info キャッシュを再利用するため、追加のリモートメモリ読み取りは発生しません。

関連Issue

#126981(.NET 9対応版)

その他

  • リスク評価:低。変更はcreatedumpのネイティブアンワインドパスとDAC遅延状態機械アンワインドに限定されています
  • 7年前に追加されたSP単調性チェックに対する制限的な例外であり、既存の破損アンワインド対策は維持されます
  • unw_is_signal_frame がfalseを返す場合でも動作は変わらず、回帰リスクはありません

#127066 [release/8.0] Enhance createdump to detect alt stack execution

  • 作成者: @hoyosjs
  • 作成日時: 2026年04月17日 09:17:53(UTC)
  • マージ日時: 2026年04月18日 09:19:16(UTC)
  • ラベル: Servicing-approved area-Diagnostics-coreclr

概要

createdumpがalternate signal stack上でのクラッシュ時に元のスレッドスタックをキャプチャできない問題を修正します。シグナルトランポリンフレーム検出時にスタックポインタ(SP)の単調性チェックを緩和し、元のスタックメモリをダンプに含めることで、minidumpの完全性を確保します。

変更内容

  • remote-unwind.cpp: PAL_VirtualUnwindOutOfProcisSignalFrame出力パラメータを追加し、unw_is_signal_frameでシグナルフレームを検出
  • pal.h: PAL公開APIの関数シグネチャを更新(isSignalFrameパラメータ追加)
  • dacfn.cpp: DAC横断OS対応コードとコールサイトを新しいシグネチャに対応
  • threadinfo.cpp: UnwindNativeFramesでシグナルトランポリンフレーム検出後の単一SPデクリメントを許可し、元のスタックへの遡及を可能化
  • createdumppal.cpp: createdump PALラッパーの関数ポインタ定義とコールサイトを更新

パフォーマンスへの影響

影響なし。unw_get_proc_infounw_stepが既にキャッシュしたデータを再利用するため、追加のリモートメモリ読み込みは発生しません。

関連Issue

#126981(.NET 8版)

その他

  • リスク評価: 低。変更はcreatedumpのネイティブアンワインドパスに限定されており、unw_is_signal_frameがシグナルフレームを検出できない場合は従来動作に戻ります。
  • テスト実績: Pinvoke呼び出しでセカンダリスレッド上のnullref到達シナリオでテスト済み。修正後はシグナルトランポリンを越えた完全なアンワインドとlibc トランポリンの識別、元のスタックメモリの包含を確認。DWARF unwind情報の有無両方で動作を検証。

#127048 Improve simd and floating-point costing for xarch

  • 作成者: @tannergooding
  • 作成日時: 2026年04月17日 06:26:01(UTC)
  • マージ日時: 2026年04月18日 19:08:16(UTC)
  • ラベル: area-CodeGen-coreclr

概要

xarch(x86/x64)アーキテクチャにおけるSIMDと浮動小数点演算のJIT命令コスティングを現代のコードジェネレーション特性に合わせて更新しました。従来のコスティングは32ビット時代のx87 FPUベースであり、ハードウェア組み込み命令はcostEx=1, costSz=1で統一されていたため、CSEなどの最適化が働きにくい状況を改善します。大多数の浮動小数点命令は最小4サイクル、多くのSIMD操作は汎用命令より著しく多くのコードジェネレーションバイト数を消費するため、より正確な最適化判定が可能になります。

変更内容

  • hwintrinsic.h/cpp: HWIntrinsicInfointCost/fltCostフィールドを追加し、浮動小数点と整数演算の個別コスト管理に対応
  • hwintrinsiclistxarch.h: xarch向けハードウェア組み込みマクロシグネチャを拡張し、新しいコストフィールドを定義
  • gentree.h/cpp: FLT_IND_COST_EX定数を導入、HW組み込み命令・間接参照・FP/SIMD定数・浮動小数点演算のコスティング/評価順序ロジックを大幅更新、共有ヘルパーgtGetAddrNodeCostを追加
  • namedintrinsiclist.h/valuenumfuncs.h: マクロシグネチャを新コストフィールドに合わせて更新
  • compiler.h: gtGetAddrNodeCost宣言とホワイトスペース修正

パフォーマンスへの影響

JITの最適化判定がより正確になることで、CSEおよびサイズ/スループット最適化のトレードオフがより適切に機能します。結果として大きな差分が生じる可能性がありますが、実行時間やコードサイズの改善が期待されます。具体的なベンチマーク数値は提供されていません。

関連Issue

#127048

その他

  • 本変更はxarch向けのものであり、作成者はArm64向けの同様のPRを今後予定していることを言及しています
  • 内部実装の変更(JITのコスティングアルゴリズム)であり、公開APIへの影響はありません

#127037 [cDAC] Add simple Debugger DacDbi APIs

  • 作成者: @Copilot
  • 作成日時: 2026年04月16日 22:48:25(UTC)
  • マージ日時: 2026年04月18日 04:50:36(UTC)
  • ラベル: area-Diagnostics-coreclr

概要

cDAC(Component Data Access)経由でデバッガー関連の4つの新しいDacDbi APIを追加します:RequestSyncAtEventSetSendExceptionsOutsideOfJMCGetDebuggerControlBlockAddressEnableGCNotificationEvents。これらはデバッガー側の簡単な操作と状態照会をサポートし、対応するデータディスクリプタと単体テストも含まれます。

変更内容

  • IDebugger インターフェース拡張Microsoft.Diagnostics.DataContractReader.Abstractions/Contracts/IDebugger.cs):4つの新しいAPI署名を追加
  • Debuggerデータモデル拡張Debugger.cs):RCThread参照と新しいフラグフィールドを追加、ターゲットメモリへの書き込みヘルパーメソッドを実装
  • DebuggerRCThreadデータモデル新規作成DebuggerRCThread.cs):DCBポインター情報を提供する新しいデータ型
  • Debugger_1コントラクト実装Debugger_1.cs):新しいデータフィールドを使用して4つのAPI実装を追加
  • DacDbi実装DacDbiImpl.cs):新しいDacDbiエントリポイントをcDACデバッガーコントラクトにルーティング、レガシーDacDbiに対するDEBUG検証を含む
  • データディスクリプタdatadescriptor.inc):DebuggerおよびDebuggerRCThread型の新しいフィールド定義を追加
  • 型定義DataType.cs):DataType.DebuggerRCThreadを新規追加
  • デバッガーヘッダーdebugger.h):プライベートフィールドオフセットをcDAC経由で公開
  • 単体テストDebuggerTests.cs):新しいコントラクトAPIの動作検証とターゲットメモリ書き込み効果を検証
  • 設計ドキュメント更新Debugger.md):新しいAPI仕様とディスクリプタ依存関係を記載

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

本変更は内部デバッグサポートインフラの拡張であり、公開APIの変更ではありません。複数のコンパイルユニットにおけるヘッダー競合解決のため、src/coreclr/vm/cdacdata.hからsrc/coreclr/inc/cdacdata.hへの移動が伴います。


#127020 Change cDAC contract versioning from integer to string identifiers

  • 作成者: @max-charlamb
  • 作成日時: 2026年04月16日 17:59:57(UTC)
  • マージ日時: 2026年04月18日 15:44:06(UTC)
  • ラベル: area-Diagnostics-cdac

概要

cDAC(CoreCLR Data Access Contract)のコントラクト バージョン管理スキームを整数型(例:12)から文字列識別子(例:"c1""c2")に変更します。この変更により、複数のプラットフォームが異なるプレフィックス(例:NativeAOT用の"n1")を使用する際に、整数値の範囲衝突を回避できます。変更はネイティブ記述子生成、ビルドツール、マネージド読み取りパイプライン全体に及びます。

変更内容

  • ネイティブ側: datadescriptor.inc (VM/GC) で CDAC_GLOBAL_CONTRACT(Thread, c1) のように文字列トークンを使用。datadescriptor.cpp で文字列トークンを名前プール内に格納し、インデックスを参照。
  • ビルドツール: ObjectFileScraper でコントラクト バージョンを文字列プール経由で読み取り、DataDescriptorModelstring 型として保持。
  • マネージド パイプライン: ContractRegistryIContractFactoryContractDescriptorParser などの API パラメータを int から string に変更。CoreCLRContracts のすべての登録を "c1""c2""c3" を使用するよう更新。ContractDescriptorParser に後方互換性コンバーター追加(整数値の JSON も受け入れ可能)。
  • StressLogAnalyzer: ストレスログ ヘッダーから整数バージョンを抽出し、"c" プレフィックスを付加して登録版と一致させる(例:"c1""c2")。
  • テスト・ドキュメント: 20以上のテストファイルおよび設計ドキュメント(datacontracts_design.mdcontract-descriptor.md)を文字列バージョンに更新。新テスト ParseContractsStringVersions で文字列バージョン解析を検証。既存テスト ParseContractsCaseSensitive で後方互換性(整数 JSON → 文字列)を検証。

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • 公開API変更: ContractRegistry.Register()IContractFactory.CreateContract() などの署名がコントラクト バージョンパラメータを int から string に変更しており、外部実装への破壊的変更となります。
  • 後方互換性: ContractDescriptorParserContractsDictionaryConverter を実装し、旧ランタイムからの整数値 JSON も文字列値として解析可能です。
  • 警告: StressLogAnalyzer/Program.cs で埋め込み JSON のコントラクト バージョンが依然として整数形式の場合、パース失敗の可能性があります。修正が推奨されます。

#126974 [cDAC] fix some DacDbi bugs

  • 作成者: @rcj1
  • 作成日時: 2026年04月15日 23:18:57(UTC)
  • マージ日時: 2026年04月18日 01:31:25(UTC)
  • ラベル: area-Diagnostics-coreclr area-Diagnostics-cdac

概要

cDAC(Compact Data Access Component)の DacDbi レイヤーにおける2つの正確性の問題を修正します。ValueType検出をMethodTableフラグと一致させ、汎用変数チェック(HasTypeParams)の戻り値を厳密なBoolean値に正規化します。

変更内容

  • DacDbiImpl.IsValueType: RuntimeTypeSystemのValueType分類APIを使用するように変更(署名要素型ではなくMethodTableフラグベース)
  • IRuntimeTypeSystem.IsValueType(TypeHandle): 新しいAPI追加し、RuntimeTypeSystem_1で実装(MethodTableカテゴリフラグおよびTypeDesc要素型で判定)
  • MethodTableFlags_1.cs: Category_ValueType_Mask定数とIsValueTypeヘルパーメソッドを追加
  • MethodTable::ContainsGenericVariables: CoreCLRネイティブ実装で、生フラグ値ではなく厳密なBOOL値(0/1)を返すように修正
  • RuntimeTypeSystem.md: 新IsValueType APIとフラグ仕様を文書化
  • テスト追加: RuntimeTypeSystemDumpTests、MethodTableTests に対応テストを追加(計143行)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • この変更は内部実装(cDAC/DacDbiレイヤー)の修正であり、公開APIへの互換性影響なし
  • デバッグ情報の型チェックの正確性向上により、型検査に依存するデバッガ機能(データ構造の解析など)の信頼性が向上

#126901 Adjust PortableEntryPoint logic to actually handle having Wasm R2R native entrypoints

  • 作成者: @davidwrighton
  • 作成日時: 2026年04月14日 19:02:58(UTC)
  • マージ日時: 2026年04月18日 17:58:26(UTC)
  • ラベル: area-VM-coreclr

概要

WebAssembly (WASM) における ReadyToRun (R2R) ネイティブエントリポイントと PortableEntryPoint の相互運用性を改善するPRです。R2Rコンパイル済みコードからインタープリタコードへのthunk生成、calling convention調整、スタックウォーク終了処理の実装が主な変更です。

変更内容

  • WASM Thunk生成の拡張: InternalCall(FCall)シェイプに対応した PortableEntryPoint('p'サフィックス)専用のthunk生成機能を追加(InterpToNativeGenerator.csInternalCallSignatureCollector.cs
  • PortableEntryPoint状態管理: PrefersInterpreterEntryPointフラグを追加し、R2R native entrypoint と interpreter entrypoint の選択ロジックを更新(precode_portable.hpp/.cpp
  • TransitionBlockの拡張: WASM向けにm_StackPointerフィールドを追加し、スタックウォーク終止処理用のスタックポインタを伝播(callingconvention.h
  • FCALL/HCALL ABI調整: WASM環境で隠し引数(callersStackPointer、PE context)を追加するようFCDECL/FCIMPLマクロを更新(fcall.h
  • Prestub的な動作: ExecuteInterpretedMethodWithArgs_PortableEntryPoint_Complexを追加し、R2Rからの呼び出し時にprestubのような処理を実行(prestub.cpp
  • ヘルパー呼び出し更新: 例外処理、GCFrame、IL stub生成などでスタックポインタの伝播と新しいABIに対応

パフォーマンスへの影響

影響なし(構造的変更であり、実行時オーバーヘッドは最小限)

関連Issue

#123437

その他

  • 互換性: WASM環境でのFCALL呼び出し元全体が新しいABI(隠し引数を含む)に対応する必要があります
  • 内部実装: 変更は主にWASM固有の実装であり、public APIへの直接的な影響はありません
  • GCFrame API変更: BOOL maybeInteriorパラメータからUINT gcFlagsに変更(内部的)

#126789 Fix WasmTestOnChrome: exclude browser/wasi from gen-debug-dump-docs.py helix post-command

  • 作成者: @Copilot
  • 作成日時: 2026年04月11日 14:29:52(UTC)
  • マージ日時: 2026年04月18日 05:52:18(UTC)
  • ラベル: area-Build-mono

概要

WasmTestOnChromeおよび関連するWASM CI ジョブで、gen-debug-dump-docs.pybrowser/wasiターゲットの相関ペイロードに存在しないため、Helix post-commandの実行に失敗していた問題を修正します。非Windows CoreCLRターゲット向けのHelixPostCommand条件にbrowserwasiを除外する条件を追加します。

変更内容

  • src/libraries/sendtohelixhelp.proj: 非Windows環境のHelixPostCommands条件にbrowserおよびwasiの除外条件を追加。既存のTestEnvFileNameで使用されているパターンと統一しました。

変更前:

<HelixPostCommands Condition="'$(TargetOS)' != 'windows'">

変更後:

<HelixPostCommands Condition="'$(TargetOS)' != 'windows' and '$(TargetOS)' != 'browser' and '$(TargetOS)' != 'wasi'">

パフォーマンスへの影響

影響なし

関連Issue

#126706

その他

  • CI/ビルドパイプライン設定の修正であり、ソースコード変更ではありません。
  • 既存の同一ファイル内のパターン(TestEnvFileName)との一貫性を確保しています。
  • 検証は設計による(ビルドパイプラインの既存パターンとの照合)です。

#126785 Haiku: Apply .NET-specific llvm-libunwind patches

  • 作成者: @trungnt2910
  • 作成日時: 2026年04月11日 12:50:21(UTC)
  • マージ日時: 2026年04月18日 02:43:33(UTC)
  • ラベル: NO-SQUASH area-PAL-coreclr community-contribution

概要

.NETランタイムがHaiku OSで使用するsetRegisterの呼び出し方式に合わせるため、llvm-libunwindのHaiku固有パッチを適用します。.NETではsetRegisterを3引数で呼び出し、最後の引数として"location"(レジスタの位置情報)を渡します。既知の位置情報がない場合は0を渡すため、UnwindCursor.hppの最近のHaiku固有呼び出し箇所を更新しました。

変更内容

  • src/native/external/llvm-libunwind-version.txt: バージョンファイルに1行追加(パッチバージョン情報の更新)
  • src/native/external/llvm-libunwind/src/UnwindCursor.hpp: setRegister呼び出しを3引数形式に統一。Haiku固有の17個所で、第3引数として0(既知の位置情報なし)を指定

パフォーマンスへの影響

影響なし

関連Issue

#55803

その他

Haiku OSサポートに関する継続的なパッチ適用の一部です。


#126547 Reapply "Inline CORINFO_HELP_ARRADDR_ST helper call, remove WriteBarr… …ier FCall" (#126530)

  • 作成者: @EgorBo
  • 作成日時: 2026年04月04日 17:43:17(UTC)
  • マージ日時: 2026年04月18日 13:21:07(UTC)
  • ラベル: area-VM-coreclr

概要

CORINFO_HELP_ARRADDR_STヘルパー呼び出しのJITインライン化を再適用し、古いCastHelpers.WriteBarrier FCCall実装を、JITが展開可能な新しい管理型のRuntimeHelpers.WriteBarrier内在関数に置き換えます。これにより、配列要素の代入時のWrite Barrier操作がより効率的にインライン化されるようになります。

変更内容

  • RuntimeHelpers.WriteBarrier内在関数の追加: CoreLib(System.Private.CoreLib、NativeAOT対応版)にRuntimeHelpers.WriteBarrier(ref object?, object?)内在関数を追加
  • JIT側の変更:
    • importercalls.cpp: WriteBarrier内在関数の展開実装を追加
    • importer.cpp: CORINFO_HELP_ARRADDR_STヘルパー呼び出しをユーザー呼び出し相当に変換し、インライン化をマーク
    • morph.cpp: ARRADDR_ST形態調整を変更し、インライン化されない場合はヘルパーに変換し直す
    • gentree.h/cpp: IsHelperCallOrUserEquivalentメソッドを追加
    • compiler.h: ヘルパー-管理型呼び出しマッピング用ストレージを追加
    • namedintrinsiclist.h: 新しい内在関数を登録
  • CastHelpers.cs: WriteBarrier InternalCallを削除し、StelemRefRuntimeHelpers.WriteBarrierを使用。AggressiveInlining属性を追加
  • プラットフォーム別ネイティブスタブの削除: 全アーキテクチャ(amd64/i386/arm/arm64/riscv64/loongarch64/wasm)からJIT_WriteBarrier_Callableスタブを削除
  • ecalllist.h: CastHelpers.WriteBarrier FCFunc/FCClass登録を削除

パフォーマンスへの影響

Write Barrier呼び出しのインライン化により、関数呼び出しオーバーヘッドが削減され、特に配列要素代入が多い処理で実行速度が向上する見込みです。ただし、本PR作成者による説明では具体的なベンチマーク数値は提供されていません。

関連Issue

#126530#117583

その他

本PRはBugfix対象です。前回のPR #126530ではArrayTests.CastAs_IListOfTテストでSIGSEGVが発生し、revertされました。本再適用では、SZArrayHelper型判定の問題(Unsafe.As<__Cannon[]>(this)の型キープが不適切)により、StelemRef_Helper呼び出しから正しくない型推論が行われていた根本原因の修正が含まれています。


#123827 HTTP/2: Add automatic downgrade to HTTP/1.1 for Windows authentication

  • 作成者: @Copilot
  • 作成日時: 2026年01月31日 00:43:35(UTC)
  • マージ日時: 2026年04月18日 16:02:25(UTC)
  • ラベル: area-System.Net.Http

概要

HTTP/2接続でWindows認証(NTLM/Negotiate)の401チャレンジを受け取った場合、SocketsHttpHandlerが自動的にHTTP/1.1にダウングレードして認証を再試行する機能を追加しました。ブラウザと同様の挙動を実現し、SignalRやその他のクライアントがHTTP/2でWindows認証を利用できるようになります。

変更内容

  • RequestRetryType.cs: RetryOnSessionAuthenticationChallenge列挙値を追加し、認証チャレンジによるダウングレード再試行をシグナル化
  • Http2Connection.cs: セッション認証の401レスポンス(NTLM/Negotiate)を検出し、接続プール内に_sessionAuthenticationChallengeSeenフラグを設定。リトライ可能な場合(コンテンツなし、バージョンポリシー許可、認証有効)はHTTP/1.1への再試行をトリガー
  • HttpConnectionPool.cs: 新しいリトライ型をキャッチしてHTTP/1.1で再試行、セッション認証チャレンジ後はRequestVersionOrLowerリクエストをHTTP/2スキップ。CanFallBackToHttp11メソッドで共通の条件判定を実装
  • HttpConnectionPool.Http2.cs: セッション認証チャレンジ検出用フラグとセッター追加
  • HttpConnectionPool.Http1.cs: TLS/ALPN制御用のisForHttp2パラメータをスレッド化
  • NtAuthTests.FakeServer.cs: 415行の新規テスト、ダウングレード成功、プール設定の永続化、バージョンポリシー制約、コンテンツ有り時の動作検証などをカバー

パフォーマンスへの影響

影響なし(リトライは401チャレンジ時のみ発動。以降のリクエストは同一HTTP/1.1接続で認証コンテキストを共有し、複数回チャレンジ検出の性能課題を回避)

関連Issue

#1582

その他

リトライ条件(全て満たす必要):

  • リクエストボディなし(request.Content == null
  • バージョンポリシーでHTTP/1.1フォールバック許可(CanFallBackToHttp11判定)
  • 認証有効(!request.IsAuthDisabled()

いずれかの条件未充足時は元の401レスポンスを返すため、後方互換性を維持。RequestVersionExactポリシーやPOST(コンテンツ有り)リクエストはダウングレード非対象。


目次