Pull Request on 2026年04月20日

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

注意点

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


目次

  1. #127167 Ensure that we properly set the morphed flag
  2. #127159 Fix mixed CRLF/LF line endings in ImmutableArray_1.cs
  3. #127156 Skip CallEntryPoint in debugger single-step to prevent false stop
  4. #127139 Propagate sync-faulted FlushAsync exceptions through the WebSocket er…
  5. #127137 Replace Enum.HasFlag with bitwise operations in WebSockets
  6. #127123 Use IndexOfAnyWhiteSpace in Guid.EatAllWhitespace
  7. #127116 Fix StartAndForget_StartsProcessAndReturnsValidPid by mapping ProcessStartInfo.Arguments for the string+args overload
  8. #127105 fix: Ensure buffer space before reading in Decompress method
  9. #127103 JIT: Renable SSA-aware PHI jump threading
  10. #127084 [browser] Export useful browser tuntime TypeScript types
  11. #127082 [mobile] Skip AssemblyLoadContext tests using Assembly.Location on mobile
  12. #127076 Run libtests in interpmode1 so it is faster
  13. #127072 Fix gc hole when resuming async continuation via interpreter
  14. #127065 [ios-clr] Exclude Reflection.Emit and Dynamic.Runtime tests on Apple mobile CoreCLR simulators
  15. #127057 [ios-clr] Classify System.ComponentModel.Composition.Tests as not supported on Apple mobile
  16. #127055 [ios-clr] Update IsMetadataUpdateSupported to aggressive trimming instead of NativeAOT
  17. #127054 [ios-clr] Disable Debug CoreCLR smoke jobs on Apple mobile and enable aggressive trimming in Release
  18. #127052 Remove _DbgBreakCheck calls from the JIT
  19. #126991 Add delegate BeginInvoke/EndInvoke pair tracking in ILTrim
  20. #126973 Wasm import thunk corrections
  21. #126966 Fix Linux madvise() advice values incorrectly combined via bitwise OR in GCToOSInterface::VirtualReset
  22. #126952 Add mobile platform failure scanner agentic workflow
  23. #126844 Add tests for UnixConsoleStream when stdin/stdout is redirected to a seekable file
  24. #126786 Improve debugger message for scanner failures
  25. #126738 Exclude cgroup implementation from non-Linux Unix builds
  26. #126559 Use ThrowHelper in JsonElement.GetByte/GetSByte/GetInt16/GetUInt16
  27. #126410 Improve SortedSet<T>.TreeSubSet.Clear
  28. #126380 [ILLink/ILCompiler] Fix crash when array types are used as TypeMap trim targets
  29. #124027 [release/9.0-staging] Update dependencies from dotnet/icu

#127167 Ensure that we properly set the morphed flag

  • 作成者: @tannergooding
  • 作成日時: 2026年04月20日 16:06:03(UTC)
  • マージ日時: 2026年04月20日 22:31:20(UTC)
  • ラベル: area-CodeGen-coreclr

概要

JIT グローバル morphの処理時に、HWIntrinsic ノードが fgMorphHWIntrinsic を通らない場合に morphed フラグが正しく設定されていない問題を修正しました。特に vector↔mask 変換を含む folding やノード変換の処理パスで、明示的に morphed フラグを設定するようになります。

変更内容

src/coreclr/jit/morph.cpp

  • vector↔mask 変換の folding 処理後、内部オペランドに対して明示的に morphed フラグを設定
  • fgMorphHWIntrinsicRequired 内の変換パスにおいて、新しく導入/再 morph されたノードが直接返却されない場合、明示的に morphed フラグをマークするように修正

パフォーマンスへの影響

影響なし

関連Issue

#127138

その他

なし


#127159 Fix mixed CRLF/LF line endings in ImmutableArray_1.cs

  • 作成者: @svick
  • 作成日時: 2026年04月20日 13:48:33(UTC)
  • マージ日時: 2026年04月20日 14:43:06(UTC)
  • ラベル: area-System.Collections

概要

PR #124967で誤ってコミットされたCRLF行末が混在していたImmutableArray_1.csファイルを、一貫性のあるLF行末に正規化する修正です。これによりWindows環境(core.autocrlf=true)でファイルが常に変更状態と判定される問題を解決します。

変更内容

  • src/libraries/System.Collections.Immutable/src/System/Collections/Immutable/ImmutableArray_1.cs: 2行のCRLF行末をLFに正規化(変更: +2/-2行)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • 行末の正規化のみの変更で、機能的な変更はありません
  • Windows環境でのgit状態表示の問題を解決する修正です

#127156 Skip CallEntryPoint in debugger single-step to prevent false stop

  • 作成者: @tommcdon
  • 作成日時: 2026年04月20日 13:13:48(UTC)
  • マージ日時: 2026年04月20日 18:38:23(UTC)
  • ラベル: area-Diagnostics-coreclr

概要

デバッガーでMainの最後の行からステップ実行すると、マネージドコードのEnvironment.CallEntryPoint(ソース情報を持たないランタイムヘルパーフレーム)で停止してしまう問題を修正します。TriggerSingleStepの既存のIsInteropStubチェックを拡張してg_pEnvironmentCallEntryPointMethodDescも認識し、ここでシングルステップを無効化してプロセスを自然に終了させます。

変更内容

  • src/coreclr/debug/ee/controller.cpp: DebuggerStepper::TriggerSingleStepメソッドを修正し、既存のInteropStub無視ロジックを拡張。Environment.CallEntryPointフレームに到達した場合、シングルステップを無効化してネイティブコードへのステップイン時と同じ動作(プロセスの自然な終了)を実現。ログ/コメントも更新。

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • 内部VS デバッガーテストで検出された問題の修正
  • この変更はCoreCLRデバッガー(ランタイム側)の内部実装(debug/ee/controller.cpp)の修正であり、公開APIには影響しません
  • ユーザーに対する影響:Mainメソッド終了時のデバッガーステップ動作が改善され、無意味なランタイムフレームに停止しなくなります

