Pull Request on 2026年09月16日

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

注意点

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


目次

  1. #134095 [mono][interp] Add nullcheck when constant folding vt.GetType
  2. #134070 [release/8.0-staging] Disable RSA SHA1/384 signature tests on Android
  3. #134051 [NativeAOT] Read the byte-packed LSDA offsets without a misaligned load
  4. #134033 [release/11.0] JIT: Refine promotion costing for cold small parameter fields
  5. #134030 Allow intrinsic roots in partial no-JIT compilations
  6. #134028 Fix pipe2 detection for Apple deployment targets
  7. #134026 [browser][CoreCLR] Resolve ReadyToRun addresses for EventPipe
  8. #133995 Fix Wasm async continuation stack walk
  9. #133994 Fix for antigen build
  10. #133993 JIT: Attribute GDV inline failures to candidate
  11. #133990 JIT: Fix truncated histogram likelihoods
  12. #133977 Only consider ECMA assemblies without DisableRuntimeMarshallingAttribute as having runtime marshalling enabled
  13. #133970 Fix NativeAOT resource string inlining for async IL
  14. #133968 JIT: Preserve receiver-before-index evaluation for Span indexers
  15. #133967 JIT: Correct typeof(void).IsPrimitive constant folding
  16. #133957 [manual] Merge release/8.0-staging into release/8.0
  17. #133955 Avoid early HTTP/2 teardown in WinHTTP Latin1 header test
  18. #133946 Quarantine async IPAddress DNS test on OSX and MacCatalyst
  19. #133945 Separate QUIC idle-timeout test setup from inactivity
  20. #133925 [ci-fix] Needs review: dual-stack accept-reset socket test fails on Windows/Linux (refs #133778)
  21. #133877 JIT: Preserve snapshot semantics for overlapping promoted struct copies
  22. #133834 JIT: guard overflow in loop cloning offset limits
  23. #133808 JIT: Invalidate zero-trip guards across iterator or limit redefinitions
  24. #133766 JIT: Properly handle unknown starting values for overflow checks in SCEV analysis
  25. #133739 Implement ReadyToRunHelperNode for WASM
  26. #133726 [PERF] Use standalone Helix monitor for slow performance jobs
  27. #133603 JIT: Refine promotion costing for cold small parameter fields
  28. #133547 [wasm] Don't let native cleanup change the GC mode across a catch resumption
  29. #133380 Probe {riscv,loongarch,arm}64 virtual memory address
  30. #133215 Fix Vector.Dot on arm64
  31. #133213 Fix VSD cache lock ordering during unload
  32. #133201 Fix buffered ConnectAsync completion race on Unix
  33. #133058 Implement UriCreationOptions.AllowImplicitFilePaths
  34. #132981 Fix for out of range mask pattern assert
  35. #125896 Fix dotnet-pgo SPGO crash in FlowSmoothing.MakeGraphFeasible

#134095 [mono][interp] Add nullcheck when constant folding vt.GetType

概要

Mono インタープリタの定数フォールディング最適化における GetType() の null チェック不足を修正しました。値型ポインタが null の場合に NullReferenceException をスローするよう改善しています。

変更内容

  • src/mono/mono/mini/interp/transform.c: GetType() の定数フォールディング処理に MINT_CKNULL 命令を追加し、null チェックを実装。既存の最適化は維持しながら null 参照を適切に検出。

パフォーマンスへの影響

影響なし(null チェック命令の追加のみで、正常系の定数フォールディング最適化は維持)

関連Issue

#133992

その他

なし


#134070 [release/8.0-staging] Disable RSA SHA1/384 signature tests on Android

概要

.NET 8.0のAndroidプラットフォームにおいて、RSA SHA-1/384署名検証テストを無効化するテスト用修正です。Issue #134002に関連する既知の失敗テストを対象とし、本来の修正はバックポートの基準を満たさないため、テストの無効化で対応しています。

変更内容

  • src/libraries/Common/tests/System/Security/Cryptography/AlgorithmImplementations/RSA/SignVerify.cs: ExpectedSignature_SHA1_384とVerifySignature_SHA1_384テストにAndroid固有のActiveIssueアノテーションを追加
  • src/libraries/System.Security.Cryptography/tests/X509Certificates/PublicKeyTests.cs: Android向けのアノテーション追加(1行)

パフォーマンスへの影響

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

関連Issue

#134002

その他

  • このPRはrelease/8.0-stagingブランチを対象としており、.NET 8.0向けのテスト無効化です
  • リスクなし。テストのみの変更であり、実装コードへの影響はありません
  • Copilotによる指摘: 関連するAndroid RSA-384/SHA-1検証テストが有効のままで、引き続き失敗する可能性があります

#134051 [NativeAOT] Read the byte-packed LSDA offsets without a misaligned load

概要

NativeAOTランタイムで、LSDA(Language-Specific Data Area)オフセットの読み込み時にミスアライン読み込みを防ぐ変更。バイトパック形式のLSDAオフセット(1バイトフラグ + 32ビットオフセット)を、アライン保証なしで安全に読み込むようにします。RISC-V環境でのミスアライン命令の実行を避けるための修正です。

変更内容

  • NativePrimitiveDecoder.h: PeekInt32メソッドを追加(読み取り専用)、ReadInt32/ReadUInt32を非可変化してPeekInt32を使用するように修正。バイト単位での読み込みを実施(符号拡張時の溢れも改善)
  • RuntimeInstance.cpp: LSDA オフセット読み込みをキャスト経由から NativePrimitiveDecoder 経由に変更
  • UnixNativeCodeManager.cpp: LSDA オフセット読み込みを同様に修正

パフォーマンスへの影響

影響なし。ミスアライン読み込み機能が利用可能なプラットフォーム(x64/arm64)では、clang 22.1.8 -O2環境でのコンパイル結果は従来通り単一命令(arm64でldrsw、x64でmovslq)にコンパイルされます。

関連Issue

なし

その他

この変更は内部実装レベルの修正であり、公開APIには影響しません。RISC-V等のミスアライン読み込みを厳密に扱うプラットフォームでのランタイム安定性向上を目的としています。


#134033 [release/11.0] JIT: Refine promotion costing for cold small parameter fields

概要

JITのプロモーション(値型フィールドの昇格)コスト計算ロジックを改善し、冷たい(利用頻度が低い)小型パラメータフィールドの過度な抽出を防ぐ修正です。#133603で導入されたパフォーマンス回帰(特にGuidをキーとして使用するコードで発生)を解決するために、ヒューリスティックを調整しています。

変更内容

  • src/coreclr/jit/promotion.cpp: プロモーション対象のフィールド抽出ロジックを改善(+23/-6)
  • src/coreclr/jit/promotion.h: 関連するヘッダー定義を更新(+2/-1)

これらの変更は、JITコンパイラが値型フィールドをどの程度積極的に抽出するかを判定するヒューリスティックを調整し、不必要な抽出を削減します。

パフォーマンスへの影響

改善あり(ただし詳細な数値は提供されていません)。#133603のベンチマーク結果が改善を示している一方で、本PRはGuidキーを使用するコードでの回帰を修正します。冷たいフィールドの過度な抽出削減により、コンパイル時間とメモリ使用量の改善が期待されます。

関連Issue

#133603

