Pull Request on 2026年04月02日

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

注意点

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


目次

  1. #126482 Fix dotnet.thread_pool.queue.length to use ObservableUpDownCounter
  2. #126468 Fix stale version comments on pinned action SHAs in workflow files
  3. #126464 Skip unsupported tests and increase timeouts for Apple mobile CI legs
  4. #126450 Rename *.Win32.cs files to *.Windows.cs under src/libraries
  5. #126444 Bump github/gh-aw-actions from 0.64.2 to 0.65.4
  6. #126443 Fix MarshalArrayAsParam/AsLPArray/AsLPArrayTest test
  7. #126440 Enable Server Garbage Collection in Runtime_126043 project
  8. #126433 Escape LDAP filter values in System.DirectoryServices.AccountManagement
  9. #126432 Update Fedora Helix queues: latest 43 → 44
  10. #126413 Make sure m_synchronizedOrAsyncRetValVarIndex is always initialized
  11. #126399 [HTTP/SSL] Revert docker-compose command changes from PR #125995
  12. #126392 [Wasm RyuJIT] Fix for assert in obscure block store scenario
  13. #126378 [release/11.0-preview3] Fix publish-time Framework materialization for multi-client WASM and add test
  14. #126375 [Wasm RyuJIT] Set wasm's vector width to 128 bits
  15. #126372 Fix crash in debugger transport shutdown path during process exit
  16. #126370 Add support for dumping interpreter IR for debugging purposes
  17. #126368 Cleanup holder types
  18. #126366 Rewrite UTF8 string marshalling test suite with Theory methods and bool-returning native functions
  19. #126320 Fix InMemoryDirectoryInfo path resolution for '..' and relative paths
  20. #126306 Add Process tests for MacCatalyst and fix MacCatalyst support
  21. #126261 Fix FastReducer.SubMod infinite loop on 32-bit platforms
  22. #126231 Add GetCodeHeapList cDAC API
  23. #126211 Fix publish-time Framework materialization for multi-client WASM and add test
  24. #126181 Include file path in BadImageFormatException thrown from AddModule
  25. #125973 Improve InvalidCastException message for generic argument in different ALCs
  26. #125931 [cDAC] Add API TranslateExceptionRecordToNotification
  27. #125915 Fix flaky FileSystemWatcher_Directory_Delete_MultipleFilters due to Windows NTFS pending-delete race
  28. #125891 Port ComInterfaceGenerator to string writing
  29. #125710 Fix UF_HIDDEN causing st_flags to be dropped in ConvertFileStatus; add PAL_UF_HIDDEN static assert
  30. #125629 Use SDK NativeCompile hook for ILC publish integration
  31. #125625 Make MountHelper.Unmount resilient to expected cleanup errors in mount volume tests
  32. #125457 Fix NonBacktracking correctness issues and exponential blowup on nested loops
  33. #125441 Reduce Apple mobile CI matrix
  34. #124650 [STJ Source gen] Use UnsafeAccessor/reflection for inaccessible members
  35. #117583 Inline CORINFO_HELP_ARRADDR_ST helper call, remove WriteBarrier FCall

#126482 Fix dotnet.thread_pool.queue.length to use ObservableUpDownCounter

  • 作成者: @tarekgh
  • 作成日時: 2026年04月02日 18:37:56(UTC)
  • マージ日時: 2026年04月02日 21:21:36(UTC)
  • ラベル: area-System.Diagnostics.Metric

概要

dotnet.thread_pool.queue.length メトリクスが不適切な ObservableCounter から ObservableUpDownCounter に変更されました。ThreadPool.PendingWorkItemCount は現在のスナップショットを報告するため、単調増加のカウンターではなく増減可能なカウンターが正しい実装です。これは同じ理由で既に ObservableUpDownCounter を使用している dotnet.thread_pool.thread.count との一貫性を確保します。

変更内容

  • RuntimeMetrics.cs: dotnet.thread_pool.queue.length のメトリクス定義を CreateObservableCounter から CreateObservableUpDownCounter に変更
  • RuntimeMetricsTests.cs: 新しい計測器タイプを検証するテストを追加(20行追加)

パフォーマンスへの影響

影響なし

関連Issue

#126167

その他

  • メトリクス分類: これは公開メトリクスAPI に関連する変更です
  • 互換性: 既存コードがこのメトリクスを読み取っている場合、メトリクスの意味がより正確になります(単調増加から増減可能な値へ)。ただし、メトリクス消費側の実装がこの変更に対応している必要があります

#126468 Fix stale version comments on pinned action SHAs in workflow files

  • 作成者: @Copilot
  • 作成日時: 2026年04月02日 12:47:46(UTC)
  • マージ日時: 2026年04月02日 12:59:58(UTC)
  • ラベル: area-skills

概要

GitHub Actionsワークフローファイルに記載されたピン留めされたSHA参照のインラインバージョンコメントが、実際のタグと不一致になっていた問題を修正します。Dependabotが参照を更新する際、コメントが同期されていなかったため、すべてのワークフローファイルを監査してバージョンコメントを正確に更新しました。