#127139 Propagate sync-faulted FlushAsync exceptions through the WebSocket er…

  • 作成者: @cittaz
  • 作成日時: 2026年04月20日 07:31:30(UTC)
  • マージ日時: 2026年04月20日 16:48:35(UTC)
  • ラベル: area-System.Net community-contribution

概要

ManagedWebSocket.SendFrameLockAcquiredNonCancelableAsyncで同期完了した書き込みと同期フォルトFlushAsyncの組み合わせの場合、例外処理の一貫性を修正しました。修正前は生のストリーム例外が呼び出し元に渡されていましたが、修正後は他のエラーパスと同様にWebSocketException(ConnectionClosedPrematurely)でラップされるようになります。

変更内容

  • ManagedWebSocket.cs: flushTask.GetAwaiter().GetResult()をメソッド内のtry/catchブロック内で直接呼び出すよう修正。これにより、同期フォルトTaskの例外が既存の例外ハンドラーを通過し、WebSocketExceptionにマップされます。
  • WebSocketTestStream.cs: テスト対応として15行追加
  • WebSocketTests.cs: 新しいテストケース(17行)を追加して、同期完了+同期フォルト時の例外ラッピング動作を検証

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

これは意図的な動作変更です。修正前は特定のエラーパス(同期完了の書き込み+同期フォルトFlushAsync)のみで生の例外が返され、他の3つのエラーパスではWebSocketExceptionにラップされていました。修正後はすべてのエラーパスで一貫してWebSocketException(WebSocketError.ConnectionClosedPrematurely)が返されます。

| エラーパス | 修正前のラッピング | 修正後のラッピング |
|---|---|---|
| 同期スロー | WebSocketException | 変更なし |
| 同期完了+同期フォルトFlush | ラップなし(生例外) | WebSocketException |
| 同期完了+非同期Flush | WebSocketException | 変更なし |
| 非同期書き込み | WebSocketException | 変更なし |

このパスの例外を明示的にキャッチしているレアなコードは、修正後に異なる例外を受け取ることになります。


#127137 Replace Enum.HasFlag with bitwise operations in WebSockets

  • 作成者: @cittaz
  • 作成日時: 2026年04月20日 07:16:14(UTC)
  • マージ日時: 2026年04月20日 10:13:30(UTC)
  • ラベル: area-System.Net community-contribution

概要

System.Net.WebSockets内の4つのEnum.HasFlag呼び出しをビット演算(value & flag) != 0に置き換えています。これはリポジトリ全体で使用されている標準的なパターンに統一し、JITの最適化に依存しない実装を採用しています。動作変更なし。

変更内容

  • WebSocketStateHelper.cs: IsValidSendStateメソッドのEnum.HasFlagをビット演算に置き換え。同ファイル内のThrowIfInvalidStateと形式を統一
  • ManagedWebSocket.cs: SendAsyncメソッド内のendOfMessageおよびdisableCompressionフラグチェックをEnum.HasFlagからビット演算に変更
  • WebSocket.cs: SendAsync仮想オーバーロードのendOfMessageフラグチェックをビット演算に変更

パフォーマンスへの影響

ビット演算形式はJITによる最適化の対象となりやすく、Enum.HasFlagのボックス化を回避します。特にTier1コンパイル後のパフォーマンスが期待できます。

関連Issue

#107662(以前のレビューで同様の最適化が提案されたため)

その他

このPRはコードスタイルの統一と内部一貫性の向上を目的とした変更であり、System.Net.WebSocketsライブラリ内部実装の改善です。公開APIに対する影響はありません。


#127123 Use IndexOfAnyWhiteSpace in Guid.EatAllWhitespace

  • 作成者: @Copilot
  • 作成日時: 2026年04月19日 22:23:28(UTC)
  • マージ日時: 2026年04月20日 01:31:12(UTC)
  • ラベル: area-System.Memory

概要

Guid.EatAllWhitespaceのホワイトスペーススキャンを、手動のforループから#111439で追加された新しいベクトル化済みヘルパーIndexOfAnyWhiteSpaceに置き換えました。パフォーマンス向上が期待できます。

変更内容

  • src/libraries/System.Private.CoreLib/src/System/Guid.cs
    • 手動ループをcharSpan.IndexOfAnyWhiteSpace()に置き換え
    • "ホワイトスペース未検出"の判定をi < 0に変更(IndexOf*の不検出規約に準拠)

パフォーマンスへの影響

ホワイトスペースなしのケースで大幅な改善:

  • ParseExactX_NoWhitespace: 87.085 ns → 60.859 ns(約30%削減)
  • ParseExactX_WithWhitespace: 107.613 ns → 113.060 ns(約5%増加)

ホワイトスペース検出時はわずかな性能低下がありますが、ホワイトスペースなしのケースの大幅改善により全体的にはベクトル化による効果が大きい。

関連Issue

#111439

その他

なし


#127116 Fix StartAndForget_StartsProcessAndReturnsValidPid by mapping ProcessStartInfo.Arguments for the string+args overload

  • 作成者: @Copilot
  • 作成日時: 2026年04月19日 10:46:32(UTC)
  • マージ日時: 2026年04月20日 20:26:40(UTC)
  • ラベル: area-System.Diagnostics.Process

概要

StartAndForget_StartsProcessAndReturnsValidPid テストが useProcessStartInfo: false の場合に間欠的に失敗していた問題を修正。RemoteExecutorArguments プロパティを設定するのに対し、テストが ArgumentList を使用していたため、dotnet が不正な引数で起動されていました。ProcessStartInfo.Arguments を文字列リストにマッピングして Process.StartAndForget(string, IList<string>?) オーバーロードに渡すようになりました。

変更内容

  • src/libraries/System.Diagnostics.Process/tests/StartAndForget.cs
    • SIGKILL ベースの回避策を削除し、元の HasExited アサーション パスと後処理を復元
    • useProcessStartInfo: false ブランチで ProcessStartInfo.ArgumentsList<string> にマッピング
    • Arguments 文字列を引数リストに分割するローカル ヘルパー関数 MapToArgumentList を追加
    • マッピングは useProcessStartInfofalse の場合のみ実行

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • System.Diagnostics.Process テストスイートで対象領域の検証が実施済み、失敗なし
  • 修正は内部テスト実装の改善であり、公開API の変更ではありません