その他

  • release/11.0ブランチへのバックポートです
  • リスク評価:低(ヒューリスティック調整の範囲内)
  • 内部で発見されたパフォーマンス回帰の修正であり、顧客報告ではありません

#134030 Allow intrinsic roots in partial no-JIT compilations

  • 作成者: @lewing
  • 作成日時: 2026年09月16日 04:56:49(UTC)
  • マージ日時: 2026年09月16日 21:31:05(UTC)
  • ラベル: area-ReadyToRun

概要

partial ReadyToRun (R2R) コンパイルで、ハードウェア組み込み(intrinsic)メソッドがランタイムコード生成できないターゲット上でも利用可能になるように変更。プロファイルフィルタリングは非intrinsicメソッドと JIT 対応ターゲットに対しては維持される。

特に Browser-Wasm ターゲットでのPackedSimd(473メソッド)とWasmBase(5メソッド)の intrinsic メソッドが partial コンパイルで利用可能になります。

変更内容

  • ReadyToRunSingleAssemblyCompilationModuleGroup.cs: プロファイル除外ロジックに条件を追加し、no-JIT ターゲット上ではハードウェア intrinsic メソッドをプロファイル制限をバイパスして処理するよう変更(+3/-1)

パフォーマンスへの影響

影響なし(intrinsic メソッドの利用可能性向上による機能改善であり、既存コード生成パスへの変更はなし)

関連Issue

#132825 に関連するが、完全解決ではない

その他

  • 対象コンパイルモード: Partial ReadyToRun compilation(crossgen2での--partialフラグ使用)
  • 影響範囲: 内部実装変更。公開API への変更なし
  • テスト: ILCompiler.ReadyToRun.Tests で Browser-Wasm Debug/Release の検証を実施
  • Copilot Review: regression coverage に関する推奨事項あり(partial no-JIT コンパイルの追加カバレッジ)

#134028 Fix pipe2 detection for Apple deployment targets

  • 作成者: @lewing
  • 作成日時: 2026年09月16日 04:18:12(UTC)
  • マージ日時: 2026年09月16日 14:36:06(UTC)
  • ラベル: area-PAL-coreclr

概要

CoreCLR PALのpipe2検出をシンボルのみの確認から呼び出し箇所のコンパイル時プローブに置き換えるもの。Appleホスト上では、配置対象に対して利用不可のAPIが拒否されるため、Apple deployment targetの可用性を正しく診断する必要があります。キャッシュされたプローブ結果の再利用を避けるため、PAL固有の個別プローブ結果を使用します。

変更内容

  • src/coreclr/pal/src/configure.cmake: deployment targetを認識したpipe2機能検出を追加
    • 従来のシンボルのみの検出をコンパイル時プローブに置き換え
    • Apple deployment targetでの利用可能性を正しく判定
    • サポートされていないターゲット向けのフォールバック動作を保持

パフォーマンスへの影響

影響なし

関連Issue

#134024

その他

  • Xcode 27での失敗を再現確認し、修正後にHAVE_PIPE2=0を選択してビルド成功を確認
  • browser/Emscripten構成ではHAVE_PIPE2=1の選択が継続されることを確認
  • レビュー過程で、キャッシュ結果が陳腐化するリスク(Apple SDK、deployment target、コンパイラフラグ変更時)と、debug-palとSystem.Nativeにおけるプローブ結果の伝播に関する指摘がある

#134026 [browser][CoreCLR] Resolve ReadyToRun addresses for EventPipe

概要

CoreCLRのWasm環境でReadyToRun(R2R)メソッドのEventPipeアドレス解決を修正しました。Wasm portable entrypoint関数テーブルインデックスを合成仮想IPに変換することで、メソッドロード、rundown、IL-to-nativeマップイベントの正確な解決を実現します。非Wasm環境、JITコード、インタプリタバイトコードへの影響はありません。

変更内容

  • eventtrace.cpp: MethodAndStartAddressToEECodeInfoPointerを改善し、Wasm portable entrypointアドレスをExecutionManager::GetWasmVirtualIPFromFunctionTableIndex経由で仮想IPに変換。インタプリタ解決を優先し、既存のfuncletインデックス制御メソッド動作を保持
  • EventPipeDiagnosticsTests.cs: ブラウザCPUサンプリングテストを再有効化。CoreCLRでReadyToRunSystem.Buffer.Memmoveフレームワークメソッドのrundown解決を検証

パフォーマンスへの影響

影響なし

関連Issue

#132410

その他

  • Wasm.Build.Tests.Blazor.EventPipeDiagnosticsTests: 4 passed、0 failed(Debug/Release両モード)
  • EECodeInfo::IsValidの既存ガード機構は変更なし
  • ReadyToRun assertionはCoreCLR専用に制限される

#133995 Fix Wasm async continuation stack walk

概要

WebAssembly上でのasync継続スタックウォーク機能を修正し、テストカバレッジを拡充するPRです。主な変更は、WasmのResumeInterpreterContinuation遷移フレームで呼び出し元のシャドウスタック仮想IPを戻り値アドレスとして使用するよう修正しました。これにより、スタックウォーク時のGetWasmVirtualIPFromStackPointer(sp) == controlPC不変性の違反を解決します。併せて、マルチスレッド要件のあるテストに選別的なフィルタリングを適用し、Wasm上でのasync テストランナーの全機能を有効化します。

変更内容

  • src/coreclr/vm/interpexec.cpp: Wasm継続遷移フレームの戻り値アドレスを更新(呼び出し元シャドウスタックの仮想IP使用)
  • src/tests/async/diagnostic-ip-stacktrace/diagnostic-ip-stacktrace.cs: 診断シナリオを2回実行(コールドパス、ウォームパス検証用)
  • src/tests/async/async.csproj: Wasm上での一般的なasyncランナーの無効化を維持
  • src/tests/async/async-wasm.csproj (新規): Wasm専用の選別的なasyncランナー追加
  • 複数のテストファイル: マルチスレッド非対応テストにPlatformDetection.IsMultithreadingSupportedフィルタを適用、反射メソッドの順序をStringComparer.Ordinalで決定化
  • Directory.Build.targets: Wasm固有テスト構成の追加

パフォーマンスへの影響

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

関連Issue

その他

検証結果:

  • Wasm Checked CoreCLR: interpreter/R2R-CG2ランナーで各100フィルタ済み(42/44パス)
  • WASI: 98フィルタ済み、44パス
  • ネイティブmacOS arm64: 142パス

技術的背景: ウォームパスでWasm FCAllが管理側呼び出し元のR2RシャドウスタックポインタとネイティブなResumeInterpreterContinuationエントリポイントを無関係に組み合わせており、スタックウォーク時の不変性検査が失敗していました。


#133994 Fix for antigen build

概要

Antigen build パイプラインの sparse checkout を削除する修正。Antigen ビルドが src/util/CommandLineHelpers.cs(Antigen ツリー外のファイル)に依存しており、sparse checkout ではこのファイルが取得されていなかったため、完全なリポジトリ クローンに変更しました。

変更内容

  • src/coreclr/scripts/fuzzer_setup.py: sparse-checkout 設定を削除し、Antigen および Fuzzlyn の完全なリポジトリを shallow クローンするよう修正(削除 16 行、追加 6 行)

