Pull Request on 2026年07月21日

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

注意点

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


目次

  1. #131166 Remove unused args from specifier-less JITDUMP calls
  2. #131155 Fix HWIntrinsic codegen for elided scalar/vector reinterprets
  3. #131151 Route code-review skill to vectorization skill on SIMD diffs
  4. #131142 Avoid array allocations when evaluating connections for eviction
  5. #131134 Re-enable foreground shutdown test
  6. #131132 Make Complex<T> conform to C23 Annex G special values
  7. #131131 Fix Dragon4 shortest formatting for exact powers of two
  8. #131128 [release/9.0-staging] Update dependencies from dotnet/cecil
  9. #131127 [release/9.0-staging] Update dependencies from dotnet/icu
  10. #131121 Extract wasm string-ctor thunk selection and prestub native-helper fallback from next-blocker-spc
  11. #131120 Fix thread-statics bootstrap recursion on WASM
  12. #131119 Change InitClass and InitInstantiatedClass to return void* for WASM portable entry point compatibility
  13. #131118 [release/10.0] Fix a series of possible race conditions in thread static variable initialization
  14. #131112 Add runtime async tests for catching non-Exception throws
  15. #131109 Vectorize IA5 and Visible strings in ASN.1 encoding and decoding.
  16. #131108 Simplify vectorization guidelines and add a vectorization skill
  17. #131104 JIT: formatting fixes in rangecheck.h
  18. #131103 Use stable names for perf sample-app binlog artifacts
  19. #131101 Remove unused parse_only_production parameter from fx_ver parse
  20. #131100 Re-add retired r2r.yml
  21. #131099 [release/10.0] Use volatile access for CoreCLR dictionary layout publication
  22. #131098 Align Decimal32/64/128 surface with the approved API
  23. #131091 Reduce EncryptedXml encoded DTD test workload
  24. #131081 [ci-fix] Needs review: fix CS0246 InvalidCSharp build break in ByRefLike/Validate under minifullaot (refs #128767)
  25. #131080 [HTTP] MultiProxy
  26. #131071 [mobile] Skip publishing tests ignored by CI
  27. #131047 Update performance benchmark skill workflow
  28. #131041 LibraryImportGenerator: prep for unsafe-v2
  29. #130990 Reject folding local addresses the emitter cannot encode
  30. #130988 [cDAC] WebAssembly support: stack walking and managed metadata resolution
  31. #130984 Mark additional commutative xarch and arm64 intrinsics and instructions
  32. #130977 Fix flaky PhysicalFileProvider TokensFiredForOldAndNewNamesOnRename test
  33. #130976 Modernize System.Text.Json product code
  34. #130967 Fix flaky PhysicalFilesWatcher timeout when root is deleted and recreated
  35. #130949 Use user-arg accessors when expanding runtime lookups
  36. #130946 Fix side-effect reordering when folding constant-zero-mask BlendVariable
  37. #130944 [release/9.0-staging] Update dependencies from dotnet/arcade
  38. #130907 JIT: fix profile propagation in LowerSwitch
  39. #130884 Reduce reader/writer contention in Pipelines
  40. #130862 [automated] Merge branch 'release/8.0' => 'release/8.0-staging'
  41. #130861 [automated] Merge branch 'release/9.0' => 'release/9.0-staging'
  42. #130838 Fold floating-point comparisons with a constant NaN in morph
  43. #130837 JIT: Cleanup and harden lowering
  44. #130832 Fix two latent HWIntrinsic miscompiles in gentree.cpp
  45. #130829 Track reflectability of delegates pointing to generic virtuals
  46. #130821 Enable additional library tests in ReadyToRun pipeline
  47. #130787 [release/8.0-staging] Update dependencies from dotnet/xharness
  48. #130746 [release/10.0] Update dependencies from dotnet/icu
  49. #130745 [wasi] Stand up CoreCLR-WASI library-test leg (per-app corerun relink)
  50. #130630 Change IList<string> to IEnumerable<string> in Process Run/StartAndForget methods
  51. #130627 Prevent StackOverflow in PhysicalFilesWatcher on unwatchable file systems
  52. #130589 [Trimming] Fix startup crash when TypeMapAssemblyTarget attribute survives but target assembly is fully trimmed
  53. #130560 Re-enable BitOps_Crc32C_* tests on tvOS
  54. #130476 Add configurable HTTP connection eviction, expose ConnectionId APIs
  55. #130384 Add support for inline pinvokes to Wasm Ryujit
  56. #129800 [cdac] Convert TypeHandle to the ITypeHandle interface

#131166 Remove unused args from specifier-less JITDUMP calls

概要

#130837のフォローアップとして、JITコンパイラ内の複数のJITDUMP呼び出しから、フォーマット文字列に対応する変換指定子(%)を持たないまま渡されている未使用の末尾引数を削除します。すべてDEBUGビルドのみの変更で、実行時の動作は変わりません。

変更内容

  • lower.cpp: JITDUMP("Argument is a local\n", numRegs, stackSeg.Size)から未使用引数を削除
  • importercalls.cpp: arrayElemSize引数を削除
  • importervectorization.cpp: str引数を削除
  • inductionvariableopts.cpp: dspTreeID(...)およびlclNum引数を削除(後続のDISPTREEがツリーを既にダンプしているため冗長)
  • optimizer.cpp: lclNum引数を削除
  • rangecheck.cpp: expr引数を2箇所から削除

パフォーマンスへの影響

影響なし。本変更はDEBUGビルドのログ出力のみに関連する変更で、リリースビルドには影響しません。

関連Issue

#130837

その他

PR説明と変更内容はGitHub Copilotにより作成されました。


#131155 Fix HWIntrinsic codegen for elided scalar/vector reinterprets

概要

PR #130444での透過的なスカラー/ベクトル再解釈ノード(CreateScalarUnsafe、GetLowerなど)の削除により、x64 RyuJIT HWIntrinsic コード生成で2つのバグが発生。オペランドの型に依存していたコード生成決定が、削除後の型変更により誤動作する問題を修正。ConvertToVector128/256Int*の過負荷選択と、AVX2ギャザー命令のVSIBインデックス幅の決定ロジックを修正。

変更内容

  • lowerxarch.cpp: AVX2ギャザーのインデックスオペランドとして使用される場合、GetLower/ToVector*Unsafe系の再解釈削除をスキップ。VSIB幅(xmm vs ymm)の選択を保持
  • hwintrinsiccodegenxarch.cpp: ConvertToVector128/256Int*の過負荷選択をvarTypeIsSIMD(op1->TypeGet())からnode->OperIsMemoryLoad()(aux-type駆動)に変更。再解釈削除後のオペランド型変更に対応
  • Runtime_131137.cs/csproj: Sse41/Avx2の scalar-from-convert と narrowed-index ギャザーケースをカバーする回帰テストを追加

パフォーマンスへの影響

影響なし。本修正はコード生成の正確性修正であり、パフォーマンス特性は変わらない。

関連Issue

#131137

その他

  • 修正前の問題:
    • ConvertToVector128/256Int*:削除されたスカラーをベクトルとして読む誤動作 → スカラー値をアドレスとして読む NullReferenceException
    • AVX2ギャザー:narrowed インデックスでVEX.Lが誤って設定 → ハードウェアが間違った数の要素を読み込む(サイレント な誤結果)
  • 監査結果:他のサイズ/属性決定はノードメタデータ(TypeGet()、GetSimdSize()等)から導出されており、これら2箇所がオペランド幅駆動の唯一の例外だった

#131151 Route code-review skill to vectorization skill on SIMD diffs

  • 作成者: @tannergooding
  • 作成日時: 2026年07月21日 14:14:19(UTC)
  • マージ日時: 2026年07月21日 14:57:45(UTC)
  • ラベル: area-skills

概要

GitHub Copilotのcode-reviewスキルに、ファイルパスではなくディフコンテンツに基づいたSIMD型の検出によりvectorizationスキルをルーティングする機能を追加します。これにより、リポジトリ全体のSIMD関連コード変更に対して、一貫してベクトル化チェックリストが適用されるようになります。

変更内容

  • .github/skills/code-review/SKILL.md:
    • Step 2(エリア検出セクション)に、Vector128/Vector256/Vector512、Vector<T>、System.Runtime.Intrinsics.*などのSIMD型をトリガーとする内容ベースのスキル適用について記載
    • スキルロード時に「Content matches (not path-based)」セクションを追加し、SIMD型が検出されたときvectorizationスキルを適用するルールを定義

パフォーマンスへの影響

影響なし(ドキュメント・プロセスルール変更のみ)

関連Issue

なし

その他

Copilotからの指摘事項:

  • Vector64/Vector64<T>が「Content matches」セクションのトリガーリストから漏れており、Step 2で記載されているVector64との間に不一貫性がある可能性があります。SIMD型トリガーリストの両セクションでの統一が検討対象となる可能性があります。

#131142 Avoid array allocations when evaluating connections for eviction

  • 作成者: @MihaZupan
  • 作成日時: 2026年07月21日 11:43:07(UTC)
  • マージ日時: 2026年07月21日 13:42:18(UTC)
  • ラベル: area-System.Net.Http

概要

SocketsHttpHandlerの接続蒸発評価時における配列割り当てを削減するパフォーマンス改善です。HTTP/2およびHTTP/3接続を反復処理する際に、List<T>.ToArray()の代わりにCollectionsMarshal.AsSpan()を使用することで、不要なメモリ割り当てを回避します。

変更内容

  • HttpConnectionPool.cs: HTTP/2接続の利用可能リストに対するToArray()呼び出しをCollectionsMarshal.AsSpan()に置き換え
  • HTTP/3接続についても同様の置き換えを実施
  • System.Runtime.InteropServices名前空間をインポート

パフォーマンスへの影響

メモリ割り当ての削減。接続蒸発評価時に配列の一時割り当てがスキップされるため、特にHTTP/2やHTTP/3を頻繁に使用する環境でGCプレッシャーが軽減されます。

関連Issue

#130476

その他

PR作成者はこの変更を#130476の後続フォローアップとして位置付けており、CI再実行を避けるために別途作成されています。


#131134 Re-enable foreground shutdown test

概要

foreground-shutdown リグレッションテストを再度有効化するPR。CoreCLR限定のActiveIssueスキップアノテーションを削除し、CIで自動スキップされずにテストが実行されるようになります。元のIssue #84006は #103877 で解決済みと判断されました。

変更内容

  • src/tests/baseservices/threading/regressions/2164/foreground-shutdown.cs: [ActiveIssue(..., TestRuntimes.CoreCLR)] アノテーションを削除(-1行)

パフォーマンスへの影響

影響なし

関連Issue

#84006(本PRで解決とマーク)
#103877(元の問題を解決したPR)

その他

テストスイートの改善で、スレッド処理関連のリグレッション検証が再度有効になります。


#131132 Make Complex<T> conform to C23 Annex G special values

概要

Complex<T> および非ジェネリック Complex を C23 Annex G(IEC 60559互換複素算術)の特殊値(符号付きゼロ、無限大、NaN)要件に準拠させます。乗算・除算時に無限大回復メカニズムを導入し、初等関数(Sqrt、Exp、Logなど)に Annex G プロローグを追加します。これは特殊値入力の動作を変更する破壊的変更であり、以前は NaN を返していた多くのケースで Annex G が要求する有向無限大、符号付きゼロ、または特定の符号付き結果を返すようになります。