#127105 fix: Ensure buffer space before reading in Decompress method

  • 作成者: @pumpkin-bit
  • 作成日時: 2026年04月18日 07:26:44(UTC)
  • マージ日時: 2026年04月20日 18:33:19(UTC)
  • ラベル: area-System.IO.Compression community-contribution

概要

Zstandard形式のデータ解凍時に、圧縮データが64KBバッファの境界で終了する場合、バッファが満杯になってAvailableSpanが空になり、ファイルからの読み込みが0バイトとなる例外が発生する問題を修正しました。ReadおよびReadAsyncループに_buffer.EnsureAvailableSpace(1)の呼び出しチェックを追加し、バッファ内のデータをシフトして新しいデータの読み込み領域を確保します。

変更内容

  • src/libraries/System.IO.Compression/src/System/IO/Compression/Zstandard/ZstandardStream.Decompress.cs
    • Read/ReadAsyncメインループ内にバッファ空き容量チェックを追加
    • AvailableLengthが0の場合、EnsureAvailableSpace(1)を呼び出してバッファ領域を確保

パフォーマンスへの影響

影響なし(バッファ空き容量が十分な場合は追加チェックのオーバーヘッドは最小限)

関連Issue

#127105

その他

  • この修正はZstandardStream(System.IO.Compressionライブラリ)の内部実装における異常系処理の改善です
  • 圧縮データが特定のサイズ境界に達する場合のエッジケースを対象とした修正で、互換性への影響はありません

#127103 JIT: Renable SSA-aware PHI jump threading

  • 作成者: @AndyAyersMS
  • 作成日時: 2026年04月18日 02:11:31(UTC)
  • マージ日時: 2026年04月20日 14:46:21(UTC)
  • ラベル: area-CodeGen-coreclr

概要

JITの冗長分岐削除(jump threading)機能を改善し、PHIベースのブロックを通じたジャンプスレッディングを有効にします。PHIの使用箇所がブロックとその直後の後継ブロック内で完全に解決可能な場合、スレッディングを実行します。また、後継ブロックのSSA/VN使用箇所を適切に書き換え、SSA状態の一貫性を保ちます。特に、ローカル変数のフィールド使用に対して正しいVN更新を確保する修正が含まれています。

変更内容

  • src/coreclr/jit/redundantbranchopts.cpp
    • jump-thread実行可能性チェックを調整し、「グローバルPHI使用」を即座に中止する対象ではなく、潜在的に解決可能な場合として扱う処理を追加
    • スレッディング時の後継ブロックSSA使用箇所の更新処理を実装
    • GT_LCL_FLD(フィールドロード)のVN書き換えを修正し、置換されたSSA定義から正しい派生フィールドVNを取得するよう対応

パフォーマンスへの影響

影響なし (パフォーマンス測定またはベンチマーク結果の情報が提供されていません)

関連Issue

#126976#126812

その他

  • SSA/VN(Static Single Assignment / Value Numbering)の一貫性維持に焦点を当てた変更です
  • PHI-based threading の新しいケースに対するリグレッション対策が追加されています
  • 先行するPR #126812に含まれていなかったフィールド使用のVN更新修正が本PRで追加されています

#127084 [browser] Export useful browser tuntime TypeScript types

  • 作成者: @elringus
  • 作成日時: 2026年04月17日 16:08:09(UTC)
  • マージ日時: 2026年04月20日 08:12:38(UTC)
  • ラベル: arch-wasm area-System.Runtime.InteropServices.JavaScript community-contribution os-browser

概要

ブラウザランタイムのTypeScript型定義において、アセット関連の型を公開APIエントリーポイントから適切に再エクスポートする変更です。これまで型定義は存在していましたが、パブリックAPIサーフェスから一貫して再エクスポートされていませんでした。MonoおよびCoreCLRの両ランタイムで、トップレベルの型エクスポートファイル経由でこれらの型が利用可能になります。

変更内容

  • src/mono/browser/runtime/dotnet.d.ts: アセット関連型の再エクスポート定義を追加
  • src/mono/browser/runtime/types/export-types.ts: エクスポート対象の型定義を拡張
  • src/native/libs/Common/JavaScript/loader/dotnet.d.ts: CoreCLR向けのアセット関連型の再エクスポート定義を追加
  • src/native/libs/Common/JavaScript/types/export-api.ts: CoreCLR向けのエクスポート対象の型定義を拡張

変更内容は両ランタイムで対称的に実施されています。

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

この変更はTypeScript型定義のみに関するもので、ランタイムロジックには影響しません。消費者は内部型宣言ファイルにアクセスすることなく、トップレベルのエントリーポイントからアセット関連型をインポート可能になり、ブラウザランタイムのTypeScript APIの利便性が向上します。


#127082 [mobile] Skip AssemblyLoadContext tests using Assembly.Location on mobile

  • 作成者: @github-actions[bot]
  • 作成日時: 2026年04月17日 13:23:58(UTC)
  • マージ日時: 2026年04月20日 14:17:41(UTC)
  • ラベル: os-android os-ios os-tvos os-maccatalyst agentic-workflows area-System.Runtime.Loader

概要

モバイルプラットフォーム(Android、iOS、tvOS、MacCatalyst)上のAssemblyLoadContextテストの失敗を修正します。モバイル環境ではAssembly.Locationが空文字列を返すため(APK/アプリバンドルから読み込まれるため)、LoadFromAssemblyPath()が失敗していました。これを解決するため、該当テストにPlatformDetection.IsNotMobileガードを追加してモバイルプラットフォームでのテストをスキップします。

