Pull Request on 2026年07月24日

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

注意点

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


目次

  1. #131335 Implement CLR data Request methods in cDAC
  2. #131332 Shrink large multidimensional array tests to avoid OOM killer
  3. #131328 [wasm][R2R] Fix Vector128 argument alignment in crossgen ArgIterator
  4. #131322 Seed doc comments for WASM PackedSimd intrinsics
  5. #131314 Correct comment formatting in Runtime_131285.csproj
  6. #131305 Switch runtime iOS jobs to simulator temporarily
  7. #131301 Add managed cDAC type wrapper scaffolding
  8. #131300 Remove dead NAOT import
  9. #131297 Optimize Half comparison operators and CompareTo
  10. #131295 Require ML-DSA keys match the signature algorithm OID in SignedCms
  11. #131292 Remove unused GC signature type provider
  12. #131290 Re-enable Half modulus negative-zero tests
  13. #131289 Add ML-KEM and ML-DSA to well-known OID lookups
  14. #131286 Fix incorrect result for pow(x, 1) on ARM/ARM64
  15. #131283 Update ad-hoc signing in HostModel for changed codesign behaviour (code directory page size) in macOS 26+
  16. #131281 Add cDAC usage graph analyzer and documentation gates
  17. #131280 Remove large-memory CopyTo and parser overflow tests
  18. #131274 [cDAC] Implement IsThreadSuspendedOrHijacked for cDAC
  19. #131273 Fix in-proc crash reporter frame assert.
  20. #131260 SPMI: Allow superpmi.py -details to point to a directory
  21. #131250 Disable newly added tests on interpreter
  22. #131220 Add on-demand in-proc crash report generation.
  23. #131195 Fall back to NTLM in managed SPNEGO when Kerberos credentials are missing on Unix
  24. #131165 Add Signal, WaitForExitStatus, TryWaitForExitStatus, WaitForExitStatusAsync to Process
  25. #131124 JIT: Delete unused functions
  26. #131002 Add unsafe modifier migration code fixer
  27. #130954 Implement IXCLRDataProcess with existing cDAC contracts
  28. #130834 JIT: handle adjacent no-GC regions (#115719)
  29. #130525 Fix EventSource WriteEvent varargs overloads dropped from EventPipe
  30. #130493 JIT: Optimize always suspending helpers
  31. #130119 Fix config binder source generator emitting invalid tuple instantiation code
  32. #130118 Configuration Binder SG: ignore unresolvable metadata types to prevent ambiguous/missing-type emissions
  33. #130088 Fix Linux crash loading recursive Nullable static-abstract value types
  34. #129307 Add sshd and Copilot CLI to Android Dev Container
  35. #126625 Remove contract system support for RETURN/RETVAL/POSTCONDITION
  36. #126367 Convert apphost to C
  37. #123234 Fix FTP/SSL data stream closure causing protocol violation in .NET 10

#131335 Implement CLR data Request methods in cDAC

  • 作成者: @Copilot
  • 作成日時: 2026年07月24日 17:38:20(UTC)
  • マージ日時: 2026年07月24日 21:03:35(UTC)
  • ラベル: area-Diagnostics-cdac

概要

cDAC(Component Data Access Contract)の複数のクラスに対して CLRDATA_REQUEST_REVISION メソッドを実装し、ネイティブDAC互換の動作を実現するPRです。引数検証、エラーハンドリング、ユニットテストを追加し、レガシーDAC との相互検証をデバッグビルドで実施しています。

変更内容

  • ClrDataTask.cs: CLRDATA_REQUEST_REVISION 実装、引数検証、無効な引数や null 出力バッファを対応する HRESULT に変換
  • ClrDataMethodDefinition.cs: 同上の実装
  • ClrDataMethodInstance.cs: 同上の実装
  • ClrDataValue.cs: 同上の実装
  • ClrDataRequestTests.cs: 正常なリクエストと無効なバッファシナリオをカバーするユニットテスト(107行追加)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • 本PRはGitHub Copilotで生成されています
  • デバッグビルドでレガシーDAC のリビジョン値と HRESULT を相互検証する仕組みが含まれています
  • CLRデータアクセスコントラクトの互換性維持を目的とした内部実装の変更です

#131332 Shrink large multidimensional array tests to avoid OOM killer

概要

大規模多次元配列テスト(Copy_LargeMultiDimensionalArrayとClear_LargeMultiDimensionalArray)のメモリ割り当てを縮小し、Helix環境でのOOM killer起動を防止します。short[2, 2_000_000_000](8GB)からbyte[2, 1_073_741_825](2GB)に変更しても、テストの本来の目的であるint.MaxValueを超える平坦化要素数でのネイティブサイズインデックスパス(Array.Copy/Array.Clear)の検証は変わらないため、テストの実行範囲を狭めずに問題を解決できます。

変更内容

  • src/libraries/System.Runtime/tests/System.Runtime.Tests/System/ArrayTests.cs
    • Copy_LargeMultiDimensionalArrayテスト:配列タイプをshort[2, 2_000_000_000]からbyte[2, 1_073_741_825]に変更(メモリ割り当て:8GB → 2GB)
    • Clear_LargeMultiDimensionalArrayテスト:同様に配列タイプとサイズを変更
    • 配列境界値を検証するインデックスリテラルを再計算
    • メモリガード値は4GB固定のまま(2GB割り当てで十分な余裕を確保)
    • スキップメッセージの書式修正と不要なコメント削除

パフォーマンスへの影響

影響なし。テスト自体の実行速度・メモリ効率は改善されますが、テスト対象となるArray.Copy/Array.Clearのコード経路(ネイティブサイズインデックス処理)は変わりません。

関連Issue

#58616

その他

  • Windows x64での検証済み:テストはコンパイル・実行成功(outerloop=true時)
  • Debian 10/11などメモリ限定環境でのOOM killer起動(exit code 137)を防止

#131328 [wasm][R2R] Fix Vector128 argument alignment in crossgen ArgIterator

  • 作成者: @lewing
  • 作成日時: 2026年07月24日 16:29:30(UTC)
  • マージ日時: 2026年07月24日 23:34:57(UTC)
  • ラベル: area-CodeGen-coreclr

概要

WebAssembly上のクロスジェン(R2R)で、Vector128<T>およびSystem.Numerics.Vector<T>の引数スタック配置の8バイト/16バイトの不一致を修正しました。この不一致により、後続の引数(汎用コンテキスト参照など)が破損し、Base64Url.DecodeFromUtf8で偽のNullReferenceExceptionが発生していました。

変更内容

  • runtime: MethodTableBuilder::CheckForSystemTypesでSystem.Numerics.Vector<T>にWebAssembly上での16バイト配置要件を追加(Vector128<T>およびInt128と同様)
  • crossgen2: CacheV128Typeにアサーション追加で、すべてのv128型が16バイト配置であることを検証し、配置要件の不一致を検出
  • cDAC/ArgIterator: RequiresAlign16OnWasm()メソッドの実装により、Wasm32パスでv128型の引数を16バイト配置に強制
  • ドキュメント: cDAC RuntimeTypeSystemコントラクトにGetVectorElementSize(...)を追加

パフォーマンスへの影響

影響なし(配置要件の修正のため、パフォーマンスには直接的な影響なし)

関連Issue

#131299、#131339、#131343

その他

  • 検証: Browser R2R環境でMicrosoft.Bcl.Memory.Tests SIMD完全R2R実行時に、修正前の12件のBase64Url失敗(すべてNullReferenceException)が解決
  • 制限: WebAssembly R2RはまだCI実行不可のため、自動回帰テストは延期。既存テストプロジェクトではcrossgen ArgIterator<TypeHandle>に到達する機能テストがない
  • 注記: 修正内容には関連PR #130991(PackedSimd.Shuffleローリング)の依存性あり。cDAC側の追加対応(全バリュー型の配置修正)は別途追跡中

#131322 Seed doc comments for WASM PackedSimd intrinsics

概要