変更内容

  • Complex.Generic.cs: operator * に Annex G.5.1 無限大回復を実装し、operator / に Smith の公式と回復機構を層状に適用。初等関数に Annex G プロローグを追加。スカラー乗除算やその他の演算は複素演算パスを経由して特殊値動作の一貫性を確保
  • Complex.cs: 非ジェネリック Complex の演算と数学関数を Complex<double> に委譲して更新された特殊値動作を継承
  • ComplexTests.SpecialValues.cs: Complex<double/float/Half> 向けの新規汎用特殊値テストハーネスを追加。独立した Annex G リファレンスから期待値を生成
  • ComplexTests.cs: 既存テストのオラクルと期待値を Annex G 特殊値動作に合わせて更新
  • System.Runtime.Numerics.Tests.csproj: 新テストファイルをプロジェクトに追加

パフォーマンスへの影響

operator /(Complex<T>, T) がスカラー除数を複素値に昇格させて複素演算パスを経由するため、有限かつゼロでない除数の一般的なケースで追加の処理コストが発生する可能性があります。

関連Issue

#131132 破壊的変更ドキュメント: dotnet/docs#54845

その他

  • 全 System.Runtime.Numerics テストスイート: 8368 合格、0 失敗、0 スキップ
  • 本 PR は GitHub Copilot の支援を受けて起案されました
  • operator / は Smith の公式を保持したまま回復を重ね、Annex G リファレンスアルゴリズムがオーバーフロー可能な大きさの被除数に対しても正確性を維持する設計

#131131 Fix Dragon4 shortest formatting for exact powers of two

概要

Number.Dragon4の浮動小数点数最短形式化において、正確な2の累乗に対するhasUnequalMargins計算時に32ビットシフト(1U << ...)を使用していたため、double型で誤った結果が生じていました。これにより2^-25や2^-958のような値がラウンドトリップ不可能な文字列に変換されていました。

例:

  • 2^-25: 2.980232238769531E-08 (修正前) → 2.9802322387695312E-08 (修正後)
  • 2^-958: 4.104536801298376E-289 (修正前) → 4.1045368012983762E-289 (修正後)

修正前の文字列をパースすると、より小さいdouble値に戻ります。

変更内容

  • src/libraries/System.Private.CoreLib/src/System/Number.Dragon4.cs

    • hasUnequalMargins計算時のシフト演算を1Uから1ULに変更
    • これにより、C#の32ビットオペランドに対するシフト数マスク(5ビット)の問題を回避
  • src/libraries/System.Runtime/tests/System.Runtime.Tests/System/DoubleTests.cs

    • DoubleTests.ToString_ExactPowerOfTwo_Roundtripsテストケースを追加
    • 2^-25および2^-958を含む正確な2の累乗のラウンドトリップ検証

パフォーマンスへの影響

影響なし(バグ修正のみ)

関連Issue

#102683(回帰の原因)

その他

  • このバグは#102683で複数の型専用パス(double/float/Half)を1つの汎用メソッドに統合した際に導入された回帰です
  • 修正はfloat(23)、double(52)、Half(10)、BFloat16(7)のすべてのサポート型に対して正確です
  • ExtractFractionAndBiasedExponentとDiyFp.GetBoundariesは既に1ULを使用していたため影響なし
  • 検証:2098個の2の累乗値と約1000万のランダムfloat/doubleラウンドトリップ、およびHalfの全検証がパス

#131128 [release/9.0-staging] Update dependencies from dotnet/cecil

概要

dotnet/cecilの依存関係を更新するautomated dependency updateです。Cecil 0.11.5-alpha.26353.2から0.11.5-alpha.26370.3へバージョンを更新します。

変更内容

  • eng/Version.Details.xml: Microsoft.SourceBuild.Intermediate.cecil と Microsoft.DotNet.Cecil の バージョン情報を 0.11.5-alpha.26353.2 から 0.11.5-alpha.26370.3 に更新
  • eng/Versions.props: 対応するバージョン参照を更新

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • このPull Requestはdotnet-maestro[bot]による自動化されたdependency updateです
  • release/9.0-stagingブランチ向けの更新です
  • Cecilコンパイラパイプラインライブラリの定期的なアップデートとして機能します

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

概要

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

変更内容

  • eng/Version.Details.xml: dotnet/icu依存関係のバージョン情報を更新(コミットハッシュとバージョン番号を更新)
  • eng/Versions.props: Microsoft.NETCore.Runtime.ICU.Transportのバージョン番号をアップデート

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

自動依存関係更新PR(dotnet-maestro[bot]作成)です。dotnet/release/9.0ブランチ向けの定期的な依存関係同期です。


#131121 Extract wasm string-ctor thunk selection and prestub native-helper fallback from next-blocker-spc

概要

WebAssemblyの混合インタプリタ/R2Rディスパッチを実現するため、文字列コンストラクタのcalli cookie処理とprestubの管理FCallヘルパー公開ロジックを抽出・改善するものです。インタプリタ→R2R間のコンストラクタ呼び出しと、ネイティブR2Rヘルパーの処理を最適化します。

変更内容

  • src/coreclr/vm/wasm/helpers.cpp

    • GetCookieForCalliSigに文字列コンストラクタの特殊ケースを追加
    • インタプリタ→R2R calli cookieがコンストラクタファクトリthunkシェイプを使用
    • コンストラクタアリティによる明示的なthunkキーマッピング実装
    • ReadOnlySpan<char>コンストラクタハンドリング対応
  • src/coreclr/vm/prestub.cpp

    • portable entrypoint下での管理ヘルパー形式の処理を統合
    • インタプリタバイトコード存在時:インタプリタデータを公開
    • インタプリタバイトコード非存在時(ネイティブR2Rヘルパー):ネイティブコードを公開
    • prestubへの再ルーティング防止メカニズムを実装

パフォーマンスへの影響

影響なし(構造的改善であり、実行時パフォーマンス関連の変更なし)

関連Issue

#131121

その他

このPRは大規模な「next-blocker-spc」ブランチから必要最小限の機能に絞った抽出版です。WebAssemblyランタイムのインタプリタとAOT(R2R)間のシームレスな相互運用を実現するための内部実装変更であり、公開APIには影響しません。


#131120 Fix thread-statics bootstrap recursion on WASM

  • 作成者: @Copilot
  • 作成日時: 2026年07月21日 00:11:26(UTC)
  • マージ日時: 2026年07月21日 21:13:32(UTC)
  • ラベル: area-VM-coreclr

概要

WASM上でのスレッド静的変数初期化時の無限再帰を修正しました。GetThreadStaticsBase()がStaticsHelpers.GetNonGCThreadStaticBaseを経由して自身を呼び出す再帰ループを、WASM専用のネイティブFCall GetThreadStaticsBaseNativeを追加することで回避しています。