パフォーマンスへの影響

影響なし(sparse checkout の削除により、クローン対象ファイルが増加する可能性がありますが、提供情報では具体的なパフォーマンス測定結果は記載されていません)

関連Issue

#133994

その他

なし


#133993 JIT: Attribute GDV inline failures to candidate

概要

Guarded Devirtualization (GDV) によるインライン化失敗が、本来の対象メソッドではなく仮想メソッドに誤って属性づけられていた問題を修正します。この問題により、永続的な失敗時に誤ったメソッドがプロセス生存期間中インライン化不可とマークされていました。GDV候補を InlineResult に明示的に渡すことで、報告と CORINFO_FLG_BAD_INLINEE 伝播が正しいガード対象を参照するようにしました。

変更内容

  • inline.h: InlineResult に明示的な callee (呼び出し先) サポートを追加
  • inline.cpp: 報告と伝播に供給された callee を使用するよう修正
  • importercalls.cpp: 候補評価時にGDV対象を渡すよう変更
  • badinlinee.cs: tiered-PGO回帰テストを追加(割り当て排除の検証)
  • badinlinee.csproj: 分離されたtiered-PGOテスト設定を追加

パフォーマンスへの影響

  • 回帰テストでの割り当て: 修正前24,000バイト → 修正後0バイト
  • Poisoned Test メソッドのコード生成: 34バイト → 6バイト
  • インライン化の正確な属性づけにより、不要なマーキングがなくなり、最適化機会が向上

関連Issue

#133974

その他

  • Windows x64 Release/Checked CoreCLRビルドで検証済み
  • JIT フォーマット確認済み
  • Copilotレビューでは、ガード対象選択ロジックの一元化を推奨(重複ロジック解消のため)

#133990 JIT: Fix truncated histogram likelihoods

概要

JIT PGO(Profile-Guided Optimization)のヒストグラム尤度計算で、切り詰められたクラス・メソッド・値ヒストグラムが最初のエントリに省略された確率をすべて割り当てていた問題を修正。これにより不正当なガード付きdevirtualizationや定数特殊化が引き起こされていた。修正により完全なヒストグラムのみを正規化するよう変更。

変更内容

  • src/coreclr/jit/likelyclass.cpp: ヒストグラム正規化ロジックを修正し、切り詰められたエントリに対する確率の重み付けを廃止。すべてのヒストグラムエントリが返される場合のみ丸め誤差の正規化を実施
  • テスト追加: クラス・メソッドヒストグラムの回帰テスト(LikelyClass.cs/LikelyClass.csproj)

パフォーマンスへの影響

不正な推測ガードの削除により、ベンチマーク結果が分岐:

  • Periodic uniform dispatch: +6%(4.677 ns vs. 4.411 ns)
  • Shuffled uniform dispatch: -3%(4.646 ns vs. 4.805 ns)

結果の相違はスペキュレーティブガード削除による無効な最適化の除外を反映。スループット改善を保証するものではなく、プロファイル確率の正確化が主目的。

Windows x64 SuperPMI検証では3/9コレクションで251の差分(コンパイル失敗なし、コード削減:7,773バイト)を確認。

関連Issue

#133973

その他

Copilotレビューから、以下の対応が推奨されている:

  • 値ヒストグラムの回帰テストカバレッジの追加(8個以上の定数観測時に切り詰められたデータで定数特殊化が誤発動しないことを検証)
  • getLikelyClasses/getLikelyMethodsで共有されているドキュメンテーションの中立的な表現への修正

これらは本PR内では未対応。


#133977 Only consider ECMA assemblies without DisableRuntimeMarshallingAttribute as having runtime marshalling enabled

概要

NativeAOTのランタイムマーシャリング検出ロジックを修正し、DisableRuntimeMarshallingAttributeを持たないECMA標準アセンブリのみをランタイムマーシャリング有効と判定するようにしました。これにより、非ECMA モジュール(合成モジュールなど)に対する誤った"IL1005"診断の発行を防ぎます。

変更内容

  • src/coreclr/tools/Common/TypeSystem/Interop/IL/MarshalHelpers.cs: ランタイムマーシャリング検出ロジックを修正(+1/-1行)
    • 修正前:モジュール種別の判定が不正確で、非ECMAアセンブリに対しても誤ったマーシャリング状態判定を行っていた
    • 修正後:ECMA標準アセンブリかつDisableRuntimeMarshallingAttributeがない場合のみランタイムマーシャリング有効と判定

パフォーマンスへの影響

影響なし

関連Issue

NativeAOT emits false IL1005 for DisableRuntimeMarshallingAttribute

その他

  • 範囲: コンパイラ/ツール鎖(NativeAOT)の内部実装
  • 互換性: 破壊的変更なし(誤った診断を修正するため、実質的には互換性向上)
  • レビュー指摘: Copilotレビューにて、合成モジュールおよびECMAモジュール動作のリグレッションテスト追加を推奨

#133970 Fix NativeAOT resource string inlining for async IL

概要

NativeAOT環境でのランタイム非同期IL(Runtime async)メソッドにおけるリソース文字列インライニングの問題を修正します。非同期ILラッパーのECMAモジュールアイデンティティを保持し、リソース文字列トークンの注入と解決時にこれを認識することで、不要なリソースがルート化されるのを防ぎます。

変更内容

  • NativeAotILProvider.cs: 非同期ILラッパー作成時にEcmaMethodILをラップした場合、新たに追加されたEcmaAsyncMethodILを返すように変更。これによりモジュールアイデンティティが保持されます。
  • SubstitutedILProvider.cs: リソース文字列トークン注入時に、メソッドの定義がIEcmaMethodILである場合の処理を追加し、ECMA配下の非同期ILに対応。

パフォーマンスへの影響

ランタイム非同期有効時のバイナリサイズ大幅削減:

  • 修正前: 2,196,480 bytes
  • 修正後: 1,610,240 bytes
  • 削減量: 586,240 bytes(26.7%削減)

ランタイム非同期無効時は変化なし(1,601,536 bytes)。残りのサイズ差分はアプリから到達可能なAsyncOverSyncWithIoCancellation由来で、async1インフラを引き込みます。

関連Issue

#133954

その他

レビュー時にCopilot AIから、既存のFrameworkStringsテストではランタイム非同期メソッド内のSRリソースアクセスを網羅していないため、回帰テストの追加を求める指摘があります。具体的には、リソースが実際にインライン化され、ルート化されないことを検証するテストが推奨されています。


#133968 JIT: Preserve receiver-before-index evaluation for Span indexers

  • 作成者: @Copilot
  • 作成日時: 2026年09月15日 17:10:56(UTC)
  • マージ日時: 2026年09月16日 10:08:00(UTC)
  • ラベル: area-Infrastructure

概要

Span<T> と ReadOnlySpan<T> のインデクサー展開時に、IL評価順序の違反により、副作用を持つレシーバーの前にインデックスがスピルされてしまう問題を修正しました。JIT Importer で、インデックスのクローン/スピル時にレシーバーを評価スタック上に保持することで、評価順序を保証し、不正な値や例外の発生を防ぎます。

