Pull Request on 2026年07月29日

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

注意点

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


目次

  1. #131539 Unblock stacked PR CI by broadening PR branch filters in AzDO pipelines
  2. #131536 [Tests] Disable inproc crash reporter for intentional crashing tests
  3. #131524 [browser][mono][MT] Uncaught TypeError: He._emscripten_force_exit is not a function
  4. #131521 Remove length check on debug log content
  5. #131520 Fix crash dump exit code comparison
  6. #131518 [cDAC] Always assign IStringHolder in DacDbi GetModulePath for pathless modules
  7. #131513 JIT: rewrite wasm local.set/local.get as local.tee
  8. #131505 Fix CLR_Tools_Tests build break in WasmArgumentLayoutTests
  9. #131501 Fix deadlock between EventListenersLock and ArrayPoolEventSource static ctor
  10. #131489 Remove dead C++ wrappers left over from corehost C conversion
  11. #131485 JIT: include element info when comparing array address trees
  12. #131482 Fix Avx.Compare miscompile with non-constant FloatComparisonMode
  13. #131481 [Diagnostics] Avoid resolving IL offsets for framed crash frames
  14. #131479 Use an explicit allow list for SIMD types in getTypeLayout
  15. #131470 Improve MemoryCache performance under high contention
  16. #131469 [ci-scan-feedback] Route platform-specific crypto-config failures to loop-in
  17. #131458 Add universal DBI with private PAL
  18. #131437 Fix foreground shutdown test
  19. #131433 [Wasm RyuJit] assert function regions are contiguous after control flow
  20. #131410 Enable in-proc crash reporting on MacOS + Linux
  21. #131383 [wasm] Fix JIT helper calls modeled with the wrong return arity
  22. #131363 Harden dbgutil Windows PE export walk against corrupted or incomplete module data
  23. #131351 Provision wasm build/test tools into a shared, version-keyed cache
  24. #131294 Remove stale ML-DSA draft-10 PKCS#8 test gating
  25. #131282 Enable R2R for unresolved static virtual interface calls
  26. #131181 Make XsdDataContractExporter export consistent for ctor-less collections
  27. #131170 Vectorize BMP string
  28. #131092 Fix config binding source generator duplicating collection items bound through a constructor parameter
  29. #131009 [cDAC] Validate contract presence in interface returning functions
  30. #130373 Reconcile ReleaseHolder, ComHolderPreemp, and ComHolderAnyMode
  31. #126014 Update CMakePresets.json to 3.26 version

#131539 Unblock stacked PR CI by broadening PR branch filters in AzDO pipelines

  • 作成者: @Copilot
  • 作成日時: 2026年07月29日 17:03:46(UTC)
  • マージ日時: 2026年07月29日 20:44:57(UTC)
  • ラベル: area-Infrastructure

概要

スタックされたPR(中間ブランチをターゲットとするPR)のCI自動キューイングをサポートするため、AzDO パイプラインのPRブランチフィルターを拡張しました。従来はmain/releaseパターンに限定されていたため、スタック内の下流PRが検証を自動実行できていませんでした。

変更内容

  • 17個のパイプラインYAMLファイルを更新 (eng/pipelines以下)

    • CoreCLR、ハードウェア・インストリンシック、Linker、Diagnostics、VMR、Stress、パフォーマンスラッパーパイプライン
  • ブランチフィルターの変換ルール適用:

    • mainのみ → すべての非releaseブランチ(include: '*' + release除外)
    • main + release → すべてのブランチ(include: '*')
    • release のみ → 変更なし
  • 例: pr.branches.include: [main] → include: ['*'] + exclude: ['release/*', 'internal/release/*']

パフォーマンスへの影響

影響なし

関連Issue

#131512

その他

  • パスフィルターおよび他のトリガーロジックは変更されていません
  • パイプラインYAMLのpr.branchesブロックへの最小限の編集です

#131536 [Tests] Disable inproc crash reporter for intentional crashing tests

  • 作成者: @mdh1418
  • 作成日時: 2026年07月29日 15:59:04(UTC)
  • マージ日時: 2026年07月29日 21:15:00(UTC)
  • ラベル: area-CodeGen-coreclr

概要

macOS/Linux での in-proc crash reporter 対応に伴い、意図的にクラッシュを誘発するテストで余分なクラッシュレポート出力が生成されるようになった問題を修正します。テスト環境のDOTNET_EnableCrashReport環境変数を明示的に無効化し、テスト出力のノイズを削減します。

変更内容

  • unhandledTester.cs: DOTNET_DbgEnableMiniDumpに加えてDOTNET_EnableCrashReportを無効化、コメント更新
  • ParallelCrashTester.cs: 同様にDOTNET_EnableCrashReportを子プロセス環境から削除
  • stackoverflowtester.cs: DOTNET_EnableCrashReportを無効化
  • OutOfMemoryException.cs: DOTNET_EnableCrashReportを無効化

これらの変更は、クラッシュが予期されるテストシナリオにおいて、in-proc crash reporter による追加出力(スタックトレース、スレッド情報、モジュール情報等)をテスト検証対象から除外します。

パフォーマンスへの影響

影響なし(テスト出力の削減のみで、実行時動作に変更なし)

関連Issue

なし

その他

この修正は、既存のDOTNET_DbgEnableMiniDumpによる createdump 無効化に加えて、新しく対応された in-proc crash reporter も明示的に無効化する対応です。ランタイム内部のテスト基盤に関する変更で、公開APIへの影響はありません。


#131524 [browser][mono][MT] Uncaught TypeError: He._emscripten_force_exit is not a function

概要

WebAssembly マルチスレッド build (WasmEnableThreads=true) で、実行時に _emscripten_force_exit 関数が見つからないエラーが発生する問題を修正します。Mono ブラウザ build 設定で、Emscripten のエクスポート対象に emscripten_force_exit を追加します。

変更内容

  • src/mono/browser/browser.proj: スレッド有効時の Emscripten エクスポートシンボルリストに emscripten_force_exit を追加(+1/-0)

パフォーマンスへの影響

影響なし

関連Issue

#131524

その他

  • 対象: WebAssembly(ブラウザ)の Mono ランタイム
  • このシンボルのエクスポートは、スレッド機能有効時のみに適用されます

#131521 Remove length check on debug log content

  • 作成者: @rcj1
  • 作成日時: 2026年07月29日 07:00:07(UTC)
  • マージ日時: 2026年07月29日 19:23:50(UTC)
  • ラベル: area-Diagnostics-coreclr

概要