WASM PackedSimd intrinsicsクラスの全メンバーにドキュメントコメントを追加し、#88574で追跡されていた最後の未文書化intrinsicsクラスをカバーします。各メンバーはC intrinsicプロトタイプとWebAssembly SIMD命令仕様を含む統一された形式で文書化されます。

/// <summary>
///   <para>v128_t wasm_i8x16_splat (int8_t a)</para>
///   <para>i8x16.splat : [i32] -> [v128]</para>
/// </summary>

変更内容

  • src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Wasm/PackedSimd.cs: 1888行追加、472行削除。System.Runtime.Intrinsics.Wasm.PackedSimdクラスの全メンバーにドキュメントコメントを追加。各メンバーはwasm_simd128.h由来のCプロトタイプと、WebAssembly SIMD仕様に準拠した命令行(ニーモニック、即値オペランド、スタック遷移を含む)を含む。unsigned i64x2比較(lt_u/le_u/gt_u)のように対応するWasm intrinsicがない場合は命令行のみを記載。

パフォーマンスへの影響

影響なし

関連Issue

#88574

その他

  • このドキュメントコメントは、mddocsフローを通じてdotnet-api-docs XMLを生成するために使用されます。
  • PR説明とドキュメントコメントはGitHub Copilotで起草されました。

#131314 Correct comment formatting in Runtime_131285.csproj

概要

Runtime_131285.csproj ファイル内のコメントフォーマッティングの問題を修正するPull Requestです。プロジェクトファイルのコメント形式を正しい形式に修正しました。

変更内容

  • src/tests/JIT/Regression/JitBlue/Runtime_131285/Runtime_131285.csproj: コメントフォーマッティングを修正(+1/-1行)

パフォーマンスへの影響

影響なし

関連Issue

#131287

その他

なし


#131305 Switch runtime iOS jobs to simulator temporarily

概要

ランタイムパイプラインのiOS関連ジョブを一時的にデバイス実行からシミュレータ実行に切り替える変更です。NativeAOTおよびCoreClrライブラリテストジョブの実行対象をios_arm64からiossimulator_arm64に変更し、#123796の解決まで暫定運用する予定です。

変更内容

  • eng/pipelines/runtime.yml: NativeAOT libraries-testジョブのプラットフォームをios_arm64→iossimulator_arm64に変更
  • eng/pipelines/runtime.yml: CoreCLR libraries-testジョブのプラットフォームをios_arm64→iossimulator_arm64に変更
  • セクション見出しを"iOS devices"から"iOS Simulator"に変更し、関連するIssueを参照するコメントを追加

パフォーマンスへの影響

なし

関連Issue

#123796

その他

本変更は暫定的なもので、#123796が解決されるまでの間の運用です。CI/CDパイプラインの設定変更であり、開発環境に直接の影響はありません。


#131301 Add managed cDAC type wrapper scaffolding

  • 作成者: @Copilot
  • 作成日時: 2026年07月24日 04:50:25(UTC)
  • マージ日時: 2026年07月24日 12:41:07(UTC)
  • ラベル: area-Diagnostics-cdac

概要

cDAC(Compact Diagnostic Access Component)のマネージド型ラッパー用スキャフォルディングを追加するPRです。CLRDataTypeDefinitionとCLRDataTypeInstanceのCOMラッパーを実装し、フォールバック有効時はレガシー実装へ委譲し、フォールバック不可時はE_NOTIMPLを返します。現時点ではコントラクト支援の実装は含まれていません。

変更内容

  • ClrDataTypeDefinition.cs: IXCLRDataTypeDefinition COM インターフェースのラッパー実装(116行追加)

    • レガシー実装への委譲メカニズム
    • フォールバック未対応時のE_NOTIMPL戻り値処理
  • ClrDataTypeInstance.cs: IXCLRDataTypeInstance COM インターフェースのラッパー実装(113行追加)

    • レガシー実装への委譲メカニズム
    • フォールバック未対応時のE_NOTIMPL戻り値処理

パフォーマンスへの影響

影響なし(スキャフォルディング段階のため、実質的な処理は含まれていません)

関連Issue

なし

その他

  • このPRはスキャフォルディングのみであり、本来の機能実装はまだ行われていません
  • Copilotによる自動レビューは実行されていません(ボット作成のため直接課金対象外)
  • レガシー実装への委譲パターンは、段階的な移行戦略の一環と考えられます

#131300 Remove dead NAOT import

概要

NAOT環境で使用されていないRhIsGCBridgeActiveインポートを削除するクリーンアップです。このメソッドはエクスポートもされておらず、コード内で呼び出されていない不要な実装でした。

変更内容

  • System.Private.CoreLib/src/System/Runtime/RuntimeImports.cs: RhIsGCBridgeActiveインポート定義を削除(4行削除)

パフォーマンスへの影響

影響なし(デッドコード削除による最小限の改善のみ)

関連Issue

なし

その他

NAOT(Native AOT)コンパイラの不要なメタデータ削減に関連する変更です。


#131297 Optimize Half comparison operators and CompareTo

概要

System.Half の比較演算子とCompareTo メソッドを最適化しました。主な改善は:

  1. CompareTo を書き直し、演算子チェーンと冗長なNaN/符号/ゼロチェックを排除
  2. AVX2対応環境で <、<=、CompareTo に (float)Half 変換を経由した高速パスを追加

AVX2環境では CompareTo が約3.8倍高速化(13.06 us → 3.47 us)、operator < は約2倍高速化(4.76 us → 2.41 us)しました。AVX2非対応環境でも従来の実装より高速です。

変更内容

  • src/libraries/System.Private.CoreLib/src/System/Half.cs

    • CompareTo(Half) をNaN処理と単調な符号・大きさ順序キーを用いたビット比較に書き直し(+0と-0を同一のキーに統一)
    • AVX2対応環境で operator <、operator <=、CompareTo に (float)Half 変換経由の高速パスを追加
    • 等値演算子(==、!=、Equals)はビット論理のままとした(float変換は測定上遅くなるため)
  • src/libraries/System.Runtime/tests/System.Runtime.Tests/System/HalfTests.cs

    • CompareTo_TestData に符号付きゼロ、非正規化数の符号順序、NaN/無限大順序に関するテストケースを追加

パフォーマンスへの影響

CompareTo(混合データ、AVX2対応機で4096比較/操作)

  • 従来実装:13.06 µs(約3.19 ns/比較)
  • ビットキーのみ:7.10 µs(約1.73 ns/比較)
  • ビットキー + AVX2 float パス:3.47 µs(約0.85 ns/比較)→ 約3.8倍高速化

operator <:約2倍高速化(4.76 µs → 2.41 µs)

AVX2非対応環境でもビットキー実装により従来の実装より高速(CompareTo 13.06 us → 7.06 us)。

等値演算子は float 変換が測定上遅くなるため(2.16 us → 3.20 us)ビット論理のままとしました。

関連Issue

#43117

その他

  • Half→float 変換は無損失かつ順序保存的(NaN と符号付きゼロのセマンティクスは保持)であるため、すべての高速パスは既存のビット・セマンティクスと完全に一致します
  • Avx2.IsSupported は JIT時定数であり、実行されないブランチは消去されるため、非対応環境ではオーバーヘッドなし
  • HalfTests の全1629ケースが AVX2有効時と DOTNET_EnableAVX2=0 による高速パス無効時の両方で合格

#131295 Require ML-DSA keys match the signature algorithm OID in SignedCms

  • 作成者: @bartonjs
  • 作成日時: 2026年07月23日 22:03:04(UTC)
  • マージ日時: 2026年07月24日 05:15:35(UTC)
  • ラベル: area-System.Security

概要

SignedCmsのML-DSA署名検証を強化し、証明書のML-DSAパラメータセットがCMS SignerInfoに格納されている署名アルゴリズムOIDと一致することを確認するようにしました。OIDとキーの不一致がある場合、署名検証が失敗するようになります。