変更内容

  • importercalls.cpp: Span インデクサー展開処理を修正。インデックス値のスピル時にレシーバーをスタック上に保持し、既存のスピルロジックで正しい評価順序を保証
  • Runtime_133963.cs: 新規リグレッション テストケースを追加。両Span型に対し、静的フィールドインデックス、インデックス呼び出し、例外順序、スタック操作の組み合わせをカバー

パフォーマンスへの影響

影響なし

関連Issue

#133963

その他

リグレッション テストは src/tests/JIT/Regression_ro_2/ に配置され、評価順序の問題と例外処理を網羅的にカバーしています。


#133967 JIT: Correct typeof(void).IsPrimitive constant folding

  • 作成者: @Copilot
  • 作成日時: 2026年09月15日 17:07:18(UTC)
  • マージ日時: 2026年09月16日 10:08:59(UTC)
  • ラベル: area-Infrastructure

概要

JITコンパイラがtypeof(void).IsPrimitiveをtrueに定数折り畳みしていた問題を修正。リフレクション結果と一致させてfalseを返すようにします。

変更内容

  • src/coreclr/jit/importercalls.cpp: ImporterでCORINFO_TYPE_VOIDをプリミティブ型分類から除外。Enum処理は維持。
  • src/tests/JIT/Intrinsics/TypeIntrinsics.cs: 既存のTypeIntrinsicsテストにtypeof(void).IsPrimitiveがfalseであることの検証を追加。

パフォーマンスへの影響

影響なし

関連Issue

#133964

その他

なし


#133957 [manual] Merge release/8.0-staging into release/8.0

概要

release/8.0-stagingをrelease/8.0ブランチにマージするバージョン管理リリース。ツールバージョン、依存関係、ビルドパイプライン、およびSystem.Net.Quic関連の機能追加・テスト拡張を含む。

変更内容

  • ツール・バージョン管理: dotnet-tools.json、Version.Details.xml、Versions.propsを更新してバージョン番号を進める
  • ビルドパイプライン: runtime-extra-platforms-ioslike.yml、runtime.ymlにIOSプラットフォーム対応のパイプライン設定を追加
  • System.Net.Quic:
    • MsQuicConfiguration.csに新しい設定オプションを追加(12行)
    • QuicConnection.csで接続ロジックを改善
    • Strings.resxにリソース文字列を追加
    • MsQuicTests.csで85行の新規テストケースを追加
  • テスト修正: System.Net.HttpListener、System.Security.Cryptography.Xmlの既存テストを小規模修正

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

マージリリース性質の変更であり、System.Net.Quic関連の機能拡張とテストカバレッジの強化が主な技術的変更。内部実装の更新で、公開APIへの影響は限定的と考えられます。


#133955 Avoid early HTTP/2 teardown in WinHTTP Latin1 header test

  • 作成者: @rzikm
  • 作成日時: 2026年09月15日 14:57:54(UTC)
  • マージ日時: 2026年09月16日 07:10:17(UTC)
  • ラベル: area-System.Net.Http

概要

WinHTTP HTTP/2を使用するLatin1ヘッダーエンコーディングテストで、クライアントのバッファリング完了までHTTP/2ループバック接続を維持することで、早期の接続断裂による競合状態(ネイティブエラー12030)を排除します。この修正はテストのライフタイム管理に限定され、本番コードには影響を与えません。

変更内容

  • src/libraries/Common/tests/System/Net/Http/HttpClientHandlerTest.cs: WinHTTP HTTP/2固有の新しいサーバーヘルパーを追加。クライアントのSendAsyncと破棄完了をシグナル化してからサーバー側の送信シャットダウンを開始。サーバー障害時はシャットダウン前に非同期接続破棄をキャンセル。HTTP/1とSocketsは既存ヘルパーを保持。

パフォーマンスへの影響

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

関連Issue

#130458、#132004