変更内容

  • src/libraries/System.Runtime.Loader/tests/AssemblyLoadContextTest.cs
    • InvalidCastException_DifferentALC_ShowsAssemblyInfoテストにConditionalFact属性のnameof(PlatformDetection.IsNotMobile)ガードを追加
    • InvalidCastException_GenericTypeArg_DifferentALC_ShowsAssemblyInfoテストに同様のガードを追加

パフォーマンスへの影響

影響なし

関連Issue

#127080

その他

  • 根本原因:モバイルプラットフォームではアセンブリがディスク上のファイルではなくAPK/アプリバンドルから読み込まれるため、Assembly.Locationが空文字列を返す
  • デスクトッププラットフォームではテストは継続して実行される
  • このPRはGitHub Copilotにより自動生成されたもので、runtime-extra-platformsパイプラインのモバイル関連CI失敗を分析して作成されました

#127076 Run libtests in interpmode1 so it is faster

  • 作成者: @BrzVlad
  • 作成日時: 2026年04月17日 11:30:37(UTC)
  • マージ日時: 2026年04月20日 19:13:15(UTC)
  • ラベル: area-CodeGen-Interpreter-coreclr

概要

libtests(ライブラリテスト)のCI/CDパイプラインを最適化し、Windows実行を削除してinterpmode1での実行に統一することで、パイプライン全体の実行時間を短縮する変更です。STJ.Tests(System.Text.Json Tests)では、interpmode1が約15分で実行可能であるのに対し、interpmode3は1.5時間以上かかるため、より高速なモードでのテスト実行に変更されました。

変更内容

  • eng/pipelines/coreclr/libraries-interpreter.yml: Windows実行フローを削除し、パイプライン設定を簡潔化
  • src/libraries/sendtohelixhelp.proj: テスト実行モードの設定を更新

パフォーマンスへの影響

  • STJ.Testsの実行時間: interpmode3の1.5時間以上からinterpmode1の約15分に短縮(大幅な高速化)
  • パイプライン全体の実行時間が削減され、CI/CD効率が向上
  • ただし、新たなテスト失敗が発見されることが明記されており、今後対応が必要

関連Issue

#127076

その他

  • Windows上でのテスト実行が削除された理由として「COM関連テストの多くが失敗し、現時点ではWindowsが重要なターゲットではない」と説明されています
  • フルランタイムテストはWindows上でも引き続き実行される予定です
  • この変更により新たなテスト失敗が発見される可能性が指摘されており、その対応が今後の課題です

#127072 Fix gc hole when resuming async continuation via interpreter

  • 作成者: @BrzVlad
  • 作成日時: 2026年04月17日 10:50:52(UTC)
  • マージ日時: 2026年04月20日 05:22:03(UTC)
  • ラベル: area-CodeGen-Interpreter-coreclr

概要

インタープリタモードでの非同期継続再開時に、GCに報告されていなかったインテリアポインタによるGCホールを修正しました。AsyncHelpers_ResumeInterpreterContinuationWorkerが受け取るインテリアポインタが正しくGC保護されていなかったため、InterpMode=1での予期しないクラッシュが発生していました。

変更内容

  • src/coreclr/vm/interpexec.cpp: resultStorage(マネージド継続オブジェクト内のインテリアポインタ)をGCPROTECT_BEGININTERIOR/GCPROTECT_ENDで保護し、インタープリタ継続実行中にGC追跡対象となるようにしました。

パフォーマンスへの影響

影響なし(GC保護の追加による若干のオーバーヘッドは無視できる程度)

関連Issue

#127072

その他

  • この問題はInterpMode=1(フルインタープリタモード)で顕著に発生していました。フルコンパイラモードでは、継続オブジェクトがインタープリタスタック上に保守的にピンされていたため、問題が表面化していなかったと推測されます。
  • objects-capturedランタイムテストでのランダムなクラッシュが解決されます。

#127065 [ios-clr] Exclude Reflection.Emit and Dynamic.Runtime tests on Apple mobile CoreCLR simulators

  • 作成者: @kotlarmilos
  • 作成日時: 2026年04月17日 09:15:01(UTC)
  • マージ日時: 2026年04月20日 13:07:57(UTC)
  • ラベル: area-Infrastructure-coreclr os-ios

概要

Apple mobile CoreCLRシミュレータ上で失敗する3つのテストプロジェクト(System.Reflection.Emit.TestsSystem.Reflection.Emit.ILGeneration.TestsSystem.Dynamic.Runtime.Tests)をライブラリテスト実行から除外します。

変更内容

  • src/libraries/tests.proj: Apple mobile CoreCLRシミュレータのProjectExclusionsに上記3つのテストプロジェクトを追加(3行追加)

パフォーマンスへの影響

影響なし(テスト除外による変更のため)

関連Issue

#124344

その他

この変更はApple mobileプラットフォーム向けテスト修正の一部です。Reflection.EmitおよびDynamic.Runtimeの機能自体ではなく、シミュレータ環境でのテスト実行に関する対応です。


#127057 [ios-clr] Classify System.ComponentModel.Composition.Tests as not supported on Apple mobile

  • 作成者: @kotlarmilos
  • 作成日時: 2026年04月17日 09:07:43(UTC)
  • マージ日時: 2026年04月20日 06:30:28(UTC)
  • ラベル: area-System.ComponentModel linkable-framework os-ios

概要

Apple mobile (iOS/tvOS/MacCatalyst) CoreCLR環境におけるSystem.ComponentModel.Composition.Tests (MEF) の実行をサポートするため、テスト分類を変更し、ILLink descriptorを追加して積極的なトリミング下でも必要なアセンブリが保持されるようにしました。

変更内容

  • src/libraries/tests.proj: MEFテストプロジェクト除外ルールを削除し、Apple mobile環境で実行可能にしました
  • System.ComponentModel.Composition.Tests.csproj: Apple mobile + 積極的トリミングビルド向けにTrimmerRootDescriptorを条件付きで追加
  • ILLink.Descriptors.xml (新規): トリミング時にMEF関連アセンブリを保持するためのディスクリプタを作成
  • テストファイル複数: AssemblyCatalogTests、DirectoryCatalogTests、DirectoryCatalogDebuggerProxyTests、ReflectionMemberExportDefinitionTestsに対し、Apple mobile環境での既知の失敗テストにActiveIssue属性を追加

