Pull Request on 2026年09月17日

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

注意点

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


目次

  1. #134148 [release/11.0] Fix .NET 11 rc1 SDK crash on RHEL8 arm64
  2. #134135 [perf] Optimise {ActivityTraceId|ActivitySpanId}.CopyTo()
  3. #134113 Fix TimeSpan constructor overflow
  4. #134112 Implement IParsable on Uri
  5. #134104 [PERF] Enable slow performance CI for mainline releases
  6. #134099 JIT: preserve side effect ordering when unrolling UTF16 comparisons
  7. #134097 JIT: stop tail duplication from looping forever around a conditional …
  8. #134096 [release/9.0-staging] Disable RSA SHA1/384 signature tests on Android
  9. #134079 Fix ILTrim field store dataflow
  10. #134073 Unify native API availability probes
  11. #134065 [release/11.0] Fix NativeAOT resource string inlining for async IL
  12. #134047 [release/11.0] Disable ConnectAsync_WithBuffer_Succeeds test on all platforms
  13. #134041 [release/11.0] Disable WebSocket Clien SendAsync_Cancel_Success test
  14. #134038 [release/11.0] Correct HTTP/2 stream window cap test expectations
  15. #134036 [release/11.0] Separate QUIC idle-timeout test setup from inactivity
  16. #134034 [release/11.0] Quarantine async IPAddress DNS test on OSX and MacCatalyst
  17. #134010 [wasm] Package CoreCLR native symbol map
  18. #133932 Fix Wasm R2R exceptions escaping filters
  19. #133887 Fix .NET 11 rc1 SDK crash on RHEL8 arm64
  20. #133827 JIT: Fix null-check ordering in EH regions
  21. #133802 JIT: Preserve overflow checks when folding scaled indexes
  22. #133654 Add Microsoft.Extensions.FileProviders.Composite package README
  23. #133577 [iOS] Avoid debugger patches in R2R code without dynamic code support
  24. #133378 [wasm][coreclr] ReadyToRun for CoreCLR browser-wasm
  25. #133076 Check the IValueTaskSource case first in HandleSuspended
  26. #133023 Avoid duplicate ValueTask checks in transparent awaits
  27. #132517 JIT: Enable async inlining stress under JitStress
  28. #132448 Abort when there's an attempt to reinitialize a runtime thread object
  29. #129536 [release/10.0] Fix assembly labels on MacOS X64 to be LOCAL_LABEL
  30. #129534 [release/8.0-staging] Fix assembly labels on MacOS X64 to be LOCAL_LABEL
  31. #126639 Fix null-forgiving operator misuse in System.Diagnostics.EventLog
  32. #123292 Make analyzers and ILLink trimming opt-in via MSBuild properties

#134148 [release/11.0] Fix .NET 11 rc1 SDK crash on RHEL8 arm64

概要

NativeAOT コンパイルされた .NET SDK コンポーネントが RHEL8 arm64 環境でクラッシュする問題を修正するバックポートです。Arm64 命令エンコーディングが RHEL のデフォルト 64kB ページサイズに対応していなかったことが原因でした。

変更内容

  • src/coreclr/nativeaot/Runtime/ThunksMapping.cpp : NativeAOT マーシャルド デリゲート サンク用の Arm64 命令エンコーディングを修正(+4/-2)

パフォーマンスへの影響

影響なし

関連Issue

#133887(オリジナルの修正PR) #133944(テストカバレッジ改善のためのIssue)

その他

  • 本変更は release/11.0 ブランチへのバックポートです
  • RHEL 環境での検証済み
  • 破壊的変更なし
  • リスク評価:低

#134135 [perf] Optimise {ActivityTraceId|ActivitySpanId}.CopyTo()

概要

ActivityTraceId.CopyTo() と ActivitySpanId.CopyTo() のパフォーマンスを最適化します。内部の16進数文字列からバイト列への変換処理を Convert.FromHexString() に切り替え、利用可能な環境では SIMD 加速を活用して、IDが変動する現実的なシナリオで約9倍のスループット向上を実現します。

変更内容

  • System.Diagnostics.DiagnosticSource/src/System/Diagnostics/Activity.cs

    • ActivityTraceId.SetSpanFromHexChars() を Convert.FromHexString() (NET ビルド時) を使用するように更新
    • 厳密な成功チェック(OperationStatus.Done および期待される bytesWritten)を追加し、不一致時に例外をスロー
    • ヘルパーメソッドの長さ前提条件を XML コメントで明記
  • System.Diagnostics.DiagnosticSource/tests/ActivityTests.cs

    • 更新されたエラーハンドリングのリグレッションテストを追加

パフォーマンスへの影響

大幅な改善を実現(ベンチマーク結果):

メソッド ID変動時 改善前 改善後 高速化
ActivityTraceId.CopyTo あり 117.24 ns 12.31 ns 9.5倍
ActivitySpanId.CopyTo あり 58.37 ns 6.73 ns 8.7倍
ActivityTraceId.CopyTo 共有時 21.80 ns 11.82 ns 1.8倍
ActivitySpanId.CopyTo 共有時 11.80 ns 6.53 ns 1.8倍

テスト環境:.NET 10.0.12、13th Gen Intel Core i7-13700H、Windows 11 x64

関連Issue

なし

その他