CoreCLRのデバッガー右側(DBI)におけるDB_IPCE_FIRST_LOG_MESSAGEイベント処理で、ログメッセージ内容の長さ検証を削除します。ログスイッチ/カテゴリ名の検証はMAX_LOG_SWITCH_NAME_LENを使用するよう変更されます。

変更内容

  • src/coreclr/debug/di/process.cpp: CordbProcess::RawDispatchEvent内のログメッセージ内容の0x10000バイト上限検証を削除し、ログスイッチ/カテゴリの長さ検証をMAX_LOG_SWITCH_NAME_LENに変更。

パフォーマンスへの影響

影響なし

関連Issue

#131073

その他

注意: Copilotの指摘により、上限チェック削除後、cbExpected = cchContent * sizeof(WCHAR)の計算でオーバーフロー可能性があります。また、ReadVirtualの結果(cbRead)が検証されないため、不完全な読み込みでもバッファが未初期化のまま残る可能性があります。既存のSafeReadBuffer()関数を使用するか、読み込みサイズの検証を追加することが推奨されます。


#131520 Fix crash dump exit code comparison

  • 作成者: @mdh1418
  • 作成日時: 2026年07月29日 06:24:10(UTC)
  • マージ日時: 2026年07月29日 14:10:32(UTC)
  • ラベル: area-VM-coreclr

概要

CoreCLR のクラッシュダンプ終了ロジックにおいて、スタックオーバーフロー終了コードの確認時に発生する符号付き/符号なし比較警告(-Werrorで エラーとして扱われる)を修正しました。exitCodeをCOR_E_STACKOVERFLOWと比較する際に明示的なstatic_cast<UINT>(...)を追加することで、型の不一致を解決しています。

変更内容

  • src/coreclr/vm/excep.cpp: CrashDumpAndTerminateProcess関数のスタックオーバーフロー終了コード比較にstatic_cast<UINT>を適用(2箇所)
  • Windows 上のCreateCrashDumpIfEnabled(...)のスタックオーバーフロー述語にも同様のキャストを適用

パフォーマンスへの影響

影響なし

関連Issue

#131519

その他

内部実装(CoreCLR VM の例外処理)の変更であり、公開 API への影響はありません。コンパイラ警告の解決に関連した修正です。


#131518 [cDAC] Always assign IStringHolder in DacDbi GetModulePath for pathless modules

概要

cDAC(Compact Debugging Access Component)のDacDbiImpl.GetModulePathメソッドが、ディスク上のパスを持たないモジュール(動的/メモリ内モジュール)に対してIStringHolderを未割り当てのまま返していた問題を修正します。修正により、パスレスモジュールの場合も空文字列を割り当てることで、デバッガーのモジュール読み込みコールバック時の"bad OnModuleLoad"エラーを防ぎます。

変更内容

  • src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/Dbi/DacDbiImpl.cs
    • GetModulePathメソッドで、モジュールのオンディスクパスが存在しない場合、pResultをFALSEで返す際に、pStrFilenameに空文字列を割り当てるよう修正

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • この修正はデバッガーの機能性に関わるもので、ランタイム/ライブラリの内部実装(cDAC内のDBI互換性レイヤー)に限定されています
  • LCG DynamicMethodやDLRなどの動的に生成されるモジュールのデバッグが正常に動作するようになります
  • ネイティブDBI(CordbModule::GetModulePath)のm_strModulePath.IsSet()アサーションに対応した修正です

#131513 JIT: rewrite wasm local.set/local.get as local.tee

概要

WebAssembly(WASM)バックエンド用のJIT emitterに対して、ピープホール最適化を追加しました。local.set N直後にlocal.get Nが続く場合、これを単一のlocal.tee N命令に折り畳むことで、R2R corelib コード セクションサイズを2.56%削減します。

変更内容

  • src/coreclr/jit/emitwasm.cpp: emitter::emitIns_Iメソッドにlocal.teeへの最適化ロジックを追加(+11行)
    • 最適化が有効な場合にのみ、同じローカル変数へのlocal.setとlocal.getの連続をピープホール最適化
    • 最後の命令をピープホールするのが安全な場合に限定

パフォーマンスへの影響

  • コードサイズ: R2R corelib コード セクション 2.56% 削減
  • 命令数削減により、わずかな実行速度向上が期待されます
  • メモリフットプリント改善

関連Issue

なし

その他

  • WASM固有の最適化であり、x86/ARM等の他のアーキテクチャには影響なし
  • 変更は内部的なJIT emitter最適化であり、公開APIへの影響なし
  • ピープホール最適化のため、機能的な動作変更なし

#131505 Fix CLR_Tools_Tests build break in WasmArgumentLayoutTests

  • 作成者: @lewing
  • 作成日時: 2026年07月28日 22:55:15(UTC)
  • マージ日時: 2026年07月29日 00:40:14(UTC)
  • ラベル: area-crossgen2-coreclr

概要

ReadyToRunCompilerContextのコンストラクタシグネチャ変更に対応していないWasmArgumentLayoutTests.csのビルドエラーを修正します。CreateWasmContext()メソッドで新しく追加されたtargetAllowsRuntimeCodeGenerationパラメータを渡すことで、セマンティックマージコンフリクトを解決します。Wasmターゲットではランタイムコード生成がサポートされていないため、このパラメータはfalseに設定されます。

変更内容

  • src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/WasmArgumentLayoutTests.cs
    • CreateWasmContext()メソッドのReadyToRunCompilerContextコンストラクタ呼び出しにtargetAllowsRuntimeCodeGeneration: false引数を追加
    • Wasmターゲットでランタイムコード生成が利用不可である理由を説明するコメントを追加

パフォーマンスへの影響

影響なし

関連Issue

#131504

参考:#131429、#130622