パフォーマンスへの影響

影響なし

関連Issue

#124344

その他

  • 本PRはmono/browserでの既存の分類に合わせるもの
  • MEF拡張シナリオはApple mobileとデスクトップで差異がないため、プロジェクト全体の除外ではなく、特定テストのみをActiveIssueで無効化
  • 内部実装変更(テストインフラ)であり、公開APIへの影響なし

#127055 [ios-clr] Update IsMetadataUpdateSupported to aggressive trimming instead of NativeAOT

  • 作成者: @kotlarmilos
  • 作成日時: 2026年04月17日 09:05:17(UTC)
  • マージ日時: 2026年04月20日 13:16:07(UTC)
  • ラベル: area-System.Reflection os-ios

概要

iOS環境のメタデータ更新サポート判定を、NativeAOT条件から積極的なトリミング(Aggressive Trimming)条件に変更します。これにより、Apple モバイルプラットフォームでサポートされていないテストに対してActiveIssue属性の使用を回避できます。

変更内容

  • PlatformDetection.cs: IsMetadataUpdateSupportedプロパティの条件ロジックをNativeAOT判定から積極的なトリミング判定に更新
  • ReflectionCacheTests.cs: 関連するActiveIssue属性を1件削除

パフォーマンスへの影響

影響なし

関連Issue

#127055

その他

なし


#127054 [ios-clr] Disable Debug CoreCLR smoke jobs on Apple mobile and enable aggressive trimming in Release

  • 作成者: @kotlarmilos
  • 作成日時: 2026年04月17日 09:04:37(UTC)
  • マージ日時: 2026年04月20日 13:05:21(UTC)
  • ラベル: area-Infrastructure os-ios

概要

Apple モバイルプラットフォーム(tvOS、iOSSimulator、MacCatalyst)の Debug CoreCLR Smoke ジョブを無効化し、対応する Release ジョブで EnableAggressiveTrimmingEnableAdditionalTimezoneChecks を有効化します。これにより、CI が顧客に提供される Trimmed ライブラリビルドパスをテストできるようになります。

変更内容

  • eng/pipelines/extra-platforms/runtime-extra-platforms-ioslike.yml: Debug AllSubsets_CoreCLR_Smoke ジョブを無効化し、Release ジョブで aggressive trimming と timezone checks を有効化
  • eng/pipelines/extra-platforms/runtime-extra-platforms-ioslikesimulator.yml: 同様に Debug ジョブを無効化し、Release ジョブで aggressive trimming と timezone checks を有効化
  • eng/pipelines/extra-platforms/runtime-extra-platforms-maccatalyst.yml: 同様に Debug ジョブを無効化し、Release ジョブで aggressive trimming と timezone checks を有効化

パフォーマンスへの影響

影響なし(CI パイプラインの設定変更であり、ランタイムのパフォーマンスには直接影響しません)

関連Issue

#124344(Debug ジョブの不安定性)、#125439(分割元の Issue)

その他

なし


#127052 Remove _DbgBreakCheck calls from the JIT

  • 作成者: @Copilot
  • 作成日時: 2026年04月17日 07:52:08(UTC)
  • マージ日時: 2026年04月20日 11:17:57(UTC)
  • ラベル: area-CodeGen-coreclr

概要

CoreCLR JITコンパイラの終了処理パスから_DbgBreakCheck呼び出しを削除します。このWindows固有の「JITデバッガー起動」ダイアログ動作を廃止しますが、INS_BREAKPOINTを介した既存のJitHaltブレークポイント出力機能は維持します。

変更内容

  • src/coreclr/jit/compiler.cpp: Compiler::compCompileFinish()から_DbgBreakCheck(__FILE__, __LINE__, "JitHalt")呼び出しを削除(18行削除)
  • _DbgBreakCheckをトリガーするためだけに存在していたIsAot()/compJitHaltMethod()のゲーティングブロックを廃止

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

本変更はデバッグ専用の機能削除であり、実行時動作やコード生成には影響しません。既存のブレークポイント機能(INS_BREAKPOINT経由のJitHalt)は引き続き利用可能です。


#126991 Add delegate BeginInvoke/EndInvoke pair tracking in ILTrim

  • 作成者: @Copilot
  • 作成日時: 2026年04月16日 09:07:01(UTC)
  • マージ日時: 2026年04月20日 23:20:19(UTC)
  • ラベル: area-Tools-ILLink

概要

ILTrimが委譲型(delegate)のBeginInvokeEndInvokeメソッドペアの追跡に対応しました。.NETランタイムは両メソッドが共存することを要求しますが、ILTrimはこの依存関係を追跡していなかったため、一方のみが呼び出される場合に不正な形式のアセンブリが生成されていました。本修正により、委譲型でいずれかのメソッドが保持される場合、ペアとなるメソッドも自動的に保持されるようになります。

変更内容

  • MethodDefinitionNode.cs: 委譲型のBeginInvokeまたはEndInvokeメソッド定義に対して、ペアメソッドへの依存関係を追加。既存のInvoke/.ctorペアリングと同じGetMethod(name, null)パターンを使用。
  • ILTrimExpectedFailures.txt: Basic.DelegateBeginInvokeEndInvokePairテストをリスト削除(テストが成功するようになったため)。

パフォーマンスへの影響

影響なし

関連Issue

#126991

その他

  • MichalStrehovsky/runtimeのコミット613203aから既存の修正をmainブランチへポート
  • テスト結果:287 passed, 0 failed, 625 skipped
  • この修正はILTrim(IL言語レベルのトリミングツール)内部実装への変更で、公開APIへの影響なし

#126973 Wasm import thunk corrections

  • 作成者: @davidwrighton
  • 作成日時: 2026年04月15日 23:17:50(UTC)
  • マージ日時: 2026年04月20日 20:57:14(UTC)
  • ラベル: area-crossgen2-coreclr