変更内容

  • CmsSignature.MLDsa.cs: ML-DSA署名検証時にパラメータセット照合ロジックを追加し、アルゴリズムOIDとML-DSA公開鍵のパラメータセットの一致性をチェック
  • CmsSignature.SlhDsa.cs: 関連する変更(26行追加、21行削除)
  • Oids.cs: テスト用のML-DSA OID定数(ML-DSA-65、ML-DSA-87など)を新規追加
  • SignedCmsTests.cs: 回帰テストを追加。エンコードされたML-DSA署名アルゴリズムOIDを改ざんして、CheckSignatureが失敗することを検証

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

Copilotのレビューで、テストコードの潜在的な問題が指摘されています。LastIndexOfがOIDシーケンスを見つけられない場合は-1を返すため、その後のインデックス計算が無関係なバイトを改変する可能性があります。テストの堅牢性向上のため、パッチ前にインデックスが非負であることをアサーションする必要があります。


#131292 Remove unused GC signature type provider

概要

未使用のGC署名型プロバイダー(GcSignatureTypeProvider)とその関連型を削除するPull Requestです。同時に古い設計ドキュメントとストレステストデバッギーのコメント参照も削除されています。

変更内容

  • GcSignatureTypeProvider.cs: GC署名型プロバイダーの実装全体(219行)を削除
  • Signature.md: 設計ドキュメントの参照を更新(1行削除、1行追加)
  • Program.cs: ストレステスト用デバッギーの古いコメント参照を更新(2行削除、2行追加)

パフォーマンスへの影響

影響なし(未使用コンポーネントの削除であるため)

関連Issue

なし

その他

この変更はデッドコードの除去であり、公開APIへの変更はありません。cdac(Common Data Access Component)の診断インフラストラクチャの内部実装整理です。


#131290 Re-enable Half modulus negative-zero tests

概要

Half型のmodulus演算でnegative zero(負のゼロ)を保持するテストケースを再度有効化するPR。2022年にWindows x64 Debug環境での非決定的な符号損失を回避するためにコメントアウトされていた2つのテストが、現在の環境では問題が解決されたため、安全に復活させることができるようになった。float、double、NFloatの同等のテストは既に有効かつグリーン状態にある。

変更内容

  • src/libraries/System.Runtime/tests/System.Runtime.Tests/System/HalfTests.GenericMath.cs
    • HalfTests.op_ModulusTest内で無効化されていた2つのテストケースを再度有効化
      • Half.MinValue % 2がnegative zeroになることを検証
      • NegativeZero % 2がnegative zeroになることを検証
    • 古いPositiveTwoヘルパーへの参照をコメントアウトから削除し、既存のTwoヘルパーを使用に統一

パフォーマンスへの影響

影響なし(テストコードのみの変更)

関連Issue

#67993

その他

  • 根本原因は2022年のMSVCツールセット/CRT環境の不具合で、現在の環境では再現しない
  • JITコンパイル時パスは正確:gtFoldExprBinaryConstDblはGT_MODをfoldしない、VN FpRemは正しく-0を計算
  • ランタイムヘルパー(CORINFO_HELP_FLTREM → fmodf)は現在のMSVC CRTでfmod(-0, 2)に対して-0を返す
  • .NET 10での検証済み:Debug/Release両モードで0x8000(negative zeroのビット表現)が返される
  • ローカルリポジトリテストスイートは未実行(ベースラインビルド環境なし)。CI側でSystem.Runtime.Testsがカバー

#131289 Add ML-KEM and ML-DSA to well-known OID lookups

概要

ML-KEM(ML-KEM-512/768/1024)とML-DSA(ML-DSA-44/65/87)のOID(Object Identifier)をSystem.Formats.Asn1の既知OID検索テーブルに追加します。これにより、AsnWriter/AsnDecoderがこれらのポスト量子暗号アルゴリズムに対して高速パスマッピングを使用できるようになります。

CAB Forum(認証局・ブラウザフォーラム)の S/MIME CA/B WG が SMC013投票でML-DSAとML-KEMを承認しており、サーバー証明書やコード署名ワーキンググループでも検討が進められているため、仕様実装の準備として追加されます。

変更内容

  • WellKnownOids.cs: パックされたデータテーブルにML-DSA(44/65/87)とML-KEM(512/768/1024)のOIDを追加し、スライスオフセットを更新
  • WriteObjectIdentifier.cs: 新規OID文字列と期待される符号化値でライタテストを拡張
  • ReadObjectIdentifier.cs: 新規OIDの符号化に対するデコーダテストケースを追加

パフォーマンスへの影響

影響なし。既知OIDテーブルへの追加により、これらのOIDに対する検索が高速パスで処理されるため、相対的に性能が向上します。

関連Issue

#131289

その他

  • SLH-DSAとHashML-DSAは、現在採用への関心が薄いため、仕様策定がさらに進むまで含められていません
  • CompositeML-DSAも同様の理由で、今後の追加候補として留保されています
  • 破壊的変更なし。内部APIの拡張のみで、公開APIへの影響はありません

#131286 Fix incorrect result for pow(x, 1) on ARM/ARM64

概要

ARM/ARM64プラットフォームにおいて、Math.Pow(x, 1)およびMathF.Pow(x, 1)がサブノーマル数(double.Epsilonなど)を入力とした場合に誤って0を返していた問題を修正します。ARM/ARM64 CRTはpowをexp(y * log(x))で計算するため、y=1の場合にサブノーマル値がアンダーフローしていました。数学的にはpow(x, 1) = x(NaN、±inf、±0を含む全てのx)が成立するため、y == 1での早期リターンを追加します。

変更内容

  • floatsingle.cpp / floatdouble.cpp: ARM/ARM64でのみ有効なy == 1の早期リターン処理を追加。引数xをそのまま返すことでCRT pow/powfのアンダーフロー問題を回避
  • valuenum.cpp: JIT値番号ベースの定数折畳(EvalMathFuncBinary)にARM/ARM64向けの同様の修正を追加。JITがARM上でネイティブ実行される場合、定数折畳時にも同じCRTpowを呼ぶため、ランタイムヘルパーの修正を無効にしないようにする
  • Math.cs / MathF.cs: double.Epsilon/float.Epsilonを入力としたy == 1のリグレッションテストケースを既存理論データに追加

パフォーマンスへの影響

影響なし。早期リターンはパフォーマンスに有益(不要なCRT呼び出しを回避)。

関連Issue

#12139