変更内容

  • copilot-echo.lock.yml (5件): github/gh-aw-actions/setup@536ea1b... のバージョンコメントを v0.63.0 から v0.65.4 に修正
  • labeler-cache-retention.yml (1件): dotnet/issue-labeler/*@46125e8... のバージョンコメントを v2.0.0 から v2.0.0-release に修正
  • labeler-predict-issues.yml (2件): 同上
  • labeler-predict-pulls.yml (2件): 同上
  • labeler-promote.yml (2件): 同上
  • labeler-train.yml (6件): 同上

合計13件のバージョンコメント不一致を修正(5ファイルで計18行の変更)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • この修正は実装ロジックには影響しないメタデータのみの更新です
  • ワークフロー保守性の向上と、監査追跡の正確性確保を目的としています

#126464 Skip unsupported tests and increase timeouts for Apple mobile CI legs

  • 作成者: @kotlarmilos
  • 作成日時: 2026年04月02日 11:07:51(UTC)
  • マージ日時: 2026年04月02日 13:35:35(UTC)
  • ラベル: area-Infrastructure os-ios

概要

Apple mobile(iOS、tvOS、MacCatalyst)およびAndroidデバイス上でPlatformNotSupportedExceptionをスローするテストやプラットフォーム固有の動作により失敗するテストをスキップし、CI レグテストのタイムアウトを増加させる変更です。モバイル環境での不安定なテスト実行を改善し、CI パイプラインの信頼性を向上させることが目的です。

変更内容

  • CI パイプライン設定: runtime-extra-platforms-ioslikesimulator.yml および runtime-extra-platforms-maccatalyst.yml のタイムアウト値を増加
  • System.Diagnostics.Process テスト:
    • ProcessHandlesTests.cs: Apple mobile 環境でサポートされていない機能のテストをスキップ
    • ProcessTests.Unix.cs: プラットフォーム固有の動作による失敗をスキップ
    • ProcessTests.cs: 複数のテストをモバイルプラットフォーム向けにスキップ
  • System.Net.NameResolution テスト:
    • GetHostAddressesTest.cs: モバイル環境でサポートされていないテストをスキップ
    • GetHostEntryTest.cs: モバイル環境でサポートされていないテストをスキップ
  • 汎用コンテキスト回帰テスト: genericcontext.ilproj に新しいテストケースを追加

パフォーマンスへの影響

影響なし(テストの選別とタイムアウト調整のため、実行時パフォーマンスへの直接的な影響はありません)

関連Issue

その他

この変更は内部テスト実装の調整であり、公開APIには影響しません。


#126450 Rename *.Win32.cs files to *.Windows.cs under src/libraries

  • 作成者: @Copilot
  • 作成日時: 2026年04月02日 05:49:28(UTC)
  • マージ日時: 2026年04月02日 18:16:56(UTC)
  • ラベル: area-Meta

概要

src/libraries 配下のWindows固有実装ファイルの命名規則を統一し、歴史的遺物である *.Win32.cs から *.Windows.cs への一括リネームを実施しました。Windows Store アプリが完全なWin32 API サーフェスを使用できるようになった現在、この区別は不要になったため、命名を現代的な慣例に統一します。

変更内容

  • シンプルなリネームgit mv で履歴保持):FileSystemWatcher.Win32.csHelper.Win32.csSerialPort.Win32.csHijriCalendar.Win32.csTimeZoneInfo.Win32.cs を各 *.Windows.cs にリネーム
  • マージ型(既存の .Windows.cs に統合):Process.Win32.csProcessManager.Win32.csProcessStartInfo.Win32.csNamedPipeServerStream.Win32.csSerialStream.Win32.csEnvironment.Win32.cs の内容を対応する .Windows.cs ファイルに統合後に削除
  • プロジェクトファイル更新.csproj / .projitems の参照をすべて更新し、System.Diagnostics.Process.csproj の重複する ItemGroup ブロックを統合
  • コード規約修正:マージされたファイル(Process.Windows.csProcessManager.Windows.csEnvironment.Windows.cs)の全フィールドをクラスの最上部に移動、インデント修正、using ディレクティブのソート、不足していた空行を補足
  • ドキュメント更新docs/coding-guidelines/cross-platform-guidelines.md の例を Windows.cs 命名規則に更新

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

このPRはGitHub Copilotの支援を受けて作成されました。変更はコンパイル時間やランタイム動作に影響を与えず、純粋な命名規約と整理の統一です。


#126444 Bump github/gh-aw-actions from 0.64.2 to 0.65.4

  • 作成者: @dependabot[bot]
  • 作成日時: 2026年04月02日 01:55:25(UTC)
  • マージ日時: 2026年04月02日 08:00:33(UTC)
  • ラベル: area-codeflow

概要

GitHub Actions用のgh-aw-actionsを0.64.2から0.65.4にバージョンアップします。このアップデートには、GitHub Actionsワークフロー内のテンプレートインジェクション脆弱性の修正を含む複数のセキュリティ修正が含まれています。

変更内容

  • .github/workflows/code-review.lock.yml: gh-aw-actionsのバージョンを0.64.2から0.65.4に更新
  • .github/workflows/copilot-echo.lock.yml: gh-aw-actionsのバージョンを0.64.2から0.65.4に更新

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

このアップデートには複数のセキュリティ修正が含まれています:

  • sync-actionsワークフローの「Create tag」ステップにおけるテンプレートインジェクション脆弱性の修正(複数のコミットで対応)
  • 重複する環境変数キーの削除

バージョン0.65.0~0.65.4の複数のリリースが含まれており、主にセキュリティ脆弱性の修正と機能同期が目的です。


#126443 Fix MarshalArrayAsParam/AsLPArray/AsLPArrayTest test

  • 作成者: @eduardo-vp
  • 作成日時: 2026年04月02日 01:34:12(UTC)
  • マージ日時: 2026年04月02日 21:22:12(UTC)
  • ラベル: area-Interop-coreclr area-NativeAOT-coreclr

概要

P/Invoke でマーシャリングされた [Out, MarshalAs(UnmanagedType.LPArray)] string[] パラメータにおいて、ネイティブ バッファが初期化されないまま確保され、ネイティブ呼び出し側が未初期化ポインタを解放しようとするとヒープ破損が発生する問題を修正しました。Out のみのパラメータについて TransformManagedToNative がスキップされていた根本原因に対処しています。

変更内容

  • src/coreclr/tools/Common/TypeSystem/Interop/IL/Marshaller.cs: Out-only パラメータのマーシャリング処理で、LPArray 型の場合にネイティブ バッファを適切に初期化する処理を追加(24行追加/3行削除)
  • src/tests/Interop/PInvoke/Array/MarshalArrayAsParam/AsDefault/AsDefaultTest.cs: テスト ケースの調整・簡潔化(13行追加/30行削除)
  • src/tests/Interop/PInvoke/Array/MarshalArrayAsParam/AsLPArray/AsLPArrayTest.cs: テスト ケースの整理(2行削除)

パフォーマンスへの影響

影響なし

関連Issue

#81674

その他

この修正は P/Invoke マーシャラー(内部実装)における Out パラメータ処理の重要なバグ修正です。セキュリティ関連の問題(ヒープ破損)を防ぐものです。


#126440 Enable Server Garbage Collection in Runtime_126043 project

  • 作成者: @MichalStrehovsky
  • 作成日時: 2026年04月02日 00:14:24(UTC)
  • マージ日時: 2026年04月02日 20:41:49(UTC)
  • ラベル: area-GC-coreclr

概要

Runtime_126043 GC回帰テストプロジェクトでServer Garbage Collectionを有効化し、NativeAOTビルドがServer GC ランタイムに対してリンク/コンパイルされるようにします。これにより、NativeAOT outerloopのカバレッジを改善することを目指しています。

変更内容

  • Runtime_126043.csproj: <ServerGarbageCollection>true</ServerGarbageCollection> プロパティを追加(NativeAOTではServer GC選択がコンパイル時に決定されるため、テストプロジェクトで明示的に指定が必要)

パフォーマンスへの影響

影響なし(テスト設定の変更で、実行時の振る舞いに関する影響ではなく、テストビルド設定に関するもの)

関連Issue

#126043

その他

なし


#126433 Escape LDAP filter values in System.DirectoryServices.AccountManagement

  • 作成者: @tarekgh
  • 作成日時: 2026年04月01日 21:53:47(UTC)
  • マージ日時: 2026年04月02日 21:02:25(UTC)
  • ラベル: area-System.DirectoryServices

概要

System.DirectoryServices.AccountManagementにおけるLDAPフィルタ構築時の脆弱性を修正。ADUtils.EscapeRFC2254SpecialCharsを使用して、LDAP フィルタ文字列に挿入される値をエスケープし、()*\などのRFC 2254特殊文字を含む値がフィルタを破損させるのを防止します。併せて、エスケープ機能の単体テストを追加。

変更内容

  • ADStoreCtx.cs: foreignPrincipal.DistinguishedNamemember=... LDAP フィルタに挿入する際にエスケープ処理を適用
  • ADAMStoreCtx.cs: スキーマ/objectClass フィルタ構築時にauxClassNameおよびobjectClass値をエスケープ
  • ADUtils.cs: RFC 2254特殊文字エスケープ機能の外部公開インターフェース追加
  • ADUtilsTests.cs: EscapeRFC2254SpecialCharsの単体テストを新規追加(リフレクションを使用した内部APIテスト)
  • System.DirectoryServices.AccountManagement.Tests.csproj: テストファイルをプロジェクトに統合

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

本変更は内部実装レベルの修正であり、公開APIの変更はありません。ただし、特殊文字を含むDistinguishedNameやobjectClass値を使用するシナリオでLDAPフィルタの動作が改善される見込みです。セキュリティ強化を目的とした修正ですが、提供情報にCVE番号などの記載がないため、詳細な脆弱性情報は不明です。


#126432 Update Fedora Helix queues: latest 43 → 44

  • 作成者: @richlander
  • 作成日時: 2026年04月01日 20:44:55(UTC)
  • マージ日時: 2026年04月02日 23:36:13(UTC)
  • ラベル: area-Infrastructure

概要

Fedora Helix テストキューを Fedora 44(最新)に更新し、Fedora 43 を最古バージョンとして保持するビルドインフラの更新。Fedora 42 は削除されます。このPRはAI/Copilotツール(update-os-coverage skill)で自動生成されました。

変更内容

  • eng/pipelines/helix-platforms.yml: Fedora バージョン 43 → 44 に更新(2行変更)
  • eng/pipelines/libraries/helix-queues-setup.yml: extra-platforms Fedora バージョン 43 → 44 に更新(1行変更)

バージョン管理:

  • Fedora 44(新規最新): EOL ~2027-06
  • Fedora 43(最古): EOL 2026-12-09
  • Fedora 42(削除): EOL 2026-05-13

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • Fedora 44 Helix コンテナイメージ(fedora-44-helix-amd64)の利用可能性を確認済み
  • 変数名は変更なく、バージョン値のみ更新
  • 他の Linux ディストリビューション(Alpine、Azure Linux、CentOS Stream、Debian、openSUSE、Ubuntu)は既に最新バージョンに対応済み

#126413 Make sure m_synchronizedOrAsyncRetValVarIndex is always initialized

  • 作成者: @BrzVlad
  • 作成日時: 2026年04月01日 16:01:55(UTC)
  • マージ日時: 2026年04月02日 05:32:39(UTC)
  • ラベル: area-CodeGen-Interpreter-coreclr

概要

ランタイム非同期メソッドおよび同期メソッドにおいて、インタープリタが全IL命令を走査する前にエピローグを発行する場合、m_synchronizedOrAsyncRetValVarIndexが初期化されないという正確性の問題を修正します。この変数はCEE_RETによる戻り値の保存・復元に使用されるため、未初期化のままではCEE_RETが不正な値を参照する可能性がありました。

変更内容

  • src/coreclr/interpreter/compiler.cpp: 同期/非同期エピローグ発行時にm_synchronizedOrAsyncRetValVarIndexが未初期化の場合、メソッドの実際の戻り値型を使用して適切に初期化するよう修正

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

この問題は、インタープリタがスタック高さが未初期化のベーシックブロックの発行を遅延させるため、IL全体が走査される前にエピローグが発行される場合に発生します。修正により、不必要なダミー変数の生成を回避し、実際のメソッド戻り値型を用いた正しい変数初期化が保証されます。


#126399 [HTTP/SSL] Revert docker-compose command changes from PR #125995

  • 作成者: @ManickaP
  • 作成日時: 2026年04月01日 09:22:23(UTC)
  • マージ日時: 2026年04月02日 08:32:07(UTC)
  • ラベル: area-System.Net.Http

概要

PR #125995で導入されたdocker-composeからdocker composeへのコマンド変更をリバートするPRです。一方で、Azure Linux 3イメージプール(build.azurelinux.3.amd64.open)への移行は維持されます。HTTP/SSLストレステストおよびエンタープライズネットワーキングパイプラインにおけるDockerコンテナオーケストレーション機能に影響します。

変更内容

  • パイプライン設定ファイル(YAML): eng/pipelines/libraries/enterprise/linux.ymleng/pipelines/libraries/stress/http.ymleng/pipelines/libraries/stress/ssl.ymldocker composedocker-composeにリバート
  • ストレステストスクリプト: src/libraries/Common/tests/System/Net/StressTests/run-docker-compose.ps1およびrun-docker-compose.shでDockerコマンドをdocker-composeに戻す
  • イメージプール: Azure Linux 2204から Azure Linux 3への移行(Build.Ubuntu.2204.Amd64.Openbuild.azurelinux.3.amd64.open)は保持

パフォーマンスへの影響

影響なし

関連Issue

#125995#125748#125690

その他

本PRはAI/Copilot生成です。変更内容はビルドスクリプトとCI/CDパイプライン設定に限定され、公開APIや実装コードへの影響はありません。


#126392 [Wasm RyuJIT] Fix for assert in obscure block store scenario

  • 作成者: @kg
  • 作成日時: 2026年04月01日 01:37:15(UTC)
  • マージ日時: 2026年04月02日 21:00:13(UTC)
  • ラベル: arch-wasm area-CodeGen-coreclr

概要

WebAssembly RyuJIT コンパイラにおいて、ブロックストア(GT_STORE_BLK)の低レベル化とコード生成時に、ネイティブなmemory.copy/memory.fill命令を使用する特殊なケースで不正なアサーションが発生する問題を修正します。非フォルティング(non-faulting)アドレスの場合に不要な一時レジスタの生成を避けることで、レジスタ割り当てエラーを解決します。

変更内容

  • src/coreclr/jit/lowerwasm.cpp: ブロックストア操作のソース/デスティネーションアドレスを「複数利用」とマークする条件を改善。ヌルチェックまたは非ネイティブ低レベル化が必要な場合のみマークし、ネイティブ操作では不要な一時レジスタの生成を回避。
  • src/coreclr/jit/codegenwasm.cpp: ネイティブなmemory.copy/fill操作でヌルチェックが不要な場合、GetMultiUseOperandRegの呼び出しをスキップ。また、含有されたソースパスを保護するデバッグアサーションを追加。

パフォーマンスへの影響

影響なし(このPRは主にアサーションエラーの修正であり、正常系のパフォーマンスは変化しません)

関連Issue

#125756

その他

  • WebAssembly/RyuJIT特有のレジスタ割り当てロジックに関する修正
  • 内部実装(JIT lowering/codegen)の変更であり、公開APIへの影響なし
  • System.ValueTuple<T1,T2,T3,T4>CompareToメソッド生成時に発生していた問題を解決

#126378 [release/11.0-preview3] Fix publish-time Framework materialization for multi-client WASM and add test

  • 作成者: @github-actions[bot]
  • 作成日時: 2026年03月31日 22:28:36(UTC)
  • マージ日時: 2026年04月02日 23:02:10(UTC)
  • ラベル: Servicing-approved area-Build-mono

概要

WebAssembly (WASM) における複数クライアント構成で、Framework の発行時(publish-time)の具体化(materialization)に関する問題を修正するバックポート。Microsoft.NET.Sdk.WebAssembly.Pack のビルドターゲットを修正し、複数の Blazor クライアントを含むホストされたシナリオのテストを追加しています。

変更内容

  • Microsoft.NET.Sdk.WebAssembly.Browser.targets: Framework の発行時の具体化ロジックを修正(+7/-1)
  • Wasm.Build.Tests/Blazor/MiscTests.cs: 既存テストの整理と新規テスト追加(+50/-68)
  • BlazorMultiClientHosted テストアセット: 複数クライアント (Client1, Client2) と Server を含むテストプロジェクト構造を追加
    • Client1/Client2: 各クライアント Blazor プロジェクト
    • Server: ホストサーバー

パフォーマンスへの影響

影響なし

関連Issue

#126211

その他

  • 本 PR は release/11.0-preview3 への backport です
  • Customer Impact、Regression、Testing、Risk の詳細は PR 作成者により未記入です
  • WASM マルチクライアント Blazor ホスト構成での発行時の問題修正です

#126375 [Wasm RyuJIT] Set wasm's vector width to 128 bits

  • 作成者: @kg
  • 作成日時: 2026年03月31日 20:55:55(UTC)
  • マージ日時: 2026年04月02日 06:39:33(UTC)
  • ラベル: arch-wasm area-CodeGen-coreclr

概要

WebAssembly (Wasm32) ターゲットにおいて、Vector<T> の SIMD 幅を 128 ビットに明示的に設定することで、crossgen2 が Wasm シグネチャと依存関係分析を計算する際に LayoutInt.AsInt() の例外発生を修正します。また、Wasm クライアント側 JIT が存在しないため、命令セット最適化の楽観的な判定を無効化します。

変更内容

  • InstructionSetSupport.cs: GetVectorTSimdVector() メソッドで TargetArchitecture.Wasm32 に対して SimdVectorLength.None から SimdVectorLength.Vector128Bit を返すように変更
  • Program.cs: Wasm32 向けの命令セット最適化の楽観的な判定を無効化

パフォーマンスへの影響

影響なし。この変更はコンパイル時の依存関係分析の問題を修正するもので、ランタイムパフォーマンスに直接的な影響はありません。

関連Issue

#125756

その他

この修正は AOT コンパイル (crossgen2) の失敗を解決するもので、特に System.Private.CoreLib 内の Vector<T> 型に関する依存関係分析時に発生していたコンパイルエラーを修正します。


#126372 Fix crash in debugger transport shutdown path during process exit

  • 作成者: @Copilot
  • 作成日時: 2026年03月31日 19:22:16(UTC)
  • マージ日時: 2026年04月02日 21:11:43(UTC)
  • ラベル: area-Diagnostics-coreclr

概要

デバッガ転送セッションのプロセス終了時のシャットダウンパス(非Windows系)におけるNULLポインタ逆参照クラッシュを修正しました。DbgTransportSession::AbortConnection()が保護なしにm_channelポインタにアクセスしていた問題を、転送ワーカースレッドがこのポインタをNULLに設定・置き換えるため発生していました。

変更内容

  • unix/twowaypipe.cpp: g_pfnAbortTransportCallbackという静的なコールバックポインタを定義。TwoWayPipe::CreateServer()の初回呼び出し時に初期化し、VolatileStoreでメモリ順序を保証。AbortPipeServerImpl()がシグナルセーフなunlink()を呼び出して pipe 名を削除
  • dbgtransportsession.h: g_pfnAbortTransportCallbackを extern 宣言(非RIGHT_SIDE_COMPILE / HOST_UNIX環境下)
  • debugger.cpp: CleanupTransportSocket()VolatileLoadでコールバックを読み込み、非NULLならそれを呼び出す(DbgTransportSessionへの依存を排除)
  • dbgtransportsession.cpp: AbortConnection()メソッドを削除

パフォーマンスへの影響

影響なし

関連Issue

#126339#126372

その他

  • この修正はデバッガが接続されていないプロセス終了時に発生する間欠的なSIGSEGV(終了コード139)を解決。jitminopts/stress構成でのテスト失敗を排除
  • macOSのリンカエラー回避:シンボル定義をdbgtransportsession.cppからtwowaypipe.cppに移動。mscordbiRIGHT_SIDE_COMPILE定義によりシンボルを出力しないため、macOSの厳格なリンカでの未定義シンボルエラーが発生していた
  • AbortPipeServerImpl()はシグナルセーフ関数のため ASSERT/TRACE なし
  • デバッガ接続時の動作変更なし。リスク低

#126370 Add support for dumping interpreter IR for debugging purposes

  • 作成者: @BrzVlad
  • 作成日時: 2026年03月31日 19:07:17(UTC)
  • マージ日時: 2026年04月02日 13:58:06(UTC)
  • ラベル: area-CodeGen-Interpreter-coreclr

概要

インタープリタIR(中間表現)のダンプ機能をInterpCompilerクラスの外部で利用可能にするリファクタリング。デバッガから直接呼び出し可能なInterpDumpIR()エントリーポイントを追加し、クラッシュ時のデバッグを容易にします。

// デバッガから使用例
(lldb) call InterpDumpIR(pFrame->startIp)
// インタープリタバイトコードのIR表現をダンプ

変更内容

  • interpretershared.h: InterpMethodcodeSizeフィールドを追加し、コンパイル後のバイトコードサイズを保存
  • compiler.h: ポインタ名参照用の定数をファイルスコープに移動
  • compiler.cpp: IR出力機能を独立したDump*ヘルパー関数に抽出し、InterpDumpIR()デバッガエントリーポイントを実装

これらの変更により、PrintCompiledCode内に存在していたIR出力ロジックが、dataItemsやネームマップなどの必要情報を引数として受け取る形に再設計されました。

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • 一部データはJITインターフェースメソッドへのアクセス不可のため、フォーマットされないまま出力される
  • この機能は内部実装(ランタイム側のデバッグ支援)であり、公開APIではない

#126368 Cleanup holder types

  • 作成者: @AaronRobinsonMSFT
  • 作成日時: 2026年03月31日 18:52:06(UTC)
  • マージ日時: 2026年04月02日 15:40:13(UTC)
  • ラベル: area-VM-coreclr

概要

CoreCLR デバッグコンポーネントのネイティブリソース管理をリファクタリングし、レガシーな ArrayHolderNonVMComHolder スマートポインタクラスを holder.h で定義された新しい汎用ホルダーで置き換えました。arrayholder.hreleaseholder.h を削除し、トレイトベースの堅牢なホルダー実装(NewArrayHolderAStringHolderWStringHolderReleaseHolder など)を統一導入することで、コード安全性と保守性を向上させます。

変更内容

削除ファイル:

  • src/coreclr/inc/arrayholder.h - レガシー ArrayHolder 実装を削除
  • src/coreclr/inc/releaseholder.h - レガシー COM ReleaseHolder 実装を削除
  • src/coreclr/vm/vmholder.h - 不要なホルダー定義を削除

主要な変更:

  • holder.h に新しいトレイトベースホルダーを追加:LifetimeHolderMapViewHolderLocalAllocHolderHKEYHolderBSTRHolder
  • createdump 関連コード(threadinfo.cppdumpname.cppcrashreportwriter.cppcrashinfo.cpp など)で ArrayHolder<char>AStringHolderArrayHolder<WCHAR>WStringHolder に置き換え
  • NonVMComHolderReleaseHolder に置き換え(daccess.cppcdac.h
  • util.cpp でレジストリ操作ヘルパーを HKEYHolder を使用するようリファクタリング
  • sstring.cppFormatMessage の動的割り当てを LocalAllocHolder パターンに更新

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • コメントのタイプ修正(RelesaeRelease
  • スタックフレーム管理で .Detach() から .Extract() へ更新
  • COM インターフェース所有権管理のコントラクト注釈を改善
  • この変更はランタイム内部実装(デバッグ/ダンプ生成ユーティリティ)に限定されており、公開 API には影響なし

#126366 Rewrite UTF8 string marshalling test suite with Theory methods and bool-returning native functions

  • 作成者: @Copilot
  • 作成日時: 2026年03月31日 18:39:12(UTC)
  • マージ日時: 2026年04月02日 21:45:14(UTC)
  • ラベル: area-System.Runtime.InteropServices

概要

UTF8文字列マーシャリング相互運用テスト スイートを最新化するもので、ループ駆動の単一[Fact]テストを粒度の細かい[Theory]ベースのテストに分割し、ネイティブ関数が例外発生ではなくBOOL戻り値で検証結果を報告するよう変更しています。複数のテストクラスをStringMarshaling.UTF8Testsに統合し、テストの可読性と保守性を向上させています。

変更内容

C#側(UTF8Test.cs):

  • 複数のUTF8テストクラス(UTF8StringTestsUTF8StringBuilderTestsなど)をStringMarshaling.UTF8Testsに統合
  • ループ駆動の単一[Fact]テストを[MemberData]ソースを使用した個別の[Theory]メソッドに分割
  • StringParameterRefStringBuilderParameterInOutTestStructWithUtf8FieldのP/Invoke宣言をbool戻り値([return: MarshalAs(UnmanagedType.Bool)]属性付き)に更新
  • 例外発生ではなくAssert.*メソッドでアサーション実施
  • バグ修正:TestOutStringParameterが誤ってStringParameterInOutを呼び出していた問題をStringParameterOut呼び出しに修正

ネイティブ側(UTF8TestNative.cpp):

  • StringBuilderParameterInOutTestStructWithUtf8FieldStringParameterRefを戻り値なし(void)からBOOLに変更、検証失敗時は例外ではなくFALSEを返却
  • UTF8変換ヘルパー(utf16_to_utf8utf8_to_utf16)で失敗時にnullptrを返すよう変更
  • 全ての失敗パスでメモリリーク修正:エラー発生時に割り当てられたバッファを返却前に解放

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

このPRはテスト保守性の改善が主眼であり、機能的には既存動作を保持しながらテストコード構造を現代化するものです。[Theory]テストへの分割により、個別テストケースの失敗原因が特定しやすくなり、テスト報告の詳細度が向上します。


#126320 Fix InMemoryDirectoryInfo path resolution for '..' and relative paths

  • 作成者: @svick
  • 作成日時: 2026年03月30日 15:50:49(UTC)
  • マージ日時: 2026年04月02日 08:48:39(UTC)
  • ラベル: area-Extensions-FileSystem

概要

InMemoryDirectoryInfoのパス解決バグ(..パターンおよび相対パスの処理)を修正し、相対パスが正しくFullNameに対して解決されるようにしました。GetDirectoryGetFileは、入力パスとFullNamePath.Combineで結合し、Path.GetFullPathで正規化することで、..セグメントを適切に解決します。また、パターンマッチャーの動作を保持するため、isParentPathフラグでName".."として保存します。

変更内容

  • InMemoryDirectoryInfo.cs: GetDirectoryGetFileのパス解決ロジックを修正。相対パスと..パターンをFullNameに対して正規化する
  • DirectoryInfoWrapper.cs: GetDirectoryメソッドを簡略化。常にPath.Combineを使用してパスを構築するように統一
  • FileAbstractionsTests.cs: テストを[Theory]に変換し、DirectoryInfoWrapperInMemoryDirectoryInfoの両方に対して実行
  • FunctionalTests.cs: ../Folder2/**パターンを使用したエンドツーエンドテスト(VerifyInMemoryDirectoryInfo_ParentPatternMatches)を追加
  • DisposableFileSystem.cs: useInMemoryフラグを追加し、インメモリモード時はディスク上にファイルを作成せず、記録されたCreateFile呼び出しからInMemoryDirectoryInfoを構築

パフォーマンスへの影響

影響なし

関連Issue

#99691

その他

本修正はMicrosoft.Extensions.FileSystemGlobbingの内部実装の改善であり、パブリックAPIの変更はありません。これまでInMemoryDirectoryInfoは相対パスの解決に失敗していたため、パターンマッチング機能が正常に動作しませんでした。修正後は、ディスク上のDirectoryInfoと同等の動作が期待できます。


#126306 Add Process tests for MacCatalyst and fix MacCatalyst support

  • 作成者: @Copilot
  • 作成日時: 2026年03月30日 11:00:56(UTC)
  • マージ日時: 2026年04月02日 17:56:41(UTC)
  • ラベル: area-System.Diagnostics.Process

概要

MacCatalystプラットフォームでのSystem.Diagnostics.Processのテスト整備と実装修正。RemoteExecutorが非サポートのモバイルプラットフォーム(Android・MacCatalyst)向けに、Unix標準ツール(lssleep)を使用した統一テストスイートを追加し、Console.OpenStandard*Handle()の不適切な利用を防ぐ修正を実施。

変更内容

  • ProcessTests.Mobile.cs(新規): Android・MacCatalyst共有の6つのモバイルプロセステスト(プロセス開始、標準出力/標準エラー出力リダイレクト、プロセス終了、非ゼロ終了コード、プロセス名取得、標準ハンドルI/O)

  • SafeProcessHandle.Unix.cs: UsesTerminalヘルパーメソッドを抽出し、ProcessUtils.IsTerminalに委譲。インラインInterop.Sys.IsATty呼び出しを統一

  • ProcessUtils.ConfigureTerminalForChildProcesses.iOS.cs(新規): iOS/tvOS/MacCatalystで常にfalseを返すIsTerminalメソッド追加

  • ProcessUtils.ConfigureTerminalForChildProcesses.Unix.cs: IsATty呼び出しをラップするIsTerminalメソッド追加

  • ProcessUtils.cs: PlatformSupportsConsole(Android・MacCatalystでfalse)を追加し、PlatformDoesNotSupportProcessStartAndKillを正の意味のPlatformSupportsProcessStartAndKillに変更

  • ProcessTests.cs・ProcessHandlesTests.cs: MacCatalystをスキップ対象プラットフォームに追加(iOS/tvOS同様にシェルスクリプト実行制限があるため)

  • System.Diagnostics.Process.Tests.csproj: MacCatalyst TFMを追加、Unix条件をMacCatalystに対応

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

内部実装の修正: Console.OpenStandard*Handle()はAndroid/MacCatalystでは利用不可であり、これをゲートするロジックを追加。プラットフォーム判定の一元化により、複数箇所での矛盾した判定を解消。 互換性: 破壊的変更なし(Android・MacCatalystでは新機能のテスト追加のみ)


#126261 Fix FastReducer.SubMod infinite loop on 32-bit platforms

  • 作成者: @stephentoub
  • 作成日時: 2026年03月28日 18:20:48(UTC)
  • マージ日時: 2026年04月02日 19:14:59(UTC)
  • ラベル: area-System.Numerics

概要

PR #125799でBigInteger内部がnuint limbs対応に書き直された際、FastReducer.SubModの補償ループが32ビットプラットフォームで無限ループになる問題を修正しました。Barrett reduction後のk limb截断では、AddSelfループが最大2^64回反復する可能性があり、32ビット環境で実行不可能でした。修正では、unsigned underflowを許容するインライン減算に置き換え、Barrett reductionの数学的保証を活用します。

変更内容

  • BigIntegerCalculator.FastReducer.cs: FastReducer.SubModAddSelf補償ループを削除し、unsigned wrap-aroundを許容するインライン減算に変更。修正前の実装が依存していた特性(k limb截断後の結果は2·modulus < b^kを満たす)を復活。
  • modpow.cs: 32ビット環境で無限ループしていたFastReducer_AssertFailure_RegressionTest[ActiveIssue]スキップを削除し、テストを再有効化。

パフォーマンスへの影響

  • 32ビットプラットフォームで無限ループしていたテストが~10秒で完了するように改善。
  • 補償ループ削除により、Barrett reduction実装の効率向上。

関連Issue

#126212 #125799(参照) #126216(参照)

その他

  • System.Runtime.Numerics全3,031テストがx64で合格確認済み。
  • 修正はBarrett reductionの数学的保証を活用:真の剰余が[0, 2·modulus]範囲内であること、k limb截断後のunsigned減算underflowが自然に正しい値にwrapされること。
  • 前バージョンコード(#125799前)はこの特性に依存していたが、debug assertionが#98212で抑制されていた。

#126231 Add GetCodeHeapList cDAC API

  • 作成者: @rcj1
  • 作成日時: 2026年03月27日 22:41:47(UTC)
  • マージ日時: 2026年04月02日 01:30:32(UTC)
  • ラベル: area-Diagnostics-coreclr

概要

JIT コードヒープの列挙と詳細情報取得を行うための新しい cDAC API GetCodeHeapListGetCodeHeapInfoIExecutionManager コントラクトに追加します。CoreCLR VM の型記述子拡張、マネージドコントラクト実装、レガシ SOS DAC アダプタ、およびテストカバレッジを含みます。

変更内容

  • コントラクト API(公開): IExecutionManagerGetCodeHeapListGetCodeHeapInfo を追加し、コードヒープ情報を取得する ICodeHeapInfo インターフェースを定義
  • 実装層: ExecutionManagerCore でヒープリスト走査とヒープ型ベースの情報投影を実装
  • VM 型サポート: CodeHeapLoaderCodeHeapHostCodeHeap 用のデータリーダーを追加
  • CoreCLR データ記述子: codeman.h/cppdynamicmethod.h/cppm_heapType フィールド(Loader vs Host の識別用)を追加・初期化
  • レガシ互換性: ISOSDacInterface.GetCodeHeapList を cDAC ExecutionManager コントラクト経由で実装し、DacpJitCodeHeapInfo を入力
  • テスト: ユニットテスト(MockDescriptors)とダンプベース統合テストを追加
  • ドキュメント: ExecutionManager.md に新規 API と必須フィールドを文書化

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

本変更は既存の cDAC インフラストラクチャの拡張であり、破壊的変更なし。診断ツール(SOS デバッガ拡張など)がコードヒープ情報へアクセスするための基盤を整備するもの。


#126211 Fix publish-time Framework materialization for multi-client WASM and add test

  • 作成者: @lewing
  • 作成日時: 2026年03月27日 17:22:12(UTC)
  • マージ日時: 2026年04月02日 23:12:10(UTC)
  • ラベル: area-Build-mono

概要

マルチクライアント・ホスト型Blazor WASMシナリオにおけるパブリッシュ時の静的ウェブアセット処理の不具合を修正。複数のクライアントプロジェクト(Client1、Client2)がパブリッシュされる際に、CopyToPublishDirectory=Neverでマークされたアイテムが不正に処理され、ビルド時にマテリアライズされたFrameworkアセットが同じSDKパスに置き換わることで、重複キーエラーが発生していました。GroupResolvedFilesToPublishからCopyToPublishDirectory=Neverアイテムをスキップすることで、プロジェクトごとのユニークなIdentityを保持するように修正。

変更内容

  • Microsoft.NET.Sdk.WebAssembly.Browser.targets: ConvertDllsToWebcilからPassThroughCandidatesをキャプチャし、DefineStaticWebAssets(SourceType="Framework")およびUpdatePackageStaticWebAssets経由でプロジェクトごとのマテリアライズを実現。AssetMode=Allを設定してホストサーバーへのアセット伝播を確保。
  • MiscTests.cs: MultiClientHostedBuildAndPublishテストを追加。Debug/Release × build/publishの組み合わせでテスト。
  • BlazorMultiClientHosted テストアセット(新規): Server + Client1 + Client2プロジェクト構成で、両クライアントのフレームワークディレクトリとランタイムファイル(dotnet..js、dotnet.native.wasm)の存在を検証。

パフォーマンスへの影響

影響なし

関連Issue

#125329(ビルド時Framework マテリアライゼーション) 依存: dotnet/sdk#53135(Framework SourceType インフラストラクチャ)

その他

このPRはビルド時と整合した公開時の静的ウェブアセット処理パイプラインを実現。内部実装の修正であり、公開APIへの影響はありません。ApplyCompressionNegotiationでの重複キー例外(Duplicate Identity)が直接的な問題でした。テストアセットは専用のBlazorMultiClientHostedを新規作成し、将来の回帰防止に対応。


#126181 Include file path in BadImageFormatException thrown from AddModule

  • 作成者: @Copilot
  • 作成日時: 2026年03月27日 03:15:34(UTC)
  • マージ日時: 2026年04月02日 00:27:25(UTC)
  • ラベル: area-NativeAOT-coreclr

概要

CompilerTypeSystemContext.AddModuleBadImageFormatExceptionがスローされる際に、ファイルパスを含めることで診断情報を改善します。PEReaderの遅延初期化により、例外メッセージにどのファイルが失敗したかの情報がなかったため、例外をキャッチして新たにファイルパスを付加した例外を再スローするようにしました。

変更前:

System.BadImageFormatException: Unknown file format.

変更後:

System.BadImageFormatException: Bad IL format. The format of the file 'C:\foo\bar.dll' is invalid.

変更内容

  • ExceptionStringID.cs — 新しい BadImageFormatFileName 列挙値を追加
  • TypeSystem/Resources.resx — ファイルパス付きエラーメッセージのリソース文字列を追加
  • TypeSystemException.csBadImageFormatException(ExceptionStringID, string)コンストラクタを追加
  • ThrowHelper.csThrowBadImageFormatException(ExceptionStringID, string)オーバーロードを追加
  • CompilerTypeSystemContext.csAddModule.HasMetadata.PEHeadersアクセスをtry/catchでラップし、BadImageFormatExceptionをキャッチして完全なファイルパスを含む新しい例外を再スロー
  • TypeLoaderExceptionHelper.cs (NativeAOT) — 新しい文字列IDをマップし、ファイル名パラメータ付きオーバーロード CreateBadImageFormatException(ExceptionStringID, string) を追加
  • System.Private.CoreLib/Strings.resx (NativeAOT) — 対応するSR文字列を追加

パフォーマンスへの影響

影響なし

関連Issue

#126181

その他

この変更は内部実装(TypeSystem例外インフラストラクチャ)の改善です。公開APIに対する破壊的変更はありません。無効なPEファイル(.pdbなど)が渡された場合のデバッグが容易になります。


#125973 Improve InvalidCastException message for generic argument in different ALCs

  • 作成者: @Copilot
  • 作成日時: 2026年03月23日 16:55:59(UTC)
  • マージ日時: 2026年04月02日 17:14:07(UTC)
  • ラベル: area-AssemblyLoader-coreclr

概要

異なるAssembly Load Context(ALC)から読み込まれた型間のキャストでInvalidCastExceptionが発生した場合、特にジェネリック型の型引数が異なる場合の診断メッセージを改善します。ジェネリック型引数の違いと、それぞれが属するアセンブリ/ALC情報をエラーメッセージに含めることで、デバッグを容易にします。

変更内容

  • CoreCLR(excep.cpp): CheckAndThrowSameTypeAndAssemblyInvalidCastExceptionを拡張し、GetGenericArgAssemblyDetailInfoFindFirstDifferingGenericArgumentヘルパー関数を追加。外側のジェネリック型は同じでも型引数が異なる場合、最初に異なる型引数とそのアセンブリ/ALC情報を検出・報告。
  • リソースファイル(mscorrc.rc, resource.h): 診断メッセージのローカライズ対応として、新リソースID(IDS_EE_CANNOTCASTSAME_DETAIL_BYTE_ARRAYなど4つ)を追加し、ハードコードされた形式文字列をリソーステーブルに移行。
  • テスト(AssemblyLoadContextTest.cs): 同名型の異なるALC間キャストと、ジェネリック型引数が異なるALC間キャストの例外メッセージを検証する2つのテストを追加。

例:

// 改善前:両方のTypeが同じ情報を表示
Type A originates from '...' in the context 'Default'...
Type B originates from '...' in the context 'Default'...

// 改善後:異なる型引数の情報を詳細に表示
Type A has a generic argument 'InvalidCastSharedType' that originates from '...' in the context '"TestALC" System.Runtime.Loader.AssemblyLoadContext #0'...
Type B has a generic argument 'InvalidCastSharedType' that originates from '...' in the context 'Default'...

パフォーマンスへの影響

影響なし

関連Issue

#80526

その他

内部実装(CoreCLRのランタイム例外処理)の改善であり、公開APIに対する破壊的変更はありません。例外メッセージの詳細化のみです。


#125931 [cDAC] Add API TranslateExceptionRecordToNotification

  • 作成者: @rcj1
  • 作成日時: 2026年03月22日 20:10:53(UTC)
  • マージ日時: 2026年04月02日 17:28:10(UTC)
  • ラベル: area-Diagnostics-coreclr

概要

cDAC(Common Data Access Component)にTranslateExceptionRecordToNotification APIを追加し、デバッガ通知の例外レコードをマネージド側でデコードするための機能を実装しました。新しいINotifications契約APIとそれに関連する公開データ型(NotificationTypeGcEventTypeGcEventData)を追加し、レガシーIXCLRDataProcess COM相互運用性に統合しています。

変更内容

  • INotifications.cs: 新しいINotifications契約APIを定義。通知タイプ検出とパースヘルパー、及び公開通知関連データ型を追加
  • Notifications_1.cs: 契約バージョン1向けのINotifications API実装
  • SOSDacImpl.IXCLRDataProcess.cs: TranslateExceptionRecordToNotificationを新しいNotifications契約を使用して実装(約130行追加)
  • IXCLRData.cs: EXCEPTION_RECORD64構造体の追加とCOMインターフェース署名の型指定化
  • ClrDataExceptionState.cs: 例外状態COMメソッド署名をEXCEPTION_RECORD64*を使用するように更新
  • ClrDataModule.cs: リファクタリング(51行追加/40行削除)
  • NotificationsTests.cs: INotificationsのデコード/パース動作を検証する単体テストを追加

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • レガシーIXCLRDataProcess実装とマネージドcDAC層の統合により、デバッガ通知処理がマネージド側で利用可能になります
  • 変更はレガシーCOM相互運用性レイヤーであり、新規追加であるため、既存の互換性への影響はありません
  • 設計ドキュメント(Notifications.md)が追加され、新しいNotifications契約APIについて文書化されています

#125915 Fix flaky FileSystemWatcher_Directory_Delete_MultipleFilters due to Windows NTFS pending-delete race

  • 作成者: @Copilot
  • 作成日時: 2026年03月22日 04:41:14(UTC)
  • マージ日時: 2026年04月02日 16:38:58(UTC)
  • ラベル: area-System.IO

概要

Windows NTFS の pending-delete レースコンディションと FileSystemWatcher テスト基盤のハンドルリークにより発生していた DirectoryNotFoundException フレーキーテストを修正するPRです。

主な修正内容:

  1. ExpectEvent の retry ループを簡潔化し、各試行後に FileSystemWatcher を確実に破棄
  2. ディレクトリ/ファイル削除テストのクリーンアップ処理で、再作成前にパスが完全に削除されるまで待機するロジックを追加

変更内容

  • FileSystemWatcherTest.cs: ExpectEvent メソッドの retry ループを改善。各 retry で新規作成した FileSystemWatcherusing ステートメント内でスコープし、試行後に確実に破棄する構造に変更。新規追加の WaitForPathToBeDeleted ヘルパーメソッドを利用
  • FileSystemWatcher.unit.cs: FileSystemWatcher_Directory_Delete_MultipleFilters および FileSystemWatcher_File_Delete_MultipleFilters テストのクリーンアップ lambda で、Create() 呼び出し前に WaitForPathToBeDeleted(path) を実行。パスが完全に削除されることを確認してから再作成

パフォーマンスへの影響

影響なし

関連Issue

#98193

その他

  • 変更は テスト基盤 (System.IO.FileSystem.Watcher.Tests) に限定される内部実装
  • 公開API への影響なし
  • Windows NTFS における削除ハンドルのクローズ後の実際の削除完了までのタイミング問題に対する堅牢な対策

#125891 Port ComInterfaceGenerator to string writing

  • 作成者: @DoctorKrolic
  • 作成日時: 2026年03月21日 17:15:23(UTC)
  • マージ日時: 2026年04月02日 23:11:20(UTC)
  • ラベル: area-System.Runtime.InteropServices community-contribution

概要

ComInterfaceGeneratorをRoslyn SyntaxNodeベースの出力からIndentedTextWriterを使用した文字列ベースの出力に移行するポート作業です。スタブノード生成の一時的な互換性維持のため、ヘルパーメソッドを追加し、複数に分割されていた部分宣言を統合することで生成コードの構造を簡素化しました。

変更内容

  • ComInterfaceGenerator.cs: コア実装を文字列出力に移行。部分宣言を統合し、vテーブル構造体、インターフェース情報、実装、IUnknown派生インターフェースの各部を直接出力(+169/-409)
  • IndentedTextWriterExtensions.cs: 正規化された多行SyntaxNodeIndentedTextWriterに書き込むヘルパーメソッドを新規追加(+43行)
  • SyntaxKindExtensions.cs: SyntaxKind宣言をキーワード文字列にマッピングするヘルパーを新規追加(+19行)
  • AttributeInfo.cs: 属性型を完全修飾文字列で保持するよう変更、テキスト出力に最適化(+2/-12)
  • ComMethodContext.cs: スタブ出力に関連するSyntaxNodeプロパティを削除(-55行)
  • ItemAndSyntaxes.cs: マルチ出力生成用の古いラッパークラスを削除(-53行)
  • ContainingSyntaxContext.cs: SyntaxKindExtensionsを使用するよう型ヘッダー出力を更新(+1/-11)
  • TypeNames.cs: 文字列出力リファクタリング後の不要なキャッシュヘルパーを削除(-25行)

パフォーマンスへの影響

影響なし(提供情報に具体的なベンチマーク結果なし)

関連Issue

#95882

その他

  • スタブノードは生成パイプラインのどこかでSyntaxノードとして生成され続けるため、LibraryImportジェネレータでもこのインフラストラクチャが再利用されます
  • ベースラインインデント対応により、生成コードのフォーマットが崩れるのを回避しています
  • 内部実装の変更であり、公開APIへの影響はありません

#125710 Fix UF_HIDDEN causing st_flags to be dropped in ConvertFileStatus; add PAL_UF_HIDDEN static assert

  • 作成者: @Copilot
  • 作成日時: 2026年03月18日 03:36:56(UTC)
  • マージ日時: 2026年04月02日 14:44:39(UTC)
  • ラベル: area-System.IO

概要

macOS/BSDプラットフォームでConvertFileStatusst_flagsの全ビットをUF_HIDDENのみに縮約していた不具合を修正します。この問題により、.NETが隠し属性を変更する際に他のBSDユーザーフラグ(例:UF_IMMUTABLEUF_NODUMP)が意図せず消去される可能性がありました。合わせて、PAL_UF_HIDDENUF_HIDDENが一致することを検証するstatic assertを追加しています。

変更内容

  • pal_io.cConvertFileStatus関数: st_flagsを全て保持するよう修正。従来のUF_HIDDENビットのみを抽出する条件分岐を削除し、HAVE_STAT_FLAGSdefined(UF_HIDDEN)の両条件下で完全なst_flags値をFileStatus.UserFlagsに代入するように変更
  • pal_io.c — static assert追加: PAL_UF_HIDDEN == UF_HIDDENの一致を検証するcompile-time assertを追加(フラグの直接OS渡却が前提のため必須)
  • pal_io.c — コメント修正: static assertコメント内の文法を修正
  • テストコード追加: macOS環境で隠し属性トグル時に他のユーザーフラグが保持されることを検証する回帰テストを追加
  • テストプロジェクト設定: Unix interop ソース(Interop.StatInterop.LChflags)をテストプロジェクトに追加

パフォーマンスへの影響

影響なし

関連Issue

#69004

その他

  • 管理側コード(FileStatus.Unix.cs)は既にビット演算(& UF_HIDDEN| UF_HIDDEN& ~UF_HIDDEN)を使用しているため、追加フラグの処理は正常に機能します
  • UF_HIDDENが定義されていないプラットフォームではUserFlags0のままになり、無関係なst_flagsビットが0x8000と重複する誤検知を防ぎます
  • 内部実装(PAL層)の修正で、公開API仕様には変更なし

#125629 Use SDK NativeCompile hook for ILC publish integration

  • 作成者: @sbomer
  • 作成日時: 2026年03月16日 18:59:06(UTC)
  • マージ日時: 2026年04月02日 16:28:28(UTC)
  • ラベル: area-NativeAOT-coreclr

概要

NativeAOT publish統合を、SDK提供のNativeCompileターゲットフック経由で実装するよう変更しました。従来の脆弱なBeforeTargets/AfterTargetsによる依存関係管理から移行し、publish パイプラインの順序付けをより明示的で堅牢にします。

変更内容

  • Microsoft.NETCore.Native.Publish.targets: ComputeLinkedFilesToPublishの機能をNativeCompileに移行。ILC compilation、linking、publish item更新を実装。後方互換性のため空のComputeLinkedFilesToPublishターゲットを保持。
  • Microsoft.NETCore.Native.targets: SetupPropertiesComputeIlcCompileInputsからBeforeTargets="Publish"を削除、依存チェーン(DependsOnTargets)に移行。
  • Microsoft.DotNet.ILCompiler.SingleEntry.targets: ImportRuntimeIlcPackageTargetからBeforeTargets="Publish"を削除、_IlcReferencedAsPackageフラグで条件制御。
  • テストビルド infrastructure: ILCompilerTargetsPathSDK hook経由でのILC targets import、PublishAot/_IlcReferencedAsPackage設定、EnableSingleFileAnalyzerの無効化。

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • 破壊的変更: 直接的な破壊的変更なし(後方互換性ターゲットを保持)
  • 内部実装: MSBuild target sequencing の内部実装変更。公開API変更なし。
  • 重要: SDK版(17.x以上と推定)のNativeCompileplaceholder targetを活用することで、ILLinkなど他のSDK要素との相互作用がより予測可能になります。

#125625 Make MountHelper.Unmount resilient to expected cleanup errors in mount volume tests

  • 作成者: @Copilot
  • 作成日時: 2026年03月16日 17:14:20(UTC)
  • マージ日時: 2026年04月02日 07:17:00(UTC)
  • ラベル: area-System.IO

概要

Windows ボリュームマウントテストのfinallyブロック内でアンマウント時に発生する予期されたWin32エラーを無視し、テスト失敗を防ぐための改善。MountHelper.UnmountdeleteDirectoryパラメータを追加し、エラーコード 4390(ERROR_NOT_A_REPARSE_POINT)と 3(ERROR_PATH_NOT_FOUND)をサイレントに処理することで、クリーンアップ処理をより堅牢にします。

変更内容

  • ReparsePointUtilities.cs: MountHelper.Unmountメソッドにbool deleteDirectory = falseオプションパラメータを追加。エラーコード 4390 と 3 を無視し、deleteDirectory: true時はアンマウント後にディレクトリを削除。
  • ReparsePoints_MountVolume.cs: 複数のfinallyブロック内のクリーンアップロジックを簡潔化(if (Directory.Exists) { try { Unmount } catch { } DeleteDir } パターンを MountHelper.Unmount(mountedDirName, deleteDirectory: true) に統一)。
  • Delete_MountVolume.cs: シナリオ 1, 2, 3.1, 3.2 のクリーンアップをシンプル化。シナリオ 3.3~3.5 は変更なし。
  • Delete.Windows.cs: Delete_VolumeMountPointのクリーンアップを同様に簡潔化。

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

この変更はテスト実装(内部テストユーティリティ)の修正であり、ランタイムやパブリックAPIに影響しません。クリーンアップ時の予期されたエラーに対する例外処理を共通化することで、テストの脆弱性を低減しています。


#125457 Fix NonBacktracking correctness issues and exponential blowup on nested loops

  • 作成者: @danmoseley
  • 作成日時: 2026年03月11日 21:18:21(UTC)
  • マージ日時: 2026年04月02日 16:40:19(UTC)
  • ラベル: area-System.Text.RegularExpressions

概要

NonBacktracking正規表現エンジンの入れ子ループパターン(例:((a)*)*)における指数的な時間計算量の問題を修正。深さ2000のネストでの単一文字マッチが10.7秒かかる問題を、ループフラット化、キャッシング、NFA推定値の改善により解決。匹敵の線形時間保証は維持される(パターン複雑度定数の指数的増加をパターン構築段階で制限)。

変更内容

SymbolicRegexNode.cs

  • CreateLoopメソッドにループフラット化ロジックを追加:(R*)*(R+)*(R*)+などを簡略化(内側の下限が0または1、同じ遅延性、キャプチャ効果なしという条件下)
  • StripEffectsメソッドにキャッシング機構を実装:DAG内の共有部分木を複数回訪問することによる指数的作業を削減
  • CountSingletonsメソッドを強化:入れ子の無制限ループを検出し、ネストレベルごとに推定値に2を乗算。ContainsNestedUnboundedLoopヘルパーメソッドで、Concat/Effect/DisableBacktrackingSimulationラッパーを通して入れ子検出

SymbolicRegexBuilder.cs

  • ループ フラット化の定数定義(8行追加)

テスト(FunctionalTests/Regex.Match.Tests.cs、UnitTests/SymbolicRegexTests.cs)

  • 深さ2000のストレステスト追加:無制限パターン(*+)はNotSupportedExceptionで正しく拒否、有界パターン({0,1})は正常に動作
  • CountSingletons防御の単体テスト:遅延性交互パターン(深さ20)、キャプチャグループパターン(深さ20)が安全閾値超過、フラット化後の同一遅延パターン(深さ100)は安全範囲内

パフォーマンスへの影響

劇的な改善 修正前の実行時間(深さ15、入力長1000):1.62秒 → 修正後:許容可能(詳細なベンチマーク数値なし) 修正前の実行時間(深さ2000、入力長1):10.7秒 → 修正後:パターン構築段階で早期拒否により実質ゼロ

改善メカニズム:

  1. ループフラット化による中間ノード数削減:O(2^N)→ O(1)
  2. StripEffects キャッシング:共有部分木の重複訪問排除
  3. 早期拒否:スケジュール不可能なパターンをコンパイル時に検出

関連Issue

#84188

その他

  • 線形時間保証の維持:NonBacktrackingエンジンは入力長Nに対してO(C × N)の保証を維持。指数的増加は「パターン複雑度定数C」に限定(実際の使用ではネストが15レベル以上の冗長な定量子は稀)
  • 互換性:セマンティクス保存条件下でのみ簡略化を適用。安全でないパターンは`Not

#125441 Reduce Apple mobile CI matrix

  • 作成者: @kotlarmilos
  • 作成日時: 2026年03月11日 13:52:24(UTC)
  • マージ日時: 2026年04月02日 11:06:18(UTC)
  • ラベル: area-Infrastructure os-ios

概要

Apple モバイルプラットフォーム(iOS/tvOS シミュレータ・デバイス、MacCatalyst)のCI テストマトリックスを削減し、macOS キューの混雑を緩和しながら、デフォルトシナリオに焦点を当てるようにパイプライン設定を最適化します。テストカバレッジは一般的な開発者・ユーザーシナリオに絞られています。

変更内容

  • eng/pipelines/runtime.yml: tvOS デバイスと MacCatalyst Mono smoke テストをデフォルトパイプラインから削除
  • eng/pipelines/extra-platforms/runtime-extra-platforms-ioslike.yml: iOS デバイステストを削除し、iOS系デバイステストを tvOS のみに統一
  • eng/pipelines/extra-platforms/runtime-extra-platforms-ioslikesimulator.yml: シミュレータテストを iOS シミュレータに限定、Debug ビルドに切り替え、NativeAOT シミュレータランタイムテストを削除
  • eng/pipelines/extra-platforms/runtime-extra-platforms-maccatalyst.yml: MacCatalyst x64 カバレッジを削除、arm64 のみに限定
  • src/libraries/System.IO.MemoryMappedFiles/tests/MemoryMappedFile.CreateFromFile.Tests.cs: tvOS テストの謎のクラッシュが解決され、3 つのテストスイート(System.IO.Hashing.Tests、System.IO.MemoryMappedFiles.Tests、System.Runtime.Numerics.Tests)を再有効化
  • ランタイムエントリの順序を統一(Mono → NativeAOT → CoreCLR、各グループ内で library → runtime)

パフォーマンスへの影響

CI キューの混雑軽減による全体的なビルド時間短縮が期待されます。具体的なベンチマーク数値は提供されていません。

関連Issue

なし

その他

この変更は CI インフラストラクチャのみに関連し、ランタイムやライブラリのパブリック API、コンパイラ動作に直接的な影響はありません。テストカバレッジの削減により、一部の珍しいプラットフォーム組み合わせ(iOS device、MacCatalyst x64など)での回帰検出能力が低下する可能性があります。


#124650 [STJ Source gen] Use UnsafeAccessor/reflection for inaccessible members

  • 作成者: @Copilot
  • 作成日時: 2026年02月20日 15:14:46(UTC)
  • マージ日時: 2026年04月02日 16:42:22(UTC)
  • ラベル: area-System.Text.Json source-generator

概要

System.Text.Json ソースジェネレータが、[UnsafeAccessor] (NET8+ の非ジェネリック型) またはキャッシュされたリフレクションデリゲート (旧ターゲット/ジェネリック型) を使用して、アクセス不可能なメンバーへのアクセスを実現します。これにより、3つの以前未対応シナリオが可能になります:

  1. Init-only プロパティのデフォルト値保持: JSON に存在しない場合、コンストラクタの初期化式から除外し、構築後に UnsafeAccessor/リフレクションで設定することで、C# プロパティ初期化子のデフォルト値を保持
  2. [JsonInclude] によるアクセス不可能プロパティのサポート: getters/setters がアクセス不可能な場合でも完全に機能
  3. [JsonConstructor] のアクセス不可能コンストラクタのサポート: SYSLIB1222 警告なく呼び出し可能
// (1) Init-only プロパティのデフォルト値保持
public class Foo
{
    public int Value { get; init; } = 42;
}
// 修正前: "{}" デシリアライズ時に Value=0
// 修正後: Value=42 (デフォルト値保持)

// (2) [JsonInclude] によるアクセス不可能プロパティ
public class Bar
{
    [JsonInclude]
    private string Secret { get; set; } = "hidden";
}
// 修正前: InvalidOperationException
// 修正後: 完全にサポート

// (3) アクセス不可能な [JsonConstructor]
public class Baz
{
    [JsonConstructor]
    private Baz(string name) { Name = name; }
    public string Name { get; }
}
// 修正前: SYSLIB1222 警告で無視
// 修正後: UnsafeAccessor/リフレクションで呼び出し

変更内容

コアの実装変更:

  • JsonSourceGenerator.Emitter.cs: UnsafeAccessor extern メソッドの生成 (NET8+非ジェネリック型向け) とリフレクションフォールバック (旧ターゲット/ジェネリック型向け) の実装。struct 型は ref Unsafe.Unbox<T>(obj) を使用。ただし、フィールドリフレクションフォールバック実装に既知の問題あり
  • JsonSourceGenerator.Parser.cs: Init-only プロパティをコンストラクタ初期化式から除外 (memberInitializerNamesrequiredMemberNames に名称変更)。アクセス不可能な [JsonInclude] プロパティを fast-path から除外しない。アクセス不可能な [JsonConstructor] コンストラクタを null 化せず追跡
  • PropertyGenerationSpec.cs: CanUseUnsafeAccessorsNeedsAccessorForGetterNeedsAccessorForSetter を追加
  • TypeGenerationSpec.cs: ConstructorIsInaccessibleCanUseUnsafeAccessorForConstructor を追加
  • KnownTypeSymbols.cs: UnsafeAccessorAttribute 利用可能性の検出
  • JsonMetadataServices.Helpers.cs: getter/setter デリゲートが提供される場合、非公開 [JsonInclude] プロパティの検証を許

#117583 Inline CORINFO_HELP_ARRADDR_ST helper call, remove WriteBarrier FCall

  • 作成者: @EgorBo
  • 作成日時: 2025年07月13日 14:58:16(UTC)
  • マージ日時: 2026年04月02日 20:23:28(UTC)
  • ラベル: area-VM-coreclr

概要

CORINFO_HELP_ARRADDR_ST ヘルパー呼び出しをインライン化し、WriteBarrier FCallを削除することで、配列要素の代入パフォーマンスを大幅に改善します。JITが共変性チェック付きの書き込みバリアをインライン化できるようになり、冗長な書き込みバリアと範囲チェック(以前はヘルパー内部に存在)の削除が可能になります。

変更内容

  • JIT コンパイラgentree.cpp/himportercalls.cppmorph.cpp でインライン化ロジックを追加し、配列要素代入時の書き込みバリアと範囲チェックをインライン化
  • ランタイム ヘルパー削除:複数のプラットフォーム(AMD64、ARM、ARM64、i386、LoongArch64、RISC-V、WebAssembly)の JitHelpers_Fast.asm/.S からネイティブヘルパー実装を削除
  • FCall 登録削除ecalllist.h から WriteBarrier FCall の登録を削除
  • マネージド APICastHelpers.csRuntimeHelpers.csTypeCast.cs を更新し、ヘルパーの削除に対応

パフォーマンスへの影響

大幅な改善

  • AssignString(複数要素代入):5.7倍高速化(AMD64)、5.5倍高速化(ARM64)
  • SwapElements(要素交換):2.9倍高速化(AMD64)、2.3倍高速化(ARM64)
  • SingleAssignmentCns(定数代入):7.3倍高速化(AMD64)、5.1倍高速化(ARM64)
  • SingleAssignmentVar(変数代入):1.2倍高速化(AMD64)、2.5倍高速化(ARM64)

改善のキーポイント:JITがインラインコードから冗長な書き込みバリアと範囲チェックを削除でき、複数の配列代入では特に顕著な効果。

関連Issue

#9159

その他

内部実装の変更で、公開APIの互換性への影響はありません。複数のレビュワーによる精査を経たもので、全プラットフォーム対応に対応。


目次