概要

WebAssembly (WASM) ReadyToRun import thunkの生成ロジックをInterpreter呼び出し規約とTransitionBlockに準拠するよう改善しました。これにより、DelayLoad_MethodCallをWASM上で実装でき、スタブ実装から実装へ移行します。主な変更は、ArgumentIteratorとTransitionBlockを用いたオフセット計算、モジュール修復RVAの伝達、WASM32呼び出し規約モデルの更新です。

変更内容

  • WasmImportThunk.cs: Thunk生成ロジックをArgIterator/TransitionBlockベースのオフセット計算に書き換え、モジュール修復RVAをヘルパーに渡すように更新
  • ArgIterator.cs: WASM32の引数サイズ・アラインメント・初期スタックオフセット計算をInterpreter呼び出し規約に対応
  • TransitionBlock.cs: WASM32のTransition Block サイズ・アラインメント仮定をInterpreterスロットサイズに合わせて調整
  • GCRefMapBuilder.cs: ArgIteratorの構築ロジックを再利用可能なヘルパーに抽出し、GCマップビルドとWASM thunk生成の両方で使用
  • helpers.cpp: WASMのDelayLoad_MethodCall実装を追加。スタックポインタ一時調整とC++実装へのデリゲート処理を実装
  • cgensys.h: WASM向けのDelayLoad_MethodCall宣言をC++署名に合わせて更新

パフォーマンスへの影響

影響なし(呼び出し規約の仕様合わせであり、実行パス自体の最適化ではない)

関連Issue

なし

その他

本PR時点では、Interpreterとr2r呼び出し規約のすべての相違に対応していないことを作成者が明示しており、今後の改善余地があります。内部実装(ランタイムのR2Rコンパイラおよびコード生成)の変更であり、公開APIへの影響はありません。


#126966 Fix Linux madvise() advice values incorrectly combined via bitwise OR in GCToOSInterface::VirtualReset

  • 作成者: @Copilot
  • 作成日時: 2026年04月15日 18:41:55(UTC)
  • マージ日時: 2026年04月20日 13:55:09(UTC)
  • ラベル: area-VM-coreclr

概要

Linux上のGCメモリリセット処理で、複数のmadvise()助言フラグをビット演算で結合して単一の呼び出しに渡していた問題を修正しました。madvise()はビットマスクではなく単一の定数を期待するため、カーネルバージョンに応じてEINVALエラーが発生するか、意図しない操作(カーネル≥5.18でMADV_DONTNEED_LOCKED)が実行されていました。修正により、MADV_DONTDUMPMADV_FREE(またはPOSIXフォールバック)を別々のmadvise()呼び出しで実行するようにしました。

// 修正前: 無効な値(24)をmadvise()に渡す
madviseFlags = MADV_DONTDUMP | MADV_FREE;  // 16 | 8 = 24
madvise(address, size, madviseFlags);

// 修正後: 個別に呼び出す
madvise(address, size, MADV_DONTDUMP);
madvise(address, size, MADV_FREE);

変更内容

  • src/coreclr/gc/unix/gcenv.unix.cpp: VirtualReset()関数の修正
    • 複合フラグを使用した単一のmadvise()呼び出しを、MADV_DONTDUMPMADV_FREE(またはPOSIX代替)の2つの個別呼び出しに分割
    • posix_madvise(POSIX_MADV_DONTNEED)フォールバックを適切な#elifチェーンとして再構成(MADV_FREEが利用できない場合のみ実行)
    • プリプロセッサガード条件をHAVE_MADV_FREE(ビルドシステムで定義されていない)からMADV_FREE(カーネルヘッダの定数)に変更

パフォーマンスへの影響

軽微な増加。madvise()呼び出しが1回から2回に増加しますが、これはカーネル5.18未満での機能喪失と比較して許容可能です。修正により、メモリリセットが正常に機能するようになり、メモリプレッシャー下でのGC動作が改善されます。

関連Issue

#95643(回帰原因)

その他

  • .NET 9での回帰: .NET 9で導入された#95643(システムコール削減最適化)により発生
  • 影響範囲: MADV_DONTDUMPMADV_FREEの両方が定義されている全てのモダンLinux環境(glibc/x86-64)が対象
  • カーネル別影響:
    • カーネル < 5.18: GCがページリセットに失敗し、メモリ圧力対応が機能しない
    • カーネル ≥ 5.18: MADV_DONTNEED_LOCKEDが誤って呼び出される(セマンティック的に不正)
  • リスク度: 低。変更は最小限で、ロジック変更・新API追加・構造変更なし
  • テスト: 既存のユニットテストフレームワークではmadvise()値を直接カバーしていないため、手動検証済み

#126952 Add mobile platform failure scanner agentic workflow

  • 作成者: @kotlarmilos
  • 作成日時: 2026年04月15日 17:03:07(UTC)
  • マージ日時: 2026年04月20日 15:05:53(UTC)
  • ラベル: area-skills

概要

モバイルプラットフォーム(iOS、tvOS、MacCatalyst、Android)のビルド失敗を自動検出・分類・修復するGitHub Agentic Workflowを追加します。毎日スケジュール実行され、Azure DevOpsのビルド失敗をトリアージして、インフラ関連はIssueに、コード関連はドラフトPRで報告します。安全性のため、すべての書き込み操作は権限スコープの制限されたsafe-outputsジョブを通じて実行され、PRは最大2個、Issueは最大2個、コメントは最大5個に制限されています。

変更内容

  • .github/workflows/mobile-scan.md: 新規アgentic workflow定義ファイル。毎日のスケジュール実行、失敗ログの読み取り、トリアージロジック、safe-outputsへの出力指定を含む
  • .github/workflows/mobile-scan.lock.yml: コンパイルされたワークフロー実行ファイル(1398行)
  • .github/skills/mobile-platforms/SKILL.md: モバイルプラットフォームのCI パイプライン構造、失敗の分類方法、プラットフォーム固有の注意点をまとめたドメイン知識ドキュメント
  • .github/aw/actions-lock.json: agentic workflows用のアクションロック設定を更新

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