その他

  • 修正はARM/ARM64プラットフォーム固有(#ifガード)のため、x64環境では検証不可。テストケースで期待値はx64で検証済み(Math.Pow(double.Epsilon, 1) == double.Epsilonが成立することを確認)
  • CI ARM レグでの実装検証が必要
  • PR説明とコード変更はGitHub Copilotとの協働で作成

#131283 Update ad-hoc signing in HostModel for changed codesign behaviour (code directory page size) in macOS 26+

  • 作成者: @elinor-fung
  • 作成日時: 2026年07月23日 18:57:26(UTC)
  • マージ日時: 2026年07月24日 15:56:44(UTC)
  • ラベル: area-Host

概要

macOS 26でcodesignコマンドがarm64/arm64_32アーキテクチャのMach-Oオブジェクトをハッシュする際、コードディレクトリページサイズを4 KiBから16 KiBに変更したことに対応する変更です。HostModelの管理されたad-hocシッパーをMach-O CPUタイプに基づいてページサイズを決定するように更新し、macOS 26+でのcodesign出力とのマッチングを実現します。16 KiBページサイズは古いarm64 macOSバージョンでも動作します。

変更内容

  • MachCpuType.cs: arm64/arm64_32検出に必要なCPUタイプ列挙値を追加
  • MachObjectFile.cs: Mach-O CPUタイプからコードディレクトリページサイズを決定し、署名ビルド時に使用
  • CodeDirectoryBlob.cs: 明示的なページサイズを受け入れ、正確なLog2PageSize値をエンコード、ページサイズに基づいてコードスロットハッシング/カウントを実行
  • EmbeddedSignatureBlob.cs: 署名サイジングにページサイズを渡し、最悪ケース推定に4 KiBを使用
  • SigningTests.cs: MatchesCodesignOutputテストを再有効化、pre-macOS 26 arm64シナリオ向けのスキップロジックを追加

パフォーマンスへの影響

影響なし

関連Issue

#121825

その他

  • HostModel署名コンポーネント内部実装の変更で、公開APIへの影響なし
  • arm64マシンでのmacOS 26+互換性修正であり、破壊的変更ではない
  • osx.15.arm64キューでのホストテスト実行により検証済み

#131281 Add cDAC usage graph analyzer and documentation gates

概要

cDAC(CoreCLR Data Access Contract)の使用グラフを分析するRoslyn ベースのアナライザーと、その分析結果から自動生成される契約使用ドキュメント、およびドキュメントの同期を強制するリポジトリゲートを追加します。

IDataソースジェネレータを拡張して、生成されたメンバーに依存性メタデータ([DataDescriptorDependency]、[UsesDataDescriptorTypeSize]属性)を付与し、アナライザーが実装の詳細に依存せずにディスクリプタ読み取りを特定できるようにします。契約ドキュメント内に自動生成される使用セクションを挿入し、ドキュメントの陳腐化検出とバージョンごとのドキュメント確認を自動化します。

変更内容

  • CdacUsageGraphツール (src/native/managed/cdac/tools/CdacUsageGraph/): Roslyn/MSBuild基盤のアナライザーツール、テストプロジェクト、generate-docs.ps1ラッパースクリプト。Semantic解析(シンボルマッチング、Operationツリー検査)、契約登録解析、ディスクリプタ型発見、Markdown/JSONレポート生成を実装。
  • ジェネレータ拡張 (src/native/managed/cdac/gen/): GetSize(Target)ヘルパー、Get<X>Offset(Target)アクセサーを生成し、[DataDescriptorDependency]と[UsesDataDescriptorTypeSize]属性でマーク。
  • 新規属性 (CdacAttributes.cs): DataDescriptorDependencyAttribute、UsesDataDescriptorTypeSizeAttribute(公開API)
  • 契約・データ型更新 (50+ ファイル): 生成ヘルパーの使用、明示的な依存性アノテーション、ディスクリプタ型シェル追加。
  • ドキュメント生成 (30+ .mdファイル): 契約ごとの使用セクション自動挿入、data-descriptor-overrides.jsonで版別抑止をサポート。
  • CI ゲート (ContractDocumentationTests.cs, ContractUsageGraphTests.cs): ドキュメント陳腐化検出、未ドキュメント版検出、プレースホルダー意味テスト。

パフォーマンスへの影響

影響なし(分析・ドキュメント生成は開発時・CI時のみ実行)

関連Issue

なし

その他

  • 公開API懸念: Copilotが指摘の通り、新規公開属性(DataDescriptorDependencyAttribute、UsesDataDescriptorTypeSizeAttribute)は出荷アセンブリで追加される。リポジトリポリシーに従い、API提案/承認(api-approved) が必要か、内部APIとすべき可能性あり。
  • ドキュメント同期の強制: ドキュメントが陳腐化した場合、テストが該当ドキュメント名と修復コマンド(generate-docs.ps1実行)を報告。
  • 版差分サポート: DebugInfo.md等で版間の差分を追跡・記載可能。
  • 推奨テストコマンド:
    dotnet test .\src\native\managed\
    
    

#131280 Remove large-memory CopyTo and parser overflow tests

概要

System.Memory.Tests の3つの大規模メモリ [OuterLoop] テスト(CopyToLargeSizeTest x2 と TestParser2GiBOverflow)を削除します。これらのテストは4~16GBのメモリを消費し、14GBの外部ループマシンで不安定でした。大規模コードパスの検証は不要と判断されたため、テストスイートの信頼性向上のために削除されます。

変更内容

  • src/libraries/System.Memory/tests/Span/CopyTo.cs / src/libraries/System.Memory/tests/ReadOnlySpan/CopyTo.cs:>2GB/>4GB の CopyTo テストを削除。Span<T>.CopyTo には特別な大規模メモリ用コードパスがなく、ネイティブ Memmove に委譲されるため、既存の境界値・オーバーフロー テストで十分と判定。
  • src/libraries/System.Memory/tests/ParsersAndFormatters/Parser/ParserTests.2gbOverflow.cs:2GBバッファオーバーフロー テストを削除。パーサーが2GBバッファ全体を処理し成功/失敗することを検証するのみで、特別なエッジケースなし。
  • src/libraries/System.Memory/tests/AllocationHelper.cs:変更なし(他の大規模割り当てテスト(Overflow、Clear、BinarySearch、Base64)で継続利用)。

パフォーマンスへの影響

テストメモリ消費量が大幅削減。削除されたテストは一度に4~16GBの割り当てまたは2GBバッファの繰り返し書き込みが必要でしたが、これらが排除されます。外部ループテスト実行時の安定性と実行時間の短縮が見込まれます。

関連Issue

#24139(14GBマシンでのテスト不安定性)、#118400(同様の2GBテスト削除の先例)

その他

  • Span<T> の長さは内部的に制限されており、既存の境界値・オーバーフロー テストで十分にカバーされている。
  • 将来ロジック変更時は手動検証で対応可能(#118400 での同様テスト削除の結論を踏襲)。

#131274 [cDAC] Implement IsThreadSuspendedOrHijacked for cDAC

概要

cDAC(Compact Diagnostics and Analysis Component)の従来型DBIシムに IsThreadSuspendedOrHijacked メソッドを実装します。このメソッドは Thread コントラクトの ThreadData.State から結果を導出し、スレッドがサスペンドされているか、ハイジャック状態にあるかを判定します。

変更内容

  • DacDbiImpl.cs: IsThreadSuspendedOrHijacked をコントラクトベースで実装。IThread.GetThreadData(...).State の DebugSyncSuspended | Hijacked フラグから結果を導出。DEBUG構成時は従来型DACとの相互検証も行う。
  • DacDbiThreadDumpTests.cs: ダンプベースの統合テストを追加。ThreadStoreData.FirstThread からスレッドを反復処理し、DBI結果とコントラクト状態が一致することを検証。
  • DacDbiImplTests.cs: ユニットテストを追加(詳細は不明)。

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • 内部実装の変更(cDAC診断基盤の強化)
  • 既存のDACとの互換性検証機構が組み込まれている

#131273 Fix in-proc crash reporter frame assert.

  • 作成者: @lateralusX
  • 作成日時: 2026年07月23日 15:32:25(UTC)
  • マージ日時: 2026年07月24日 10:58:40(UTC)
  • ラベル: area-VM-coreclr

概要

インプロセスクラッシュレポーターのスタックウォークコールバックが、CrawlFrameがFrameLessであるかチェックせずにGetRelOffsetを呼び出していた問題を修正しました。GetRelOffsetメソッドはこの条件をアサートしているため、デバッグビルドではアボートが発生していました。

変更内容

  • src/coreclr/vm/crashreportstackwalker.cpp: スタックウォークコールバック内で、GetRelOffsetを呼び出す前にCrawlFrameのFrameLess状態をチェックする条件を追加(1行追加、1行削除)

パフォーマンスへの影響

影響なし

関連Issue

#131273

その他

デバッグビルドにおけるクラッシュレポーター機能の安定性向上。ランタイムのクラッシュダンプ生成時に予期しないアボートが発生することを防止します。


#131260 SPMI: Allow superpmi.py -details to point to a directory

概要

superpmi.py -detailsオプションがディレクトリパスを指定できるように拡張されました。複数のコレクション(MCHファイル)をリプレイする際に、各コレクションごとに個別のdetails CSVファイルを出力できるようになります。

変更内容

  • superpmi.py: -details引数がファイルパスに加えてディレクトリパスに対応。get_details_file_path()ヘルパー関数を追加し、MCHファイルごとのdetails CSV出力パスを計算。このヘルパーをreplay、asm-diffs、throughput-diff、metric-diffの各フローで使用して、動作の一元化を実現。

パフォーマンスへの影響

影響なし

関連Issue

#131260

その他

なし


#131250 Disable newly added tests on interpreter

概要

CoreCLR インタープリタの実行速度が JIT より大幅に遅いため、インタープリタ環境でのテストタイムアウトを回避する変更です。#130968で追加されたパフォーマンステストをインタープリタ環境では無効化し、JIT環境での実行時のみカバレッジを保ちます。

変更内容

  • src/libraries/System.Private.Xml/tests/Misc/AttributeReadingPerformanceTests.cs
    • [Fact]属性のテストを[ConditionalFact(typeof(PlatformDetection), nameof(PlatformDetection.IsNotCoreClrInterpreter))]に変換
    • Release限定(#if !DEBUG)テストにも同じ条件を適用

パフォーマンスへの影響

影響なし。テストスキップによるタイムアウト防止が目的です。

関連Issue

#130968

その他

なし


#131220 Add on-demand in-proc crash report generation.

概要

CoreCLRの内部プロセス crash reporterに、ランタイム実行中にプログラムからオンデマンドでクラッシュレポートを生成する機能を追加します。致命的エラーハンドラー(#129543で提案)から呼び出し可能な新しいエントリーポイント InProcCrashReportCreateReport を提供し、JSON またはログ形式でレポートをコールバックに出力できます。

変更内容

  • オンデマンドレポートAPI追加 — InProcCrashReportCreateReport(outputFormat, signal, context, outputCallback, callbackContext) を新規実装。信号ハンドラーパスと同じ形式のレポート生成をサポート。
  • 初期化の分離 — reporter の初期化を CrashReportInitialize(VM コールバックのみ)と InProcCrashReportInitializeServices(ウォッチドッグ・ライフサイクル・PAL登録)に分割。
  • 相互排他制御 — 信号パスとオンデマンドパスで m_reportInFlight ガードを共有し、シグナルセーフライター・モジュールテーブル・スレッド一時停止を排他制御。
  • 出力シンク抽象化 — SignalSafeConsoleWriter と SignalSafeJsonWriter に小型の copyable なシンク抽象化を追加(プラットフォームコンソール/破棄/呼び出し側コールバック対応)。
  • スタックオーバーフロー分類の修正 — SO スタックトレースキャプチャを実際の SO パスのみに限定。従来は FailFast でも SO トレースラッチが設定され、オンデマンドレポートが FailFast を StackOverflow に誤分類していました。

パフォーマンスへの影響

影響なし。crash reporting が無効の場合は起動時にメモリ割り当てなし。有効の場合も既存の signal ベース crash reporter 機構を再利用するため、既存動作に変化なし。

関連Issue

#129543(ユーザー登録ネイティブ致命的エラーハンドラー提案)

その他

  • 内部 API の変更であり、公開 API への互換性への影響なし。
  • crash reporter は自動テストが不足しており、#129543 統合時の統合テストで検証予定。
  • Android arm64 エミュレータで手動検証済み(FailFast、StackOverflow パス)。

#131195 Fall back to NTLM in managed SPNEGO when Kerberos credentials are missing on Unix

  • 作成者: @rzikm
  • 作成日時: 2026年07月22日 08:46:02(UTC)
  • マージ日時: 2026年07月24日 12:53:27(UTC)
  • ラベル: area-System.Net.Security

概要

マネージドSPNEGO実装でKerberos認証失敗時にNTLMへの自動フォールバックを実装。Linux(MIT krb5)でKDC/TGTが利用できない場合、GSS_S_NO_CREDエラーが発生してNTLMへのフォールバックが実行されず401エラーが返される問題を修正。OpenBSD(Heimdal)では既に機能していた回復可能なエラーとして処理する動作を全Unixプラットフォームに統一。

変更内容

  • System.Net.Security/src/System/Net/NegotiateAuthenticationPal.ManagedSpnego.cs
    • Kerberos以外の最適化メカニズム(非NTLM)でUnknownCredentialsステータスを回復可能な最適化フォールバックとして処理
    • Unix全プラットフォームでKerberos→NTLM フォールバックパスを有効化
    • フォールバック動作の根拠を説明するコメント更新

パフォーマンスへの影響

影響なし

関連Issue

#122895、#123003、#91160

その他

  • 検証方法: 完全なテストホスト構築不可のため、実際のSystem.Net.Security.dllバイナリを構築し、プライベートな参照サーバーに対してNTLM/Negotiate HTTPハンドシェイク検証を実施
  • 互換性: マネージドユニットテストDefaultNetworkCredentials_NTLM_DoesNotThrowは未影響(SPNEGO最適化メカニズムパスのみ動作変更)
  • 推奨: release/10.0へのバックポートを#123003と同時実施を検討
  • 本PR作成: GitHub Copilot(CLI)

#131165 Add Signal, WaitForExitStatus, TryWaitForExitStatus, WaitForExitStatusAsync to Process

概要

Processクラスに4つの新しいメソッドを追加するAPI実装です。SafeProcessHandleで提供されていた機能を直接Processインスタンスから利用できるようになります。

public bool Signal(PosixSignal signal);
public ProcessExitStatus WaitForExitStatus();
public bool TryWaitForExitStatus(TimeSpan timeout, out ProcessExitStatus? exitStatus);
public Task<ProcessExitStatus> WaitForExitStatusAsync(CancellationToken cancellationToken = default);

変更内容

  • ref/System.Diagnostics.Process.cs — 新しいメソッドのシグネチャを追加。SignalメソッドにはiOS/tvOS非対応の属性を付与
  • src/System/Diagnostics/Process.cs — 4つのメソッドを実装(SafeProcessHandleへの委譲)
  • src/System/Diagnostics/Process.Unix.cs / Process.Windows.cs — プラットフォーム固有の実装を追加
  • tests/SafeProcessHandleTests.cs — 既存の10個のテストを[ConditionalFact]から[ConditionalTheory(bool testHandle)]に昇格。testHandle=falseパスで新しいProcess APIをテスト
  • tests/WaitForExitStatusTests.cs — 新規ファイル。Signal、WaitForExitStatusなどの包括的なテストを追加(603行)
  • System.Diagnostics.Process.Tests.csproj — テスト設定の更新

パフォーマンスへの影響

影響なし

関連Issue

#128322

その他

  • 新しいメソッドはいずれも公開API(公開ライブラリの一部)
  • SignalメソッドはPosix信号送信機能で、iOS/tvOSでは非対応
  • テストコードではnull許容性に関する警告が複数指摘されており、本番環境での修正が必要な可能性があります

#131124 JIT: Delete unused functions

  • 作成者: @EgorBo
  • 作成日時: 2026年07月21日 01:21:23(UTC)
  • マージ日時: 2026年07月24日 02:19:51(UTC)
  • ラベル: area-CodeGen-coreclr

概要

JITコンパイラで使用されていない関数を削除する内部実装の整理を行いました。合計192行のコードが削除されています。

変更内容

  • compiler.cpp: 115行削除 - 未使用の関数定義を削除
  • compiler.h: 34行削除 - 未使用の関数宣言を削除
  • emitriscv64.cpp: 9行削除 - RISC-V 64ビット向けコンパイラの未使用関数を削除
  • lower.h: 11行削除 - 未使用の関数を削除
  • lsra.h: 31行削除 - レジスタ割り当て(LSRA)関連の未使用関数を削除
  • priorityqueue.h: 31行削除 - プライオリティキュー実装の未使用関数を削除

パフォーマンスへの影響

影響なし(不要なコードの削除のため、パフォーマンスに変化なし)

関連Issue

なし

その他

内部実装(JITコンパイラの非公開関数)の削除であり、公開APIへの影響はありません。コード保守性向上を目的とした変更です。


#131002 Add unsafe modifier migration code fixer

概要

unsafe-v2ルールへの移行を支援する新しいアナライザーとコード修正機能を追加します。Roslynアナライザーに基づき、extern メンバーへの unsafe/safe修飾子追加、無効な unsafe修飾子の削除、ポインタシグネチャに対する unsafe要件チェック、XMLドキュメントによる安全性記述の検証などを実装します。これらの機能はILLinkの一部として提供されます。

変更内容

新規アナライザー(ILLink RoslynAnalyzer):

  • UnsafeMemberMissingSafetyDocumentationAnalyzer:unsafe メンバーに <safety> XML コメントがない場合に IL5005を報告
  • PointerSignatureRequiresUnsafeAnalyzer:ポインタ/関数ポインタシグネチャを持つメンバーに unsafe修飾子がない場合に IL5006を報告

新規コード修正プロバイダー(ILLink CodeFix):

  • AddUnsafeToExternCodeFixProvider:CS9389を修正、extern メンバーに unsafe追加
  • RemoveInvalidUnsafeCodeFixProvider:CS9377とCS0106を修正、無効な unsafe修飾子削除
  • RemoveUndocumentedUnsafeCodeFixProvider:IL5005を修正、未ドキュメントの unsafe削除(ポインタシグネチャと明示的レイアウト型フィールドは除外)
  • AddUnsafeToPointerSignatureCodeFixProvider:IL5006を修正、ポインタシグネチャに unsafe追加
  • AddUnsafeToFieldCodeFixProvider:CS9392を修正、明示的/拡張レイアウト型のインスタンスフィールドに unsafe追加

支援クラス:

  • UnsafeMigrationAnalyzerHelpers:修飾子決定の共通ロジック
  • UnsafeMigrationSyntaxHelpers:構文操作の支援関数
  • UnsafeModifierCodeFixHelpers:コード修正ユーティリティ

リソースと設定:

  • DiagnosticId、DiagnosticCategory に新規IDと「Unsafe」カテゴリを追加
  • SharedStrings.resx に新規診断メッセージを追加
  • 包括的なテストスイートを追加(7つのテストクラス、合計1,176行)

パフォーマンスへの影響

影響なし

関連Issue

#131002

その他

  • 本機能はまだ配送されていません
  • 修正は冪等(incremental migration に対応)に設計されています
  • <safety> XML コメントまたは明示的な safe 修飾子で IL5006 診断を抑制可能
  • ポインタシグネチャとフィールド型メンバーはバージョン互換性のため特別扱い
  • 将来の追加タスク:unsafe コンテキスト診断(CS9360、CS9361等)の修正プロバイダー実装、オーバーライド・インターフェース実装・部分宣言間での caller-unsafe コントラクト同期

#130954 Implement IXCLRDataProcess with existing cDAC contracts

  • 作成者: @Copilot
  • 作成日時: 2026年07月17日 05:37:26(UTC)
  • マージ日時: 2026年07月24日 12:39:58(UTC)
  • ラベル: area-Diagnostics-cdac

概要

IXCLRDataProcessインターフェイスをレガシーDAC fallbackからcDAC(Contracts-based Data Access Component)に移行する実装です。既存のcDACコントラクトを活用して、アプリケーションドメイン・モジュール列挙/検索、タスク検索、アドレス分類、GetDataByAddressなどの機能をcDACで提供します。ネイティブHRESULT、列挙動作、チャイルドラッパーの互換性を保持しています。

変更内容

  • IXCLRDataProcess実装の拡張: SOSDacImpl.IXCLRDataProcess.csで以下の機能を追加

    • App-domainおよびmodule列挙・検索(StartEnumAppDomains, EnumAppDomain, GetAppDomainByUniqueID, StartEnumModules, EnumModule, GetModuleByAddressなど)
    • タスク検索(GetTaskByUniqueID)
    • アドレス分類とGetDataByAddress
    • GetAddressTypeシグネチャの更新(新しいCLRDataAddressType列挙型を導入)
  • cDACコントラクトの拡張: ExecutionManagerコントラクトに新しいデータディスクリプタを追加

    • ExecutionManager.mdの更新
    • ExecutionManagerCore.csで新しいメソッド実装
  • テスト追加: IXCLRDataProcessTests.csで225行の新規ユニットテスト、ExecutionManagerTests.csで23行の追加テスト

パフォーマンスへの影響

影響なし

関連Issue

#130954

その他

注意点:

  1. LegacyFallbackHelper.CanFallback()チェックの欠落: 複数の新規実装箇所で_legacyProcessへのデリゲーション時にCDAC_NO_FALLBACKフラグをチェックしていない点が指摘されています(Copilotレビューで低信頼度コメント)
  2. 後回しの実装:
    • FollowStub/FollowStub2: 新しいスタブ追跡コントラクトが必要
    • EndEnumMethodDefinitionsByAddress: レガシー保有の列挙ハンドルに依存
  3. 公開API変更: IXCLRDataProcess.GetAddressTypeのシグネチャ変更(uint*からCLRDataAddressType*)は公開APIの承認ワークフローが必要な可能性があります

#130834 JIT: handle adjacent no-GC regions (#115719)

概要

JIT コンパイラの GC 情報エンコーディングを更新し、隣接する no-GC リージョンが存在する場合でも、各 IGF_NOGCINTERRUPT(非割り込み可能)リージョンの最初の命令が一貫してインタラプティブル(割り込み可能)として扱われるようにしました。これにより、ランタイム/デバッガーが使用するインタラプティブル範囲の報告精度が向上します。

変更内容

  • src/coreclr/jit/emit.cpp: InterruptibleRangeReporter を調整し、非プロローグリージョンの場合は igOffs + firstInstrSize を考慮して、インタラプティブル範囲を出力するかどうかを判定するようにしました。igOffs == m_uninterruptibleEnd の場合でもインタラプティブル「ギャップ」を出力し、隣接する no-GC リージョンを分割します。
  • src/coreclr/jit/emit.h: InterruptibleRangeReporter クラスのメンバー変数またはメソッドシグネチャを更新

パフォーマンスへの影響

影響なし。本変更は GC 情報メタデータの精度向上であり、実行時パフォーマンスには直接的な影響がありません。

関連Issue

#115719

その他

なし


#130525 Fix EventSource WriteEvent varargs overloads dropped from EventPipe

  • 作成者: @steveisok
  • 作成日時: 2026年07月10日 19:36:05(UTC)
  • マージ日時: 2026年07月24日 15:27:10(UTC)
  • ラベル: area-Tracing-coreclr

概要

EventSourceの可変長引数(varargs)WriteEventオーバーロードがEventPipeで不正にフィルタリングされていた問題を修正しました。キーワード0(すべてマッチ)で有効化されたプロバイダーにおいて、varargs経由のイベントが誤ってドロップされていた根本原因は、EventProviderImpl.IsEnabledがキーワードマスク0を「すべてのキーワードにマッチ」として扱わなかったためです。修正によりETW/EventPipeの型付きイベント経路と同じフィルタリングロジックが適用されるようになりました。

変更内容

  • EventProvider.cs: EventProviderImpl.IsEnabled(byte level, long keywords)のキーワードマッチングロジックを修正。_anyKeywordMask == 0の場合は「すべてのキーワードにマッチ」として扱うように変更。またEventSource.WriteEventVarargsからの呼び出し時に、ETW/EventPipeの有効性チェックを適切に実施するよう調整。
  • EventSource.cs: varargs経路のゲーティングロジックをWriteEventVarargsメソッドに統合し、型付きイベント経路と同じパターンに統一。
  • writeeventvarargs.cs/csproj: キーワード0で有効化されたプロバイダーにおいて、型付きイベントとvarargs形式の両方が正しくEventPipeトレースに記録されることを検証するリグレッションテストを追加。

パフォーマンスへの影響

影響なし

関連Issue

#124518

その他

  • 修正により、EventProvider内の不要なIsEnabled(byte level, long keywords)ヘルパーメソッドが削除されました。
  • テストケースは、キーワード0での有効化、マッチするキーワードでの有効化、キーワード指定ありとなしの混在シナリオをカバーしています。

#130493 JIT: Optimize always suspending helpers

概要

非同期ヘルパーメソッドの中で常にサスペンドするものについて、JITの最適化を行います。これらのメソッドに対して「継続を返したか?」のnullチェックを生成せず、無条件にサスペンションパスへ分岐することで、不要なコード生成を削減します。

変更内容

  • AsyncHelpers.cs / AsyncHelpers.CoreCLR.cs: AwaitAwaiter、UnsafeAwaitAwaiter、Suspend*、TransparentSuspend*ヘルパーに[Intrinsic]属性を追加し、JITが確実に認識できるようにしました(ライブラリ層・ランタイム層の両方)
  • namedintrinsiclist.h: 常にサスペンドするヘルパー向けの新しいNamedIntrinsicIDを追加
  • importercalls.cpp: 新しいヘルパー固有のNamedIntrinsicを認識し、impSetupAsyncCallにNamedIntrinsicパラメータを追加してAsyncCallInfo.AlwaysSuspendsフラグを設定
  • gentree.h: AsyncCallInfo構造体にAlwaysSuspendsビットフィールドを追加(JIT内部実装)
  • compiler.h: impSetupAsyncCallシグネチャを更新して呼び出し先のNamedIntrinsicを受け取るように変更
  • async.cpp: AlwaysSuspendsフラグが設定されている場合、nullチェックをスキップし、制御フロー(CFG)を直接サスペンションパスへ変更

パフォーマンスへの影響

常にサスペンドするヘルパー呼び出し時に生成されるnullチェック関連のコードが削減され、コードサイズの縮小とサスペンド前の分岐命令削減により、わずかなパフォーマンス向上が期待されます。メモリ消費量やGC負荷への直接的な影響はありません。

関連Issue

#128324

その他

本変更はJIT内部の非同期変換ロジックの最適化であり、公開APIへの影響はありません。[Intrinsic]属性の追加は内部実装の詳細であり、互換性への影響もありません。


#130119 Fix config binder source generator emitting invalid tuple instantiation code

概要

Configuration Binder ソースジェネレータが、バインド不可能なプロパティ(内部・プライベート・ゲッターのみの collection、[ConfigurationKeyName] 無視など)を通じてのみ到達可能な型に対して不要な BindCore ヘルパーを生成していた問題を修正します。コンストラクタパラメータに対応するプロパティの場合は、プロパティがバインド不可能でも型登録をスキップしません。

変更内容

  • gen/Specs/BindingHelperInfo.cs — TryRegisterTransitiveTypesForMethodGen メソッドで、バインド不可能なプロパティ(!ShouldBindTo)かつコンストラクタパラメータと対応していない場合のみ、推移的な型登録をスキップする条件を追加

    • record 型の読み取り専用 collection パラメータ(IReadOnlyList<T>, IReadOnlyCollection<T>, IReadOnlySet<T>, IEnumerable<T>)は { get; init; } プロパティとして露出されるため、コンストラクタパラメータ対応のプロパティは必ず登録する必要がある
  • tests/SourceGenerationTests/GeneratorTests.cs — 回帰テストを追加

    • ReadOnlyCollectionConstructorParameterIsBindable — IReadOnlyList など読み取り専用 collection パラメータが正しくバインド可能であることを検証
    • ComplexReadOnlyListConstructorParameterIsBindable — 複雑な要素型を含む同様のシナリオ
    • ListOfTupleWithComplexElementInInternalPropertyTest — Issue #111517 の再現テスト

パフォーマンスへの影響

ポジティブ — 不要な BindCore ヘルパーが生成されなくなり、生成コードサイズが削減。Trim/AOT への影響も中立から正とのこと。

関連Issue

#111517

その他

バインド動作に変更なし。実際にバインドされるメンバーセットは変わらず、呼び出されないヘルパーのみが削除される(ランタイムリフレクションバインダーの動作に近づく)。増分生成パイプラインは決定性を保持。


#130118 Configuration Binder SG: ignore unresolvable metadata types to prevent ambiguous/missing-type emissions

概要

Configuration Binder ソースジェネレータが、推移的依存関係から解決不可能なメタデータ型を参照するメンバーを処理する際に生成する非コンパイル可能なコードの問題を修正します。エラーシンボル(型の欠落・曖昧性)を含むメンバーをスキップし、スキップされたメンバーに対してSYSLIB1101警告を発行することで、リフレクション実装との差分を可視化します。

変更内容

  • ConfigurationBindingGenerator.Parser.cs:

    • IsUnsupportedTypeメソッドを拡張し、新規ContainsErrorTypeヘルパーで再帰的に型チェーン(配列要素、ジェネリック型引数)内のRosynエラーシンボルを検出
    • エラー型を含むメンバー(未解決参照型、Nullable<T>の値型、Wrapper<Missing>のようなジェネリック内ネスト型など)をスキップ
    • メタデータ解決不可によるスキップ時にSYSLIB1101警告を発行
  • テスト基盤:

    • テストドライバにMetadataReferenceを受け入れるサポートを追加(GeneratorTests.Helpers.cs、ConfigBindingGenTestDriver.cs)
    • IgnorePropertiesWithUnresolvableMetadataTypesテストを追加:推移的依存関係を欠落させてエラーシンボルを生成し、無効メンバーがスキップされ有効メンバーがバインド、SYSLIB1101警告が発行されることを検証

パフォーマンスへの影響

影響なし

関連Issue

#109759

その他

  • 互換性: 非推奨化なし、破壊的変更なし。メンバースキップの警告化により、ユーザーは失敗したバインディングを認識し、欠落参照を追加可能
  • テスト改善: 従来のディスクI/O(Windowsでのファイルロック、一時ディレクトリリーク)を排除し、インメモリMetadataReferenceベースのテスト手法に移行
  • 内部実装: ジェネレータのメタデータ解析ロジックの改善。公開APIに変更なし

#130088 Fix Linux crash loading recursive Nullable static-abstract value types

  • 作成者: @Copilot
  • 作成日時: 2026年07月01日 16:10:08(UTC)
  • マージ日時: 2026年07月24日 03:18:54(UTC)
  • ラベル: area-VM-coreclr

概要

Linux CoreCLR環境で、静的抽象インターフェースメンバーを使用した再帰的に制約されたvalue typeのNullable<T>をロードする際のクラッシュを修正しました。System V struct分類時に、一時的に未解決のネストされたvalue type フィールドメタデータを保守的にフォールバックさせることで、アサーション失敗を防いでいます。

修正例:

public readonly record struct UserId(EntityIdValue<UserId> Value) : IEntityId<UserId>;

class MyNullableUser
{
    public UserId? UserId { get; set; }
}

変更内容

  • src/coreclr/vm/methodtable.cpp: System V struct分類時に、value typeフィールドの型ハンドルが一時的に未解決の場合、近似(正規化)形式のMethodTable*を事前解決することでnull TypeHandleを回避。フィールドサイズ計算と固定バッファ検出の両方で対応(+44/-16)
  • src/tests/Loader/classloader/regressions/GitHub_127696/GitHub_127696.cs: Nullable<T>と再帰的に制約されたreadonly record structおよび静的抽象インターフェースメンバーを含むローダー回帰テストを追加(+81)
  • src/tests/Loader/classloader/regressions/LoaderClassloaderRegressions.csproj: 回帰テストプロジェクトファイルを追加(+5)

パフォーマンスへの影響

影響なし

関連Issue

#127696 #130661

その他

  • 変更はランタイムVM内部実装(MethodTableの分類ロジック)であり、公開APIへの影響なし
  • Copilotレビューで、コメント「GetApproxFieldTypeHandleThrowing is always succeeds」の表現がコード実装と矛盾する可能性が指摘されている(型ロード失敗やOOMで例外をスロー可能)
  • 回帰テストはRegression_o_2に追加されると記載されているが、実際にはLoaderClassloaderRegressions.csprojに統合されている

#129307 Add sshd and Copilot CLI to Android Dev Container

  • 作成者: @vcsjones
  • 作成日時: 2026年06月11日 19:19:51(UTC)
  • マージ日時: 2026年07月24日 16:17:40(UTC)
  • ラベル: area-Meta

概要

Android開発コンテナ設定を更新し、標準開発コンテナと同じ開発便宜機能(sshdとcopilot-cli)を追加するもの。PR #124855と同等のAndroid版アップデート。

変更内容

  • .devcontainer/android/devcontainer.json: sshdとcopilot-cliのdevcontainer機能を追加
    • ghcr.io/devcontainers/features/sshd:1を機能リストに追加
    • ghcr.io/devcontainers/features/copilot-cli:1を機能リストに追加
    • 既存のgithub-cli機能と併せて構成

パフォーマンスへの影響

影響なし(開発環境設定の変更のため)

関連Issue

なし

その他

このPRは開発者体験の向上を目的とした設定変更であり、ランタイムやコンパイラの機能変更ではありません。Android開発環境の構築時にSSHデーモンとCopilot CLIが自動的に含まれるようになります。


#126625 Remove contract system support for RETURN/RETVAL/POSTCONDITION

  • 作成者: @jkoritzinsky
  • 作成日時: 2026年04月08日 03:57:45(UTC)
  • マージ日時: 2026年07月24日 21:31:16(UTC)
  • ラベル: area-VM-coreclr

概要

CoreCLR内のコントラクトシステムからPOSTCONDITION/RETURN/RETVALマクロインフラストラクチャを削除します。これらのマクロは複雑なテンプレート機構(PseudoTemplate/Returner等)が必要でしたが、実際のポストコンディションはトートロジーか前提条件の繰り返しであることが多く、価値が限定的でした。CONTRACT/CONTRACT_VOIDブロックをCONTRACTLに変換し、RETURN exprをreturn exprに置き換えています。

変更内容

  • contract.h/eecontract.h: POSTCONDITION/RETURN/RETVALマクロおよび関連テンプレート機構を削除(contract.hで354行削減)
  • VM/debug/utilcode ファイル群: 約100ファイルでCONTRACT/CONTRACT_VOIDをCONTRACTLに変換し、RETURN exprをreturn exprに変換
  • ポストコンディション保留: 非自明なポストコンディションは_ASSERTE(...)として対応するreturnの前に保持
  • ビルド構成依存アサート削除: _DEBUG && !DISABLE_CONTRACTSが必要なCheckInvariant、DACCESS_COMPILEでは利用不可なCheckPointer関連のアサートを削除
  • 重要な修正: StorePEAssemblyでの正確性バグを修正(ブレース不足により無条件returnが発生し、アセンブリバインディングキャッシュが破損してテスト失敗)
  • マージ競合解決: ceeload.cpp等でHolder::Extract()+SuppressRelease()をLifetimeHolder::Detach()に統一

パフォーマンスへの影響

影響なし。テンプレートメタプログラミング複雑性の削減により、コンパイル時間が短縮される可能性があります。

関連Issue

#126625

その他

  • 大規模変更(20,000行超)のため自動AIレビューが実行できませんでした
  • スタイルクリーンアップ: 不要なreturn (expr)括弧、void関数の末尾return;、自明なnullアサート、重複したアサートペアを削除
  • 内部実装の変更であり、公開API変更なし

#126367 Convert apphost to C

  • 作成者: @Copilot
  • 作成日時: 2026年03月31日 18:43:51(UTC)
  • マージ日時: 2026年07月24日 17:39:01(UTC)
  • ラベル: area-Host

概要

apphostおよび関連ホストコンポーネントをC++からCに段階的に移行するリファクタリング。apphostとsinglefilehostの共通エントリーポイントapphost.cを導入し、dotnetは別途dotnet.cppに分離。内部実装をC化することで、特にWindows x64でバイナリサイズが大幅に削減されました。これは公開APIの変更ではなく、内部実装の最適化です。

変更内容

  • エントリーポイント再編成

    • apphost用Cエントリーポイントapphost.cを追加(スタンドアロンとsinglefilehostで共有)
    • dotnet用エントリーポイントdotnet.cppをsrc/native/corehost/dotnet/に移動
    • corehost.cppの統合エントリーポイントを削除
  • hostfxrリゾルバーの分離

    • apphostリゾルバーをC実装apphost_hostfxr_resolver.cに変更
    • singlefilehostは静的リンク対応のためC++リゾルバを維持
    • dotnet用リゾルバを別途dotnet/hostfxr_resolver.cppに配置
  • ホストミスク(hostmisc)のC API化

    • utils.c, trace.c, fx_ver.c, fxr_resolver.c, bundle_marker.cなどC実装を新規追加
    • C++実装は新しいC APIを呼び出すようにリファクタリング
    • pal.windows.cとpal.unix.cを強化しC互換のPALレイヤーを提供
  • ビルドシステム更新

    • CMakeで新しいC実装をビルド対象に追加
    • 各ホストタイプ(standalone/static/dotnet)に対応するリゾルバビルドを分離

パフォーマンスへの影響

バイナリサイズの大幅削減(内部実装最適化による効果):

プラットフォーム バイナリ 削減量 削減率
Windows x64 apphost.exe −53,760 B −43.2%
dotnet.exe −5,120 B −4.2%
Linux x64 apphost −7,072 B −18.1%
dotnet −1,824 B −5.5%
macOS arm64 apphost −4,944 B −5.1%

singlefilehostはサイズ変動最小限(−0.0001%~−0.2%)。C化により余分なC++ランタイムオーバーヘッドが削減されました。

関連Issue

なし

その他

  • 互換性: 公開APIに変更なし。内部実装のみの再構成です
  • レビュー: 複数のレビューサイクル後、Copilotが34ファイル全件レビュー。1件の低信頼度コメント(bundle_marker.cの型ポンティング警告)が存在しますが、マージ時点で対応不明
  • プラットフォーム対応: Windows PALはC++ラッパー(pal.windows.c_impl.cpp)で実装され、UnixはCで直接実装(pal.unix.c)

#123234 Fix FTP/SSL data stream closure causing protocol violation in .NET 10

  • 作成者: @Copilot
  • 作成日時: 2026年01月15日 23:33:17(UTC)
  • マージ日時: 2026年07月24日 08:01:46(UTC)
  • ラベル: area-System.Net

概要

.NET 10で導入された回帰により、FTPSデータストリームのSslStreamがクローズされずプロトコル違反が発生していた問題を修正しました。PR #106451でリファクタリングされたFtpDataStreamが、SSL/非SSL両対応となった際に、CloseExメソッドでSslStreamのクローズ処理を落としていたのが原因です。修正により、SslStreamの適切なTLSシャットダウンと、その後のNetworkStreamのタイムアウト付きクローズを実現しました。

// FtpControlStream: SslStream生成時にleaveInnerStreamOpen=true
SslStream sslStream = new SslStream(_dataStream, true, 
    ServicePointManager.ServerCertificateValidationCallback);

// FtpDataStream.CloseEx: SSL/非SSLで異なるストリームの場合
if (_stream != _originalStream)
{
    if ((closeState & CloseExState.Abort) == 0)
        _stream.Close();      // グレースフルなSSLシャットダウン
    else
        _stream.Dispose();    // 中止時はスキップ
}
// NetworkStreamは常にタイムアウト付きでクローズ

変更内容

  • FtpControlStream.cs: データストリームのSslStream生成時のleaveInnerStreamOpenパラメータをfalseからtrueに変更。これによりSslStreamが自動的に内側のNetworkStreamをクローズするのを防ぎ、明示的な制御が可能になります。
  • FtpDataStream.cs: CloseExメソッドを修正し、_streamと_originalStreamが異なる場合(SSL時)、_stream(SslStream)を先にクローズ/破棄してからオリジナルストリームをタイムアウト付きでクローズ。通常クローズと中止時で処理を分離。
  • System.Net.Requests.Enterprise.Tests: FTPS対応の新規テストプロジェクトを追加。SSL/非SSL両シナリオのFTPアップロード/ダウンロード、およびストリーム破棄動作を検証。
  • CI パイプライン: enterprise/linux.ymlにSystem.Net.Requestsを追加し、エンタープライズテストを自動実行。

パフォーマンスへの影響

影響なし

関連Issue

#123135

その他

本修正は.NET 10への回帰対応であり、PR #106451の不完全な実装が原因です。FtpWebRequestは新規開発では非推奨ですが、レガシーアプリケーション対応として修正されました。


目次