その他

  • 本PR作成時点では両方のPR(#131429と#130622)がほぼ同時期にマージされたため、CIがお互いの変更を検出できず、セマンティックマージコンフリクトが発生していました
  • 修正後、20個すべてのWasmArgumentLayoutTestsテストケースがパスすることを確認済み
  • 本変更はGitHub Copilotで開発され、作成者によってレビューされています

#131501 Fix deadlock between EventListenersLock and ArrayPoolEventSource static ctor

概要

EventListenersLock と ArrayPoolEventSource の静的コンストラクタ間のデッドロックを修正します。dotnet-counters が .NET アプリの初期化中に起動されると、Thread A が EventListenersLock を保持しながら文字列補間経由で ArrayPool<char> を初めて使用し、Thread B が ArrayPoolEventSource の型初期化ロックを保持しながら EventListenersLock を待機するという循環依存でデッドロックが発生していました。修正は ArrayPoolEventSource を InitializeDefaultEventSources() で事前初期化することで、この循環依存を防止します。

変更内容

  • src/libraries/System.Private.CoreLib/src/System/Diagnostics/Tracing/EventSource.cs: InitializeDefaultEventSources() メソッドに ArrayPoolEventSource.Log の事前初期化コードを追加(+6行)。既に同じパターンで修正された FrameworkEventSource(#126737)に倣った実装です。

パフォーマンスへの影響

影響なし

関連Issue

#119014(このPRで修正) #126591(同様の FrameworkEventSource デッドロック問題)

その他

  • この修正は公開APIではなく、内部実装(イベントソースの初期化)に関する変更です。
  • デッドロック回避の仕組み:ArrayPoolEventSource.Log が事前初期化されていれば、後の Rent() 呼び出し時に型初期化ロックが必要なくなり、ロック順序の循環が形成されません。

#131489 Remove dead C++ wrappers left over from corehost C conversion

  • 作成者: @elinor-fung
  • 作成日時: 2026年07月28日 19:59:56(UTC)
  • マージ日時: 2026年07月29日 21:57:35(UTC)
  • ラベル: area-Host

概要

corehost の C 言語への変換後、使用されなくなった hostmisc の C++ ラッパー関数を削除するクリーンアップです。DOTNET_ROOT 環境変数ヘルパー、pal::get_timestamp、pal::is_directory の未参照の C++ ラッパーを削除し、機能に影響はありません。

変更内容

  • src/native/corehost/hostmisc/utils.h/cpp: DOTNET_ROOT 環境変数ラッパーと to_upper 関数の未使用宣言・実装を削除
  • src/native/corehost/hostmisc/pal.h: get_timestamp と is_directory C++ ラッパー宣言を削除
  • src/native/corehost/hostmisc/pal.windows.cpp: Windows 実装の get_timestamp と is_directory を削除
  • src/native/corehost/hostmisc/pal.unix.cpp: Unix 実装の get_timestamp と is_directory を削除

パフォーマンスへの影響

影響なし(デッドコード削除のため)

関連Issue

なし

その他

注記: Copilot の低信頼度コメントから、to_lower 関数(pal.unix.cpp:423 行付近)に UTF-8 文字列破損の潜在的リスクが指摘されています。Unix 環境で pal::char_t が char 型かつ符号なしの場合、0x80-0xFF の範囲のバイトが Unicode として誤釈されて小文字化され、UTF-8 データが破損する可能性があります。Windows(UTF-16)と Unix(ASCII のみ)で異なる処理が必要との指摘があります。


#131485 JIT: include element info when comparing array address trees

概要

JITコンパイラの正確性の問題を修正。GenTree::Compareがarray要素アドレス関連ノード(GT_ARR_ELEM、GT_ARR_ADDR、GT_INDEX_ADDR)の要素メタデータを無視していたため、要素型やスケールのみが異なる配列要素アドレスが同一として扱われ、不正にtail merge/CSEで畳み込まれていました。

変更内容

  • src/coreclr/jit/gentree.cpp: GenTree::Compareメソッドを拡張し、GT_ARR_ELEM、GT_ARR_ADDR、GT_INDEX_ADDRの比較時に要素サイズ、要素型、クラスハンドルなどのメタデータを含めるよう修正。またgtHashValueメソッドでも同じメタデータをハッシング対象に追加し、到達不可だったGT_INDEX_ADDRケースをbinop armに移動。
  • src/tests/JIT/Regression/JitBlue/Runtime_131459/Runtime_131459.cs: 新規回帰テストを追加。GT_ARR_ELEMの要素サイズ比較とGT_ARR_ADDRの要素型・クラスハンドルメタデータ比較をカバー。
  • src/tests/JIT/Regression/Regression_ro_2.csproj: 新規テストを組み込み。

パフォーマンスへの影響

影響なし。本変更は正確性修正であり、パフォーマンス最適化ではありません。

関連Issue

#131459

その他

本修正により、異なる要素型やスケールを持つ配列要素アドレス計算が誤って同一と判定されることがなくなり、JITコンパイル時の不正な最適化(miscompile)が防止されます。


#131482 Fix Avx.Compare miscompile with non-constant FloatComparisonMode

概要

Avx.Compare / Avx512F.Compare が非定数の FloatComparisonMode 引数(ループ帰納変数など)を受け取る場合、FullOpts最適化下で不正な結果またはアクセス違反を引き起こしていた問題を修正します。根本原因は、JITコンパイラがマネージドフォールバックへの呼び出しハンドルを ConvertMaskToVector ラッパーノードに誤って設定し、内部の比較演算に必要な引数がセットアップされていなかったことです。修正により、ハンドル設定を内部のマスク操作ノードに向け直します。

変更内容

  • src/coreclr/jit/hwintrinsic.cpp: setMethodHandle パスで ConvertMaskToVector ラッパーが存在する場合、フォールバックハンドルをラッパーではなくその内部オペランド(マスク操作)にアタッチするロジックを追加。128/256ビットEVEX形式と必須マスク512ビット形式を統一的に対応。
  • src/tests/JIT/Regression/JitBlue/GitHub_131472/GitHub_131472.cs: Vector256<float> と Vector512<float> を対象とした新しい回帰テストを追加。全32の比較モードについてFullOpts最適化版とMinOpts版の結果を比較検証。
  • src/tests/JIT/Regression/Regression_ro_2.csproj: 回帰テストをプロジェクトビルドに組み込み。

パフォーマンスへの影響

影響なし。修正は非定数の FloatComparisonMode の稀なパス(setMethodHandle が設定される場合)のみで実行され、定数モードのコード生成には変更がありません。

関連Issue

#131472

その他

  • 互換性: 内部実装(JITコンパイラ)の修正であり、公開APIへの影響なし。
  • バグの性質: shipped版 11.0.0-preview.6 で再現。ティアード コンパイレーション有効時は副最適化により問題が隠蔽されていた。
  • テスト範囲: 定数モードのコード生成が変更されていないことを検証済み。JitFormat チェックおよび Checked/Release JIT ビルドで問題なし。

#131481 [Diagnostics] Avoid resolving IL offsets for framed crash frames

  • 作成者: @mdh1418
  • 作成日時: 2026年07月28日 17:20:11(UTC)
  • マージ日時: 2026年07月29日 18:11:56(UTC)
  • ラベル: area-VM-coreclr

概要

クラッシュレポート時のスタックウォーク処理で、フレーム化されたトランジションフレーム(マネージドP/Invoke遷移時のネイティブクラッシュなど)に対するILオフセット解決を回避する変更です。前回の修正(#131273)ではCrawlFrame::GetRelOffset()の呼び出しを避けていましたが、本修正ではGetILOffsetFromNative()の呼び出しも条件付きで制限し、Checked-buildのアサーション失敗を防ぎます。

変更内容

  • src/coreclr/vm/crashreportstackwalker.cpp
    • hasManagedNativeCodeフラグを導入して、ネイティブコード情報を持つフレームレスフレームのみに対してGetRelOffset()とGetILOffsetFromNative()を実行
    • フレーム化されたトランジションフレームではネイティブオフセットとILオフセットを0として報告
    • メソッド、モジュール、トークン情報は保持

パフォーマンスへの影響

影響なし(不正なアサーション回避による安定性向上が主目的)

関連Issue

#131517, #131273

その他

  • macOS arm64での実機クラッシュレポートで検証済み(Checked/Release両ビルド)
  • ネイティブSIGSEGVがP/Invoke経由で発生した場合を含むテスト完了
  • 修正内容:GetILOffsetFromNative()呼び出し時に発生していたg_pEEInterface->GetNativeCodeMethodDesc(startAddr) == fdアサーション失敗を解決

#131479 Use an explicit allow list for SIMD types in getTypeLayout

  • 作成者: @tannergooding
  • 作成日時: 2026年07月28日 16:51:44(UTC)
  • マージ日時: 2026年07月29日 14:44:39(UTC)
  • ラベル: area-VM-coreclr

概要

SIMD型の判定ロジックを、名前空間ベースの包括的チェックから明示的な許可リストへ変更します。これにより、System.NumericsとSystem.Runtime.Intrinsics内の非SIMD [Intrinsic]型(例:Matrix3x2/Matrix4x4)のフィールドが正しく列挙され、JITに報告されます。JIT-EE GUID変更なし。

変更内容

  • src/coreclr/vm/jitinterface.cpp: VM側にIsSimdIntrinsicType(MethodTable*)ヘルパーを追加し、CEEInfo::GetTypeLayoutHelperでのsimdTypeHndの設定を制御
    • 許可リスト: Vector64<T>、Vector128<T>、Vector256<T>、Vector512<T>、Vector<T>、Vector2、Vector3、Vector4、Plane、Quaternion
  • src/coreclr/tools/Common/JitInterface/CorInfoImpl.cs: マネージ側(crossgen2/ILCompiler)に同等のIsSimdIntrinsicType(MetadataType)ヘルパーを追加
    • 既存のVectorFieldLayoutAlgorithmの型チェックロジックを再利用
  • 従来の名前空間ベースチェック及びDecimal型のcarve-out処理を削除

パフォーマンスへの影響

影響なし。Matrix型の変更は不活性(inert)であることがJitDump検証で確認済み。83,382行中0行の差異が生じ、TryPromoteValueClassAsPrimitive、TryPromoteStructVar、ClassLayout::GetNonPadding、R2R処理いずれも従来と同一の結果を生成。

関連Issue

#131345(フォローアップ)

その他

  • 検証済み:
    • build.cmd clr -rc checkedでコンパイル成功(警告0、エラー0)
    • 15種類の影響対象型についてJitDump検証実施
    • JIT/SIMD: 116/116パス、JIT/Directed/StructPromote + physicalpromotion: 9/9パス
  • MethodTable::ClassifyEightBytes*とSystemVStructClassificatorの同等箇所は意図的に対象外(より制限的な型セットを使用)
  • IsDecimalFloatingPointOrHasDecimalFloatingPointFieldsはdllimport.cppなどのマーシャル制限用途で継続使用

#131470 Improve MemoryCache performance under high contention

概要

System.Runtime.Cachingの内部カウンター実装を最適化し、高い競合状況下でのMemoryCacheのパフォーマンスを大幅に改善しています。以下の2つの主要な変更を実施:

  1. MemoryCacheStoreから冗長なヒット率ブックキーピングを削除し、ヒット率をHitsとMissesから動的に計算するように変更
  2. Countersのlong[]バッキングストレージをキャッシュラインで分離されたフィールドを持つ明示的にレイアウトされた構造体に置き換え、Interlocked操作をスイッチベースで実行

変更内容

  • MemoryCacheStore.cs: Get()ホットパスから冗長なヒット率カウンター増加処理を削除(3行削除)
  • Counters.cs: カウンター格納先をキャッシュラインパディングされた構造体に変更し、false sharingを削減。Interlocked操作を利用した安全な更新を導入(76行追加、26行削除)
  • System.Runtime.Caching.csproj: キャッシュラインサイズ定数をサポートするため、Internal/Padding.csをリンク

パフォーマンスへの影響

大幅な改善を確認

  • win-arm64環境での1Pベンチマーク: 6.15倍の改善
    • メイン: 60.030 ns
    • PR適用後: 9.766 ns
  • 多コアシステムでのさらに大きな改善が期待される
  • キャッシュラインパディングによるfalse sharing削減が主な改善要因
  • ホットパス(Get())のカウンター更新処理削減により、キャッシュ競合が大幅に低減

関連Issue

#131470

その他

  • 互換性への影響: なし(内部実装の最適化のみで、公開APIに変更なし)
  • 留意点: Copilotレビューにより、IncrementingPollingCounterとHitRatio計算時にInterlocked.Readを使用すべきという指摘がされています(torn reads対策およびEventCountersパターンとの一貫性)

#131469 [ci-scan-feedback] Route platform-specific crypto-config failures to loop-in

  • 作成者: @Copilot
  • 作成日時: 2026年07月28日 14:25:06(UTC)
  • マージ日時: 2026年07月29日 10:36:16(UTC)
  • ラベル: area-System.Security

概要

CI自動修正ワークフロー(ci-failure-fix)に対して、プラットフォーム固有の暗号化設定に関連するSystem.Security.Cryptography.*テストの失敗を適切にルーティングするガイドラインを追加しました。ディストロ固有の暗号設定(AzureLinux/mariner、linux_musl、FIPS、OpenSSLプロバイダ変種など)でのみ失敗するテストに対して、推測的で自信のあるPRの自動作成を防ぎ、セキュリティ領域のオーナーへの判断を委譲する変更です。

変更内容

  • .github/workflows/ci-failure-fix.md — Step 5.2に「Platform crypto-config caution」セクションを追加。System.Security.Cryptography.*テストがプラットフォーム固有の暗号設定でのみ失敗し、修正案がプラットフォーム固有の暗号期待値(鍵サイズ下限、アルゴリズム可用性、暗号有効化/無効化、またはディストロ別テスト期待値変更)をハードコードする場合、Branch COMMENT(loop-in)へのルーティング、またはプラットフォーム暗号設定を明示的な未解決問題として名指した場合のみBranch HELPを許可し、Branch FIXでのPR自動作成を禁止する指針を明記。

パフォーマンスへの影響

影響なし

関連Issue

#131037、#130594、#130947

その他

  • ワークフロー記述のみの変更であり、ランタイム製品コード、テスト、ビルド設定への影響なし
  • ci-failure-fix.lock.ymlへのロックファイル再生成は不要
  • 既にAiaCompletionHasLimits KBE(#130947)で観測されていた正しいloop-in動作を一般化し、ディストロ設定に関する判断をセキュリティ領域のオーナーに委譲する意図

#131458 Add universal DBI with private PAL

概要

新しいデバッグインターフェース実装 mscordbi_universal を追加します。従来の mscordbi とは異なり、DAC(Debugging Access Component)のPALを共有せず、独自のプライベートPALを所有しています。cDAC ICorDebugパスの実装に対応し、Microsoft.DotNet.Cdac.Transport パッケージに組み込まれます。従来の mscordbi は変更されていません。

変更内容

  • mscordbi_universal の新規構築: src/coreclr/dlls/mscordbi_universal/ 配下に新しいネイティブモジュールを追加。CMakeビルドシステムで、UnixプラットフォームではプライベートPALをリンク
  • エクスポート削減: DllMain のエクスポートは廃止し、OpenVirtualProcessImpl2(パスベースのアクティベーション)と CoreCLRCreateCordbObject3(プロセス内生成)の2つのエントリポイントのみをエクスポート。各エントリポイントは初回使用時にプライベートPALを初期化
  • ビルド定義: Windows(.src)とUnix(_unixexports.src)向けのエクスポート定義ファイルを追加
  • パッケージング: Microsoft.DotNet.Cdac.Transport.pkgproj に mscordbi_universal バイナリを追加
  • 既存コード変更: cordb.cpp と process.cpp に微小な追加(33行、11行)、mscordbi.cpp の軽微な変更(8行)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • このPRは内部実装変更であり、公開APIへの影響はありません
  • 従来の mscordbi との互換性は維持されます(DAC共有PALモデルは継続)
  • プライベートPALの採用により、DAC-PALの結合度が低くなり、今後の保守性が向上します

#131437 Fix foreground shutdown test

概要

フォアグラウンドスレッドのシャットダウンテストでxunitラッパーとフォアグラウンドスレッド間のレース条件を修正します。Thread.Sleepの待機時間を1秒延長し、ラッパーを削除することで、JITストレス下でもテストが確実に成功するようにします。

変更内容

  • foreground-shutdown.cs: Thread.Sleepの待機時間を延長し、xunitラッパーを削除(2行追加、7行削除)
  • foreground-shutdown.csproj: プロジェクト構成を簡潔化(2行追加、3行削除)

パフォーマンスへの影響

テストの実行時間が1秒程度増加します。

関連Issue

#131403

その他

なし


#131433 [Wasm RyuJit] assert function regions are contiguous after control flow

概要

WebAssembly RyuJIT コードジェネレータにおいて、制御フロー処理後に各リージョン(メインメソッドおよび各funclet)のブロックが連続しているかを検証するデバッグアサーションを追加します。これにより、wasm関数体生成時のブロック順序の整合性を確保します。

変更内容

  • compiler.h: 新しい検証関数の宣言を追加(+1行)
  • compiler.hpp: 関連する実装コードの調整(+28/-19行)
  • fgwasm.cpp: fgWasmControlFlow実行後に各リージョンのブロック連続性を確認するデバッグチェック処理を追加(+30行)

パフォーマンスへの影響

デバッグ時のアサーション処理のみで、リリースビルドへの影響なし

関連Issue

なし

その他

本変更はWasmターゲット固有のコードジェネレータの品質保証を目的とした内部実装の改善です。公開APIへの変更はありません。


#131410 Enable in-proc crash reporting on MacOS + Linux

  • 作成者: @mdh1418
  • 作成日時: 2026年07月27日 05:33:02(UTC)
  • マージ日時: 2026年07月29日 02:14:40(UTC)
  • ラベル: area-PAL-coreclr

概要

Linux と macOS で既存のクラッシュレポート設定を使用した in-proc クラッシュレポーターを有効化します。DOTNET_DbgEnableMiniDump=1 は引き続き createdump を選択し、DOTNET_EnableCrashReport=1 または DOTNET_EnableCrashReportOnly=1 で in-proc レポーターが有効になります。モバイルプラットフォームは既存の動作を保持します。

変更内容

  • src/coreclr/clrfeatures.cmake: Linux/macOS で FEATURE_INPROC_CRASHREPORT を有効化
  • src/coreclr/pal/src/thread/process.cpp: PAL スタートアップ時のクラッシュレポーター選択ロジックを追加(CrashReportMode 状態管理)
  • src/coreclr/debug/crashreport/inproccrashreporter.cpp: Apple 固有の in-proc レポーター実装を iOS/tvOS/MacCatalyst から全ての Apple ターゲット(TARGET_APPLE)に拡張
  • src/coreclr/vm/ceemain.cpp: PAL で選択された in-proc モードの場合のみ自動クラッシュレポーター起動をゲート化
  • ドキュメント更新: xplat-minidump-generation.md でスタートアップポリシー駆動のクラッシュレポーター設定に関するコメント更新

パフォーマンスへの影響

影響なし

関連Issue

#119945

その他

懸念事項: Copilot により、fatal-signal パスでコールバック未登録時に早期リターンされるため、クラッシュダンプが出力されない可能性が指摘されています。DOTNET_EnableCrashReport* の設定がない場合や in-proc 初期化失敗時に、以前の動作のように createdump パスへのフォールバックが必要な可能性があります。


#131383 [wasm] Fix JIT helper calls modeled with the wrong return arity

概要

WebAssemblyのJITコンパイラで、複数のヘルパー呼び出しのモデル化された戻り値の型が、実際のヘルパー関数のシグネチャと不一致だった問題を修正します。Wasmではcall_indirectのシグネチャが戻り値型から導出されるため、型の不一致はエンジンによる「function signature mismatch」トラップを引き起こしていました。

3つの問題を修正:①インラインunboxの遅延パス、②CORINFO_HELP_UNBOX_TYPETESTへの呼び出し再ターゲット時の型更新漏れ、③CORINFO_HELP_CHECK_OBJの型モデリング。

変更内容

  • compiler.h: HelperUnboxDiscardedRetType定数(Wasmのみ適用)を追加し、unboxヘルパーの返却値破棄時の戻り値型を統一
  • importer.cpp: インラインunbox遅延パス呼び出しをHelperUnboxDiscardedRetTypeでモデル化し、gtUnusedValNodeで未使用結果を破棄
  • objectalloc.cpp: UNBOXからUNBOX_TYPETESTへの再ターゲット時に呼び出しノードをTYP_VOIDに明示的に型変更
  • morph.cpp: CORINFO_HELP_CHECK_OBJをTYP_REF(実際の戻り値型)でモデル化し、未使用結果を破棄
  • CastHelpers.cs: ドキュメント更新
  • Runtime_131377.cs: スタック割り当てボックスの非一致型unboxをテストする回帰テストを追加

パフォーマンスへの影響

Wasmのみに影響。 ブラウザR2Rで測定:

  • インラインunboxサイトで+279バイト(208コンテキスト、80ファイル)
  • 主なメソッド:EventProvider.EncodeObject +19、RuntimeType.IsEnumDefined +13、Enum.ToObject +12
  • これは以前エンジンが拒否していた不正なcall_indirectを、正しく型付けされたバージョンで置き換えた結果

ネイティブターゲットへの影響なし。 x64/arm64/osx arm64でSuperpMI実行結果「No diffs found」。元々arm64でも型モデリングは内部動作のみで、GC情報報告は不正だったが実運用影響なし。

関連Issue

#131377 #131378 #130813

その他

  • 内部実装の修正: JITコンパイラの内部的なノード型モデリング修正で、公開APIに影響なし
  • Wasm専用のロジック: HelperUnboxDiscardedRetTypeはWasm用に条件付け。ネイティブでも型を統一できるが、コード生成コストのためWasm限定とした
  • 修正2点の相互依存性: 修正①と②は同時にリリース必須。修正①のみではオブジェクト割り当ての最適化で回帰
  • 修正3の非テスト可能性: `CHECK

#131363 Harden dbgutil Windows PE export walk against corrupted or incomplete module data

概要

Windows PE エクスポートディレクトリの解析処理をdbgutil のTryGetSymbolで強化します。ICorDebugDataTargetから読み取ったPEデータを信頼できないものとして扱い、破損やメモリマッピング不足、不完全なモジュールデータに対する耐性を向上させます。

変更内容

  • src/coreclr/debug/dbgutil/dbgutil.cpp: PE エクスポートディレクトリ解析処理を強化
    • 出力アドレスの初期値をゼロで防御的に初期化
    • エクスポートディレクトリRVAがゼロの場合はエクスポート走査をスキップ
    • 名前付きエクスポートの序数がエクスポートアドレステーブル範囲内にあることを検証してから使用
    • コメント内のスペリングエラーを修正

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

このPRは、信頼できないプロセスメモリから読み取ったPEメタデータを解析する際のセキュリティと堅牢性を向上させるための防御的プログラミングの改善です。デバッガユーティリティの信頼性向上に寄与します。


#131351 Provision wasm build/test tools into a shared, version-keyed cache

概要

WebAssemblyビルド/テストツール(emsdk、wasi-sdk、wasmtime、ブラウザ/V8など)の取得を統一し、バージョンとホストRIDをキーにした共有キャッシュに移行するリファクタリング。従来は3つの異なる場所・バージョンスキーム・陳腐化戦略で管理されていたツールを、<root>/<tool>/<version>-<host rid>/パターンで一元化し、キャッシュミスをバージョン番号で自動実現、クローン間での共有を実現します。

変更内容

新規ファイル(内部実装):

  • eng/wasm/WasmToolCache.props - キャッシュ根ディレクトリとツールパス定義
  • eng/wasm/AcquireWasmTool.proj - 汎用ダウンロード/展開プロジェクト
  • eng/wasm/PruneWasmToolCache.proj - キャッシュエントリ削除プロジェクト
  • eng/wasm/wasm-tool-cache.sh / .cmd - POSIXおよびWindows用キャッシュ解決ヘルパー
  • eng/wasm/wasi-sdk-version.txt - wasi-sdk版バージョンのシングルソース

既存ファイル修正:

  • eng/AcquireEmscriptenSdk.targets / eng/AcquireWasiSdk.targets - 共有キャッシュへの移行
  • eng/native/gen-buildsys.sh / .cmd - キャッシュ解決ヘルパーの呼び出し
  • src/mono/wasm/Makefile / src/mono/browser/build/WasmApp.InTree.props - キャッシュパス参照
  • eng/testing/wasm-provisioning.targets / wasi-provisioning.targets - 汎用取得プロジェクト使用
  • ドキュメント更新(wasm.md、webassembly-instructions.md、wasm-debugging.md)

削除:

  • eng/download-wasi-sdk.ps1 - 不要化

パフォーマンスへの影響

  • メモリ/ディスク削減: ~2GBのワークツリー間重複ダウンロード排除、複数ワークツリーで単一ツールコピー共有
  • 取得の安定性向上: 温度ファイル(.completeセンチネル)による原子性保証で、中断/並行取得時の不完全なキャッシュ状態を排除
  • arm64サポート: wasi-sdk・wasmtimeがネイティブarm64ビルドをダウンロード可能に(x86_64のみから拡大)

関連Issue

なし

その他

環境変数:

  • DOTNET_WASM_TOOL_CACHE_DIR - キャッシュ根をオーバーライド(CI/グローバルキャッシュ向け)
  • EMSDK_PATH / WASI_SDK_PATH / WASMTIME_PATH - 従来通り優先(後方互換性)

キャッシュ位置: デフォルトはリポジトリメインチェックアウト直下(.dotnet/wasm-tools)。git worktreeの.gitファイルを読み込んで導出(プロセス生成なし)し、クローン内のすべてのworktreeで共有しつつ、リポ


#131294 Remove stale ML-DSA draft-10 PKCS#8 test gating

  • 作成者: @Copilot
  • 作成日時: 2026年07月23日 21:54:53(UTC)
  • マージ日時: 2026年07月29日 01:04:20(UTC)
  • ラベル: area-Infrastructure

概要

ML-DSA draft-10 PKCS#8テストの古い条件付きゲーティングを削除し、MLDsa.IsSupportedを直接参照するよう更新しました。Windows固有の回避策を廃止し、現在のプラットフォーム機能チェックに統一します。

[ConditionalTheory(typeof(MLDsa), nameof(MLDsa.IsSupported))]
public static void ComputeSignature_MLDsa_Roundtrip(string hashAlgorithm)

変更内容

  • SignedCmsTests.cs: SupportsDraft10Pkcs8ヘルパープロパティを削除し、ML-DSA関連の[ConditionalFact]/[ConditionalTheory]属性をMLDsa.IsSupportedに統一
  • SignedCmsTests.netcoreapp.cs: ML-DSA固有の条件付き属性をMLDsa.IsSupportedに更新
  • SignerInfoTests.cs: 同ヘルパーを削除し、MLDsaAndRsaSha1SignaturesSupportedをSignatureSupport.SupportsRsaSha1Signatures && MLDsa.IsSupportedに再定義

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

テストコード整理PRであり、公開APIへの変更はありません。System.Security.Cryptography.Pkcs ライブラリのテストロジック改善です。


#131282 Enable R2R for unresolved static virtual interface calls

  • 作成者: @jkoritzinsky
  • 作成日時: 2026年07月23日 18:21:47(UTC)
  • マージ日時: 2026年07月29日 23:28:22(UTC)
  • ラベル: area-ReadyToRun

概要

Crossgen2が未解決の制約付き静的仮想インターフェイスメソッド呼び出しをR2R(ReadyToRun)コードとしてコンパイルできるようにする変更です。従来はランタイムJIT後退を強制していましたが、本変更によりCORINFO_CALL_CODE_POINTERを使用したランタイム検索パスを導入し、ConstrainedMethodEntrySlotでランタイム決定された制約をエンコードします。これによりSystem.RuntimeType+IGenericCacheEntry<TCache>.CreateAndCacheがR2Rコードとして生成されるようになります。

変更内容

  • src/coreclr/tools/aot/ILCompiler.ReadyToRun/JitInterface/CorInfoImpl.ReadyToRun.cs
    • 未解決の制約付き静的仮想メソッド呼び出しで、exactContextNeedsRuntimeLookupの場合のRequiresRuntimeJitExceptionを削除
    • CORINFO_CALL_CODE_POINTERとランタイム検索パスを実装
    • DictionaryEntryKind.ConstrainedMethodEntrySlotを使用してランタイム検索をエンコード
    • 隠された汎用インスタンス化引数を抑制(インスタンス化スタブをリクエスト)

パフォーマンスへの影響

改善: R2R化により、従来はランタイムJIT後退が発生していた制約付き静的仮想メソッド呼び出しがスタートアップ時に事前コンパイルされるため、JIT遅延が削減されます。

関連Issue

#120405

その他

  • テスト実施済み: CoreCLR StaticVirtualMethods ローダースイートで正常に動作確認
  • R2RDumpでCreateおよびGetStorageRefがSystem.__Canonではなくvar #0に対する制約付き検索と間接呼び出しを使用していることを確認

#131181 Make XsdDataContractExporter export consistent for ctor-less collections

概要

コンストラクタを持たないコレクション型に対する XsdDataContractExporter のスキーマエクスポート動作を一貫させます。プロセスグローバルキャッシュへの型キャッシング順序に依存して、同じ型でもエクスポート時に InvalidDataContractException が発生する場合と発生しない場合が混在していた問題を修正。verifyConstructor フラグをスレッドして、スキーマエクスポート時はコンストラクタ検証を無効化し、シリアル化・デシリアル化時は従来通り検証を実施します。

変更内容

  • DataContract.cs: GetDataContract* メソッドチェーン全体に verifyConstructor オプショナルフラグを追加し、内部的にコンストラクタ検証の有効/無効を制御
  • DataContractSet.cs: エクスポートウォーク入口の3箇所(Add(Type)、GetMemberTypeDataContract else分岐、GetItemTypeDataContract)で verifyConstructor: false を指定してスキーマエクスポート時の検証をスキップ
  • XsdDataContractExporter.cs: エクスポート処理の呼び出し箇所を更新
  • ExporterTypesTests.cs: キャッシュ順序の異なる2つのコレクションテストケースを使用して、両方のキャッシュ状態でスキーマが生成されることを検証する回帰テストに置き換え

パフォーマンスへの影響

影響なし

関連Issue

#125411

その他

互換性に関する注記: 本変更は例外を発生させていた非決定的な動作(キャッシュ順序依存)を削除するもので、一貫性のある正規動作に統一します。スキーマエクスポート自体はコンストラクタの実在可能性を確認する必要がないという設計原則に基づいています。シリアル化・デシリアル化時のコンストラクタ検証は変更されないため、実際の読み取り専用コレクションはデータ化時に正しく例外が発生します。15年以上にわたり同様の設計が存在しており、この変更は仕様外の副作用を正規化するものです。


#131170 Vectorize BMP string

概要

ASN.1 BMPString(ビッグエンディアンUCS-2エンコーディング)の符号化・復号化処理にSIMD(ベクトル化)最適化を導入しました。BMPEncodingは固定幅で、サロゲートペアを含まないプレーン0のみに対応しています。小さな入力では若干のレジスタ圧力増加による0.5nsの回帰が見られますが、一般的な名前などの中規模入力では顕著なパフォーマンス向上が実現されています。

変更内容

  • AsnCharacterStringEncodings.cs: BMPEncoding実装をpartialに変更し、最大バイト/文字カウント計算ロジックを共有ファイルに集約
  • AsnCharacterStringEncodings.net.cs: Vector<ushort>を用いたベクトル化されたBMPString encode/decode実装を追加(エンディアン変換とサロゲート検出を含む)
  • AsnCharacterStringEncodings.downlevel.cs: ダウンレベルターゲット(net462など)向けのスカラー実装を復元
  • ReadBMPString.cs / WriteBMPString.cs: ベクトル境界長、境界チェック(BoundedMemory)、サロゲート検出インデックス正確性の回帰テストを追加

パフォーマンスへの影響

向上度が入力サイズに依存:

  • 小さな入力(CountryCode 2文字): 約4-5%の回帰(14.27ns → 14.97ns)
  • 中規模入力(CommonName 6文字): Decode 47%高速化(56.85ns → 26.71ns)、TryDecode 59%高速化(52.77ns → 21.71ns)
  • 大規模入力(Length1024): Decode 85%高速化(1,769.30ns → 270.31ns)、TryDecode 88%高速化(1,693.69ns → 195.24ns)
  • 最大テスト(Length1024): Write処理で78%高速化(1,119.74ns → 250.16ns)

メモリ割り当てと生成GC数は変わらず。ベクトル化により、特に大規模データの処理効率が劇的に向上。

関連Issue

#131109

その他

  • 互換性: 破壊的変更なし。ダウンレベルフレームワークではスカラー実装を継続使用
  • JIT最適化: IA5EncodingとVisibleStringEncodingの既存実装についても、JIT親和性を高めるフィードバックが反映されている
  • テスト範囲: ベクト処理境界(8/16/32/64/256/1024文字)での回帰テストとアラインメント(アライン/未アライン)の両方をカバー

#131092 Fix config binding source generator duplicating collection items bound through a constructor parameter

概要

Configuration Binding ソースジェネレータがパラメータ付きコンストラクタを持つ型でコレクションプロパティを重複バインドする問題を修正します。コンストラクタで初期化されたコレクションアイテムが再バインド時に追加され、結果として2倍に複製される問題を解決します。

修正例:ints: [1, 2, 3, 4, 5] がバインドされた場合、修正前は 1, 2, 3, 4, 5, 1, 2, 3, 4, 5 と複製されていましたが、修正後は正しく 1, 2, 3, 4, 5 となります。

変更内容

  • CoreBindingHelpers.cs: 生成される BindCore メソッドに boundThroughConstructor オプションパラメータを追加。このフラグが true の場合、コンストラクタでバインドされたプロパティは再バインドをスキップ。フラグは以下の値が渡されます:

    • 無条件構築時は true
    • ??= パターンでは実行時の wasNull フラグ
    • 辞書要素など別途構築される場合は呼び出し元で追跡されるフラグ
  • Helpers.cs: エミッタが使用する識別子定数 (boundThroughConstructor、wasNull) を追加

  • テストクラス: コンストラクタマッチコレクションパラメータを持つ新規テストクラスを追加

  • テストケース: ソースジェネレータモード用の既存テストのゲート除去と、同一大文字コンストラクタパラメータコレクションバインディングの回帰テスト追加

パフォーマンスへの影響

影響なし

関連Issue

#83803(修正対象)、#106158、#129775(反射バインダー既修正)

その他

  • 修正範囲:IList<T>、IEnumerable<T>、セット可能なコレクション。配列とスカラーは影響なし
  • required/initのみプロパティの場合、生成されたオブジェクト初期化子での自己代入(CS1717)も修正
  • 以下の関連課題は今後の改善として除外:
    • #95006:パラメータレスコンストラクタ型の required プロパティに対する CS9035
    • init コレクションのnon-nullプリセットデフォルト値の置換vs追記動作

#131009 [cDAC] Validate contract presence in interface returning functions

概要

cDAC(Compact Data Access Contract)がIXCLRDataProcess、ISosDac*、CorDBオブジェクトを返す前に、対象ランタイムが必要なすべてのコントラクトを公開しているか事前に検証し、不足している場合は分類可能な特定のHRESULTで失敗するようにします。新しいValidateForDataAccess(Target)メソッドは、これらのインターフェースが依存するコントラクト(直接・推移的)全体をインスタンス化なしで検証し、プラットフォーム条件付きコントラクト(Windowsのみ要求など)にも対応します。

変更内容

  • 新規公開API: CdacHResultsクラスにコントラクト検証失敗向けHRESULT定数を追加(CDAC_E_CONTRACT_NOT_ADVERTISED、CDAC_E_CONTRACT_UNRECOGNIZED、CDAC_E_CONTRACT_UNSUPPORTED等)
  • 例外ハイアラーキー: ContractNotAvailableExceptionとその派生クラスを導入してコントラクト可用性検証の失敗を分類
  • ContractRegistry: TryGetContract署名変更(失敗例外を出力パラメータで返す)、TryValidateとRegisterUnsupportedメソッドを追加
  • ContractDescriptorTarget: 例外ベースの記述子読み込みへ移行し、不正形式/見つからない場合の区別を強化
  • CoreCLRContracts: ValidateForDataAccessメソッド実装、検証失敗を分類されたHRESULTにマッピング
  • Entrypoints: インターフェース作成時にValidateForDataAccessによる事前検証ゲートを追加
  • テスト: 不正形式記述子、コントラクト欠落/未認識/廃止動作、事前検証パスをカバーする単体テストを拡充

パフォーマンスへの影響

影響なし(検証はインスタンス化を避ける設計)

関連Issue

なし

その他

破壊的変更: ContractRegistry.TryGetContract署名が変更され、新しい公開API(CdacHResults、ContractNotAvailableException派生クラス)が追加されているため、API審査リンケージが必要です。早期アタッチ安全性を考慮し、サブディスクリプタ(GCなど)由来のコントラクトは検証を遅延させ、メインディスクリプタ由来のコントラクトのみ無条件で要求します。プラットフォーム条件付きコントラクト(IBuiltInCOM、IWindowsErrorReporting等)はターゲットOSに基づいてゲートします。


#130373 Reconcile ReleaseHolder, ComHolderPreemp, and ComHolderAnyMode

概要

CoreCLRのCOMおよびリファレンスカウント型RAII"ホルダー"を統一し、LifetimeHolder<Traits>パターンに収束させるリファクタリングです。3つの異なるCOMインターフェースホルダー(ReleaseHolder、ComHolderPreemp、ComHolderAnyMode)を統合し、レガシーなSpecializedWrapperAPI(Extract、Clear、GetValueなど)を廃止します。

変更内容

  • ReleaseHolder: LifetimeHolder<ReleaseHolderTraits<T>>にリターゲットされ、ComHolderPreempのプリエンプティブモード解放セマンティクスを採用。Free()はENABLE_CONTRACTS_IMPLでゲートされたMODE_PREEMPTIVE契約を使用
  • ComHolderPreemp: 削除され、すべての使用箇所がReleaseHolderに置き換え
  • ComHolderAnyMode: ReleaseHolderAnyModeに改名
  • ホルダーAPI移行: Extract() → Detach()、IsNull() → == NULL、Clear()/GetValue() → Free()など従来のメソッドを現代的なLifetimeHolderパターンに統一
  • ダックタイピング対応: HolderDetail::HasReleaseMethodによりRelease()メソッド検出をジェネリック化
  • VM以外の対応: utilcode、md、DAC、createdumpなどのVM外の消費者はSTATIC_CONTRACT_*アノテーションにフォールバック

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

互換性に関する注意:

  • コンパイラレベルの変更(MODE_PREEMPTIVE契約の強制)により、ReleaseHolderがVM内で使用される場合、型によっては契約違反の可能性(例:ProfilerFunctionControlのようにSTANDARD_VM_CONTRACT/MODE_ANYで動作する非COMリファレンスカウント型)
  • ReleaseHolderAnyModeの実装がSafeRelease(IUnknown*)を呼び出すため、保持される型はIUnknown*に変換可能である必要があります
  • 大規模なリファクタリング(62ファイル以上が変更)で、所有権の移譲パターンが体系的に更新されました

#126014 Update CMakePresets.json to 3.26 version

概要

CMakePresets.json スキーマを 3.26 バージョンに更新するものです。

変更内容

  • src/coreclr/CMakePresets.json: CMakePresets.json のバージョンを 3.26 に更新(15行追加、33行削除、合計48行)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

この変更はビルドシステム設定の更新であり、CoreCLR の構築プロセスに関連する変更です。


目次