セキュリティ対策:

  • ワークフロー定義(.md)は読み取り専用権限のみを宣言し、エージェント自体はリポジトリへの直接書き込み権限を持たない
  • すべての書き込み操作(PR作成、Issue作成、コメント)はsafe-outputsの別ジョブを通じて実行
  • ドラフトPRには [mobile] タイトルプレフィックスと agentic-workflows ラベルが付与
  • 外部スキルコンテンツ(helix-investigation)は可変ブランチではなく特定コミットSHAで固定
  • ログ抜粋はポストされる前にサニタイズ(シークレット、トークン、PII除去)
  • 並行実行を防止するための同時実行グループ設定
  • ネットワークホワイトリストで Azure DevOps、Helix、GitHub、Helix blob storage への出力アクセスのみに制限

#126844 Add tests for UnixConsoleStream when stdin/stdout is redirected to a seekable file

  • 作成者: @Copilot
  • 作成日時: 2026年04月13日 17:27:06(UTC)
  • マージ日時: 2026年04月20日 05:57:36(UTC)
  • ラベル: area-System.IO

概要

PR #125512で導入されたRandomAccess.Read/WriteベースのI/O実装をリバートし、元のInterop.Sys.Read/Write実装に戻します。同時に、stdin/stdoutがシーク可能なファイルにリダイレクトされた場合の動作を検証する回帰テストを追加します。

変更内容

  • ConsolePal.Unix.ConsoleStream.cs: RandomAccessベースからConsolePal.Read()Interop.Sys.Read使用)に切り替え
  • ConsolePal.Unix.cs: Interop.Sys.Writeでの完全な書き込みループ(EPIPE/EAGAIN処理)とポインタベースのUpdatedCachedCursorPositionを復元
  • ConsolePal.Wasi.cs: Interop.Sys.Read/Writeの直接使用に復元、書き込みループ処理を追加
  • System.Console.csproj: Unix/WASIターゲット向けにInterop.Poll.csInterop.Read.csInterop.Write.cs参照を復元
  • ConsoleHandles.cs: シーク可能なstdinでのCopyTo読み込み検証テストと、シーク可能なstdoutへの複数Write呼び出し(オフセットベースの書き込みリグレッションカバー)を追加
  • System.Console.Tests.csproj: ConsoleHandles.csをテストビルドに追加

パフォーマンスへの影響

影響なし

関連Issue

#125512#124492

その他

  • RandomAccessベースのFileStreamアプローチは別途改めて検討予定
  • PR #124492のFORCE_COLORコメントが意図せずリバートされていたため復元
  • 本変更はシーク可能なファイルへのリダイレクト時のハングや不正な出力を防ぐ回帰テストをカバー

#126786 Improve debugger message for scanner failures

  • 作成者: @MichalPetryka
  • 作成日時: 2026年04月11日 13:57:59(UTC)
  • マージ日時: 2026年04月20日 01:36:38(UTC)
  • ラベル: community-contribution area-NativeAOT-coreclr

概要

ILScannerのデバッガメッセージ改善。アサーション時にスキャナーの失敗メッセージとして例外で使用される完全なメッセージをアサートに含めるように変更されました。

変更内容

  • src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/ILScanner.cs: アサーション関連のコード2行を削除。例外メッセージをアサートメッセージとして利用するよう改善。

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

この変更はAOT(Ahead-of-Time)コンパイラのILScanner部分の診断メッセージ改善です。開発者がスキャナー失敗時により詳細な情報を得られるようになり、デバッグが容易になります。


#126738 Exclude cgroup implementation from non-Linux Unix builds

  • 作成者: @Copilot
  • 作成日時: 2026年04月10日 01:17:17(UTC)
  • マージ日時: 2026年04月20日 15:41:48(UTC)
  • ラベル: area-PAL-coreclr

概要

cgroup実装がmacOSおよびFreeBSDなどの非Linuxプラットフォームでコンパイル・リンクされていたため、これらをLinux/Android専用にゲーティングする変更です。cgroupはLinux固有のメカニズムであり、他のプラットフォームでは機能していないデッドコード(返り値が0/false)となっていました。

変更内容

  • src/coreclr/pal/src/misc/cgroup.cpp:PAL レイヤーの cgroup CPU リミット実装を #if defined(TARGET_LINUX) || defined(TARGET_ANDROID) でガード。非Linux/Android向けには軽量スタブを提供。
  • src/coreclr/gc/unix/cgroup.cpp:GC の cgroup メモリ/使用量実装を同様にゲーティング。Linux/Android では statfs("/sys/fs/cgroup", ...) を無条件で実行。
  • src/coreclr/nativeaot/Runtime/unix/cgroupcpu.cpp:NativeAOT の cgroup CPU リミット実装も同様に対応。

パフォーマンスへの影響

macOSおよびFreeBSD上で、不要な cgroup 実装コードのコンパイル・リンクが排除されるため、バイナリサイズが削減されます。ランタイム動作への実質的な変化はありません(既にこれらのプラットフォームでは機能していなかった)。

関連Issue

#99363

その他

  • 内部実装(PAL/GC/NativeAOT)の変更であり、公開APIへの影響なし。
  • 破壊的変更なし。Linux/Android では既存の動作を維持。

#126559 Use ThrowHelper in JsonElement.GetByte/GetSByte/GetInt16/GetUInt16

  • 作成者: @prozolic
  • 作成日時: 2026年04月05日 11:25:30(UTC)
  • マージ日時: 2026年04月20日 06:00:07(UTC)
  • ラベル: area-System.Text.Json community-contribution

概要