その他

  • ローカル検証: Windows 11 x64でWinHTTP完全機能テストスイート1,631件合格、.NET Framework net481でも639件合格
  • 修正対象のContent/0x7f メソッドは10,000回連続実行で合格(従来は10,000回中1回のネイティブエラー12030が発生)
  • 既存のSocket非同期失敗(#132004)は本変更に含まれず、同じシグネチャで発生
  • 破壊的変更、新規API、セキュリティ脆弱性修正なし
  • 本番コード変更なし。グローバルループバックティアダウンデフォルトへの影響なし

#133946 Quarantine async IPAddress DNS test on OSX and MacCatalyst

  • 作成者: @rzikm
  • 作成日時: 2026年09月15日 12:36:12(UTC)
  • マージ日時: 2026年09月16日 07:11:27(UTC)
  • ラベル: area-System.Net

概要

Dns_GetHostEntryAsync_IPAddress_Ok テストを issue #132750 で追跡されているタイムアウト問題に対応するため、MacOS と MacCatalyst で一時的にquarantine(隔離)するものです。

変更内容

  • src/libraries/System.Net.NameResolution/tests/FunctionalTests/GetHostEntryTest.cs: ActiveIssue 属性を使用してテストメソッドに platform-specific な quarantine 属性を追加しました。

パフォーマンスへの影響

影響なし

関連Issue

#132750

その他

Copilot レビューで以下の指摘がされています:

  • プラットフォーム指定の精度に関する懸念(報告されているのはデスクトップ macOS 上の失敗だが、実装では MacCatalyst もしくはその対象範囲に矛盾がある可能性)
  • インデント の一貫性に関する指摘

#133945 Separate QUIC idle-timeout test setup from inactivity

  • 作成者: @rzikm
  • 作成日時: 2026年09月15日 12:35:23(UTC)
  • マージ日時: 2026年09月16日 07:24:37(UTC)
  • ラベル: area-System.Net

概要

QUICアイドルタイムアウトテスト IdleTimeout_ThrowsQuicException が、接続設定フェーズ中に1秒のアイドルタイムアウトで失敗するのを防ぐため、テストの設定フェーズと意図的な非活動フェーズを分離します。設定中はサーバー側キープアライブを有効化し、その後MsQuic APIを通じて無効化することで、設定期間のタイムアウト失敗を回避します。

変更内容

  • QuicTestCollection.cs: ネイティブハンドルの寿命管理(DangerousAddRef/DangerousRelease)を備えたテスト専用ヘルパー DisableConnectionKeepAlive() を追加。MsQuic設定の直接操作によりキープアライブを無効化します。
  • MsQuicTests.cs: IdleTimeout_ThrowsQuicException テストを修正し、設定段階でサーバーキープアライブを有効化(100ms間隔)、その後ヘルパーで無効化します。設定操作にキャンセレーションタイムアウト(10秒)を適用し、保留中の読み取り・受け入れ操作の例外観察を強化します。

パフォーマンスへの影響

影響なし。テストのみの変更であり、プロダクトコードに対する直接的なパフォーマンス影響はありません。

関連Issue

#133945

その他

互換性・検証上の懸念事項:

  • 本変更はWindows x64 CoreCLR、Schannel、MsQuic 2.5.10 でのみ検証されており、Linux/OpenSSL環境や最小サポート版MsQuic 2.2.2での動作が未検証です。
  • ネイティブ設定操作(QUIC_PARAM_CONN_SETTINGS)は直接ABIパスを使用するため、バージョン・プラットフォーム間での動作差異リスクがあります。クロスプラットフォーム環境での実行前に、サポート対象の全ネイティブ組み合わせでの検証またはバージョンガードの追加が推奨されます。
  • Copilotレビューで指摘された懸念: (1)設定段階でキープアライブ保護が実際に機能しているか検証する明示的な遅延テストが不在、(2)非同期タスクの例外観察が不完全である可能性、(3)プリコンディション検証の不足。これらは今後の改善候補です。
  • プロダクトAPI変更なし。本変更は完全にテストのみの修正です。

#133925 [ci-fix] Needs review: dual-stack accept-reset socket test fails on Windows/Linux (refs #133778)

概要

System.Net.Sockets.TestsのAcceptDualStackResetTests.Accept_DualStackListener_PeerImmediatelyResets_ListenerStaysHealthyテストがWindows/Linuxで失敗する問題を修正します。IPv4ピアが即座にリセット(SO_LINGER=0)されるシナリオで、Accept呼び出しがそのリセットを検出した場合、例外ハンドラの外で例外が発生していました。修正によりAccept呼び出しを既存のtryブロック内に移動し、リセット例外を許容して次のループ反復で健全なIPv6ピアを受け取るようにしています。本体コード変更なし。

変更内容

  • src/libraries/System.Net.Sockets/tests/FunctionalTests/Accept.cs
    • Accept/AcceptAsync呼び出しを既存の例外ハンドラ(tryブロック)内に移動
    • ピアリセット時のSocketException(WSAECONNRESET/"connection forcibly closed")をキャッチして再試行可能に
    • テストロジックは保持(健全なピアのメッセージ受信アサーションは変わらず)
    • macOSではリセットがacceptで検出されないため既に成功していたが、Windows/Linuxでの動作統一

パフォーマンスへの影響

影響なし

関連Issue

#133778、#131869

その他

  • このPRはAI生成の暫定修正で、検証が完全ではありません
  • 未検証項目:実際にWindows/Linux上でテストが成功することの確認、およびリセットをacceptで検出する際の正しい動作か、ランタイム側で抑制すべきかの設計確認が必要です
  • Accept内で発生するSocketExceptionをすべて許容するのではなく、リセット固有のエラーのみに限定するフィルタリングをCopilotが推奨しています

#133877 JIT: Preserve snapshot semantics for overlapping promoted struct copies

  • 作成者: @Copilot
  • 作成日時: 2026年09月14日 13:18:49(UTC)
  • マージ日時: 2026年09月16日 13:55:36(UTC)
  • ラベル: area-VM-coreclr

概要

Physical promotionでオーバーラップする構造体コピーの際に、デスティネーションがソースより後ろにある場合、昇順で実行すると先の書き込みが後の読み込みに必要な値を上書きしてしまう問題を修正。デスティネーション開始位置がソース開始位置より後ろの場合のみコピープランを逆順で実行することで、スナップショットセマンティクスを保証します。

変更内容

  • arraystack.h: ArrayStack::Reverseメソッドを追加し、スタックのデバッグミューテーション追跡を保持しながらスタック内容を逆順にする機能を実装
  • promotiondecomposition.cpp: CopyBetweenFields内で、同一ローカル変数の部分的オーバーラップかつデスティネーションがソースより後ろの場合のみ、DecompositionPlan::Reverseを使用してコピープランを逆順実行
  • Runtime_133858.cs: オーバーラップ方向2種類、隣接コピー両方向、同一オフセット、異なるローカル変数など、複数のリグレッション検証テストケースを追加

パフォーマンスへの影響

影響なし。修正は正確性を保証するものであり、条件付きの逆順処理はオーバーラップが発生する限定的なケースのみに適用されます。

関連Issue

#133858

その他

  • JITコンパイラ(ランタイムコンポーネント)の内部実装の修正であり、公開APIへの影響なし
  • Physical promotionの最適化機能における正確性向上で、破壊的変更なし

#133834 JIT: guard overflow in loop cloning offset limits

概要

JITのループクローニング最適化において、正の配列長オフセットが符号付きオーバーフローして負値にラップし、境界チェックなしで高速クローンが実行される脆弱性を修正。オフセットのオーバーフロー検出をガードに追加し、減少ループのリグレッション対応を追加しました。

変更内容

  • src/coreclr/jit/loopcloning.cpp: オーバーフロー対応の高速クローンガードを追加(+6行、-4行)
  • src/tests/JIT/opt/Cloning/OffsetLimit.cs: 正のオフセットオーバーフロー時のリグレッションテストを追加(+76行)
  • src/tests/JIT/opt/Cloning/OffsetLimit.csproj: テストプロジェクト設定を追加

パフォーマンスへの影響

影響なし。本変更は安全性チェック(オーバーフロー検出)の追加であり、既存の最適化パスには影響しません。

関連Issue

#133823

その他

  • JITの安全性に関わる変更のため、最終的な人間によるレビューが推奨されている
  • 減少ループ(>、>=、!=を使用)を含むテストケースでリグレッション対応
  • オーバーフローで負値にラップされた配列インデックスが境界チェック回避の脆弱性につながる可能性を排除

#133808 JIT: Invalidate zero-trip guards across iterator or limit redefinitions

  • 作成者: @Copilot
  • 作成日時: 2026年09月12日 22:23:30(UTC)
  • マージ日時: 2026年09月16日 14:50:58(UTC)
  • ラベル: area-CodeGen-coreclr

概要

JITコンパイラのゼロトリップ検出ロジックを強化し、ループエントリ前に反復子またはリミット変数が再定義された場合、古い保護ガード(ガード)を無効化するようにしました。この修正により、ループクローニング時に境界チェックが誤って削除されるバグを防止します。

変更内容

  • compiler.h: NaturalLoopIterInfoにリミット依存ローカル変数の追跡情報を追加(配列参照を含む)
  • flowgraph.cpp: プリヘッダを含む中間ステートメントで反復子またはリミット依存ローカル変数への格納が発生した場合、以前のガードを拒否するロジックを実装
  • Runtime_133762.cs: スカラーリミット、配列参照、反復子の再定義に関する回帰テストを追加(範囲外、有効反復、ゼロトリップの3ケース)

パフォーマンスへの影響

影響なし

関連Issue

#133762

その他

JIT内部実装への変更で、公開APIへの影響はありません。ゼロトリップ検出ロジックを厳格化することで、ループ最適化の正確性を向上させます。


#133766 JIT: Properly handle unknown starting values for overflow checks in SCEV analysis

  • 作成者: @Copilot
  • 作成日時: 2026年09月11日 23:32:09(UTC)
  • マージ日時: 2026年09月16日 10:53:58(UTC)
  • ラベル: area-CodeGen-coreclr

概要

RyuJIT の SCEV (Scalar Evolution) 解析における overflow チェックのバグを修正します。未知またはゼロ以外の開始値を持つシンボリック recurrence に対して、不正な強度削減値が生成される問題を解決します。

変更内容

  • src/coreclr/jit/scev.cpp: シンボリック開始値の overflow 検出ロジックを修正。未知または非ゼロ開始値に対して unsafe な拡張分配を保守的に拒否するよう変更(1行の修正)
  • src/tests/JIT/Regression_ro_2/Runtime_133759.cs: signed-to-unsigned wraparound に関する回帰テストを追加(41行の新規テスト)

パフォーマンスへの影響

影響なし(バグ修正であり、正確性の向上)

関連Issue

#133759

その他

  • この変更は JIT コンパイラの内部実装(非公開API)に関するバグ修正です
  • 回帰テストが追加されており、同様の問題の再発を防ぐ対策が講じられています

#133739 Implement ReadyToRunHelperNode for WASM

  • 作成者: @Copilot
  • 作成日時: 2026年09月11日 20:23:32(UTC)
  • マージ日時: 2026年09月16日 17:12:36(UTC)
  • ラベル: area-NativeAOT-coreclr

概要

WASM向けのReadyToRun静的ベース、デリゲート構築、仮想関数ヘルパーのコード生成を実装しました。WASM関数シグネチャを依存性分析に登録し、アーキテクチャ相当のWASMヘルパー本体を生成します。マネージドテールコール時にシャドウスタックとポータブルエントリポイント引数を保持します。

変更内容

  • WasmReadyToRunHelperNode.cs: ReadyToRunヘルパーシグネチャと生成ロジックを実装(GetThreadStaticBase、GetThreadNonGcStaticBase、デリゲートコンストラクタ、仮想関数解決対応)
  • NodeFactory.cs: WASM署名ルックアップサポートを追加
  • ReadyToRunCodegenNodeFactory.cs: 型付きWASMノードシグネチャのサポート
  • ObjectNode.cs: WASM型依存関係の登録
  • INodeWithTypeSignature.cs: インターフェース更新

パフォーマンスへの影響

影響なし

関連Issue

#133738

その他

注意事項: Copilotレビューにより複数の重大な問題が報告されています:

  1. マネージドテールコール: ReadyToRun下での関数呼び出しがポータブルエントリポイント引数を省略しており、呼び出しアリティが不正となる可能性があります。

  2. リロケーション処理:

    • デリゲートターゲット(GetTargetNode)がメソッドコードの場合、WASM関数テーブルインデックスが必要ですが、I32.ConstRVAは線形メモリアドレスをエミットしています
    • RhpResolveInterfaceMethodがWASM関数/インポートとして登録されていません
  3. 非GCスレッドスタティック: GetThreadNonGcStaticBaseケースが未実装のままNotImplementedExceptionに到達します。

  4. テスト不足: 静的ベース、デリゲート構築、インターフェース/仮想関数ディスパッチのヘルパーパスを検証する回帰テストが不足しています。

  5. スレッドスタティック高速パス: 初期化済みコンテキスト後も毎回CheckStaticClassConstructionReturnThreadStaticBaseを呼び出しており、x64/ARM64相当の高速パスが欠落しています。

これらの問題は本マージ前に解決が必要です。


#133726 [PERF] Use standalone Helix monitor for slow performance jobs

概要

perf-slow パイプラインに standalone Helix Job Monitor を導入し、非同期送信と完了追跡を実現します。関連するPR #132807、#133633、#133885に従い、段階スコープの認証情報とモニタージョブの明示的なパラメータを構成します。既存のベンチマークセレクタは変更されず、公開ベンチマークワークロードは追加されません。

変更内容

  • eng/pipelines/performance/perf-slow.yml: モニタージョブ設定を追加
    • enableHelixJobMonitor フラグを常に有効化し、standalone monitor ジョブを明示的なパラメータブロックで含める
    • DotNet-HelixApi-Access を段階スコープで内部プロジェクト実行時にインポート
    • 条件付き iif 式で helixAccessToken を制御:内部プロジェクトのみ $(HelixApiAccessToken) を使用、その他は空文字列
    • モニタージョブの上限を6時間(360分)に設定
    • 既存のサバミタ/ワークアイテムタイムアウトは変更なし

パフォーマンスへの影響

非同期送信により Azure エージェントの占有時間を短縮し、ワークロード完了をモニタージョブで追跡。ただし、Copilot レビュー指摘により、パフォーマンステンプレートを介したパラメータ伝播がないため、現在のサブミタジョブは同期的に動作したままとなっており、期待される非同期メリットが実現されていない可能性があります。

関連Issue

#132807、#133633、#133885

その他

検証状況:

  • 内部パイプライン 1012 の sanity run 3072457 で検証(onlySanityCheck=true、runScheduledJobs=true、runPrivateJobs=true)
  • 4つのビルドジョブと5つの Azure サバミタジョブは成功、送信は29~45秒で完了
  • モニタージョブは完了追跡と結果アップロードを正常に実行(パイプラインは failed で終了、false-green なし)
  • 最終版は 192 の プロジェクト/理由/プライベート/スケジュール/sanity の組み合わせをローカル検証

Copilot レビューの指摘:

  1. パフォーマンステンプレート(runtime-perf-job.yml、send-to-helix-step.yml)を介したモニタパラメータ伝播が不足し、サブミタジョブが同期的に動作したまま
  2. 認証情報パスの Azure テンプレートコンパイラ検証および内部/公開パスの live 検証なし
  3. private PullRequest ワークロードの発見不可能性による false-green リスク

マージ前に、パフォーマンステンプレートでの UseHelixMonitor と WaitForWorkItemCompletion パラメータの伝播と、内部/公開パスの Azure live 検証が推奨されています。


#133603 JIT: Refine promotion costing for cold small parameter fields

概要

RyuJIT物理昇格(physical promotion)コスト計算を改善し、アクセス頻度が低い小型パラメータフィールド(byte/short)の早期抽出を抑制します。エントリブロック重みの10%未満の加重アクセス数を持つ小型フィールドについて、ビット単位パラメータレジスタ抽出クレジットを保留することで、レジスタ圧力を軽減し、実行性能を向上させます。

変更内容

  • src/coreclr/jit/promotion.h: パラメータレジスタマッピング宣言を拡張(+2/-1)
  • src/coreclr/jit/promotion.cpp: 10%の加重アクセス閾値に基づく抽出コスト計算を実装(+23/-6)

昇格コスト計算において、byte/shortフィールドのアクセス頻度が低い場合は早期抽出クレジットを付与しない仕様を追加。直接レジスタマッピングと広いフィールドのコスト計算は保持。

パフォーマンスへの影響

PriorityQueue<Guid, Guid> ベンチマーク結果:

  • HeapSort(サイズ10): 0.76倍 高速化(186.2ns → 142.1ns)
  • Dequeue_And_Enqueue(サイズ100): 0.82倍 高速化(11.279µs → 9.234µs)
  • HeapSort(サイズ1000): 0.79倍 高速化(83.540µs → 66.290µs)
  • 複数ケースで15~34%のパフォーマンス改善を確認

レジスタ圧力削減により、不要なメモリスピルとコピー操作が減少。

関連Issue

#119770

その他

本変更は初期化される昇格フィールドの動作は変更せず、早期抽出が利益をもたらさない場合(例:Guid.CompareToで後続フィールドアクセス前に戻るケース)を対象とした発見的手法です。抽出コスト、レジスタ圧力、スピル/コピー共有コストの正確なモデル化ではないため、汎用的な収益性モデルではありません。


#133547 [wasm] Don't let native cleanup change the GC mode across a catch resumption

  • 作成者: @davidwrighton
  • 作成日時: 2026年09月09日 23:36:34(UTC)
  • マージ日時: 2026年09月16日 17:04:42(UTC)
  • ラベル: area-ReadyToRun

概要

WebAssemblyの例外処理において、ネイティブクリーンアップ中のRAIIベースのGCモードホルダー(デストラクタ)が、キャッチ復帰時のコンテキスト復元処理と干渉し、マネージコードが誤ったGCモードで再開される問題を修正します。 具体的には、GCX_COOP_REGION_BEGIN/ENDなどの明示的なGCモード領域マクロを導入し、catch(...)構文を使用して外来例外タグの通過を許可しつつ、C++クリーンアップの副作用を回避します。

変更内容

新規マクロ(vm/util.hpp)

  • GCX_COOP_REGION_BEGIN/END、GCX_PREEMP_REGION_BEGIN/END、GCX_MAYBE_COOP_REGION_BEGIN/END
  • wasm環境ではtry/catch(...)ラッパーで例外を再スロー、他プラットフォームでは通常のホルダーに展開

GCモード遷移の診断機構(_DEBUGのみ)

  • スレッドローカルt_gcModeSwitchPermittedフラグでキャッチ復帰中の遷移を禁止
  • 新ヘルパーCORINFO_HELP_JIT_RESUME_AFTER_CATCHで復帰後にフラグを再設定
  • 違法な遷移でDisablePreemptiveGC/EnablePreemptiveGCで即座にアサート

マクロ変換済みサイト

  • reflectioninvocation.cpp、interpexec.cpp(11箇所)、prestub.cpp、customattribute.cpp、excep.cpp、exceptionhandling.cpp

crossgen2/ReadyToRunプラント

  • --verify-gc-mode-transitionsオプション追加
  • CORJIT_FLAG_VERIFY_GC_MODE_TRANSITIONS、READYTORUN_FLAG_VERIFY_GC_MODE_TRANSITIONSを新規定義
  • R2Rマイナーバージョンを2に変更
  • System.Private.CoreLibではDebug/Checkedビルドで有効化

パフォーマンスへの影響

リリースビルドではアサートマクロ、スレッドローカル変数、ヘルパー呼び出しはすべてコンパイル時に削除されるため、オーバーヘッドなし。 検証実装の導入により、browser-wasm RunCrossGen2テスト(Checkedランタイム)で:

  • 修正前:395パス、8失敗、OBJECTREF assert発生
  • 修正後:402パス、1失敗、assert発生なし

関連Issue

#133219

その他

  • 制御フローが_ENDマクロをスキップするreturn/break/continue/gotoは領域遷移をリークするため、変換時にすべてのサイトを検査し、必要に応じて結果変数を領域外に配置
  • 診断機構はオプトイン:resume targetが検証フラグを持つイメージに属する場合のみフラグ消去
  • JIT-EEバージョンGUIDを更新(インターフェース変更のため)
  • Copilotレビューで未解決指摘あり:WASI環境での有効化条件が不完全、デバ

#133380 Probe {riscv,loongarch,arm}64 virtual memory address

概要

RISC-V 64ビット、LoongArch 64ビット、ARM 64ビットシステムにおいて、仮想メモリアドレス空間の実行時プロービングを実装します。特にRISC-V 64ビットシステムではSv48アドレッシングが使用されていますが、GCはSv39に制限されていたため、実行時にアドレス空間をプロービングして対応します。

変更内容

  • src/coreclr/gc/unix/gcenv.unix.cpp: GC初期化時に各アーキテクチャ(RISC-V 64、LoongArch 64、ARM 64)の仮想メモリアドレス空間を実行時にプロービングする処理を追加(+78行)

パフォーマンスへの影響

影響なし(実行時プロービングは初期化時に一度だけ実行される処理)

関連Issue

#133380

その他

なし


#133215 Fix Vector.Dot on arm64

概要

ARM64でのVector.Dot操作のコード生成不具合を修正しました。MorphフェーズでCreate(ToScalar(Dot(...)))からCreateとToScalarが削除された場合、残りのDot結果がベクトルとして消費される際に、レーン0のみでなく全レーンへのブロードキャストが必要になります。ARM64ローリング時に明示的なブロードキャストを挿入することで問題を解決しました。

変更内容

  • src/coreclr/jit/lowerarmarch.cpp: ARM64のNI_Vector_Dotローリング処理を更新。Dot結果がToScalarで消費されない場合、明示的なブロードキャスト命令を挿入。
  • src/tests/JIT/Regression_ro_2/Runtime_132800.cs: Vector128.IndexOf内でVector.Dotを使用するパターンや、Vector64/Vector128.Create(Dot(...))のブロードキャストケースをカバーするリグレッション テストを追加。
  • src/tests/JIT/Regression/Regression_ro_2.csproj: 新規リグレッション テスト ファイルをプロジェクト ビルドに追加。

パフォーマンスへの影響

影響なし。本修正は正しいセマンティクスを保証するためのコード生成の修正であり、x64との差分も発生しません。

関連Issue

#132800

その他

レビュー指摘により、リグレッション テストの条件をより厳密にする検討が提案されています(AdvSimd.Arm64.IsSupportedへの変更)。これにより、ARM32とARM64の異なるJITパスを区別し、本修正の適切なカバレッジを確保できます。


#133213 Fix VSD cache lock ordering during unload

  • 作成者: @adamperlin
  • 作成日時: 2026年09月04日 00:02:15(UTC)
  • マージ日時: 2026年09月16日 19:17:39(UTC)
  • ラベル: area-VM-coreclr

概要

CoreCLR VMのロック順序の問題を修正します。VirtualCallStubManager のデストラクタでVSD(Virtual Stub Dispatch)キャッシュロックをヒープ削除前に解放し、実行可能メモリアロケータロックとのデッドロックを防ぎます。また、collectible AssemblyLoadContext のアンロード時にこの問題が発生するシナリオを検証する回帰テストを追加します。

変更内容

  • src/coreclr/vm/virtualcallstub.cpp: VirtualCallStubManager デストラクタ内で、VSD resolve-cache 書き込みロック(CrstStubDispatchCache)のスコープをアンリンクループに制限し、ローダーヒープ削除前に確実に解放。ローダーヒープ削除時に取得される実行可能アロケータロック(CrstExecutableAllocatorLock)とのロック順序違反を解決します。
  • src/tests/Regressions/coreclr/GitHub_132982/test132982.cs: Collectible ALC にアセンブリを反射ロードし、VSDキャッシュを増大させ、アンロード/GC を強制実行して、ロック順序アサーションが発生しないことを検証する xUnit 回帰テスト。
  • src/tests/Regressions/coreclr/GitHub_132982/test132982.csproj: テストプロジェクト設定ファイル(優先度、アンロード可能性フラグ、コンパイル入力)。

パフォーマンスへの影響

影響なし

関連Issue

#132982

その他

レビューアーから以下の指摘あり:

  • テストプロジェクトに RequiresProcessIsolation=true を設定し、UnloadabilityIncompatible との整合性を取る必要あり
  • 回帰テストで、反射ロードされたアセンブリが意図した collectible AssemblyLoadContext に実際に存在することをアサートし、Dispatcher.Run が見つからない場合は明確なエラーを出して、テストカバレッジの信頼性を向上させることが推奨されています

#133201 Fix buffered ConnectAsync completion race on Unix

概要

Unix上でのバッファ化されたデータを含むConnectAsyncの完了競合状態を修正します。接続とバッファ化送信の一体性を保証し、ネイティブブロッキングモードの復元タイミングを確定させます。これによりSystem.Net.Sockets.Tests.SocketBlockingModeTransitionTests.ConnectAsync_WithBuffer_Succeedsの間欠的失敗を解決します。

変更内容

SocketAsyncContext.Unix.cs

  • ConnectOperationがバッファ化送信を同じ操作内で処理するよう改修(別の操作として起動していたパターンから変更)
  • DoTryCompleteが接続とバッファ送信の両方が完了するまで完了を報告しないように修正
  • InvokeCallbackでユーザーコールバック呼び出し前にネイティブブロッキングモードを無条件に復元
  • ConnectAsyncの同期TryStartConnect分岐で、後続のバッファ送信が非同期完了する場合は別途コールバックラッパーでブロッキングモード復元を処理
  • キューに積まれたConnectOperation分岐で、StartAsyncOperationが同期完了を報告する際にブロッキングモードを無条件に復元

Connect.Unix.cs

  • ConnectAsync_WithBuffer_Succeedsテストでプラットフォーム特有のブロッキングモード検証をプラットフォーム依存ロジックを削除
  • Android向けの[ActiveIssue]スキップを削除
  • 大容量バッファの回帰テストConnectAsync_WithLargeBuffer_PendingSendCompletesBeforeBlockingIsRestoredを追加

パフォーマンスへの影響

影響なし

関連Issue

#133012

その他

技術的背景: バッファ化されたデータを含むConnectAsyncにおいて、初期connect()の完了後に別途送信操作を起動していた場合、接続自体は常に「完了」と報告されていました。これによりSocketAsyncEventArgsの同期/非同期完了契約を違反し、同一コールバックの同期完了と非同期完了の二重完了競合が発生していました。

Copilotレビューの指摘: 最新の審査で、キューに積まれたI/Oがネイティブブロッキングモード復元前に実行される可能性のある高深度な競合状態(High severity)が指摘されており、マージ前に対応が必要です。


#133058 Implement UriCreationOptions.AllowImplicitFilePaths

  • 作成者: @MihaZupan
  • 作成日時: 2026年09月02日 01:45:35(UTC)
  • マージ日時: 2026年09月16日 21:27:48(UTC)
  • ラベル: area-System.Net

概要

UriCreationOptions.AllowImplicitFilePaths を実装し、URI作成時に暗黙的なファイルパス認識を制御できるようにしました。内部的には Uri.Flags に DisableImplicitFilePaths ビットを追加し、URI構築・スキーム解析時にこのフラグをスレッド化しています。

変更内容

  • System.Runtime.cs: UriCreationOptions.AllowImplicitFilePaths プロパティを公開API表面に追加
  • UriCreationOptions.cs: 新しいオプションを内部 Uri.Flags.DisableImplicitFilePaths ビットにマッピング
  • Uri.cs: Flags.DisableImplicitFilePaths ビットを導入し、スキーム解析時の暗黙的ファイルパス認識をゲート化
  • UriExt.cs: URI作成ヘルパーをリファクタリングして Flags を直接受け取り、オプションフラグを解析にスレッド化
  • UriCreationOptionsTest.cs: デフォルト動作および暗黙的ファイルパスの許可/拒否動作をカバーするテストを追加

パフォーマンスへの影響

影響なし

関連Issue

#59099

その他

留意事項: Copilotレビューで複数の推奨事項が指摘されています:

  1. API設計上、PR作成者は UriKind を UriCreationOptions に露出させることの価値に確信が持てていない(相対URIの動作仕様の複雑性を回避するため、Absoluteのみに限定)
  2. 追跡Issue #59099で承認されている UriCreationOptions.UriKind API形状がこのPRで未実装のため、Issueのクローズ要件が完全に満たされていない可能性がある
  3. 公開バリューの値型レイアウト互換性上の問題が未解決と指摘されている

#132981 Fix for out of range mask pattern assert

概要

SVE (Scalable Vector Extension) マスクパターンの定数評価で、範囲外の SveMaskPattern 値がアサーション失敗を引き起こしていた問題を修正しました。今後は範囲外のパターンに対して、アサーション例外を発生させず、全ビット0のマスク(非アクティブレーン)として扱います。ARM SVE命令セットの仕様に準拠した動作への変更です。

サンプルコード:

// 修正前: アサーション失敗
// 修正後: 全ビット0のマスクを返す
Sve.CreateTrueMaskSingle(SveMaskPattern.VectorCount5);

変更内容

  • src/coreclr/jit/simd.h: EvaluateSimdPatternToMask 関数を修正し、現在のベクトルレーン数を超える範囲外パターンをアサーション例外ではなく、全ビット0のマスク("no active lanes")として処理するように変更
  • src/tests/JIT/Regression_ro_2/Runtime_132910.cs: Sve.CreateTrueMask* が範囲外のマスクパターンを正しく処理することをカバーする回帰テストを追加
  • src/tests/JIT/Regression_ro_2/Regression_ro_2.csproj: 新しい回帰テストをプロジェクトに組み込み

パフォーマンスへの影響

影響なし

関連Issue

#132910

その他

  • JITコンパイラの内部実装(simd.h)の変更で、公開APIには影響なし
  • 動作変更は ARM SVE命令セット仕様(PTRUE instruction)に準拠しており、互換性の破壊はなし
  • レビュアーから承認推奨の評価を受けており、動作変更が局所的で仕様に準拠していることが確認されている

#125896 Fix dotnet-pgo SPGO crash in FlowSmoothing.MakeGraphFeasible

概要

dotnet-pgo の SPGO (Sample Guided Profile Optimization) パイプラインで、FlowSmoothing.MakeGraphFeasible() が例外を発生させる場合に、1つの問題のあるメソッドが全体のパイプラインをクラッシュさせないよう修正しました。SampleCorrelator.SmoothAllProfiles() でメソッド単位のSmoothFlow()を try-catch でラップすることで、問題のあるメソッドはスキップしつつ、他の正常なメソッドの SPGO データを保持できるようになります。

変更内容

  • src/coreclr/tools/dotnet-pgo/SPGO/SampleCorrelator.cs: SmoothAllProfiles() メソッドでメソッド単位の SmoothFlow() 呼び出しを try-catch でラップし、例外発生時にそのメソッドを結果から除外する処理を追加
  • src/coreclr/tools/dotnet-pgo/Program.cs: 関連する小規模な変更(1行削除、1行追加)

パフォーマンスへの影響

影響なし。この修正はエラーハンドリングのため、通常ケース(例外が発生しない場合)のパフォーマンスには影響しません。

関連Issue

なし

その他

背景: FlowSmoothing.MakeGraphFeasible() が InvalidOperationException ("Stack empty") をスローする原因は、メソッドのフロー グラフに、正のサンプル数を持つノードが存在するにもかかわらず、終了ノードに接続していない場合です。修正前は 143K+ のサンプルが属性化された後、クラッシュして SPGO パイプライン全体が非 SPGO パスにフォールバックしていました。

テスト完了: 再現テストで 143K サンプルが正常に属性化され、問題のあるメソッドがスキップされた後、SPGO .mibc ファイルが正常に生成されることを確認済み。


目次