変更内容

  • Thread.CoreCLR.cs: WASM環境でのGetThreadStaticsBase()実装を、&pNativeThreadポインタ演算からGetThreadStaticsBaseNative() FCall呼び出しに変更(#if TARGET_WASMプリプロセッサガード内)
  • comsynchronizable.h: WASM専用のGetThreadStaticsBaseNative FCDECL宣言を追加
  • comsynchronizable.cpp: GetThreadStaticsBaseNativeを実装((void*)&t_ThreadStaticsを直接返却、#include "threadstatics.h"追加)
  • ecalllist.h: WASM環境でのFCall登録を追加

パフォーマンスへの影響

影響なし(バグ修正により無限再帰を排除)

関連Issue

なし

その他

本修正はWASM環境のみに適用されます(#if TARGET_WASMガード)。マネージド層での再帰的な参照ルートを回避し、ネイティブレイヤーから直接t_ThreadStaticsアドレスを取得することで根本的な問題を解決しています。


#131119 Change InitClass and InitInstantiatedClass to return void* for WASM portable entry point compatibility

  • 作成者: @Copilot
  • 作成日時: 2026年07月21日 00:08:53(UTC)
  • マージ日時: 2026年07月21日 23:37:58(UTC)
  • ラベル: area-VM-coreclr

概要

WASM ポータブルエントリポイント互換性のため、InitClass と InitInstantiatedClass のヘルパーメソッドの戻り値を void から void* に変更します。WASM の call_indirect シグネチャは戻り値の個数を含む完全一致が必須ですが、JIT はこれらのヘルパーを値を返すものとしてモデル化しているため、ダミーの null を返すように修正しました。

変更内容

  • src/coreclr/System.Private.CoreLib/src/System/Runtime/CompilerServices/InitHelpers.cs
    • InitClass メソッド: 戻り値型を void → void* に変更、条件ロジックを反転(早期リターン削除)、return null を追加
    • InitInstantiatedClass メソッド: 同様の変更を実施
    • WASM call_indirect ABI 要件を説明するコメントを追加

パフォーマンスへの影響

影響なし

関連Issue

#131119

その他

  • 本変更は AndyAyersMS:runtime:next-blocker-spc ブランチから抽出されたもの
  • WASM ターゲット限定の修正で、他のプラットフォームへの影響はない
  • ランタイムの内部実装(InitHelpers.cs)に関する変更であり、公開 API には影響しない

#131118 [release/10.0] Fix a series of possible race conditions in thread static variable initialization

概要

スレッド静的変数の初期化中に発生する可能性があった一連のレース条件を修正するバックポート。ARM64プラットフォームで頻繁にスレッドを作成・破棄するプロセスにおいて、初期化時のクラッシュが発生していた問題を解決。修正はVolatile型の読み書きへの変更のみで、既存のロード/ストア操作の追加・削除は行わない。

変更内容

  • src/coreclr/vm/threadstatics.cpp: メモリ操作をVolatile変種に変更(13行追加、7行削除)
  • src/coreclr/vm/threadstatics.h: スレッド静的変数管理の定義更新(10行追加、2行削除)

PR #99183で導入されたレース条件を、メモリの可視性を明示的に保証するVolatile操作で修正。

パフォーマンスへの影響

Volatile操作への変更により若干のメモリバリアが追加されるが、修正内容はロード/ストア操作の追加ではなく既存操作の属性変更のみのため、パフォーマンスへの悪影響は最小限と考えられます。

関連Issue

  • #130496(顧客報告)
  • #127843(オリジナルPR)
  • #99183(レグレッション導入元)

その他

  • 破壊的変更なし(公開APIへの影響なし、内部実装の修正)
  • .NET 11での検証により、コンパイラのクラッシュが有意に減少することを確認
  • リスクレベル: 低(既存操作の属性変更のみ)

#131112 Add runtime async tests for catching non-Exception throws

概要

Runtime async (async2) とコンパイラstate-machine async (async1) の動作一致性をテストするため、非System.Exceptionオブジェクトのスロー処理に関するランタイム非同期テストを追加します。RuntimeCompatibilityAttribute(WrapNonExceptionThrows)により、スローされたオブジェクトがRuntimeWrappedExceptionでラップされるかどうかを制御します。

// async1 (state machine) vs async2 (runtime async) — 同一本体、異なる生成方式
[RuntimeAsyncMethodGeneration(false)]
public static async Task ThrowAfterYieldAsync1()
{
    await Task.Yield();
    NonExceptionThrower.ThrowNonException(); // 文字列をスロー (IL)
}

public static async Task ThrowAfterYieldAsync2()
{
    await Task.Yield();
    NonExceptionThrower.ThrowNonException();
}

変更内容

  • src/tests/async/runtime-wrapped-exception/: 新しいテストスイートを追加
    • NonExceptionThrower.il — 非Exceptionオブジェクト(文字列)をスローするILヘルパー
    • NoWrapThrowers.cs — [assembly: RuntimeCompatibility(WrapNonExceptionThrows = false)]でマークされたヘルパーアセンブリ
    • runtime-wrapped-exception.cs — async1/async2スローア各々をawaitし、WrapNonExceptionThrows設定下での同期/非同期スロー時の動作を検証

パフォーマンスへの影響

影響なし

関連Issue

#131111 — NativeAOT上での非Exceptionスロー後の挙動追跡

その他

  • 動作差異: WrapNonExceptionThrows = trueではasync1/async2は一致。WrapNonExceptionThrows = falseでは、サスペンション後の非Exceptionスロー時に発散(async1は生プロセスをクラッシュ、async2はRuntimeWrappedExceptionでTaskをフォルト)
  • テスト除外: CatchAfterYield_NoWrap_Async1はプロセスクラッシュが予期される古い動作であり、変更予定がないため、[ActiveIssue]ではなく説明コメント付きでブロック
  • NativeAOT制限: NativeAOT上では非Exceptionスロー後の挙動が異なるため、DisableProjectBuild (TestBuildMode == nativeaot時) で実装をブロック中

#131109 Vectorize IA5 and Visible strings in ASN.1 encoding and decoding.

概要

ASN.1エンコーディング/デコーディングにおいて、IA5StringおよびVisibleStringのエンコード・デコード処理をSystem.Numerics.Vector<T>を用いてベクトル化しました。文字単位/バイト単位の処理から、Vector<T>のサイズ単位での処理に変更することで、大幅なパフォーマンス向上を実現します。.NETCoreApp以降のビルドのみが対象で、ダウンレベル実装は既存の動作を維持しています。

変更内容

  • 新規ファイル: AsnCharacterStringEncodings.net.csにRestrictedAsciiRangeEncodingを実装。Vector<T>を用いた範囲ベース検証により、ベクトル単位での高速パスを提供。無効データ検出時はスカラー処理にフォールバックして正確な例外位置を特定。
  • ダウンレベル対応: AsnCharacterStringEncodings.downlevel.csで既存の制限ASCII実装にマッピング。
  • エンコーディング更新: IA5EncodingとVisibleStringEncodingがRestrictedAsciiRangeEncodingから継承。
  • プロジェクト設定: System.Numerics.Vectorsへの依存を追加し、条件付きコンパイルファイルを設定。
  • テスト拡充: ベクトルサイズ境界とベクトル幅後の無効データケースをカバーする読み書きテストを追加。

パフォーマンスへの影響

大幅な改善(メモリ・メモリアロケーション: 影響なし)。

  • 32要素入力: デコーディング 51.6ns → 17.7ns(66%削減)、ライティング 52.76ns → 21.06ns(60%削減)
  • 1024要素入力: デコーディング 1,389ns → 222ns(84%削減)、ライティング 1,350ns → 253ns(81%削減)
  • 4096要素入力: デコーディング 5,436ns → 864ns(84%削減)、ライティング 5,328ns → 1,001ns(81%削減)
  • 短い入力 (8-16要素): 14-52%改善
  • 無効データケース: エラーパスはほぼ同等またはわずかに遅い可能性。これはベクトル単位でのバリデーション後、正確な無効位置特定のためのスカラーフォールバック処理が必要なため。ただし例外スローが支配的なため実用上の影響は最小限。
  • メモリアロケーション: 変更なし。

関連Issue

なし

その他

  • 内部実装変更(公開API変更なし)
  • 互換性への影響なし
  • エラーパスでの例外互換性を保証:無効要素の位置報告の正確性を維持するため、ベクトル処理で無効を検出した場合、スカラー処理で実際の無効位置を特定し直す仕様。

#131108 Simplify vectorization guidelines and add a vectorization skill

  • 作成者: @tannergooding
  • 作成日時: 2026年07月20日 21:52:02(UTC)
  • マージ日時: 2026年07月21日 13:39:27(UTC)
  • ラベル: area-skills

概要

SIMD/ベクトル化ガイダンスをリポジトリ外の公式ドキュメント(dotnet/docs#54834)への参照に簡潔化し、dotnet/runtime固有のノウハウのみを保持します。また、SIMD/ハードウェア内在関数の作成・レビュー向けの新しいvectorizationスキルを追加します。

変更内容

  • docs/coding-guidelines/vectorization-guidelines.md: 一般的なSIMDガイダンスを削除し、runtime固有の内容(BoundedMemoryテストヘルパー、LastIndexOfのGC-hole事例研究#75857、実装例#64451)のみを保持。元のドキュメントサイズを約91%削減
  • .github/skills/vectorization/SKILL.md: 新規スキル追加。SIMD作成・テスト・レビューのチェックリスト、公式ドキュメントへの参照、runtime固有のベストプラクティス(LoadUnsafeエレメント-オフセットオーバーロード優先、BoundedMemoryによるアクセス違反テスト、加速トグル環境変数)を記載
  • .github/copilot-instructions.md: SIMD/ハードウェア内在関数作業時にvectorizationスキル使用を促す1行のテキスト追加

パフォーマンスへの影響

影響なし

関連Issue

#73768、#75857、#64451

その他

  • ベクトル化はフォルダ単位ではなくクロスカッティングドメインのため、ファイルスコープの.instructions.mdではなくタスクトリガー型スキルを採用
  • Copilot指摘:BoundedMemoryはブラウザ/WASI/NET Frameworkで毒ページ保護が適用されない場合があり、アウトオブバウンドリード時のAccessViolationExceptionが保証されないため、ガイダンスの適用範囲を明確化する必要あり
  • Copilot指摘:LINQ SIMD加速状況(Max/Minは未実装)の記述精度を見直しが必要

#131104 JIT: formatting fixes in rangecheck.h

概要

JITコンパイラの範囲チェック処理を担当するsrc/coreclr/jit/rangecheck.h内の長い行を折り返し、可読性を向上させるフォーマッティング変更です。動作上の変更はありません。

変更内容

  • src/coreclr/jit/rangecheck.h: RangeOps::Addメソッド内の以下の箇所をフォーマット:
    • r1StraddlesZeroおよびr2StraddlesZeroの計算式を再フロー
    • signedEndpointOverflowsの割り当てを長い行を避けるため折り返し

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

なし


#131103 Use stable names for perf sample-app binlog artifacts

概要

パフォーマンス測定用サンプルアプリのビルドパイプラインテンプレートで、MSBuild binlogアーティファクトの命名規則を修正するもの。PR #128498で診断アーティファクトとして分類された際に付与された_Attempt$(System.JobAttempt)サフィックスを削除し、ダウンストリームのdotnet/performanceリポジトリで参照される安定した名前を復元する変更。

変更内容

  • eng/pipelines/performance/templates/build-perf-sample-apps.yml
    • 10個のbinlogアーティファクトから_Attempt$(System.JobAttempt)サフィックスを削除
    • アーティファクトパブリッシュの条件をsucceededOrFailed()からsucceeded()に変更
    • ダウンストリームジョブ(dotnet/performance runtime-perf-job.yml)での参照可能性を確保

パフォーマンスへの影響

影響なし

関連Issue

#128498

その他

このPRは、CI/CDパイプラインの相互参照に関する修正で、.NETランタイム開発の実行時ビルドには直接影響しません。安定したアーティファクト名の使用は、ダウンストリームのパフォーマンス測定ジョブの信頼性向上につながります。


#131101 Remove unused parse_only_production parameter from fx_ver parse

  • 作成者: @Copilot
  • 作成日時: 2026年07月20日 19:03:36(UTC)
  • マージ日時: 2026年07月21日 22:44:04(UTC)
  • ラベル: area-Host

概要

c_fx_ver_parse / fx_ver_t::parse の parse_only_production パラメータを削除するクリーンアップです。このパラメータは全てのコール元で false または デフォルト値として使用されており、実際に true で呼び出されることがないため、不要なパラメータを削除しました。

変更内容

  • fx_ver.h/fx_ver.c: parse_only_production パラメータを関数シグネチャから削除
  • framework_info.cpp, fx_resolver.cpp, sdk_resolver.cpp: パラメータを渡さない呼び出しに更新
  • fx_ver.cpp: 関数実装からパラメータを削除
  • fxr_resolver.c: パラメータを指定しない呼び出しに更新

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

内部実装のクリーンアップで、公開APIへの影響はありません。corehost (ネイティブランタイムホスト) の .NET Framework バージョン解析ロジックの不要なパラメータ削除です。


#131100 Re-add retired r2r.yml

  • 作成者: @jtschuster
  • 作成日時: 2026年07月20日 18:56:21(UTC)
  • マージ日時: 2026年07月21日 20:58:35(UTC)
  • ラベル: area-ReadyToRun

概要

削除されたr2r.ymlに対応するAzure DevOps(AzDO)パイプライン定義がまだ存在し、警告が発生していた問題を解決するため、ダミーファイルとしてr2r.ymlを復活させました。これにより、AzDO上の警告を回避できます。

変更内容

  • eng/pipelines/coreclr/r2r.yml: 82行のスタブファイルを新規追加
    • trigger: noneとpr: noneを設定し、自動実行を防止する構成

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

本対応は一時的な措置です。作成者がAzDO パイプライン定義を削除する権限がないため、ダミーファイルを置くことで警告を抑制しています。


#131099 [release/10.0] Use volatile access for CoreCLR dictionary layout publication

概要

CoreCLR辞書レイアウトの公開時にvolatileアクセスを使用することで、メモリオーダリングの問題を修正するバックポート。net10で導入されたthreadstatic関連の変更に起因する微妙なメモリ順序の問題を解決し、Linux ARM64環境でのインターミッテント クラッシュを防止します。

変更内容

  • src/coreclr/vm/class.h: メモリアクセスをvolatile化(2行追加、2行削除)
  • src/coreclr/vm/method.hpp: メモリアクセスをvolatile化(5行追加、5行削除)

これらの変更により、辞書レイアウト公開時のメモリバリア強化を実現し、マルチスレッド環境でのメモリ可視性を確保します。

パフォーマンスへの影響

影響なし。この変更はメモリアクセスをvolatile化することで正確性を強化するものであり、パフォーマンス低下は最小限(volatile操作による若干のオーバーヘッド)に留まります。

関連Issue

#130551(顧客報告によるインターミッテント クラッシュ) #129763(元のPR、net11での修正)

その他

  • 回帰: はい。net10での導入により新たに発生した問題
  • リスク度: 低。net11で既に検証済みの修正をそのまま適用するため、安全性は高い
  • 検証: 顧客がプライベートビルドで当該修正を適用した結果、Linux ARM64(NVIDIA DGX Spark)環境でのクラッシュが解消されたことが確認済み
  • 対象: release/10.0ブランチへのバックポート

#131098 Align Decimal32/64/128 surface with the approved API

概要

Decimal32/Decimal64/Decimal128 の公開APIサーフェスを承認済みのAPI仕様に合わせるとともに、これまで実装されていなかった承認済みメンバーを追加します。主な変更は、メソッド名の変更(Quantum/SameQuantum → GetQuantum/HaveSameQuantum)と、IEEE 754-2019に準拠した新機能の実装(BID/DPD エンコード/デコード、Lerp、ReciprocalEstimate/ReciprocalSqrtEstimate)です。

変更内容

  • インターフェース変更: IDecimalFloatingPointIeee754 でQuantum/SameQuantum をGetQuantum/HaveSameQuantum に名前変更
  • 新しい公開メンバー: 全3型に以下を追加
    • Lerp: 線形補間
    • ReciprocalEstimate/ReciprocalSqrtEstimate: IEEE 754-2019準拠の逆数推定
    • EncodeBinary/DecodeBinary: BID形式(バイナリ整数小数)のエンコード/デコード
    • EncodeDecimal/DecodeDecimal: DPD形式(密集パック小数)のエンコード/デコード
  • 共通実装: Number.DecimalIeee754.cs に汎用BID/DPDコーデック実装を追加。既存の仮数部パック/アンパック基盤を再利用
  • 参照サーフェス更新: System.Runtime.cs の公開API定義を最新化

パフォーマンスへの影響

影響なし。既存のNumberBitsSignificand定数を活用し、新しい型固有の状態を導入していません。IEEE 754標準(Table 3.6)から直接引用されたディクレットテーブルを使用しています。

関連Issue

#81376

その他

  • テストカバレッジ: ±0、±Infinity、NaN、NaN with payload、先頭桁8/9経路、代表的な有限値を含むラウンドトリップテスト実装
  • DPDテスト: 公開された標準カノニカルエンコーディング(例: decimal32(1) == 0x22500001)との検証で、ビット向きを標準に固定
  • Compound メンバーは意図的に除外(IFloatingPointIeee754 にも公開されていないため一貫性を保つ)
  • 全System.Runtime.Tests実行: テスト失敗なし

#131091 Reduce EncryptedXml encoded DTD test workload

概要

EncryptedXmlの暗号化DTDテストペイロードの処理負荷を削減するもの。テストペイロードに含まれる111個のトランスフォーム(うち100個は重複した正規化トランスフォーム)を削減し、21個のトランスフォームに減らすことで、テスト実行時間を約60秒から約13秒に短縮します。トランスフォーム数の上限境界(デフォルト制限値+1)を保持しながら、テスト検証の厳密性を向上させます。

変更内容

  • EncryptedXmlSample5.xml: 90個の冗長な正規化トランスフォームを削除し、ペイロードサイズを大幅に縮小
  • EncryptedXmlTests.cs: DefaultMaxTransformsPerChain定数を追加し、テストアサーションを"> 20"からDefaultMaxTransformsPerChain + 1の正確な境界チェックに変更

パフォーマンスへの影響

改善:テスト実行時間を約60秒から約13秒に短縮(約78%の削減)。CPU使用率が大幅に低下し、リリーススタイルのテスト実行におけるワークロード負荷を著しく軽減。

関連Issue

#130929

その他

  • このPull Requestはgithub Copilotにより作成されました
  • トランスフォーム数の上限境界テストの意図は、ペイロードが誤って増大するのを防ぐことにあります

#131081 [ci-fix] Needs review: fix CS0246 InvalidCSharp build break in ByRefLike/Validate under minifullaot (refs #128767)

概要

AllSubsets_Mono_MiniFullAot_RuntimeTestsビルドにおいて、ByRefLike/Validate.csprojがマージされたテストランナーに含まれることで、除外されたILアセンブリInvalidCSharpへの参照が解決できずCS0246エラーが発生していた問題を修正します。RequiresProcessIsolation=trueを追加することで、MonoAotIncompatibleマークされたプロジェクトをマージ実行者から除外し、既存の除外ロジックが正常に動作するようにします。テストの実行継続性に変更はなく、既に除外されていたminifullaot環境での動作を修正するものです。

変更内容

  • src/tests/Loader/classloader/generics/ByRefLike/Validate.csproj: <RequiresProcessIsolation>true</RequiresProcessIsolation>を追加
    • 兄弟プロジェクトValidateNegative.csprojの既存設定に合わせる形で、プロジェクトをマージランナーから除外

パフォーマンスへの影響

影響なし

関連Issue

#128767

その他

  • このPRはCopilot/AIによる自動生成の修正PRです(ci-fix)。手動レビューが必須とされています
  • Mono minifullaotの完全なテストツールチェーンが利用できない環境での修正のため、実際のビルド検証は未実施です
  • 修正後、ValidateがValidateNegativeと同様にNativeAotIncompatibleやCrossGenTest属性も必要かどうかについては、報告された失敗がminifullaot固有のため確認が必要です
  • PR作成者は変更の根拠が強く既存の兄弟プロジェクトと一致していると述べていますが、マージ前にレビュワーによる確認が必要です

#131080 [HTTP] MultiProxy

  • 作成者: @ManickaP
  • 作成日時: 2026年07月20日 13:29:40(UTC)
  • マージ日時: 2026年07月21日 12:32:46(UTC)
  • ラベル: area-System.Net.Http

概要

マルチプロキシのフェイルオーバー時に、前のプロキシ試行のProxy-Authorizationヘッダーが後続のプロキシ試行に漏洩するセキュリティ問題を修正しました。SocketsHttpHandlerが複数のプロキシリスト内で別のプロキシにフェイルオーバーする際に、元のHttpRequestMessage.Headers.ProxyAuthorization値を復元して、認証情報の不正な流出を防ぎます。

変更内容

  • HttpConnectionPoolManager.cs: マルチプロキシリトライ間でProxyAuthorizationヘッダーを復元し、認証情報のキャリーオーバーを防止(内部実装)
  • LoopbackProxyServer.cs: テストインフラストラクチャを拡張し、プロキシ認証ヘッダー受信後に接続を強制終了するオプションを追加(テスト用)
  • HttpClientHandlerTest.Proxy.cs: PAC マルチプロキシフェイルオーバーの回帰テストを追加。前のプロキシの認証情報が後続プロキシに送信されないことを検証(Windows限定)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

この修正はセキュリティに関連しており、認証情報の漏洩を防止するものです。マルチプロキシ環境での使用時に、異なるプロキシ間で認証情報が誤って共有されるリスクを排除します。


#131071 [mobile] Skip publishing tests ignored by CI

概要

モバイルビルドにおいて、IgnoreForCI=trueでマークされたテストプロジェクトに対してPublishTestAsSelfContainedターゲットをスキップするよう修正しました。これにより、CI で実行されないテストプロジェクトに対する不要な ILLink トリミングを防ぎ、Apple モバイル CoreCLR ビルドの失敗を解決します。

変更内容

  • eng/testing/tests.mobile.targets: PublishTestAsSelfContainedターゲットにIgnoreForCI条件を追加し、無視対象のテストプロジェクトがビルド後に発行されないようにしました。

パフォーマンスへの影響

影響なし(ビルド時間短縮により若干の改善が期待できますが、具体的な数値は提供されていません)

関連Issue

#131071

その他

この変更は、System.Text.Json.SourceGeneration.Roslyn4.4.Testsなどの非対応プラットフォーム向けテストプロジェクトに対する ILLink の実行を防ぎます。既存の archive/bundle パス の動作と発行動作を統一し、一貫性のあるモバイルビルドパイプラインを実現します。


#131047 Update performance benchmark skill workflow

  • 作成者: @EgorBo
  • 作成日時: 2026年07月19日 21:58:28(UTC)
  • マージ日時: 2026年07月21日 19:51:04(UTC)
  • ラベル: area-skills

概要

パフォーマンスベンチマーク関連のAIエージェント(EgorBot)の過度な使用を防ぐため、skill workflowを更新しました。ローカルでのBenchmarkDotNet実行を推奨し、EgorBotの使用を明示的なオプトイン方式に変更する内容です。作成者がLINQのSumを意図的に遅くした変更でローカルテスト済みです。

変更内容

  • .github/skills/performance-benchmark/SKILL.md (+53/-6)
    • ローカルベンチマーク優先のアプローチを追加(baseline vs changed buildの比較ワークフロー)
    • 複数の--coreRunパスでBenchmarkDotNetを実行する手順ガイドを追加
    • @EgorBotの使用を独立したセクションに移動し、明示的なオプトインに変更
    • 追加のリソースリンクを追加

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • このPRは内部向けのCI/CD workflow documentationの更新であり、ランタイムやライブラリの公開APIには影響しません
  • Copilotレビューで指摘された低信頼度コメント:ドキュメント内のコマンド記法(./build.cmd|.sh)や、testhost ディレクトリコピーの説明が実装の詳細と合致していない可能性があります

#131041 LibraryImportGenerator: prep for unsafe-v2

概要

LibraryImportGeneratorをC# unsafe-v2仕様に対応させる準備作業です。unsafe-v2では型へのunsafe修飾子が違法となり、メソッドのunsafe修飾子は本体のunsafeコンテキストを開かなくなります。新旧両ルールに対応するコード生成に変更されました:

  • 生成されたスタブの含有型にはunsafeを追加しない(ユーザーの修飾子はそのままコピー)
  • ラッパースタブ本体をunsafe { }ブロックで囲む
  • フォワーダースタブ(本体なしextern)は変更なし

変更内容

  • LibraryImportGenerator.cs / DownlevelLibraryImportGenerator.cs: 型レベルのunsafe修飾子の付与ロジックを削除し、メソッド本体をunsafeブロックで囲むよう変更
  • ContainingSyntaxContext.cs: 含有型のunsafe修飾子処理ロジックを調整
  • UnsafeCodeGeneration.cs: unsafe-v2対応のコード生成に関するユニットテストを新規追加(184行)
  • CompileFails.cs: テストケースの軽微な調整

パフォーマンスへの影響

影響なし

関連Issue

#131041

その他

  • unsafe-v2環境でのLIGの正確な動作はdotnet/roslyn#84555の決定待ちです
  • 本変更により生成されるコードは、現行のC#ルールとunsafe-v2ルール両方で有効になります

#130990 Reject folding local addresses the emitter cannot encode

概要

JITコンパイラの局所変数アドレス検証ロジックを強化し、エミッタの符号化制限に対応しました。ローカル番号が32768以上の場合、エミッタはバイトサイズオフセット(< 256)のみサポートしていますが、この制限をIsValidLclAddrで事前に検証することで、エミット時のInvalidProgramExceptionを防ぎます。修正により、MinOptsでのブロック初期化折り畳みや、FullOptsでの加算折り畳みにおいて、符号化不可能なアドレス形式の生成を回避します。

変更内容

  • compiler.hpp: IsValidLclAddrに(lclNum >= 32768 && offset >= 256)の拒否ロジックを追加し、エミッタの大きな変数番号のオフセット符号化制限をドキュメント化
  • morph.cpp: fgOptimizeAdditionにおいてADD(LCL_ADDR, const)の折り畳み時に、結果のオフセットをIsValidLclAddrで検証。加数を[0, UINT16_MAX]に制限して署名オーバーフローを防止
  • Runtime_126584.cs/csproj: Reflection.Emitで>32768個のIL局所変数と>=256バイトのブロック初期化を含むMinOptsメソッドを生成するリグレッションテストを追加。NativeAOTではIsReflectionEmitSupportedガードでスキップ

パフォーマンスへの影響

影響なし。この変更は無効なアドレス形式の生成を防止するのみで、有効な最適化はARX形式(実レジスタベース+32ビット変位)にフォールバックされます。コード生成品質に負の影響はありません。

関連Issue

#126584

その他

  • 修正前:ローカル番号>=32768でオフセット>=256のアクセスがS_Rアドレッシング形式に折り畳まれ、エミット時にInvalidProgramExceptionが発生(Debugビルド)
  • 修正後:折り畳みが拒否され、明示的なアドレス計算としてレジスタに具現化される
  • リグレッションテストは修正前後を検証済み(baseline JITではInvalidProgramException、修正後はパス)
  • この問題はAVX-512特有ではなく、CPU非依存のバグです

#130988 [cDAC] WebAssembly support: stack walking and managed metadata resolution

概要

WebAssembly上のCoreClrで動作する診断ツール向けに、cDAC(managed data contract reader)を拡張します。WASM特有のスタックウォーキングと管理メタデータ解決に対応し、ブラウザ/WASI環境でのライブ管理状態の検査を可能にします。主な課題として、WASM環境では(1)ネイティブレジスタコンテキストが存在しない、(2)フィーチャーゲート型フィールドが記述子に含まれない、(3)webcilイメージが非マップ形式で読み込まれることに対応します。

変更内容

  • ネイティブ変更:

    • peimage.h:FlatImageLayoutフィールドをcdac_data<PEImage>に追加(非マップイメージ対応)
    • readytoruninfo.h:WASM環境下でMinVirtualIPを公開(仮想IP計算用)
    • datadescriptor.inc、codeman.h:関数テーブルインデックス範囲セクションの記述子とWASM専用グローバル追加
  • マネージド変更:

    • WasmContext:ネイティブT_CONTEXTと同じレイアウト(ContextFlags、InterpreterWalkFramePointer、InterpreterSP/FP/IP)を新規実装
    • WasmUnwinder/WasmR2RInfo:ReadyToRun線形スタックアンワインダーと関数テーブルインデックス→MethodDesc解決を実装
    • WasmFrameHandler:フレームチェーンから初期ウォークコンテキストをシード(InlinedCallFrameのCallSiteSPを使用)
    • Loader_1:欠落したコード版管理マップを空テーブルとして扱い、フラットレイアウト画像への自動フォールバック実装
    • EcmaMetadata_1:webcilマジック(WbIL)検出とwebcilヘッダのPeCliHeaderRva経由でのメタデータ位置特定に対応
    • Module.cs:MethodDefToILCodeVersioningStateMapをnullableに変更(FEATURE_CODE_VERSIONING無効時対応)
    • ExecutionManagerTests、StackWalkTests、LoaderTests、WasmR2RInfoTestsなど:WASM固有の動作検証テストを追加

パフォーマンスへの影響

影響なし(機能拡張であり、既存パフォーマンス特性を変更しません)

関連Issue

なし

その他

  • スタックウォーキング時、R2R仮想IP→MethodDesc解決は既存のRangeSectionMapパスを再利用しており、WASM特有のIP→MethodDescパスは不要
  • webcil対応メタデータ読み込みは、非webcilイメージは従来のPEReaderパスを継続使用
  • 契約デザインドキュメント(Loader.md、EcmaMetadata.md)を更新
  • ライブブラウザ/WASMターゲット上での検証:managed_object(String.Empty)で型名・モジュール・トークンの正常解決確認済み、managed_threadsで例外情報のメタデータ解決も動作確認済み
  • 今後の拡張対象(スコープ

#130984 Mark additional commutative xarch and arm64 intrinsics and instructions

概要

JITコンパイラのxarchおよびarm64命令の可換性メタデータを修正し、オペランドスワッピングによる最適化をより一貫して適用できるようにするPRです。AVX2/AVX512のMultiplyAddAdjacent、複数のSSE4.1/SSSE3整数命令、およびarm64のAbsoluteDifference命令に対して、可換性フラグを追加します。

変更内容

  • src/coreclr/jit/instrsxarch.h: pcmpeqq、pmuldq、pmulld、pmaxsb、pmaxsd、pmaxud、pmaxuw、pminsb、pminsd、pminud、pminuw、pmulhrswなどのSSE4.1/SSSE3命令にINS_Flags_IsAvxCommutativeフラグを追加
  • src/coreclr/jit/hwintrinsiclistxarch.h: AVX2/AVX512のMultiplyAddAdjacentにHW_Flag_MaybeCommutativeフラグを追加(pmaddwd形式のみ、pmaddubswは非対称オペランドのため除外)
  • src/coreclr/jit/gentree.cpp: isCommutativeHWIntrinsicにNI_AVX2_MultiplyAddAdjacentとNI_AVX512_MultiplyAddAdjacentの条件付き可換性判定を追加
  • src/coreclr/jit/hwintrinsiclistarm64.h: AdvSimd_Arm64.AbsoluteDifferenceとAbsoluteDifferenceScalarにHW_Flag_Commutativeフラグを追加(float32シブリングとの一貫性確保)

パフォーマンスへの影響

xarchのSSE3A/SSE38エンコード命令の場合、VEXプレフィックスが常に3バイト強制されるため、オペランドスワップによるコードサイズ削減効果は期待できません。ただし、フラグはSSE2シブリングとの一貫性を保つためのメタデータ修正であり、将来の最適化ヒューリスティック改善に備えます。arm64のAbsoluteDifferenceの可換性フラグ追加により、定数オペランドの再順序付けおよびCSE正準化が有効になります。

関連Issue

なし

その他

  • 検証済み:clr+libs -rc checkedビルド成功、JITは警告エラーなし
  • 影響を受けるxarch組み込み関数の可換性テスト実施済み、全ケース合格
  • arm64変更はfloat32シブリングとの同等性で正当性を確認
  • jitformatによるコード形式チェック合格

#130977 Fix flaky PhysicalFileProvider TokensFiredForOldAndNewNamesOnRename test

概要

PhysicalFileProviderのTokensFiredForOldAndNewNamesOnRenameテストの不安定性を修正しました。従来の固定500msの遅延待機をデタミニスティックなRegisterChangeCallback + TaskCompletionSourceパターンに置き換え、バックグラウンドスレッドプール上での遅延キャンセルによる不確定な実行タイミングの問題を解決しています。

変更内容

  • src/libraries/Microsoft.Extensions.FileProviders.Physical/tests/PhysicalFileProviderTests.cs
    • TokensFiredForOldAndNewNamesOnRenameテスト: 固定遅延(Task.Delay(500))をコールバック + TaskCompletionSourceの待機パターンに変更
    • タイムアウト定数をミリ秒のconst intから共有TimeSpanフィールド(s_maxWaitForTokenToFire)に統一
    • 既存のWaitTimeForTokenToFire/WaitTimeForTokenCallback定数をTimeSpanフィールドに変換
    • 関連テストで共有タイムアウト値を再利用

パフォーマンスへの影響

影響なし。テストの信頼性向上が主目的で、ランタイムパフォーマンスへの影響はありません。

関連Issue

#129027

その他

  • CI環境での負荷時(JitStress、低速arm64など)におけるテストの間欠的失敗を解消
  • TokensFiredForNewDirectoryContentsOnRenameテストで既に使用されているパターンを適用
  • GitHub Copilotの支援で生成されたPR

#130976 Modernize System.Text.Json product code

概要

System.Text.Json製品コードを最新のC# 14構文に段階的に移行するコードモダナイゼーション。動作や公開APIに変更を与えないクリーンアップリリース。

  • 34個のプライベート単一使用バッキングフィールドをC# 14フィールド初期化プロパティに置き換え
  • 6個の単一式メソッドを式本体メンバーに変換
  • 415個の組み込み型のnull比較をis null/is not nullパターンに置き換え
  • 32個の安定定数および範囲比較をパターンマッチングに置き換え

変更内容

主な変更:

  • System/Text/Json/BitStack.cs、JsonDocument関連、JsonElement関連のクラスで構文モダナイゼーション
  • JsonReaderHelper.Unescaping.cs、Utf8JsonReader.MultiSegment.cs等のリーダー実装でnull比較パターン統一
  • JsonSchema.csで顕著な構文改善(48行追加/66行削除、合計114行)
  • ConfigurationList.csでプロパティ初期化の簡潔化(3行追加/12行削除)
  • 全120ファイル超の分散的な段階的改善

保持された形式:

  • 56個のnull比較はユーザー定義の反射等値演算子にバインドされるため保持
  • 19個の複合チェックは読み取り回数削減を理由に保持
  • Raw文字列やインターポレーション変更が可読性向上につながらないケースで既存形式を保持

パフォーマンスへの影響

影響なし。構文の最適化であり、コンパイル後の動作に変化はない。

関連Issue

なし

その他

  • 検証済み:build.cmd clr+libs -rc release実行、net462/netstandard2.0/net10.0/net11.0全ターゲット対応確認、System.Text.Jsonおよび4つのRoslyn 3.11/4.4ソースジェネレーションテストプロジェクトでゼロ障害
  • GitHub Copilotにより準備されたPR
  • プロジェクト設定とテストは変更なし

#130967 Fix flaky PhysicalFilesWatcher timeout when root is deleted and recreated

概要

PhysicalFilesWatcherのテストCreateFileChangeToken_RootDeletedAndRecreated_TokenFiresWhenFileCreatedが断続的に30秒のタイムアウトで失敗する問題を修正しました。

Linux上で監視対象のルートディレクトリが削除される際、FileSystemWatcherは内部的にinotifyの監視を破棄しますが、EnableRaisingEventsはfalseにリセットされない状態が発生していました。その後のトークン再登録時にEnableRaisingEventsがtrueのままだとPendingCreationWatcher(ルートディレクトリの再出現を監視するフォールバック)が設定されず、ファイル作成イベントが検出されないレースコンディションが起きていました。

変更内容

PhysicalFilesWatcher.cs

  • TryEnableFileSystemWatcherメソッドにロジックを追加し、EnableRaisingEventsがtrueであってもルートディレクトリが存在しない状況を検出
  • その場合、EnableRaisingEvents = falseを設定して古い監視を破棄
  • needsRootWatcher = trueと_rootWasUnavailable = trueを設定して、ルート再出現時のギャップスキャンを実行

PhysicalFilesWatcherTests.cs

  • テストケースの追加(31行)

パフォーマンスへの影響

影響なし

関連Issue

#129691

その他

このPull Requestは内部実装の修正で、公開APIへの影響はありません。Linux上のinotifyベースのFileSystemWatcherにおける稀なレースコンディションを排除するロジックです。


#130949 Use user-arg accessors when expanding runtime lookups

概要

fgExpandRuntimeLookupsForCallがランタイム検索ヘルパー呼び出しの引数アクセスを、生のインデックスアクセサ(CountArgs/GetArgByIndex)から"ユーザー引数"アクセサ(CountUserArgs/GetUserArgByIndex)に変更します。wasm上ではAddFinalArgsAndDetermineABIInfoが管理呼び出しの前に非ユーザー引数(WasmShadowStackPointer)を挿入するため、生のインデックスではアサーション失敗と引数の位置ズレが発生していました。この修正により、共有ジェネリック型のランタイム検索がwasm上で正常に機能するようになります。

変更内容

  • src/coreclr/jit/helperexpansion.cpp: ランタイム検索ヘルパー呼び出しの引数インデックス処理を修正
    • CountArgs() == 2の検証をCountUserArgs() == 2に変更
    • GetArgByIndex(0/1)をGetUserArgByIndex(0/1)に変更(genericCtxとsignatureCnsの抽出時)

パフォーマンスへの影響

影響なし(修正前後で動作は同等。非ユーザー引数が存在しないターゲットではコード経路は変わらない)

関連Issue

なし

その他

  • この修正は共有ジェネリック型([System.__Canon])メソッドを対象としており、wasm上でのSuperPMI altjit リプレイテストで約10,000個のアサーション失敗メソッドに対応しています
  • JIT内部の修正で、公開APIへの影響なし
  • GitHub Copilotを用いて作成されたPRです

#130946 Fix side-effect reordering when folding constant-zero-mask BlendVariable

概要

RyuJIT の gtFoldExprHWIntrinsic で BlendVariable/BlendVariableMask をマスク値が定数ゼロで定数折り畳みする際に、オペランドの評価順序が不正に並べ替わり、副作用が喪失される問題を修正しました。マスク値がゼロの場合、従来は op2(selectTrue)の副作用を無視して op1 を返していましたが、修正後は op2 に副作用がない場合のみ安全に折り畳み、そうでなければ値番号付けに処理を委譲して評価順序を保全します。

変更内容

  • src/coreclr/jit/gentree.cpp: maskIsAllBitsZero ブランチの定数折り畳みロジックを修正。op2 に副作用がない場合のみ op1 を直接返し、副作用がある場合は折り畳みを行わずに break して値番号付けに委譲するよう修正。
  • src/coreclr/jit/hwintrinsicxarch.cpp, src/coreclr/jit/morph.cpp: 軽微な変更(各1行)。
  • src/tests/JIT/Regression/JitBlue/Runtime_125431/Runtime_125431.cs: 新規追加。評価順序と例外発生順序をカバーする回帰テスト(DOTNET_TieredCompilation=0 で実行)。
  • src/tests/JIT/Regression/Regression_ro_2.csproj: テストプロジェクト設定の軽微な更新。

パフォーマンスへの影響

影響なし。本修正は定数折り畳みの条件を制限するもので、安全性を向上させる目的です。

関連Issue

#125431

その他

  • 互換性への影響: 修正はバグ 改善であり、破壊的変更ではありません。
  • 既知の今後の課題: 共通の副作用抽出機構 gtNodeHasSideEffects/gtExtractSideEffList における同様の問題(GTF_ORDER_SIDEEFF/GTF_GLOB_REF 無視)は今回対象外とされ、別途追跡予定です。
  • 修正内容は同一ファイル内の maskIsAllBitsSet ブランチの保守的アプローチを踏襲し、一貫性を確保しています。

#130944 [release/9.0-staging] Update dependencies from dotnet/arcade

概要

dotnet/arcadeの依存関係を9.0.0-beta.26301.4から9.0.0-beta.26366.5へ、および関連パッケージを2.9.0-beta.26301.4から2.9.0-beta.26366.5へ更新するメンテナンスPRです。ビルドツール、コード分析ツール、テスティングユーティリティなど、arcadeの複数のコンポーネントが更新されています。

変更内容

  • eng/Version.Details.xml: 19個のMicrosoft.DotNetパッケージとMicrosoft.SourceBuild.Intermediateパッケージのバージョン情報を更新
  • eng/Versions.props: 上記パッケージの参照バージョンを更新
  • global.json: ツールチェーンのバージョン情報を更新
  • eng/common/: ビルドスクリプトおよびワークロー定義の微更新(onelocbuild.yml、tools.ps1、tools.sh)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • このはAutomated依存関係更新PR(dotnet-maestrobot作成)であり、release/9.0-stagingブランチへの定期的なarcade更新です
  • 更新されるパッケージには、ビルドタスク(Archives、Feed、Installers、Packaging等)、コード分析ツール(GenAPI、GenFacades)、テストツール(XUnitExtensions、PackageTesting)などが含まれます

#130907 JIT: fix profile propagation in LowerSwitch

概要

JITのプロファイル伝播処理を修正するPRです。スイッチターゲットブロックの重みを段階的に修正するのではなく再計算することで、プロファイル一貫性の問題を解決します。また、デバッグ時のプロファイル重みチェック機能を強化し、エラー前に詳細情報をログ出力できるようにしました。

変更内容

  • src/coreclr/jit/fgprofile.cpp: fgDebugCheckProfileWeightsに"dump"モードを追加。プロファイル不整合の詳細をアサート前に出力するため、verbose=trueで再実行
  • src/coreclr/jit/lower.cpp: 条件付き分岐(BBJ_COND)が無条件分岐(BBJ_ALWAYS)に変換される際、後続エッジの尤度不変性を維持するよう調整
  • src/coreclr/jit/compiler.h: fgDebugCheckProfileWeightsの新しいオプショナルパラメータに対応する宣言を更新

パフォーマンスへの影響

影響なし

関連Issue

#130785

その他

本修正は内部実装(JITコンパイラ)の変更であり、公開APIへの影響はありません。Copilotレビューでは、dump=trueモード時にunflaggedBlocksパスで診断出力が完全に抑制されるため、再実行時でもエラー詳細が出力されない可能性を指摘しています。


#130884 Reduce reader/writer contention in Pipelines

概要

System.IO.Pipelines内のreader/writer間のロック競合を削減するため、複数の最適化を実施しています。バッファセグメントの取得・返却をロック外で処理し、セグメントプールをスタックからFIFOキューに変更、ロック機構をmonitor lockからThreading.Lockに切り替え、ThreadPool継続処理をローカルキューにスケジューリングする変更です。56コアマシン上のJSON ASP.NET ベンチマークで、最大ロック競合を483回/秒から66回/秒に削減し、RPSを2,094,374から2,148,465に向上させます。

変更内容

  • Pipe.cs: セグメントプール管理をLIFOスタックからFIFOキュー(SPSC)に変更。バッファメモリの取得・セグメント返却操作をロック外で実行するよう再構成。メモリリース操作の推測的実行とロック不要な高速パス追加。
  • ThreadPoolScheduler.netcoreapp.cs: ThreadPool.UnsafeQueueUserWorkItem呼び出しにpreferLocal: trueパラメータを設定し、ローカルキューへのスケジューリングを優先。
  • PipeOptions.cs: セグメントプール設定のコメント更新。
  • BufferSegmentPoolTest.cs: セグメント再利用順序期待値をFIFO動作に合わせて修正。
  • System.IO.Pipelines.csproj: SPSC キュー実装とパディング機構の共有ソース参照を追加。

パフォーマンスへの影響

大幅な改善:

  • ロック競合: 最大ロック競合483回/秒 → 66回/秒(約86.3%削減)
  • スループット: 2,094,374 RPS → 2,148,465 RPS(約2.6%向上)
  • 読み取り帯域: 291.61 MB/s → 299.14 MB/s(約2.6%向上)

改善はreader/writer間のロック保持時間短縮とスレッド局所性向上に由来します。

関連Issue

なし

その他

  • 公開API変更なし(内部実装の最適化)
  • ロック機構をThreading.Lockに切り替えることで、monitor lockのインフレーション問題を回避
  • 継続処理をローカルThreadPool キューにスケジューリングすることで、論理的なパイプライン処理が可能な限り同一物理スレッド上で実行され、キャッシュ局所性が向上
  • ベンチマークは56コアマシン上での測定値であり、マシン構成によって効果は異なる可能性あり

#130862 [automated] Merge branch 'release/8.0' => 'release/8.0-staging'

概要

このPRはrelease/8.0ブランチからrelease/8.0-stagingブランチへの自動マージです。svickによるコミットが反映されます。主にHTTP/2接続管理、ネットワークセキュリティ、XML処理、暗号化署名関連のバグ修正とセキュリティ改善が含まれています。

変更内容

  • HTTP/2接続: Http2Connection.csでストリーム管理の改善(+53行)、ウィンドウ管理の調整(+1行)、関連テスト追加(+170行)
  • ネットワークセキュリティ:
    • SslStream.IO.csでI/O処理の改善(+7/-6行)
    • NegotiateAuthentication.csの追加処理(+6行)
    • リソース文字列追加(System.Net.Security)
  • XML処理:
    • XPathNodeInfoAtom.csでキャッシュ処理の最適化(+20/-17行)
    • XmlTextReaderImpl.csの改善(+7/-14行)
    • パフォーマンステスト追加(+183行)
  • メール処理: EightBitStream.csでストリーム処理の改善(+57/-13行)
  • 暗号化XML署名: System.Security.Cryptography.Xmlで複数の変換処理に検証ロジック追加、LocalAppContextSwitches.csにオプトアウト機構追加(+31行)、リソース文字列追加

パフォーマンスへの影響

XML属性読み込みに関するパフォーマンステスト(AttributeReadingPerformanceTests.cs、+183行)が新規追加されていることから、XML処理のパフォーマンス改善が想定されます。具体的な数値は提供情報に記載なし。

関連Issue

なし

その他

このPRは自動マージボット(github-actions[bot])により作成されたものです。マージ方法は--no-ffフラグ付きのマージコミット作成が指定されています。リソース文字列の追加複数箇所から、セキュリティ脆弱性対応またはエラーハンドリング改善が想定されます。


#130861 [automated] Merge branch 'release/9.0' => 'release/9.0-staging'

概要

このPRは、release/9.0ブランチからrelease/9.0-stagingブランチへの自動マージです。svickによるコミットが含まれており、System.Net.Http、System.Net.Security、System.Private.Xml、System.Security.Cryptography.Xmlなどのライブラリに関する修正が反映されます。

変更内容

  • System.Net.Http: Http/2接続処理の改善(Http2Connection.cs)、リソース文字列追加
  • System.Net.Mail: EightBitStreamの改善(+57行)
  • System.Net.Security: NegotiateAuthentication、SslStream.IOの変更、テスト追加
  • System.Private.Xml: XPathノード情報キャッシング最適化、XmlTextReaderの改善、属性読み込みパフォーマンステスト追加
  • System.Security.Cryptography.Xml: セキュリティ対策としてAppContextスイッチ追加、複数の変換クラスに対応(XmlDsigBase64Transform、XmlDsigC14NTransform、XmlDsigEnvelopedSignatureTransformなど)

パフォーマンスへの影響

  • System.Private.Xmlのパフォーマンステスト追加(AttributeReadingPerformanceTests.cs、+183行)により、属性読み込み性能改善の検証が実施されている可能性があります。
  • XPathNodeInfoAtomのキャッシング最適化によるメモリ効率改善を想定

関連Issue

なし

その他

このPRは自動マージ用の統合PRであり、手動でマージコミット(squashやrebaseではない)を作成する必要があります。マージ競合が発生する場合は、手動で解決した上でマージを完了してください。


#130838 Fold floating-point comparisons with a constant NaN in morph

概要

浮動小数点数とNaN定数の比較操作を、JIT morph段階で折り畳むことができるように修正しました。従来はgtFoldExprSpecialが結果型(relopsの場合はTYP_INT)に基づいてディスパッチしていたため、浮動小数点比較がNaN折り畳みロジックに到達できず、後のvalue numbering段階でのみ最適化されていました。本変更により、オペランド型に基づいてディスパッチするよう改め、inlinerなど早期段階のヒューリスティクスが活用できるようになります。

変更内容

  • src/coreclr/jit/gentree.cpp: gtFoldExprSpecialをオペランド型に基づいてgtFoldExprSpecialFloatingにディスパッチするよう修正。relopsのNaN折り畳みを復活・修正し、GTF_RELOP_NAN_UNフラグを統一的に処理(unordered時はtrue、ordered時はfalse)。修正前はGT_NEが不正にアサーション失敗またはassert無視でtrueを返していた問題を解決。
  • src/tests/JIT/Directed/ConstantFolding/FloatNaNCompareFolding.cs: 6つのrelops(EQ/NE/LT/LE/GT/GE)全て、両オペランド順序、float/double型をカバーする回帰テストを追加。
  • src/tests/JIT/Directed/ConstantFolding/FloatNaNCompareFolding.csproj: 新規テストプロジェクトの定義。
  • src/tests/Common/XUnitWrapperGenerator/XUnitWrapperGenerator.cs: テスト生成ロジックの軽微な更新。

パフォーマンスへの影響

morph段階での早期折り畳みにより、value numbering段階での処理が削減され、inlinerやその他の最適化パスの決定がより良い情報に基づいて行われる可能性があります。具体的なベンチマーク数値は提供されていません。

関連Issue

なし

その他

  • 本PRはGitHub Copilotの支援を受けて作成されました。
  • 修正前の潜在的なバグ:bne.unがGT_NEにGTF_RELOP_NAN_UNフラグを設定した状態でインポートされるため、元のアサーション((gtFlags & GTF_RELOP_NAN_UN) == 0)は即座に失敗していました。
  • ordered/unordered比較の語義が統一され、gtFoldExprBinaryConstDblおよびvalue numbering パスとの動作が一致します。

#130837 JIT: Cleanup and harden lowering

概要

JIT lowering関連のクリーンアップと堅牢性向上を行うバッチ更新。ランタイム動作に影響する変更なし。デバッグ診断の不具合修正、含有判定の一貫性強化、デッドコード削除を実施。

変更内容

  • src/coreclr/jit/lower.cpp: SplitArgumentBetweenRegistersAndStackでnullptr逆参照の危険があるJITDUMP診断を削除、フォーマット文字列の不整合([%06u} → [%06u])を修正
  • src/coreclr/jit/lowerarmarch.cpp: IsContainableUnaryOrBinaryOpのshift/NOT含有判定パスにIsInvariantInRangeガードを追加して他の含有判定パスと一貫性を確保、LowerHWIntrinsicのデッドストアを削除
  • src/coreclr/jit/lowerxarch.cpp: GetOperForHWIntrinsicIdの外部パラメータisScalarの不正な上書きを修正(意図はuserIsScalarへの代入)、不要な代入/アサーション/演算式を削除、コメントの不正確さ(DPPD即値0x31 → 0x33など)を修正

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • 全変更は内部実装の改善で、公開APIには影響なし
  • lowerarmarch.cppの変更は同一関数内の既存コードパターンと構造的に一致することで検証済み
  • baseline build(checked設定)およびjitformat.pyで動作確認済み、x64 JIT再構築時に警告/エラーなし

#130832 Fix two latent HWIntrinsic miscompiles in gentree.cpp

概要

HWIntrinsic(ハードウェア組み込み関数)処理の潜在的な正確性バグ2件をJIT コンパイラの gentree.cpp で修正します。各修正に対応する回帰テストを追加しています。

変更内容

  • GetOperForHWIntrinsicId 修正: ポインタ isScalar の代わりに逆参照値 *isScalar をテストするように修正。GT_SUB を GT_NEG に最適化する際、低レーンのみがゼロのパックドベクトル減算(例:Vector128.Create(0, 1, 2, 3) - x)が誤ってネゲートと報告される問題を解決。

  • gtNewSimdMinMaxNode 修正: 浮動小数点定数高速パスの最小値分岐で needsFixup フラグが無条件に上書きされていた問題を修正。符号付きゼロ定数に対して Min/MinNumber が誤コンパイルされる問題を解決。最大値分岐に合わせてロジックを統一。

  • テスト追加: Runtime_130830 と Runtime_130831 下に回帰テストを追加。

パフォーマンスへの影響

影響なし(正確性バグ修正であり、パフォーマンスに影響しません)

関連Issue

#130830
#130831

その他

  • 両バグは検査による発見であり、main ブランチで既に存在していました
  • 既存のテスト Runtime_98068 は常に NaN とペアを組むため、符号反対のゼロケースは未テストでした
  • JIT コンパイラのコア部分における正確性修正のため、重要な変更です

#130829 Track reflectability of delegates pointing to generic virtuals

概要

Delegate.Method が Trim-unsafe API として機能するよう、ジェネリック仮想メソッド(GVM)へのデリゲートのリフレクタビリティを追跡できるようにする変更です。PR #129609 で GVM が RuntimeMethodHandle の実装詳細として暗黙的にリフレクションターゲットと見なされていた動作を修正します。

変更内容

  • GVMDependenciesNode.cs: GVM 依存関係ノードに 2 行追加
  • DelegateTargetVirtualMethodNode.cs: 新規ファイル作成(36 行)。デリゲートターゲットの仮想メソッド処理を担当
  • NodeFactory.cs: 新規ファイルのファクトリ処理を追加(11 行)
  • UsageBasedMetadataManager.cs: メタデータ管理の依存関係処理を改善(+5/-3)
  • DependencyAnalyzer.cs: 依存関係分析フレームワークに微調整(+2/-1)
  • Reflection.cs: テストケース追加(48 行)。ジェネリック仮想メソッドへのデリゲート作成とその Method プロパティのアクセス確認

パフォーマンスへの影響

影響なし

関連Issue

#129609

その他

本変更は NativeAOT コンパイラの依存関係追跡システムに対するもので、リフレクション操作時のリフレクタビリティ情報を適切に管理します。Delegate.Method は Trim-unsafe API のため、この修正により Trim 処理後でも正常に機能することが重要です。


#130821 Enable additional library tests in ReadyToRun pipeline

概要

ReadyToRun(AOT)パイプラインにおいて、4つのライブラリテストスイート(System.Runtime.Loader.DefaultContext.Tests、System.Reflection.Tests、System.Reflection.TypeExtensions.Tests、System.Runtime.Loader.Tests)のカバレッジを有効化します。ReadyToRun環境固有の問題(テスト実行時のエントリアセンブリの扱い、フィクスチャの読み込み方法、バインド失敗フィクスチャの処理)に対応する変更が含まれます。

変更内容

  • System.Reflection.TypeExtensions/tests/ModuleTests.cs: フィクスチャ読み込みロジックを調整(2行変更)
  • System.Runtime.Loader/tests/System.Runtime.Loader.Tests.csproj: ReadyToRun対応設定を追加(プロジェクト設定の拡張)
  • System.Reflection.Tests/AssemblyTests.cs: テスト実行時のエントリアセンブリ判定ロジックを修正(1行変更)
  • tests.proj: ReadyToRun除外リストから該当テストを削除し、System.Text.RegularExpressions.Testsは除外継続

パフォーマンスへの影響

影響なし。テストカバレッジの拡大であり、ランタイムパフォーマンスへの直接的な影響はありません。

関連Issue

#95928

その他

  • バインド失敗フィクスチャ(bind-failure fixtures)をReadyToRun公開ディレクトリから削除する一方で、deps.jsonエントリは保持する設計
  • System.Text.RegularExpressions.Testsは今後の対応予定として除外継続
  • 本変更はReadyToRun(事前コンパイル)環境でのテスト実行最適化に関連する内部的な変更です

#130787 [release/8.0-staging] Update dependencies from dotnet/xharness

概要

dotnet/xharnessの依存関係を更新するPull Request。Microsoft.DotNet.XHarness.CLI、Microsoft.DotNet.XHarness.TestRunners.Common、Microsoft.DotNet.XHarness.TestRunners.Xunitを11.0.0-prerelease.26180.1から11.0.0-prerelease.26368.1にアップデートしています。

変更内容

  • .config/dotnet-tools.json: XHarnessツールチェーンの依存関係を更新
  • eng/Version.Details.xml: 依存関係のメタデータ情報を更新(6行変更)
  • eng/Versions.props: バージョン定義を更新(3行変更)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

このPRはdotnet-maestro[bot]による自動依存関係更新です。release/8.0-stagingブランチへの更新となります。


#130746 [release/10.0] Update dependencies from dotnet/icu

概要

dotnet/icu リポジトリの依存関係を更新するPRです。Microsoft.NETCore.Runtime.ICU.Transport パッケージを 10.0.0-rtm.26357.3 から 10.0.0-rtm.26364.2 にアップデートしています。

変更内容

  • eng/Version.Details.props: ICU関連の依存関係バージョン情報を更新
  • eng/Version.Details.xml: 同上(2行の差分)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • このPRはdotnet-maestro[bot]によって自動生成されたマイナーバージョン更新です
  • 対象ブランチは release/10.0
  • 国際化(ICU)ランタイムサポートの定期的な依存関係更新となります

#130745 [wasi] Stand up CoreCLR-WASI library-test leg (per-app corerun relink)

概要

CoreCLR-WAI向けのライブラリテストビルドレグ(テスト範囲: System.Runtime.Tests)を構築します。このPRは、アプリケーション固有の[UnmanagedCallersOnly]逆P/Invokeサンクを生成し、提供されるlibWasiHost.aにリンクすることで、テストコールバック(ネストされたコールバックなど)の解決を可能にします。フレームワークの静的コールヘルパーテーブルのみでは対応できないため、アプリケーションごとのネイティブリンク処理が必要です。

変更内容

  • CoreCLR-WASI向けアプリビルドターゲット (WasiApp.CoreCLR.targets): ManagedToNativeGeneratorで生成したコールヘルパーをwasi-sdkでコンパイル、libWasiHost.aと共にリンク
  • 逆P/Invokeサンク生成修正 (PInvokeCollector.cs): ネストされた型の名前空間処理を統一し、ランタイムキー生成を正確化
  • 警告フラグ追加 (ManagedToNativeGenerator.cs、PInvokeTableGenerator.cs): WarnOnUnresolvedPInvokeModulesフラグで未トリミングの外部プラットフォームP/Invokeを警告にダウングレード
  • テスト・CI配線: tests.wasi.targetsでCoreRun向けランナー引数設定、tests.projでスモークテストセット追加、sendtohelix-wasi.targetsでCoreRun/Monoの区別、新しいパイプラインテンプレートwasi-wasm-coreclr-library-tests.yml(非ゲーティング、ローリング)
  • ランタイムパック統合 (Directory.Build.props、CMakeLists.txt): libWasiHost.aをランタイムパックに含める

パフォーマンスへの影響

影響なし

関連Issue

#130129、#130816、#130740

その他

  • 本PR基盤となるwasihost corehost(#130816)のlibWasiHost.aを消費。別途ホストを製造しない
  • wasi:httpインポートは-Wl,--component-typeで宣言、テストターゲットはwasmtimeに-S httpを指定
  • フルICUグローバリゼーション(非不変)で実行。macOS arm64、wasi-sdk + wasmtimeの検証環境でSystem.Runtime.Tests全9966ケースの発見・実行を確認
  • 管理例外ディスパッチが逆UCOサンク経由で動作することを検証(precode assertなし)
  • 追跡予定の拡張: ビルド時選択可能なwasi:http機能、トークンベースの逆サンクキー堅牢性、coreclr_compat.hの共有ロケーション化

#130630 Change IList<string> to IEnumerable<string> in Process Run/StartAndForget methods

概要

Process.Run、RunAsync、RunAndCaptureText、RunAndCaptureTextAsync、StartAndForget メソッドの arguments パラメータの型を IList<string>? から IEnumerable<string>? に変更しました。実装は反復処理のみで、インデックスアクセスや変更を行わないため、既存の Process.Start(string, IEnumerable<string>) オーバーロードと一貫性を保つようにしたものです。

変更内容

  • ref/System.Diagnostics.Process.cs — 5つのメソッドシグネチャを IList<string>? から IEnumerable<string>? に変更
  • src/System/Diagnostics/Process.Scenarios.cs — パブリックシグネチャと内部ヘルパーメソッド (CreateStartInfo、CreateStartInfoForCapture) の型を更新。実装は既に foreach を使用していたため実質的な変更なし

パフォーマンスへの影響

影響なし

関連Issue

#130364(API承認済み)

その他

  • 公開API変更 — 破壊的変更ではないが、パラメータ型をより一般的なインターフェースに変更するAPI調整です
  • コード行数を削減(-22行、+13行)し、シンプル化されています

#130627 Prevent StackOverflow in PhysicalFilesWatcher on unwatchable file systems

概要

ネットワークドライブやWSLパスなど、FileSystemWatcherが監視できないファイルシステム上でジェネリックホストアプリがStackOverflowExceptionでクラッシュする問題を修正しました。エラーが繰り返し発生し続ける場合、同一エラーの再発生を抑制することで、エラー→トークンキャンセル→ウォッチャー再有効化のループを防止します。

変更内容

  • PhysicalFilesWatcher.cs: OnErrorメソッドに最後のエラー状態を追跡する機構を追加。同一の例外型とOS エラーコード(Win32Exception.NativeErrorCodeまたはHResult)を持つ同じエラーが、ファイル変更配信なく再発生した場合、トークンキャンセルを抑制します。InternalBufferOverflowExceptionとDirectoryNotFoundExceptionは常に報告されます。
  • PhysicalFilesWatcherTests.cs: エラー抑制・報告動作の検証テストを追加(同一エラーの抑制、異なるエラーコード、回復可能エラー、変更による検出リセットなど)

パフォーマンスへの影響

影響なし。本変更はスタックオーバーフロー時の無限ループを防ぐため、むしろ安定性が向上し、パフォーマンス低下時の無駄な処理が削減されます。

関連Issue

#121475(この修正により解決)

その他

  • 本修正はルート原因の対処であり、監視不可能なファイルシステムではファイル変更検知ベースのリロード機能が無効化されます(FileSystemWatcherの既知制限)。自動的なポーリングへのフォールバックは行われません(DOTNET_USE_POLLING_FILE_WATCHERでの明示的設定が必要)。
  • #130492(async ChangeToken.OnChangeへの切り替え)との関係:#130492はReloadDelay > 0の場合にStackOverflowExceptionを緩和しますが、根本的な問題(ウォッチャーの再有効化と再エラーのループ)は解決しません。本PRはこの根本原因を独立して修正します。
  • 既知制限:macOSでのバッファオーバーフロー時にInternalBufferOverflowExceptionではなくIOExceptionが発生するため、同じエラーが連続した場合に誤って抑制される可能性があります。別途の改善PR(#130637)でmacOSの一貫性改善が計画されています。

#130589 [Trimming] Fix startup crash when TypeMapAssemblyTarget attribute survives but target assembly is fully trimmed

概要

トリミングされたCoreClRアプリで、TypeMapAssemblyTarget属性が生き残ったまま、その対象アセンブリが完全にトリミングされた場合、実行時にAssembly.Load呼び出しでFileNotFoundExceptionがスローされるクラッシュ問題を修正します。属性は対象アセンブリがマークされている(存続するエントリを持つ、または保持されている)場合のみマークされるようにしました。

変更内容

  • TypeMapHandler.cs: TypeMapAssemblyTarget属性のマーキングを、対象アセンブリが確認されるまで延期する機構を追加。_pendingAssemblyTargetsByAssemblyで延期された属性を管理し、TriggerPendingAssemblyTargets()で対象アセンブリがマークされた際にフラッシュします。対象アセンブリがリンカ入力で解決できない場合は属性を削除します。
  • MarkStep.cs: MarkAssemblyで_typeMapHandler.TriggerPendingAssemblyTargets(assembly)を呼び出し、アセンブリのマーク時に延期された属性をフラッシュします。
  • テスト: 条件付きTypeMapエントリのみを持つconditional.dllを含む新しいテストTypeMapAssemblyTargetRemovedWhenAllEntriesTrimmedを追加。属性と対象アセンブリの両方がリンク出力から削除されることを検証します。

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

本修正はILLinkのトリミング処理内部実装(linker tool)の改善で、公開APIには影響しません。アセンブリの訪問順序に関わらず安全に処理されるようになります。


#130560 Re-enable BitOps_Crc32C_* tests on tvOS

  • 作成者: @Copilot
  • 作成日時: 2026年07月11日 21:21:07(UTC)
  • マージ日時: 2026年07月21日 14:31:06(UTC)
  • ラベル: area-System.Numerics

概要

tvOS上で以前クラッシュが報告されていた4つのBitOps_Crc32C_*テスト(byte、ushort、uint、ulong)から[ActiveIssue]スキップ属性を削除し、テスト実行を再度有効化するもの。tvOS CI上で問題が依然として発生するかを確認することが目的。

変更内容

  • src/libraries/System.Runtime/tests/System.Runtime.Extensions.Tests/System/Numerics/BitOperationsTests.cs
    • BitOps_Crc32C_byteテストから[ActiveIssue("https://github.com/dotnet/runtime/issues/76830", TestPlatforms.tvOS)]を削除
    • BitOps_Crc32C_ushort、BitOps_Crc32C_uint、BitOps_Crc32C_ulongテストから同属性を削除(計4テスト)

パフォーマンスへの影響

影響なし。本変更はテスト属性の削除のみで、製品コードに変更はなし。

関連Issue

#76830

その他

  • 本PRは製品コードに触れず、テストのみの変更
  • tvOS CI(runtime-extra-platforms leg)の実行結果でクラッシュが依然として発生する場合は、属性を復元し、Issueを再開する予定

#130476 Add configurable HTTP connection eviction, expose ConnectionId APIs

  • 作成者: @MihaZupan
  • 作成日時: 2026年07月10日 11:10:55(UTC)
  • マージ日時: 2026年07月21日 10:38:26(UTC)
  • ラベル: area-System.Net.Http

概要

SocketsHttpHandler に接続レベルの診断と制御機能を追加するPRです。新しい実験的APIとして、設定可能な接続エビクション(削除)コールバック ShouldEvictConnection と、接続全体で伝播する ConnectionId を導入し、HTTP/1.1、HTTP/2、HTTP/3 を含むすべてのプロトコルにおいて接続追跡と管理を可能にします。

変更内容

公開API(実験的):

  • SocketsHttpHandler.ShouldEvictConnection - 接続プール内で定期的に呼び出される削除判定コールバック
  • SocketsHttpConnectionEvictionContext - エビクション判定用のコンテキスト情報(接続ID、エンドポイント等)
  • HttpRequestMessage.ConnectionId - リクエストに割り当てられた接続識別子
  • SocketsHttpConnectionContext.ConnectionId - 接続確立時コールバックで公開
  • SocketsHttpPlaintextStreamFilterContext.ConnectionId - プレーンテキストフィルタコンテキストで公開

内部実装:

  • HttpConnectionPool にエビクション評価スケジューリング機能を追加、コールバック設定時に池のメンテナンスタイマー周期を調整
  • HttpConnectionBase に状態管理とエビクション評価ロジックを組み込み
  • HTTP/1.1・HTTP/2・HTTP/3 各接続クラスで ConnectionId をリクエストにスタンプ
  • リトライ時に ConnectionId をクリア

テスト:

  • 広範な機能テスト(主にOuterLoop)でエビクション動作と接続ID伝播を検証
  • HTTP/3 Alt-Svcシナリオでのエビクション検証

パフォーマンスへの影響

影響なし(エビクション機能は設定時のみ有効化)

関連Issue

#130102
#130108

その他

  • すべてのAPI は実験的マーク(ExperimentalAttribute)付きで診断ID SYSLIB5008を生成
  • 公開API はAPI review承認待ち中(PR説明より "NO-MERGE while those are still going through API review")
  • ブラウザハンドラには PlatformNotSupportedException をスローするスタブ実装を追加
  • 実験的APIの使用箇所には診断抑制属性(SYSLIB5008)を適切に付与

#130384 Add support for inline pinvokes to Wasm Ryujit

概要

Wasm RyuJIT/ReadyToRun環境でのインライン化されたP/Invokeの実装をサポートします。主な変更は、P/Invokeターゲットの固定方式をREADYTORUN_FIXUP_IndirectPInvokeTargetからREADYTORUN_FIXUP_PInvokeTargetへ変更し、Wasm固有のJIT_PInvokeBegin/End実装を追加することで、スタックウォーク状態を正しく確立します。

変更内容

  • src/coreclr/tools/aot/ILCompiler.ReadyToRun/JitInterface/CorInfoImpl.ReadyToRun.cs: Wasm ReadyToRun コンパイレーションで直接P/Invokeターゲット固定を使用するよう強制し、説明的なコメントを追加
  • src/coreclr/vm/wasm/helpers.cpp: Wasm固有のインライン化P/Invokeフレームセットアップとスタックウォークレジスタ表示ロジック、JIT_PInvokeBegin/EndのWasm実装/ラッパーを追加
  • src/coreclr/vm/jitinterface.cpp: READYTORUN_FIXUP_IndirectPInvokeTargetランタイム固定サポートをHAS_PINVOKE_IMPORT_PRECODEでゲート化
  • src/coreclr/vm/jithelpers.cpp: 軽微な変更

パフォーマンスへの影響

影響なし(機能追加のため直接的なパフォーマンス改善/低下の数値なし)

関連Issue

なし

その他

留意点: Copilotレビューにおいて、m_pCallerReturnAddressにセンチネル値INLINED_PINVOKE_FROM_R2Rを設定している点について懸念が指摘されています。例外アンワインド時に実際のコードアドレスとして扱われ、ExecutionManager::IsReadyToRunCode()の判定が誤る可能性があります。現在の実装ではUpdateRegDisplay_Implでセンチネル値から派生状態を復元するため動作する想定ですが、他の構成やEHフロー時との一貫性を考慮した検証が必要な可能性があります。

また、通常の実行フロー中に__stack_pointerグローバルが予測不可能な値に設定される点について、作成者はemscripten compiled codeへの復帰前にスタックがリセットされるため問題ないと述べています。


#129800 [cdac] Convert TypeHandle to the ITypeHandle interface

概要

cDAC(コンポーネント診断契約)のTypeHandle値型をITypeHandleインターフェースに変換し、ターゲット指向の実装(TargetTypeHandle)を追加するリファクタリングです。これにより、ランタイム型システム(RTS)が型ハンドルのバージョニングと合成型の生成に対応できるようになります。主な特徴は、ハンドルの比較をアドレス値から正規参照ID(canonical reference identity)に変更し、Target.Flushまでの間は同じアドレスに対して同一オブジェクトを返します。

変更内容

  • ITypeHandleインターフェース導入:抽象型(Abstractions)にITypeHandleを追加し、既存コードのTypeHandle参照をすべて更新
  • TargetTypeHandle実装:ターゲットバックの実装クラスを追加し、アドレスごとのインターンでキャッシュを最適化
  • Nullable参照セマンティクス:不在・未解決型をITypeHandle?で表現
  • 契約署名の更新:RuntimeTypeSystem、RuntimeMutableTypeSystem、Signature、ManagedTypeSourceなどの公開契約をすべてITypeHandleに対応
  • ジェネリック型インスタンスをArray返却に変更:GetGenericParametersなどがITypeHandle[]を返すように統一
  • ドキュメント更新:RuntimeTypeSystem.md含む契約ドキュメントを更新
  • テスト・レガシーコード更新:2733個のcDAC単体テスト、34個のDataGenerator テスト、DumpTests/StressTests、SOS DAC実装(Legacy)をすべて対応

パフォーマンスへの影響

  • ハンドルインターンによるメモリ最適化:キャッシュ有効期間内は重複ハンドルの生成を排除
  • 参照ID比較(ReferenceEquals)がアドレス値比較より高速な可能性あり
  • キャッシュ無効化(Target.Flush)後は新規オブジェクト生成のため初期オーバーヘッド発生
  • 具体的なベンチマーク数値は提供されていません

関連Issue

なし

その他

  • 互換性への影響:新しいハンドルは参照IDを使用するため、値の等価比較(==)では機能しません。既存コードprobe.Address == TargetPointer.Nullが合成ハンドルで誤動作する可能性があり、ITypeHandle.IsNullの使用が推奨されています
  • 合成型ハンドルの延期:Ptr/Byref/SzArray/Array、ジェネリック型のような無限個の構築型に対する合成ハンドル生成は別のPRで実装予定
  • テスト状況:すべてのテストが成功(2733個中16個スキップ)、コンパイル・リンクエラーなし
  • 内部実装:TargetTypeHandleは内部クラス、外部公開APIではなく、cDAC内部の型システム基盤整備

目次