JsonElementの4つのメソッド(GetByteGetSByteGetInt16GetUInt16)で、インライン例外発行をThrowHelper.ThrowFormatException()に統一する内部コード整備。既存パターン(#61746)との一貫性を確保し、JITコンパイルの最適化を向上させます。

変更内容

  • src/libraries/System.Text.Json/src/System/Text/Json/Document/JsonElement.cs
    • GetSByte()GetByte()GetInt16()GetUInt16()throw new FormatException()をインライン記述している部分をThrowHelper.ThrowFormatException()呼び出しに変更
    • 合計24行の変更(追加12行、削除12行)

パフォーマンスへの影響

改善の可能性あり。ThrowHelperパターンを使用することで、JITコンパイラが例外スロー処理をメソッド外に配置でき、呼び出し元のメソッドサイズが縮小され、インライン化やその他の最適化が容易になる可能性があります。ただし、本PR内に具体的なベンチマーク数値は記載されていません。

関連Issue

#61746

その他

この変更は公開API(JsonElement.GetByte等)の動作に変更なしで、内部実装のみの整備です。System.Text.Jsonの例外処理を一貫性のあるパターンに統一する技術的向上となります。


#126410 Improve SortedSet<T>.TreeSubSet.Clear

  • 作成者: @prozolic
  • 作成日時: 2026年04月01日 14:59:55(UTC)
  • マージ日時: 2026年04月20日 12:36:04(UTC)
  • ラベル: area-System.Collections community-contribution

概要

SortedSet<T>.TreeSubSet.Clear()メソッドの性能を最適化するPRです。BreadthFirstTreeWalkでアイテム収集時にList<T>の初期容量をCountに指定してヒープ再割当を削減し、末尾要素の削除を繰り返すwhileループを逆順のインデックスベースのforループに置き換えています。

変更内容

  • src/libraries/System.Collections/src/System/Collections/Generic/SortedSet.TreeSubSet.cs
    • List<T>の初期容量をCountに設定(不要なリサイズ回避)
    • 要素削除ループをwhileループから逆順forループに変更

パフォーマンスへの影響

メモリ割当が顕著に改善されました:

  • Count=10: メモリ割当 640B → 520B(-19%)、実行時間 10.65μs → 8.86μs(-16%)
  • Count=100: メモリ割当 2752B → 2024B(-26%)、実行時間 ほぼ同等
  • Count=1000: メモリ割当 17384B → 13016B(-25%)、実行時間 ほぼ同等
  • Count=10000: メモリ割当 197776B → 106432B(-46%)、実行時間 ほぼ同等

小規模データセット(Count=10)では実行時間も改善。大規模データセットではメモリ効率の大幅な改善が実現されています。

関連Issue

#126410

その他

なし


#126380 [ILLink/ILCompiler] Fix crash when array types are used as TypeMap trim targets

  • 作成者: @Copilot
  • 作成日時: 2026年03月31日 22:41:37(UTC)
  • マージ日時: 2026年04月20日 05:25:17(UTC)
  • ラベル: area-TypeSystem-coreclr linkable-framework

概要

PublishTrimmed および PublishAot で、TypeMap 属性の trim ターゲットとして配列型(例:typeof(Foo[]))を指定した場合のクラッシュと無音削除を修正します。ILLink では TypeDefinition cannot be resolved from 'Mono.Cecil.ArrayType' という NotSupportedException でクラッシュ、ILCompiler では条件判定ミスにより TypeMap エントリが無音削除されていました。

// 修正前:クラッシュまたは無音削除
[assembly: TypeMap<TestTypeMap>("Key", typeof(SomeTarget), typeof(Foo[]))]

// 修正後:Foo[] → Foo に正規化して処理
// TypeMap エントリは要素型 Foo が到達可能なときに存在

変更内容

ILLink (TypeMapHandler.cs):

  • UnwrapToResolvableType 新規ヘルパーメソッドを追加:TypeSpecification(配列・ポインタ・byref等)のラッパーを剥ぎ取り、解決可能な要素型に正規化
  • AddExternalTypeMapEntryAddProxyTypeMapEntryMarkTypeMapAttribute の3箇所で新ヘルパーを使用してラッパーを削除してから Resolve() を呼び出し

ILCompiler (ExternalTypeMapNode.cs):

  • GetEffectiveTrimTargetType 新規プライベートヘルパー:ParameterizedType(配列・ポインタ・byref)ラッパーを削除して要素型に正規化(InstantiatedType はジェネリクスのため処理対象外)
  • GetConditionalStaticDependenciesGetMarkedEntries を更新:正規化後の要素型に基づいて NecessaryTypeSymbol() の条件判定を実行

テスト:

  • ILLink: TrimTargetIsUsedArrayType(到達可能)、TrimTargetIsUnusedArrayType(到達不可)のテストケース追加
  • NativeAOT: TestInteropMapArrayTrimming スモークテストで T[]T[,]T*[] パターンをカバー

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • 破壊的変更なし。既存の有効な(配列以外の)trim ターゲットの動作は変更されません
  • ネストされた配列(Foo[][])、ポインタ型(Foo*[])、複合型(List<Foo>[])も正しく処理されます
  • リスク評価:低。変更は TypeMapHandlerExternalTypeMapNode に限定され、テストカバレッジが追加されています

#124027 [release/9.0-staging] Update dependencies from dotnet/icu

  • 作成者: @dotnet-maestro[bot]
  • 作成日時: 2026年02月05日 02:03:16(UTC)
  • マージ日時: 2026年04月20日 16:46:06(UTC)
  • ラベル: Servicing-approved area-codeflow

概要

dotnet/icuリポジトリの依存関係を更新するPull Request。Microsoft.NETCore.Runtime.ICU.Transportを9.0.0-rtm.25627.1から9.0.0-rtm.26210.1にアップデートします。

変更内容

  • eng/Version.Details.xml: ICU Transport依存関係のバージョン情報を更新(+30/-30)
  • eng/Versions.props: バージョン定義を更新(+15/-16)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • 自動依存関係更新(dotnet-maestroによる)
  • dotnet/icu リポジトリのrelease/9.0ブランチからの更新
  • ビルド日時: 2026年4月10日 11:35:45 UTC
  • 出典コミット: 852e53da554204ceeeec22f3d9653fd0745b2d71

目次