互換性に関する注意:

  • NET ビルド時には Convert.FromHexString() による SIMD 加速が適用され、レガシーパスは #else で保持されています
  • Copilot レビューで複数の潜在的な問題が指摘されています:
    • NET パスにおいて例外スロー前に destination に部分的な書き込みが発生する可能性
    • レガシーパス(#else)では Debug.Assert に依存しており、Release ビルドでは異なる動作になる可能性
    • エラーメッセージで公開 API のパラメータ名と異なる名前("outBytes")が露出する可能性

#134113 Fix TimeSpan constructor overflow

概要

日数ベースのTimeSpanコンストラクタにおいて、中間的なマイクロ秒単位の算術演算がオーバーフローする前に範囲チェックが行われていた問題を修正します。計算をInt128で拡張してから、サポートされているTimeSpan範囲に対して検証し、最終的にlongに縮小するように改善しました。

変更内容

  • src/libraries/System.Private.CoreLib/src/System/TimeSpan.cs: 日数ベースのコンストラクタの中間計算をInt128で実行してからオーバーフロー検証を行うよう変更(14行の変更)
  • src/libraries/System.Runtime/tests/System.Runtime.Tests/System/TimeSpanTests.cs: 正負のオーバーフロー、ラップアラウンドケースを含むリグレッションテストを追加(26行追加)

パフォーマンスへの影響

懸念あり。レビュアーの指摘によると、時間・分・秒・ミリ秒の各成分はintであり、それぞれの積はlongの範囲内に収まるため、Math.BigMulを使用した全幅乗算は不要です。日数の積のみを拡張演算する必要があり、他の4項に対してMath.BigMulを呼び出すと、通常のコンストラクタ呼び出しのたびに不要な高位ビット乗算が発生します。

関連Issue

#134109

その他

本修正は内部実装の改善であり、公開APIの変更ではありません。コンストラクタの引数値の妥当性チェック(オーバーフロー検出)が確実に機能するようになります。パフォーマンス懸念については、現在のレビューでは非ブロッキング指摘となっていますが、不要なMath.BigMul呼び出しを削減することが推奨されています。


#134112 Implement IParsable on Uri

  • 作成者: @MihaZupan
  • 作成日時: 2026年09月16日 22:59:51(UTC)
  • マージ日時: 2026年09月17日 15:48:31(UTC)
  • ラベル: area-System.Net

概要

Uri クラスに IParsable<Uri> インターフェースを実装しました。パース動作は UriKind.RelativeOrAbsolute で AllowImplicitFilePaths = false に設定されています。これにより、Uri.Parse() および Uri.TryParse() メソッドを使用した標準的な文字列パースが可能になります。

// 使用例
Uri uri = Uri.Parse("https://example.com", CultureInfo.InvariantCulture);
bool success = Uri.TryParse("relative/path", CultureInfo.InvariantCulture, out Uri? result);

変更内容

  • Uri.cs: Uri クラスで IParsable<Uri> インターフェース実装を宣言
  • UriExt.cs: Parse() および TryParse() メソッドの実装、パース不変量の更新
  • UriCreateStringTests.cs: パース動作のシナリオテストとエッジケーステストを追加(102行)
  • UriCreationOptionsTest.cs: ファイルパス動作のテストを追加(11行)
  • System.Runtime.cs: パブリックAPI定義に IParsable<Uri> を追加

パフォーマンスへの影響

影響なし

関連Issue

#92285

その他

明示的なインターフェース実装が採用されています。AllowImplicitFilePaths = false に設定されているため、ファイルパスの暗黙的な変換は行われません。


#134104 [PERF] Enable slow performance CI for mainline releases

概要

CI パイプラインの遅いパフォーマンステスト(perf-slow.yml)が、main ブランチに加えて release/*.0 の mainline リリースブランチでもトリガーされるように設定を変更しました。スケジュール実行は main のみのままで、パスフィルタやバッチ処理、ジョブ構成は変更されていません。

変更内容

  • eng/pipelines/performance/perf-slow.yml: CI ブランチフィルタに release/*.0 を追加(1行追加)

パフォーマンスへの影響

パイプライン設定のみの変更であり、ランタイムやコンパイラの動作には影響ありません。ただし CI 実行頻度が増加します。

関連Issue

#133634、#133726

その他

  • YAML の構文検証済み(12 のブランチマッチングケースを検証)
  • ランタイムビルドやテスト実行なし(パイプライン設定のみの変更)
  • 変更内容は GitHub Copilot により生成されました

#134099 JIT: preserve side effect ordering when unrolling UTF16 comparisons

  • 作成者: @EgorBo
  • 作成日時: 2026年09月16日 19:30:26(UTC)
  • マージ日時: 2026年09月17日 11:19:28(UTC)
  • ラベル: area-CodeGen-coreclr

概要

UTF-16文字列およびスパン比較の展開時に、JITコンパイラが副作用の評価順序を誤って変更していた問題を修正します。impUtf16StringComparisonとimpUtf16SpanComparisonで、展開された比較に対するテンポラリストアを追加する際に、評価スタック上の下層にある式の副作用が引数評価の後に実行されていました。特にobj.Equals("cns")/StartsWith/EndsWithのような展開では、レシーバーの直接参照解除によりNullReferenceExceptionが本来の副作用順序より先に発生していました。修正では、引数の下層にあるスタックエントリの副作用を事前にスピルして評価順序を保証します。

変更内容

  • src/coreclr/jit/importervectorization.cpp: UTF-16文字列比較とスパン比較の展開時に、引数評価前の副作用をスピルする処理を追加。
  • src/tests/JIT/Regression_ro_2/Runtime_133966.cs: 例外発生順序と比較動作の回帰テストを追加(71行)。

パフォーマンスへの影響

影響なし(正確性の修正であり、パフォーマンスへの実質的な影響は想定されません)。

関連Issue

#133966

その他

Copilotレビューで指摘されているように、現在の修正には不完全な点があります:impSpillSideEffects(true, ...)はGTF_GLOB_EFFECTフラグのみを対象としており、GTF_ORDER_SIDEEFFフラグのみを持つスタックエントリは依然としてスピルされないため、その後のCHECK_SPILL_NONEストアがこのエントリを飛び越える可能性があります。GTF_ORDER_SIDEEFFも含めたスピル方式への拡張が必要とされています。


#134097 JIT: stop tail duplication from looping forever around a conditional …

  • 作成者: @EgorBo
  • 作成日時: 2026年09月16日 19:09:52(UTC)
  • マージ日時: 2026年09月17日 20:07:21(UTC)
  • ラベル: area-CodeGen-coreclr

概要

JIT最適化フェーズ(fgUpdateFlowGraph)において、条件分岐のサイクル周辺で尾部複製が無限ループしてハング問題を修正します。既に複製された(ソース、ターゲット)ブロックペアをメモ化することで、重複する複製を回避し、ループの収束を保証します。

変更内容

  • src/coreclr/jit/fgopt.cpp: fgUpdateFlowGraph内での尾部複製の再試行を制限。複製済みの(ソース、ターゲット)ブロックペアをメモ化し、重複する複製をスキップする仕組みを実装。64ビットキーでブロックIDを圧縮して格納。
  • src/tests/JIT/Regression_ro_2/Runtime_134008.cs: Issue #134008に対する回帰テストケースを追加。条件分岐サイクル周辺の無限ループシナリオをカバー。

パフォーマンスへの影響

影響なし。この修正は無限ループによるハング(メモリ枯渇)を防ぐもので、正常系のパフォーマンスに悪影響は出ません。メモ化処理はブロックペアの探索空間が有限であるため、オーバーヘッドは最小限です。

関連Issue

#134008、#134097

その他

  • fgBlockIsGoodTailDuplicationCandidateは直接的な自己参照エッジのみを除外していたため、サイクル周辺の無限ループは防止できていませんでした。この修正により、ブロック複製のペア空間が有限であることを活用してループの収束を保証します。
  • Copilot reviewerより、C++のstatic_cast<uint64_t>使用に関するスタイル指摘あり。

#134096 [release/9.0-staging] Disable RSA SHA1/384 signature tests on Android

概要

Android上でRSA SHA1/384署名テストが失敗するため、.NET 9.0向けにこれらのテストを無効化する変更です。根本原因の修正は.NET 9のバックポート基準を満たさないため、テスト側を適応させています。

変更内容

  • src/libraries/Common/tests/System/Security/Cryptography/AlgorithmImplementations/RSA/SignVerify.cs: RSA署名検証テストをAndroidで無効化(+2行)
  • src/libraries/System.Security.Cryptography/tests/X509Certificates/PublicKeyTests.cs: 公開鍵テストをAndroidで無効化(+1行)

パフォーマンスへの影響

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

関連Issue

#134002

その他

  • テスト専用の変更であり、ランタイムやライブラリの実装への影響なし
  • 内部報告の問題への対応
  • リスク評価: なし

#134079 Fix ILTrim field store dataflow

  • 作成者: @jtschuster
  • 作成日時: 2026年09月16日 17:43:36(UTC)
  • マージ日時: 2026年09月17日 22:28:26(UTC)
  • ラベル: area-Tools-ILLink

概要

ILTrim のデータフロー分析を改善し、フィールドストア操作(stfld および stsfld)時に格納される値が対象フィールドの要件に対して正しく分析されるようにしました。これにより、5つの期待失敗テストが解決され、ILTrim の期待失敗削減スタックの第1段階を完成させています。

変更内容

  • MethodBodyNode.cs: フィールドストア操作に対するデータフロー分析の トリガーを追加(+2/-1)
  • ILTrimExpectedFailures.txt: 解決した5つの期待失敗エントリを削除(-5)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • 本PRは ILTrim 期待失敗削減スタック(全12段階)の第1段階です
  • テスト検証: Release ILTrim で928件中424件がパス、504件がスキップ、失敗なし
  • ビルド検証: ./build.sh tools+tools.ilasm+tools.illinktests+tools.cdactests -test で警告およびエラーなし

#134073 Unify native API availability probes

概要

ネイティブビルド全体における API 可用性チェック(特に pipe2 プローブ)の統一化と、Apple デプロイメントターゲット可用性チェックの一元管理を実施します。CMake 設定全体で一貫した _GNU_SOURCE フィーチャー定義を使用することで、Linux での glibc サポートを改善します。

変更内容

  • eng/native/configurecompiler.cmake: Apple 可用性警告設定を共有コンポーネントとして追加
  • src/native/libs/configure.cmake: ネイティブライブラリの可用性プローブを更新
  • src/native/external/libunwind_extras/configure.cmake: libunwind の pipe2 プローブを標準化
  • src/coreclr/pal/src/configure.cmake: PAL プローブを更新(_GNU_SOURCE 定義の適用)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

重要な注意事項: Copilot によるレビューコメントで指摘されている通り、PAL ターゲットが _GNU_SOURCE フィーチャー定義とともにコンパイルされることが必須です。この定義がないと glibc 環境でビルド失敗の可能性があります。本変更により、CMake 設定全体で pipe2 可用性プローブが統一され、展開ターゲット別の可用性チェックの管理が一元化されます。


#134065 [release/11.0] Fix NativeAOT resource string inlining for async IL

概要

NativeAOTにおいて、async メソッド内の文字列リソース検索がインライン化されない問題を修正します。この問題により、文字列リソースを使用するNativeAOTアプリケーションで不要なリソース機構が組み込まれ、アプリケーションサイズが肥大化していました。顧客報告による修正です。

変更内容

  • src/coreclr/tools/Common/TypeSystem/IL/NativeAotILProvider.cs: リソース文字列インライン化ロジックの改善(+15/-2)
  • src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/SubstitutedILProvider.cs: 関連する置換IL提供ロジックの調整(+3/-3)

パフォーマンスへの影響

async メソッド内のリソース文字列検索がインライン化されることにより、NativeAOTアプリケーションサイズが削減されます。不要なリソース機構の引き込みが回避されるため、バイナリサイズの削減が期待できます。

関連Issue

#133954、#133970

その他

  • release/11.0ブランチへのバックポートです
  • 手動テストおよびNativeAOT outerloop パイプラインでの検証済み
  • リスク評価:低

#134047 [release/11.0] Disable ConnectAsync_WithBuffer_Succeeds test on all platforms

概要

release/11.0ブランチにおけるソケットテストの間欠的な失敗に対応するため、ConnectAsync_WithBuffer_SucceedsテストのActiveIssueを拡大しました。既知の問題#133012に関連するもので、mainブランドではPR#133201で修正済みです。

変更内容

  • src/libraries/System.Net.Sockets/tests/FunctionalTests/Connect.Unix.cs
    • ActiveIssue #133012の適用範囲を変更(1行追加、1行削除)
    • テストロジック自体の変更はなし

パフォーマンスへの影響

影響なし

関連Issue

#133012 - 間欠的なバッファ付きconnect失敗

mainでの修正: #133201

その他

注意点: Copilotレビュアーの指摘により、ActiveIssueの適用範囲に関する確認が必要です。現在の変更はすべてのUnixプラットフォームに対象を拡大していますが、問題がLinuxのみで報告されており、既存のAndroidスキップやApple/BSD向けのTFO(TCP Fast Open)カバレッジの保持を検討する必要があります。


#134041 [release/11.0] Disable WebSocket Clien SendAsync_Cancel_Success test

概要

WebSocket Client の flaky なキャンセレーションテスト SendAsync_Cancel_Success を無効化し、CI ノイズを削減するテスト専用の変更です。本番コードへの変更はありません。

変更内容

  • src/libraries/System.Net.WebSockets.Client/tests/CancelTest.Loopback.cs: SendAsync_Cancel_Success テストメソッドに [ActiveIssue] 属性を追加

パフォーマンスへの影響

影響なし

関連Issue

#132031

その他

注意点: レビュアーの指摘により、現在のスキップはベースクラスの共有メソッドに適用されているため、意図した以上に広範な構成(複数の具体的なLoopbackテストクラス、SSL/非SSLケース)をスキップしてしまっています。スキップ対象を影響を受けている特定のテスト構成に限定し、他のトランスポートパスのキャンセレーションカバレッジを保持することが推奨されています。


#134038 [release/11.0] Correct HTTP/2 stream window cap test expectations

概要

HTTP/2ストリームウィンドウキャップのテスト期待値を修正するバックポート。テストのみの変更でCI環境をクリーンアップしています。

変更内容

  • src/libraries/System.Net.Http/tests/FunctionalTests/SocketsHttpHandlerTest.Http2FlowControl.cs
    • HTTP/2フロー制御に関するストリームウィンドウキャップテストの期待値を更新(+78/-13行)
    • テストロジックの調整と期待値の正確化

パフォーマンスへの影響

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

関連Issue

#133942

その他

  • 本変更はrelease/11.0ブランチへのバックポート
  • テストオンリーの変更のためCI環境に対する影響に限定

#134036 [release/11.0] Separate QUIC idle-timeout test setup from inactivity

概要

QUIC idle-timeout テストの設定をinactivity テストから分離するテスト専用の変更です。CI環境でのテスト実行をクリーンアップするための改善で、#133945のrelease/11.0へのバックポートです。

変更内容

  • MsQuicTests.cs: idle-timeout テスト設定をリファクタリング(+49/-15)
  • QuicTestCollection.cs: 新しいテストコレクション設定を追加(+44/-0)

テストのセットアップロジックを整理し、idle-timeout とinactivity に関連するテストの初期化処理を分離しています。

パフォーマンスへの影響

影響なし

関連Issue

#133945

その他

  • テスト専用の変更のため、ランタイムやライブラリの動作には影響なし
  • CI パイプラインの信頼性向上を目的とした変更

#134034 [release/11.0] Quarantine async IPAddress DNS test on OSX and MacCatalyst

概要

OSX and MacCatalyst環境での非同期IPAddress DNS テストの不安定性を解決するため、該当テストをQuarantine(隔離)する変更です。CI環境でのテスト実行の安定性改善を目的としています。

変更内容

  • src/libraries/System.Net.NameResolution/tests/FunctionalTests/GetHostEntryTest.cs: 非同期IPAddress DNS テストにQuarantine属性を追加

パフォーマンスへの影響

影響なし

関連Issue

#133946

その他

  • テストのみの変更です
  • release/11.0ブランチへのバックポートです

#134010 [wasm] Package CoreCLR native symbol map

概要

CoreCLRブラウザビルドで生成されていたdotnet.native.js.symbolsファイルをランタイムパック(.nupkg)に含めるようにしました。これにより、WasmEmitSymbolMap=trueを設定することで、アプリケーションの再リンクを強制せずにネイティブシンボルマップを公開できます。ブートリソースモデルがシンボルファイルのSHA-256ハッシュを既存の最終WasmハッシュとともにSHA-256で保持し、指紋付きの公開ファイルが正確なペアとして検出・検証できるようになりました。

変更内容

  • eng/liveBuilds.targets: CoreCLRネイティブシンボルマップを収集対象に追加
  • BootJsonData.cs / BootJsonBuilderHelper.cs: ブートリソースにシンボルマップハッシュデータを追加、エミット処理を実装
  • TypeScript型定義(dotnet.d.ts / public-api.ts): ネイティブアセット型とMono型定義をシンボルマップ対応に更新
  • Wasm.Build.Tests: シンボルマップ検証テストを追加
    • ModuleConfigTests.cs: シンボルマップ発行、指紋付けのテスト(+129行)
    • CoreCLRWasmNativeDefaultsTests.cs: WebAssembly/シンボルマップの一貫性検証(+275行)

パフォーマンスへの影響

ランタイム.nupkgサイズが71,838,978バイトから71,984,589バイト(+145,611バイト、+0.20%)に増加。アプリケーション公開はオプトイン(WasmEmitSymbolMap)のため、既定では影響なし。

関連Issue

#134009

その他

  • 検証機構: WebAssembly(import/function/code/export)と Emscripten マップパーサーの独立実装により、モジュール関数インデックス検証、ランタイム/インタプリタ/libc/エクスポート/コンパイラ生成アンカー確認、シフトされたインデックスの拒否、古いWasm IDとミューテーション検出に対応
  • R2R遷移サンク: 個別ロードの Webcil モジュール内の関数であり、本マップには意図的に含めず、モジュール個別の名前セクション(#132906)でカバー
  • ライブ検証: Chrome/CDPでの実デバッグ(V8停止位置の名前解決成功)およびビルドテスト4件すべてがパス

#133932 Fix Wasm R2R exceptions escaping filters

概要

WASM ReadyToRun(R2R)環境におけるフィルター例外の処理を修正しました。フィルター関数内で発生した例外が正しく分類・伝播されるよう、実行可能なフィルターエントリを含有するfuncletにマッピングし、既存のクロスプラットフォーム例外伝播パスを活用します。この修正により、quarantineされていた3つのランタイムテストを再度有効化できるようになりました。

変更内容

  • src/coreclr/jit/fgwasm.cpp: WASM固有のフィルター関数レイアウト処理の微調整(1行修正)
  • src/coreclr/vm/eetwain.cpp: WASM R2R環境での例外ハンドリング時のフィルター境界判定処理を追加(9行追加)
  • テストの変更: 3つの例外処理関連テストで隔離メタデータを削除
    • src/tests/JIT/Regression/CLR-x86-JIT/V1-M12-Beta2/b68872/b68872.il
    • src/tests/JIT/Regression_3/GitHub_4044/GitHub_4044.cs
    • src/tests/JIT/Methodical/eh/basics/throwinfilter.il
  • 未使用のテスト依存関係を削除(b68872.ilproj)

パフォーマンスへの影響

影響なし

関連Issue

#133468

その他

  • 修正は内部ランタイム実装(例外ハンドリング)に関するもので、公開APIの変更はありません
  • WASM R2R環境における例外フィルター処理の動作が変更されるため、既存の「collided-unwind fail-fast」の不変条件を保持する必要があります
  • 修正は複数のテストシナリオで検証済み(ネイティブ、WASM R2R、診断スタックトレース処理を含む)

#133887 Fix .NET 11 rc1 SDK crash on RHEL8 arm64

  • 作成者: @Copilot
  • 作成日時: 2026年09月14日 15:50:51(UTC)
  • マージ日時: 2026年09月17日 18:12:36(UTC)
  • ラベル: area-NativeAOT-coreclr

概要

NativeAOT ARM64 Thunkが64 KiBページを持つシステム(RHEL8 arm64など)でクラッシュする問題を修正します。PC相対リテラルロードを使用してコモンスタブポインタを読み込むことで、範囲とアライメント検証を正確に行えるようにします。

変更内容

  • src/coreclr/nativeaot/Runtime/ThunksMapping.cpp: ARM64 Thunkターゲットの読み込み方式を修正。PC相対リテラルロードを採用し、大ページサイズシステムでの範囲外参照を防止。

パフォーマンスへの影響

影響なし

関連Issue

#133675

その他

  • NativeAOT ランタイムの ARM64 Thunk実装(内部実装)に関する修正
  • 特定プラットフォーム(RHEL8 arm64)での実行時クラッシュ問題の解決
  • .NET 11 RC1 SDKに関連する問題

#133827 JIT: Fix null-check ordering in EH regions

概要

例外ハンドラーとフィルターで観察可能なインライン化されたメソッドの副作用に対して、レシーバーのnull-checkの順序を保証するJITコンパイラの修正です。EH(例外処理)リージョン内でのnull-checkの不正な削除フォールディングを防ぎ、回帰テストを追加しています。

Issue #133714を修正します。

変更内容

  • src/coreclr/jit/importer.cpp: インライン化されたメソッド内の代入をEHリージョン内で可視的な副作用として扱い、null-checkがinlinee側効果を越えて折り畳まれるのを防ぐ。
  • src/coreclr/jit/earlyprop.cpp: EH保護リージョン内でのnull-checkフォールディングを制限し、unsafe な最適化を回避。
  • src/coreclr/jit/compiler.h: ヘルパー関数のパラメータ名を更新。
  • src/tests/JIT/Regression_ro_2/Runtime_133714.cs: catch ハンドラーおよび exception filter に対する回帰テストカバレッジを追加。

パフォーマンスへの影響

null-checkの削除が制限されるため、EH保護リージョン内でのコード生成が増加する可能性があります。ただし具体的なベンチマーク数値は提供されていません。

関連Issue

#133714

その他

懸念事項(Copilot指摘): 現在の実装ではEHリージョン内のすべての代入(GTF_ASG)を可視的な副作用として扱っており、これがインライン化されたメソッドの内部ローカル変数への代入まで含まれます。結果として、例外ハンドラーが観察できない代入に関連するnull-checkが不要に保持される可能性があり、null-check削除の回帰につながる懸念があります。


#133802 JIT: Preserve overflow checks when folding scaled indexes

  • 作成者: @EgorBo
  • 作成日時: 2026年09月12日 21:23:20(UTC)
  • マージ日時: 2026年09月17日 20:10:15(UTC)
  • ラベル: area-CodeGen-coreclr

概要

CoreCLR JITのスケーリングされたインデックスのフォールディング処理において、チェック付き乗算のオーバーフロー例外が誤って破棄される問題を修正します。この修正により、アドレスモード最適化時にチェック付き乗算の演算結果が保持され、必要なOverflowExceptionが正しく発生するようになります。

変更内容

  • src/coreclr/jit/gentree.cpp: スケーリングされたインデックス認識処理からチェック付き乗算を除外(4行追加/削除)
  • src/tests/JIT/Regression_ro_2/Runtime_133782.cs: チェック付きスケーリング乗算とオーバーフロー動作に関する回帰テストを追加(41行追加)

パフォーマンスへの影響

チェック付き乗算がフォールディング対象から除外されるため、一部のアドレス計算最適化が適用されなくなる可能性がありますが、具体的なベンチマーク値は提供されていません。ただし、正確性(オーバーフロー例外の適切な発生)を優先した変更です。

関連Issue

#133782

その他

Copilotのレビューコメントによると、スケーリングインデックス認識処理での対策は施されていますが、その後の段階でのフォールディングパスにおいて、チェック付き乗算が依然として破棄される可能性が指摘されています。本PR提出時点で、この二次的な問題は完全には解決していない状態です。


#133654 Add Microsoft.Extensions.FileProviders.Composite package README

概要

Microsoft.Extensions.FileProviders.CompositeパッケージにPackage READMEを追加しました。プロジェクトファイルで既定のPackage README機能を有効化し、PACKAGE.mdをNuGetパッケージに含めるようにしています。

変更内容

  • Microsoft.Extensions.FileProviders.Composite.csproj: プロジェクトファイルから2行を削除し、Package README機能を既定値で有効化
  • PACKAGE.md: 新規作成、35行のパッケージ説明資料を追加

パフォーマンスへの影響

影響なし

関連Issue

#99358

その他

  • ValidatePackageReadmeExists検証およびgit diff --checkが両方とも合格
  • ドキュメントとメタデータの整備に関連する変更で、機能や動作の変更は含まない

#133577 [iOS] Avoid debugger patches in R2R code without dynamic code support

概要

iOSの物理デバイス上でR2R(ReadyToRun)コードが署名されている環境で、デバッガがソフトウェアブレークポイントをパッチしようとした際、メモリページの書き込み可能化によってコード署名が無効化されるという問題を修正します。FEATURE_DYNAMIC_CODE_COMPILEDが無効な場合、R2Rコード内でのデバッガパッチ適用を防止し、パッチ活性化失敗を適切に伝播させます。R2Rメソッドへの直接ブレークポイント設定はCORDBG_E_UNABLE_TO_SET_BREAKPOINTで失敗します。

変更内容

  • debugger.cpp: R2Rコードへの遅延パッチマッピングを条件分岐で回避;パッチ活性化失敗を伝播;インタプリタエントリで直接スレッド開始イベント送信時に未処理のスレッドスターターをキャンセル
  • controller.h: ActivatePatchおよびAddPatchToStartOfLatestMethodパッチングAPIをブール戻り値ベースの状態返却に変更
  • controller.cpp: ActivatePatch戻り値の状態返却実装;動的コード無効時のR2Rパッチ活性化を拒否;トレーシングとバインディングパス全体でパッチ作成/活性化失敗を伝播

パフォーマンスへの影響

影響なし

関連Issue

#133577

その他

  • 互換性への影響: この変更は破壊的変更ではなく、デバッガAPI動作の修正です
  • 重要な注記: .NET 11へのバックポート予定(iOSの物理デバイスでのデバッグ修正)
  • 指摘事項: Copilotレビューでいくつかの懸念が報告されています
    • MapPatchToDJIが再帰的バインドの成功を失敗と誤判定する可能性
    • ApplyPatch失敗後にパッチ活性化が成功を報告する可能性
    • tvOS(同様の署名制限・非動的コード構成を持つ)がプラットフォームガードから漏れている可能性
    • 再帰的バインド中の保持パッチポインタの陳腐化の可能性
  • デバイスレベルの検証が必要なCore CLRデバッガパッチライフサイクル変更です

#133378 [wasm][coreclr] ReadyToRun for CoreCLR browser-wasm

概要

CoreCLR browser-wasm向けのPublishReadyToRun機能を実装し、開発ループとpublish時の両方でReadyToRun(R2R)イメージをwasm対応crossgen2を使って生成できるようにします。デフォルトはfalseで、既存のMono実装への影響はなく、CoreCLR-onlyの新規ブランチまたはRuntimeFlavorガードで分離されています。

変更内容

  • WebcilReader.cs : MetadataReaderProviderリソースリークを修正
  • ConvertDllsToWebCil.cs : プリビルドR2Rイメージのステージング検証をアセンブリバージョンからMVID比較に変更し、wasm magic byteでwebcil-in-wasmを検出
  • Microsoft.NET.Sdk.WebAssembly.Browser.CoreCLR.*.targets/props : CoreCLRブラウザwasm向けR2R wiring、crossgen2解決、ステージング/キャッシュ無効化ロジックを新規追加
  • BrowserWasmApp.CoreCLR.targets : native relinkをサポート
  • ReadyToRunTests.cs : Playwr ightベースのブラウザテスト(dev-loop build、publish trimmed/untrimmed、native relink有無)
  • 其他 : Helix correlation payloadへのcrossgen2/Crossgen2Tasksシム追加、ILLink.Tasks冗長ビルド修正

パフォーマンスへの影響

dev-loop build時: パック内のプリビルトR2Rイメージがある場合それを使用(IL変換をスキップ)するため、CoreLibサイズが5,543KBから28,990KBに増加しますが、ビルド時間は改善。publish時: 全クロージャの per-app crossgen実行が必須のため、untrimmedでは122イメージ、trimmedでは37イメージを生成(版bubble制約のため、変更されたアセンブリは全体を再コンパイル)。

関連Issue

なし

その他

  • Version bubble:--opt-cross-module:*でコンパイルされたすべてのイメージは相互にインライン可能。MVID不一致は起動時にfail-fast(グレースフルフォールバックなし)
  • Staging correctness :プリビルトイメージのMVID不一致はビルド時にIL変換へフォールバック
  • Incremental safety :1つのアセンブリ変更で全イメージ再コンパイル必要、ステイルイメージは削除される
  • Publish uniform flow :trimmed/untrimmed問わず常にper-appクロージャをコンパイル、pack R2Rをserveしない
  • テスト検証:4つの独立した車両で実施、6/6 Wasm.Build.Tests成功、16/16出-of-tree Blazorアプリブラウザ検証済、System.Runtime.InteropServices.JavaScript.Testsで476 run / 474 passed

#133076 Check the IValueTaskSource case first in HandleSuspended

  • 作成者: @jakobbotsch
  • 作成日時: 2026年09月02日 11:15:24(UTC)
  • マージ日時: 2026年09月17日 09:29:03(UTC)
  • ラベル: area-VM-coreclr

概要

RuntimeAsyncTask<T>.HandleSuspendedメソッドの非同期処理の分岐チェック順序を最適化しました。IValueTaskSourceベースの継続処理(ValueTaskSourceContinuation)を最初にチェックするよう変更し、高性能な非同期ソースの処理レイテンシを削減します。各チェック条件は相互排他的なため、機能的な変更はありません。

変更内容

  • src/coreclr/System.Private.CoreLib/src/System/Runtime/CompilerServices/AsyncHelpers.CoreCLR.cs
    • HandleSuspendedメソッドの条件分岐順序を変更
    • ValueTaskSourceContinuationチェックを最初に移動
    • awaiter/critical notifier/task continuation等の他の継続パスは後方に配置
    • 動作的な変更なし(チェック順序のみ変更)

パフォーマンスへの影響

  • IValueTaskSourceベースの継続処理のディスパッチレイテンシが削減される見込み
  • IValueTaskSourceの使用が増加傾向にあるため、一般的なケースでの性能向上が期待できる
  • 他の継続パスのパフォーマンスへの影響なし

関連Issue

なし

その他

  • 相互排他的な条件のみを対象とした最適化であり、逆互換性の問題はなし
  • ランタイムの内部実装(System.Private.CoreLib)の変更であり、公開APIへの影響なし

#133023 Avoid duplicate ValueTask checks in transparent awaits

概要

TransparentAwaitでのValueTask処理を最適化し、バッキングオブジェクト(Task vs IValueTaskSource)の分類を1回に集約して、型指定されたインスタンスをサスペンドヘルパーに渡すことで、重複した型チェックを排除します。これにより、ランタイム非同期テールアウェイトでの不要なValueTask実体化と型チェックが削除されます。

変更内容

src/coreclr/System.Private.CoreLib/src/System/Runtime/CompilerServices/AsyncHelpers.CoreCLR.cs

  • TransparentSuspend(ValueTask) / TransparentSuspend(ValueTask<T>) を TransparentSuspend(IValueTaskSource, short) / TransparentSuspend(IValueTaskSource<T>, short) に変更
  • Task バッキングの場合は既存の TransparentSuspend(Task) / TransparentSuspend(Task<T>) を使用
  • TransparentAwait(ValueTask) / TransparentAwait(ValueTask<T>) を、ValueTask の _obj フィールドに直接分岐して、ValueTask の再実体化/再チェックなしに TaskAwaiter.ValidateEnd または IValueTaskSource*.GetResult を呼び出すように更新
  • AsyncHelpers.Await の既存実装と同じパターンを適用

パフォーマンスへの影響

改善:約2% RPS向上

  • TechEmpower Arm64 JSON ベンチマークで測定
  • 主な改善源:SocketReceiver.WaitForDataAsync 内での重複した is Task<T> チェック
  • CastHelpers.IsInstanceOfClass の呼び出し削減による効果

関連Issue

なし

その他

  • CoreCLR ランタイム内部実装(System.Private.CoreLib)の変更
  • 公開APIへの影響なし
  • AsyncHelpers.Await の既存実装パターンを参考に実装されている

#132517 JIT: Enable async inlining stress under JitStress

概要

JITストレステスト基盤を拡張し、JitStress下での非同期メソッドのインライン化ストレステストを有効にする変更です。既存のストレス基盤を再利用することで、非同期インライン化の堅牢性をより広い条件下で検証できるようになります。

変更内容

  • compiler.h/cpp: 非同期インライン化ストレス制御用の新規述語関数compAsyncInliningStress()を追加(52行追加)
  • jitconfigvalues.h: JitStressAsyncInlining設定値を追加(DEBUG-only)
  • fginline.cpp, inline.cpp, inlinepolicy.cpp: 各インライン化処理で新規述語を使用するよう更新(計5行変更)
  • RuntimeAsyncTests.cs: テスト安定化対応(6行追加、2行削除)

パフォーマンスへの影響

影響なし。本変更はDEBUGビルドおよびストレステスト時の動作のみに影響し、リリースビルドでは活用されません。

関連Issue

なし

その他

留意点: レビュアーによって指摘されたように、compiler.cpp:3385のコメント「非同期メソッドのみがストレス対象」は不正確です。compAsyncInliningStress()はJitStressAsyncInliningが明示的に設定された場合、非同期でないルートに対してもtrueを返すため、コメント修正またはチェックロジック変更が必要となる可能性があります。


#132448 Abort when there's an attempt to reinitialize a runtime thread object

概要

ランタイム スレッド オブジェクトの再初期化を検出した際に abort するセーフガードを追加します。スレッド破棄後のコールバックで管理コードが実行されることを防ぐため、PLATFORM_THREAD_LOCAL変数(Appleプラットフォームではpthreadキー)を使用してスレッド状態の破棄をマークし、再初期化の試行時にランタイムをfail-fastさせます。

変更内容

  • src/coreclr/vm/ceemain.cpp/h: スレッド破棄状態を追跡するPLATFORM_THREAD_LOCAL変数の追加と、スレッド再初期化時のabort処理を実装
  • src/coreclr/vm/threads.cpp: スレッド破棄完了時にフラグを設定
  • テストファイル群: 新規テストプロジェクト(ThreadStateDestroyed)を追加
    • ネイティブコード(FLS/pthreadデストラクタ)でスレッド破棄時にコールバックを2度実行
    • 管理コードでランタイムが破棄済みスレッドに対して新しいThread オブジェクトを再アタッチしないことを検証

パフォーマンスへの影響

影響なし。スレッド初期化パスで軽量なフラグチェックを追加するのみ。

関連Issue

#112131

その他

  • Apple プラットフォーム(Darwin)では pthread キーベースの実装を使用。他の Unix は FS セグメントベースのスレッドローカル機構により正常に動作します
  • 内部実装の変更: CoreCLR ランタイム内のスレッド管理機構の修正であり、公開API への影響なし
  • テスト実装にはレビュー指摘が複数あり(Windows/Unix の FLS/pthread デストラクタ実行順序の不確定性、Release ビルドでの exit code 検証、NativeAOT との互換性など)、改善が予定されています

#129536 [release/10.0] Fix assembly labels on MacOS X64 to be LOCAL_LABEL

概要

macOS x64でアセンブリラベルが通常のシンボルとして出力される問題を修正しました。ラベルをLOCAL_LABEL()に変換することで、リンカーが関数を不正に分割するのを防ぎ、ランタイムの正確な動作を保証します。この修正は#129531をrelease/10.0ブランチへバックポートしたものです。

変更内容

  • src/coreclr/vm/amd64/Context.S: アセンブリラベルをLOCAL_LABEL()に変換(8行追加/削除)
  • src/coreclr/vm/amd64/virtualcallstubamd64.S: アセンブリラベルをLOCAL_LABEL()に変換(9行追加/削除)

修正対象はmacOS x64 CoreCLRのアセンブリコード内の内部ラベルとブランチで、制御フローは保持されつつ外部に見えるラベルを回避しています。

パフォーマンスへの影響

影響なし(アセンブリラベルの可視性に関する修正であり、ランタイム動作への性能的変化はありません)

関連Issue

#129531(元のPR)

その他

  • リスク評価: 低。内部的なアセンブリラベルの変更に限定されています
  • テスト: 新規テストは追加されていません。アセンブリラベル/リンカー動作に関する修正のため、CI カバレッジに依存します
  • 既知リグレッション: なし
  • 内部で発見された問題であり、顧客報告ではありません

#129534 [release/8.0-staging] Fix assembly labels on MacOS X64 to be LOCAL_LABEL

概要

macOS x64プラットフォームにおいて、CoreCLR AMD64仮想呼び出しスタブアセンブリの内部ラベルをLOCAL_LABELに変換する修正をリリース/8.0-stagingにバックポートしたものです。この修正がない場合、macOS x64のアセンブリラベルが通常のシンボルとして出力され、リンカが関数を不正に分割してランタイムの動作が不正になる可能性があります。

変更内容

  • src/coreclr/vm/amd64/virtualcallstubamd64.S: ResolveWorkerChainLookupAsmStub内の複数の内部ラベルとブランチターゲットをLOCAL_LABEL(...)に変換(+9/-9行)
  • ループ、成功、プロモート、失敗ラベルをすべてローカルラベルとして一貫性を持たせて出力し、macOSリンカのシンボル/サブセクション問題を回避

パフォーマンスへの影響

影響なし

関連Issue

#129531

その他

  • 内部実装の修正(CoreCLRランタイムアセンブリコード)
  • .NET 8のバックポートのため、Context.Sは対象外
  • 破壊的変更なし
  • リスク度:低
  • CI により影響範囲をカバー
  • .NET 9以降では追加作業不要

#126639 Fix null-forgiving operator misuse in System.Diagnostics.EventLog

概要

System.Diagnostics.EventLogにおけるNullable Reference Types対応の追従として、不適切な null-forgiving operator(!)の使用を適切な null チェックに置き換えるPRです。EventLogTraceListenerとEventLogInternalの複数箇所で unsafe な null 抑制を除去し、null 安全な実装に改善しています。

変更内容

  • EventLogTraceListener: EventLog? プロパティを使用するTraceEvent/TraceDataメソッド内のEventLog!を、ローカル変数キャプチャと null チェック付き早期リターンに置き換え(6箇所)
  • EventLogInternal: parent? フィールドに対するparent!.ComponentDesignModeをparent?.ComponentDesignMode == trueに置き換え(4箇所)
  • CompletionCallback TOCTOU: onEntryWrittenHandlerフィールドの null チェック後のアクセスをローカル変数キャプチャに変更し、購読解除時の競合状態を回避
  • InternalWriteEvent: strings[i]!.Lengthをstring s = strings[i] ??= string.Empty; if (s.Length > ...)に置き換え、null-forgiving 抑制を排除
  • テスト: EventLogTraceListenerの null 動作をカバーするテストを追加

パフォーマンスへの影響

影響なし

関連Issue

#119891(NRT annotations for System.Diagnostics.EventLog の追従)

その他

未解決の指摘事項:

  • onEntryWrittenHandlerの TOCTOU 競合状態修正に関連し、SynchronizingObject設定および購読解除時のシナリオをカバーする決定論的なリグレッション テストの追加が推奨されています

作成者による将来改善提案(別PRで実施予定):

  • Reader API のIEnumerable<string?>内部 null 許容性の見直し
  • EventRecord.FormatDescription()の null ハンドリング統一
  • EventRecordWrittenEventArgsコンストラクタの null ハンドリング統一
  • LogListeningInfoフィールドのreadonly化
  • ref/impl間の null 許容注釈不一致のAPI レビュープロセス化

#123292 Make analyzers and ILLink trimming opt-in via MSBuild properties

概要

Analyzers と ILLink trimming をデフォルトでは無効化し、MSBuild プロパティ(RunAnalyzersInBuild / RunILLinkInBuild)で明示的に有効化する形に変更しました。これにより、ローカルビルドの高速化とビルド時間の短縮を実現し、CI パイプラインでは包括的なチェックを別ジョブとして実行します。

# 使用方法(両方有効化)
./build.sh libs -c Release /p:RunAnalyzersInBuild=true /p:RunILLinkInBuild=true

変更内容

  • MSBuild プロパティ追加

    • eng/Analyzers.targets: RunAnalyzersInBuild=true が指定されない限り RunAnalyzers=false がデフォルト
    • src/libraries/Directory.Build.targets: NetCoreApp ソースプロジェクトで trimming を実行するには RunILLinkInBuild=true が必須
    • プロジェクトレベルでの RunAnalyzers / ILLinkTrimAssembly プロパティオーバーライドは継続対応
  • CI パイプライン統合 (eng/pipelines/global-build.yml)

    • main/release ブランチの全 PR で実行(パスベースフィルタリング付き)
    • Libraries_AnalyzersLinker ジョブ: linux_x64_dev_innerloop, windows_x64, osx_arm64 対応
    • CoreClr_Tools_AnalyzersLinker ジョブ: CoreLib とツール向け(linux_x64_dev_innerloop)
    • 冗長な Libraries_WithPackages ジョブを削除
  • ドキュメント更新

    • docs/workflow/building/libraries/README.md にビルド例を追加
    • docs/project/analyzers.md を更新

パフォーマンスへの影響

ローカルビルドのターンアラウンドタイムを削減(具体的な数値は未記載)。Analyzer と Linker チェックは CI の専用ジョブで実行されるため、開発ループでの実行オーバーヘッドが消滅します。

関連Issue

なし

その他

この変更は既存の RunAnalyzers / ILLinkTrimAssembly プロパティでのプロジェクトレベルオーバーライドと並存しており、後方互換性を保ちながら段階的に移行可能です。


目次