Pull Request on 2026年08月20日

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

注意点

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


目次

  1. #132576 Defer unused CoreLib cache initialization
  2. #132575 [release/11.0-rc1] [mono][interp] Intrinsify Vector128.Store/StoreUnsafe on wasm
  3. #132567 [release/11.0-rc1] Disable ContextualReflection test on browser wasm
  4. #132550 Remove the Number static constructor
  5. #132549 Fix TypeMap failure in CI
  6. #132547 [release/9.0-staging] Update dependencies from dotnet/icu
  7. #132541 Dedup ci-fix PRs by KBE branch prefix
  8. #132540 Strip KBE dedup search suffix noise
  9. #132535 Remove legacy FAULT contract logic and annotations
  10. #132532 [release/11.0-rc1] [CoreCLR] Protect exception object across funclet callbacks
  11. #132525 [release/11.0-rc1] [mono][interp] Fix mis-sorted SIMD intrinsic tables making entries unreachable
  12. #132524 [release/11.0-rc1] [mono][wasm] Intrinsify Vector128.MultiplyAddEstimate in the interpreter
  13. #132521 Implement SocketsHttpHandler.InitialHttp2MaxConcurrentStreams
  14. #132520 JIT: Always fill uninitialized JIT memory with 0xcd
  15. #132513 JIT: stop validating the whole flow graph after every block compaction
  16. #132509 SuperPMI: speed up reportMetadata metric lookup
  17. #132506 JIT: Merge fgDebugCheckTypes into fgDebugCheckFlags
  18. #132502 [mono][interp] Intrinsify Vector128.Store/StoreUnsafe on wasm
  19. #132485 [release/10.0] Fix array size overflow in objectalloc.cpp
  20. #132483 Improve StringBuilder.ToString() exception message for inconsistent state
  21. #132478 [browser] Run Wasm.Build.Tests on CoreCLR the same way as Mono
  22. #132469 JIT: replace fgWalkTree callbacks with GenTreeVisitor implementations
  23. #132465 Fix confusing exception message in Dictionary.CopyTo when index exceeds array length
  24. #132152 [release/8.0] Update dependencies from dotnet/emsdk
  25. #132114 Re-enable binder tracing tests disabled during reflection invoke work
  26. #132096 Make DegreesToRadians and RadiansToDegrees correctly rounded
  27. #132048 Disable GC/Coverage/271010 on NativeAOT
  28. #130178 Add SequenceReaderExtensions.TryPeekEndian
  29. #126968 Convert Marshal test Variant usage to ComVariant with stack-local variant handling

#132576 Defer unused CoreLib cache initialization

概要

CoreLibの未使用キャッシュ初期化を遅延させるため、CompareInfoの検索値とEncodingTableの名前キャッシュをネストされた静的ホルダーの背後に移動します。これにより、NativeAOTアプリケーションでこれらのパスが使用されない場合、それらをトリミングできるようになります。

変更内容

  • EncodingTable.cs: ConcurrentDictionary<string, int>の名前→コードページマッピングをネストされた静的ホルダーに移動。GetCodePageFromNameが呼び出されるまで初期化を遅延します。
  • CompareInfo.Icu.cs: ICU専用のSearchValues<char>初期化をネストされた静的ホルダーに移動。序列ヘルパーメソッドが実際に必要になるまで作成を遅延させます。

パフォーマンスへの影響

NativeAOT Hello World(InvariantGlobalization=true、win-x64 Release ビルド)で以下の削減を実測:

  • CompareInfoホルダーのみ: -22,016 bytes
  • 両方のホルダー: -24,576 bytes(累計)

セクション別削減:.text -12,800 bytes、.rdata -9,728 bytes、.data -1,024 bytes、.pdata -512 bytes、.reloc -512 bytes。最終的な依存グラフからSearchValues.Create、EncodingTable::.cctor、ConcurrentDictionary<string, int>の名前キャッシュ構築が削除されます。

関連Issue

なし

その他

  • 内部実装の最適化であり、公開APIの変更なし。互換性への影響なし。
  • GitHub Copilotで準備されたPR。

#132575 [release/11.0-rc1] [mono][interp] Intrinsify Vector128.Store/StoreUnsafe on wasm

概要

WASM上でのMono interpreterにおいて、Vector128.StoreおよびVector128.StoreUnsafeをイントリンシック化し、パフォーマンスを大幅に改善するバックポート。このPRはrelease/11.0-rc1ブランチへの手動バックポート(#132502)で、自動cherry-pickの競合を解決しています。

変更内容

  • transform-simd.c: packedsimd_alias_methodsテーブルにStoreとStoreUnsafeのエイリアスエントリを追加。メソッドのオペランド順序が異なるため(PackedSimdは(address, source)、Vector128は(source, destination))、epilogue後にレジスタを入れ替えるロジックを実装。
  • interp-simd.c: interp_packedsimd_store実装を追加。v128_t*ポインタでのアクセスではなくwasm_v128_storeを使用し、16バイトアライメントを前提としない設計に変更。
  • Vector128Tests.cs: Vector128StoreUnalignedTest、Vector128StoreUnsafeUnalignedTest、Vector128StoreUnsafeElementOffsetUnalignedTestの3つのテストを追加。

パフォーマンスへの影響

大幅な改善:上流の測定では、interpreterモードでVector128.Store<int>約6.2倍、Vector128.StoreUnsafe<int>約6.3倍のパフォーマンス向上。

関連Issue

#132502(オリジナル変更) #132525(先行条件:テーブルソート修正) #132500(オリジナルのソート修正) #132499(当ブランチに含まれない関連変更)

その他

  • 本バックポートは#132525がマージ済みであることが前提。#132525の修正なしでは、バイナリサーチテーブルのソートが不正であるため、このPRの変更は無効になります。
  • 手動バックポート理由:transform-simd.cは#132525マージ後に自動解決;Vector128Tests.csは純粋な配置競合(#132499のテストが当ブランチに存在しないため、テストを末尾に追加)。
  • ローカル検証:13011/13011テスト合格(新規3テストを含む)。interp-simd.cの変更はwasm専用のため、ネイティブビルドでは検証されていませんが、上流CIで合格済み。

#132567 [release/11.0-rc1] Disable ContextualReflection test on browser wasm

概要

Browser WASM環境におけるContextualReflectionテストを無効化するバックポートPRです。CoreCLR ブラウザ(WASM)ターゲットでのテスト実行をスキップするための設定を追加しています。

変更内容

  • src/tests/Loader/ContextualReflection/ContextualReflection.csproj: MSBuild条件(RuntimeFlavor=coreclrかつTargetOS=browser)下でCLRTestTargetUnsupported=trueを設定し、Browser WASM環境でのテスト実行を無効化

パフォーマンスへの影響

影響なし

関連Issue

#132491(バックポート元のPR/Issue)

その他

  • 本変更はrelease/11.0-rc1ブランチへのバックポートです
  • 既存のsrc/testsのパターンに従い、サポートされていないCoreCLR browserテストを除外しています
  • 追跡課題へのリンクがActiveIssueコメントで追加されています

#132550 Remove the Number static constructor

概要

System.Number型の静的コンストラクタを削除するリファクタリング。RVAバックのReadOnlySpan<byte>にプリミティブデータを移動し、必要な小さな定数はオンデマンド計算、キャッシュは別の型に隔離することで、未使用データのトリミング効率を向上させます。フォーマッティングパターンは管理された文字列配列から switch-selected RVAバイトスパンに変更。ベンチマーク結果では currency -1.9%、number -1.2%、percent +0.2%の差異で、メモリアロケーションは変わらず。

変更内容

  • Number.Formatting.cs: 小数キャッシュと Mono TwoDigits キャッシュをネストされたホルダー型に移動
  • Number.Formatting.Common.cs: 通貨/数値/パーセンテージのフォーマット文字列配列をReadOnlySpan<byte>の switch-selected テンプレートに置き換え
  • DecimalIeee754 関連ファイル群 (Trig/Sqrt/Pow/Log/InvTrig/Hyper/Exp/PiTrig/Transcendental.cs): 三角関数・対数・指数・逆三角関数の係数テーブルを静的配列からspan-backed表現に変換、小定数をオンデマンド計算に

パフォーマンスへの影響

  • ベンチマーク結果: currency -1.9%、number -1.2%、percent +0.2%(直接バイト処理による差異は測定ノイズ以下)
  • メモリアロケーション: 変更なし
  • トリミング改善: Numberの静的コンストラクタ削除により、未使用データが自動的にトリムされるようになり、バイナリサイズの削減が期待される

関連Issue

なし

その他

  • CoreCLR、NativeAOT、Monoビルドで検証済み
  • System.Runtime.Testsの全77,366テストが合格
  • MemoryMarshal.Cast<ulong, DiyFp128FixedCoefficient>の使用箇所では、構造体サイズが16バイト(2 ulongs)であることを保証するため、明示的なサイズアサーションの追加が推奨されている

#132549 Fix TypeMap failure in CI

概要

TypeMapテスト(blob-only scenario)でプロキシマッピングのクエリ方向を修正しました。TypeMapAssociation属性が定義する「source type → proxy type」の方向に統一し、NativeAOT trimmingで適切なエントリが保持されるようにnew Lib5Type1().GetType()を使用しています。

変更内容

  • src/tests/Interop/TypeMap/TypeMapApp.cs: blob-only TypeMapテストのプロキシマップアサーションを修正。ソース型(Lib5Type1)でクエリを行い、プロキシ型(Lib5Proxy1)を期待する方向に統一。NativeAOT trimming対応のためnew Lib5Type1().GetType()で検索キーを取得。

パフォーマンスへの影響

影響なし

関連Issue

#132549

その他

  • 先行のコミット(00ecce57)で導入されたTypeMap変更がCI環境で障害を引き起こしていた
  • Copilotによって問題の調査と修正が実施された
  • 他のTypeMapテストで確立されているパターン(ランタイム型使用法に依存)との一貫性が確保された

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

概要

dotnet/icuリポジトリの依存関係を更新するPull Requestです。Microsoft.NETCore.Runtime.ICU.Transportパッケージを9.0.0-rtm.26418.3から9.0.0-rtm.26419.1にアップグレードします。

変更内容

  • eng/Version.Details.xml: Microsoft.NETCore.Runtime.ICU.Transportのバージョン情報を更新(4行変更)
  • eng/Versions.props: バージョンプロパティを更新(2行変更)

パフォーマンスへの影響

提供されている情報からは判断不可

関連Issue

なし

その他

  • このPull Requestは自動依存関係更新ツール(dotnet-maestro[bot])による定期更新です
  • dotnet/icu release/9.0ブランチのビルド20260819.1(コミット95c53f5781)に対応しています
  • Maestroサブスクリプション: 5e3f9b88-faad-436c-a580-ac009d20bb33

#132541 Dedup ci-fix PRs by KBE branch prefix

  • 作成者: @Copilot
  • 作成日時: 2026年08月19日 22:18:29(UTC)
  • マージ日時: 2026年08月20日 17:48:35(UTC)
  • ラベル: area-Infrastructure

概要

CI失敗フィッサーがKBE(Known Build Error)に対して重複した[ci-fix] PRを開くことを防ぐため、PRの重複排除(dedup)ロジックを改善しました。GitHub検索のトークン化により、タイトル/本文マッチングが信頼できないため、ブランチプレフィックスマッチングを権限のあるdedup keyとして使用するようにしました。

変更内容

  • .github/workflows/ci-failure-fix.md: CI失敗フィッサーのドキュメント更新(+4/-4行)
    • [ci-fix] PRマップの構築方法を変更:head.refとLinked KBE:フィールドの両方から情報を取得
    • ci-fix/<kbe>-ブランチプレフィックスマッチングを権限のある重複排除キーとして位置づけ
    • Branch FIXおよびBranch HELP PRの命名規則をci-fix/<kbe>-<slug>-<hash>に統一
    • KBE数値IDをブランチ名の先頭に配置して、将来の実行時に確定的なdedup keyを生成

パフォーマンスへの影響

影響なし

関連Issue

#132518

その他

なし


#132540 Strip KBE dedup search suffix noise

  • 作成者: @Copilot
  • 作成日時: 2026年08月19日 22:13:53(UTC)
  • マージ日時: 2026年08月20日 15:34:47(UTC)
  • ラベル: area-Infrastructure

概要

KBE(Known Build Error)スキャナーが実行時の細微な違い(スクリプトランナーのサフィックスや終了コード/シグナルテキスト)のみ異なるCoreCLR ランタイムテストの重複報告を避けるため、既存のKBE検索ガイダンスを更新します。.cmd、.dll、.sh、.exeの拡張子およびexit 134、SIGABRTなどの終了コード/シグナル記述子を検索時にストリップする仕様です。

変更内容

  • .github/workflows/shared/create-kbe.instructions.md: KBE検索ガイダンスの更新
    • スラッシュで区切られたCoreCLRテストパスから.cmd、.dll、.sh、.exeを削除する変更を拡張
    • 終了コード/シグナル記述子(exit 134、exit 101、SIGABRTなど)のストリップ機能を追加
    • Refreshおよびarrres_il_rの重複パターン例を文書化
    • サフィックスストリップの注意事項と変更概要を更新

パフォーマンスへの影響

影響なし

関連Issue

#132132

その他

なし


#132535 Remove legacy FAULT contract logic and annotations

概要

CoreCLR の契約(Contract)システムから廃止された FAULT 関連のインフラストラクチャを完全に削除するコミットです。FORBID_FAULT、STATIC_CONTRACT_*FAULT*、INJECT_FAULT(...)、FAULT_NOT_FATAL() などのマクロと注釈を VM、utilcode、GC、デバッグコード全体から削除し、不要になった CONTRACT_VIOLATION マスクを簡潔にします。

変更内容

  • ヘッダーファイル (inc/): contract.h、contract.inl、staticcontract.h から FAULT 関連のマクロ定義・実装を削除
  • VM コード (vm/): 171 ファイルから FORBID_FAULT、INJECT_FAULT、FAULT_NOT_FATAL の使用を削除、CONTRACT_VIOLATION フラグを簡潔化
  • Utilcode (utilcode/): メモリ管理・ローダーヒープ関連の 30+ ファイルから FAULT コントラクト関連処理を削除
  • GC/デバッグコード: GC ハンドルテーブル、GC 環境スタブ、デバッガーコードから FAULT 関連を削除
  • ドキュメント更新: CLR コード規約ガイドから FAULT コントラクト関連の説明を削除・更新

パフォーマンスへの影響

影響なし。本変更は廃止済みのコントラクト検証インフラの削除であり、ランタイムの機能や性能には直接的な変更はありません。

関連Issue

なし

その他

  • 破壊的変更: 本変更は内部実装(コントラクト検証)のみの変更です。公開 API への影響はありません。
  • コード簡潔化: 176 ファイルで廃止マクロを削除し、全体で約 500 行以上の削除を達成
  • レビュー指摘: src/coreclr/vm/ceeload.inl でコメントフォーマットの軽微な問題が指摘されています(GC_NOTRIGGER//MODE_ANY の区切り文字が不適切)

#132532 [release/11.0-rc1] [CoreCLR] Protect exception object across funclet callbacks

概要

例外オブジェクトをfunclet コールバック間で保護する修正をrelease/11.0-rc1にバックポートします。CoreCLR の例外処理において、funclet コールバック実行時に例外オブジェクトが適切に保護されていなかった問題を修正します。

変更内容

  • src/coreclr/vm/exceptionhandling.cpp: 例外オブジェクトの保護ロジックを修正(+16/-14)。funclet コールバック処理中に例外オブジェクトが GC によって破棄されないようにする対応
  • src/tests/profiler/exception/ExceptionTest.cs: プロファイラー例外テストに funclet コールバック関連のテストケースを追加(+9/-2)

パフォーマンスへの影響

影響なし

関連Issue

#132482(本バックポート元の PR)

その他

  • このPRは既存の修正(#132482)のバックポートです
  • release/11.0-rc1 ブランチへの適用となります
  • 例外処理の堅牢性向上に関わる CoreCLR 内部実装の変更です

#132525 [release/11.0-rc1] [mono][interp] Fix mis-sorted SIMD intrinsic tables making entries unreachable

概要

Monoインタプリタ(interp)のSIMD組み込み関数テーブルが誤ってソートされていた問題を修正するバックポート。テーブルが不正な順序になっていたため、一部のエントリに到達できなくなっていました。

変更内容

  • src/mono/mono/mini/interp/transform-simd.c: SIMD組み込み関数テーブルのソート順序を修正(+28/-11行)

パフォーマンスへの影響

影響なし。テーブルアクセスの正確性の修正であり、パフォーマンス上の変化はありません。

関連Issue

#132500 (オリジナルの修正PR)

その他

  • .NET 11.0-rc1ブランチへのバックポート対応
  • 変更内容の詳細はオリジナルPR #132500を参照してください

#132524 [release/11.0-rc1] [mono][wasm] Intrinsify Vector128.MultiplyAddEstimate in the interpreter

概要

Mono/WASM環境におけるVector128.MultiplyAddEstimateの組み込み化(Intrinsify)を実装します。このPull Requestは、release/11.0-rc1ブランチへの#132496のバックポートです。

変更内容

  • jiterpreter-trace-generator.ts: Vector128.MultiplyAddEstimate用のトレース生成ロジック追加(14行)
  • interp-simd-intrins.def: MultiplyAddEstimateの組み込み定義追加(1行)
  • interp-simd.c: インタープリタでの組み込み実装追加(7行)
  • simd-methods.def: SIMD メソッド定義に追加(1行)
  • transform-simd.c: SIMD変換ロジックに対応追加(7行)

パフォーマンスへの影響

Vector128.MultiplyAddEstimate操作のインタープリタでの実行性能が向上します。組み込み化により、メソッド呼び出しのオーバーヘッドが削減され、計算集約的なSIMD演算のスループット向上が期待できます。

関連Issue

#132496(元のPull Request)

その他

このPull Requestはリリース/11.0-rc1分岐へのバックポートです。リグレッションとして報告されており、修正対象となっています。


#132521 Implement SocketsHttpHandler.InitialHttp2MaxConcurrentStreams

  • 作成者: @MihaZupan
  • 作成日時: 2026年08月19日 14:21:29(UTC)
  • マージ日時: 2026年08月20日 15:13:03(UTC)
  • ラベル: area-System.Net.Http

概要

SocketsHttpHandlerに新しいプロパティInitialHttp2MaxConcurrentStreamsを追加し、HTTP/2接続で最初のSETTINGSフレーム受信前にサーバーが開くことができるストリーム数を制限できるようにします。デフォルト値は100で、1以上の値が必須です。既存のSETTINGS_MAX_CONCURRENT_STREAMSの動作も調整され、設定されたキャップを尊重するようになります。

変更内容

  • SocketsHttpHandler.cs: 新しいパブリックプロパティInitialHttp2MaxConcurrentStreamsを追加(検証とXML ドキュメント付き)
  • HttpConnectionSettings.cs: 新しい初期最大同時ストリーム設定を保存・複製
  • Http2Connection.cs: ハードコーディングされた初期ストリームキャップを削除し、SETTINGS_MAX_CONCURRENT_STREAMS処理を更新して、サーバー通知値が設定されたキャップより低い場合のみ記憶
  • HttpConnectionPool.cs: プール単位の「最後に確認した」HTTP/2最大同時ストリームを新しい設定から初期化
  • HttpHandlerDefaults.cs: デフォルト値(100)の定数を導入(根拠付き)
  • BrowserHttpHandler/SocketsHttpHandler.cs: ブラウザスタブにPNSEをスロー対応プロパティを追加
  • System.Net.Http.cs: ref アセンブリで新しいパブリックAPI サーフェスを公開
  • SocketsHttpHandlerTest.cs: API検証、ラウンドトリップ、SETTINGS前のストリーム制限とメモ化ルールをカバーするHTTP/2ループバックテストを追加

パフォーマンスへの影響

影響なし

関連Issue

#132457

その他

  • 値0はプロパティとして技術的に有効ですが、現在ブロック中です。現実的なユースケースが明確でないため、サポートが必要になった場合は後で再度追加可能。
  • 本PRは.NET 12向けの実装です。.NET 11へのバックポート予定。

#132520 JIT: Always fill uninitialized JIT memory with 0xcd

概要

JITのDEBUGビルドにおいて、未初期化メモリの塗りつぶしパターンを固定値0xcdに統一し、ランダム化と設定可能性を廃止します。また、IsUninitializedベースの各種チェックを削除し、偽陽性のリスクを軽減します。

変更内容

  • jit.h: UninitializedFillByte = 0xcd(固定値)を導入し、IsUninitializedヘルパー関数を削除
  • compiler.cpp/compiler.h: compGetJitDefaultFill実装と宣言を削除(ランダム化・ストレステスト機能も廃止)
  • jitconfigvalues.h: JitDefaultFill設定オプションを削除
  • alloc.h: DEBUG時のアロケータ塗りつぶしをUninitializedFillByteに統一
  • gentree.cpp/morph.cpp: IsUninitializedベースのアサーション/ガードを削除
  • codegenxarch.cpp/codegenarm64.cpp/codegenriscv64.cpp/codegenloongarch64.cpp: compCalleeRegsPushedの未初期化チェックアサーションを削除

パフォーマンスへの影響

checked JITのベンチマークで命令数が2.90%削減(改善)。設定値の参照やランダム化ロジックが廃止されることで、メモリ塗りつぶし処理が高速化します。

関連Issue

なし

その他

注記: Copilotレビュー指摘として、src/coreclr/jit/gentree.cpp:14484のgtDispTree関数では、削除されたIsUninitializedチェックの代わりにnullチェックのみが残されています。デバッグ表示時のクラッシュリスクがあるため、DEBUG専用の軽量チェック復活を検討する価値がある可能性が指摘されています。


#132513 JIT: stop validating the whole flow graph after every block compaction

概要

JITコンパイラのブロック圧縮後に毎回フローグラフ全体の検証を実施していた処理を削除しました。checked buildで一部フェーズが基本ブロック数に対して二次計算量になっていた問題を解決します。フローグラフの検証はフェーズ後の検証処理(fgDebugCheckBBlist)で実施するため、ブロック圧縮後の検証は不要です。

変更内容

  • src/coreclr/jit/fgopt.cpp: ブロック圧縮後のフローグラフ検証ロジックを削除(8行削除)
  • src/coreclr/jit/jitconfigvalues.h: 関連する設定値を削除(1行削除)

パフォーマンスへの影響

Checked JITビルドでのベンチマーク結果:

  • 命令数削減: -4.35%
  • 実行時間削減: -3.58%(wall clock)

この改善は、フェーズ処理における検証オーバーヘッドの削減により、checked buildの性能を向上させます。

関連Issue

なし

その他

この変更はchecked build専用の最適化であり、retail buildには影響しません。フローグラフの正確性は依然としてフェーズ後の統一的な検証処理により保証されます。


#132509 SuperPMI: speed up reportMetadata metric lookup

概要

SuperPMIのメタデータメトリクス検索アルゴリズムの最適化。従来の二次時間計算量の検索を、前回の検索位置から開始する線形探索に変更。SuperPMIとJITがメトリクスの順序に合意しているため、実際には線形時間での処理が可能になります。

リリースモード SuperPMI で 2.8%、チェック済みモード SuperPMI で約 0.5% の実行時間短縮を実現。

変更内容

  • src/coreclr/tools/superpmi/superpmi/icorjitinfo.cpp: メタデータエントリ検索ロジックを改善。前回の検索位置をキャッシュし、そこから検索を再開することで二次時間計算量を線形に改善(+39/-7行)
  • src/coreclr/tools/superpmi/superpmi/icorjitinfo.h: 前回の検索位置を保持するための状態管理メンバーを追加(+5行)

パフォーマンスへの影響

改善: リリースモード SuperPMI の実行時間が 2.8% 短縮、チェック済みモード SuperPMI が約 0.5% 短縮。

メタデータエントリ数の増加に伴う性能劣化が解消され、スケーラビリティが向上。

関連Issue

なし

その他

なし


#132506 JIT: Merge fgDebugCheckTypes into fgDebugCheckFlags

概要

Checked JIT内のデバッグ検証機能を統合し、fgDebugCheckTypesをfgDebugCheckFlagsにマージすることで、JITコンパイラのコード整理と最適化を実施。

変更内容

  • src/coreclr/jit/compiler.h: デバッグ検証関連のメソッド宣言を整理(+2/-2)
  • src/coreclr/jit/fgdiagnostic.cpp: fgDebugCheckTypesの機能をfgDebugCheckFlagsに統合し、重複するデバッグチェックロジックを削減(+67/-89)

パフォーマンスへの影響

Checked JITのスループット改善:-1.81% instructions retired(命令数削減による効率化)

関連Issue

なし

その他

  • この変更はJITコンパイラの内部実装(Checked JIT)に関連し、公開APIへの影響はありません
  • デバッグ検証ロジックの統合により、保守性が向上しコード量が削減されています

#132502 [mono][interp] Intrinsify Vector128.Store/StoreUnsafe on wasm

概要

Mono インタプリタで Vector128.Store と Vector128.StoreUnsafe を PackedSimd 命令にインライン化します。これらのメソッドは以前、パラメータ順序が逆であるため管理コードにフォールバックしていました。結果として、ドキュメント上は高速なAPIが PackedSimd 同等品より約6倍遅延していました。パラメータ順序の反転に対応するため、intrinsics テーブルに追加し、IL→IR生成時に sreg(ソースレジスタ)を交換します。

変更内容

  • src/mono/mono/mini/interp/transform-simd.c: Vector128.Store と Vector128.StoreUnsafe を alias テーブルに追加。2パラメータ、void 戻り値、第2パラメータが raw address(T* または ref T)である場合に限定し、sreg のスワップロジックを実装
  • src/mono/mono/mini/interp/interp-simd.c: interp_packedsimd_store をメモリアライメント対応に修正。16バイト整列を前提とした v128_t* キャストから wasm_v128_store に変更し、C の未定義動作を排除
  • src/libraries/System.Runtime.Intrinsics/tests/Vectors/Vector128Tests.cs: Store、StoreUnsafe、StoreUnsafe(elementOffset) を12要素型、全16バイト整列パターンでテスト。ガード領域を両側に配置し、不正なストアを検出

パフォーマンスへの影響

大幅な改善:V8 ブラウザ環境にて、1,000,000 イテレーション実行時(2 warmups、best of 5)

操作 改善前 改善後 高速化率
Vector128.Store<int> 3.243 ns 0.521 ns 6.2x
Vector128.StoreUnsafe<int> 3.253 ns 0.518 ns 6.3x
PackedSimd.Store<int>(制御) 0.485 ns 0.527 ns 変化なし(±8%ノイズ)

管理コードルーティング(Unsafe.WriteUnaligned)から intrinsics へのローレベル化により、約6倍の高速化を実現。

関連Issue

#132500

その他

  • 互換性: StoreAligned と StoreAlignedNonTemporal は引き続き管理コードにフォールバック(ランタイムの整列チェック例外を保証するため)
  • 3引数オーバーロード: StoreUnsafe(source, destination, elementOffset) は PackedSimd 相当品がないため、パラメータ数チェックで管理コードへフォールバック
  • System.Numerics.Vector.Store/StoreUnsafe: 同一シグネチャのため同時にインライン化
  • バリデーション: System.Runtime.Intrinsics 13024/13024 テスト、System.Numerics.Vectors 7449/7449 テスト合格。IR デバッグ出力でも sreg 交換を確認
  • アライメント修正: C の未定義動作(不正なキャスト)を修正。wasm_v128_load/store マ

#132485 [release/10.0] Fix array size overflow in objectalloc.cpp

概要

.NET 10の新機能(大規模な既知サイズの配列のスタック割り当て評価)で発生していた配列サイズオーバーフローを修正します。極めて大きな配列のクラスレイアウト計算時に整数オーバーフローが発生し、不正なスタック割り当ての判断につながっていた問題を解決します。

変更内容

  • src/coreclr/jit/layout.cpp: レイアウト計算時のオーバーフロー検出ロジックを追加(+26行)
  • src/coreclr/jit/layout.h: オーバーフロー検出用の関数シグネチャを追加(+4行)
  • src/coreclr/jit/objectalloc.cpp: スタック割り当て評価時にオーバーフロー検出を適用(+7行)

これらの変更は、大規模配列のレイアウト計算中に発生する整数オーバーフローを検出し、不正なスタック割り当てを防ぐものです。

パフォーマンスへの影響

影響なし。変更はオーバーフロー検出の追加であり、正常系のパフォーマンスに悪影響はありません。むしろ、不正なスタック割り当てを防ぐことで、メモリ関連のバグを回避します。

関連Issue

#132480、#123361、#112250

その他

  • 本変更は#123362のrelease/10.0ブランチへのバックポートです
  • 顧客から報告された回帰問題への対応であり、リスクレベルは低いと判定されています
  • 修正内容は両Issueの再現ケースで検証済みです

#132483 Improve StringBuilder.ToString() exception message for inconsistent state

概要

StringBuilder.ToString() が内部チャンク境界の不整合(主に並行修正による)を検出した際の例外メッセージを改善しました。互換性のため例外型は ArgumentOutOfRangeException のままですが、メッセージとパラメータ名を修正し、架空のメソッドパラメータ名ではなく、内部状態破損を示す専用のリソース文字列を使用するようにしました。

変更内容

  • src/libraries/System.Private.CoreLib/src/System/Text/StringBuilder.cs
    • StringBuilder.ToString() の境界値検証を更新
    • 例外のパラメータ名を chunkLength から null に変更
    • 例外メッセージを SR.InvalidOperation_ConcurrentOperationsNotSupported に変更して、内部状態破損を明確に表現

パフォーマンスへの影響

影響なし

関連Issue

#131674

その他

この変更は StringBuilder の内部状態が破損した場合(並行アクセスなど)の診断メッセージを改善するもので、公開APIの動作に変更はありません。例外型の互換性は維持されています。


#132478 [browser] Run Wasm.Build.Tests on CoreCLR the same way as Mono

概要

WebAssembly on CoreCLRテストのHelix実行方式をMonoと統一し、カスタムペイロル配信を廃止するPR。wasm-toolsワークロードがCoreCLRに対応したため、従来の特殊な環境変数/ペイロール経由の設定から、標準的なワークロード/ランタイムパック機構に移行する。CoreCLRはMonoと同じワークロード/no-workload/fingerprinting/bundler-friendlyの4レーンを実行するようになる。

変更内容

  • Helixパイプライン構成(browser-wasm-coreclr-build-tests.yml): CoreCLRジョブはMonoビルド(BuildOnly)に依存し、wasm-tools/wasm-experimentalワークロードとランタイムパックをローカルフィードに配置。CoreCLR専用のEMSDKプロビジョニングステップを削除。
  • テスト実行設定(sendtohelix.proj/sendtohelix-wasm.targets): CoreCLRをワークロード交差積に含める。レーン選択をランタイムフレーバーからレーン形状に変更。CoreCLRは「no-workload」「workload(クラスごとに分散)」「no-fingerprinting」「bundler-friendly」の4レーンを実行。
  • MSBuild設定(BrowserWasmApp.CoreCLR.targets): 環境変数オーバーライドを削除し、復元されたランタイムパックからインクルードディレクトリを解決。Monolith前回互換性保持のため、リポジトリフルビルド時の代替手段は維持。
  • テストコード(EnvironmentVariables.cs/BuildEnvironment.cs): CoreCLR固有の環境変数/ペイロール関連コードを削除。マルチスレッドランタイムパックアサーションをCore CLRワークロードレーン用にガード。
  • テストカテゴリ整理(複数の.csファイル): native/mono/native-monoの3分割をnativeとmonoに統合。native-monoテストは両カテゴリを持ち、CoreCLRフィルタは-notrait category=monoのみで除外可能に。CoreCLRInvariantGlobalizationDoesNotLinkGlobalizationNativeをno-workloadからworkloadに移動。

パフォーマンスへの影響

影響なし。ただしCI/CDパイプラインの依存関係が変化:CoreCLR WBTレーンはMonoビルド(BuildOnly)に新たに依存し、Monoビルド失敗がCoreCLR WBTをブロックするようになった(従来は独立)。Helix work item名からST-/MT-セグメントを削除(Wasm.Build.Tests向けのみ、他のブラウザテストに影響なし)。

関連Issue

#126100、#132555

その他

  • Copilotレビュー指摘:README.mdの「same two lanes」表記が正確でない(現在は4レーン)、typo「altough」→「although」
  • MemoryTests.AllocateLargeHeapThenRepeatedlyInteropはCoreCLR上で`-p:WasmBuildNative=

#132469 JIT: replace fgWalkTree callbacks with GenTreeVisitor implementations

概要

JIT コンパイラの IR ツリー走査機構を刷新し、レガシーな fgWalkTree* 関数ポインタ コールバック機構を GenTreeVisitor の直接実装に置き換えるリファクタリング。間接呼び出しの排除により、インライン化とControl Flow Guard の多重ディスパッチ効率が向上する。また、gtHasCatchArg を gtFindNodeInTree ベースに再実装し、副作用フラグによる枝刈り最適化を実現。

変更内容

  • API削除: fgWalkTreePre、fgWalkTreePost、fgWalkTree ファミリーおよび関連する fgWalkData、GenericTreeWalker、コールバック型定義(fgWalkPreFn/fgWalkPostFn)を削除
  • 置き換え: morph、loop cloning、assertion prop、diagnostic、inline検証など複数の JIT パスで GenTreeVisitor ベースの専用実装に変更
  • 死亡パラメータの削除: computeStack(GenericTreeWalker で常に false)、lclVarsOnly、fgWalkData::parentStack と fgWalkData::printModified を廃止
  • gtHasCatchArg の再実装: gtFindNodeInTree ヘルパーを使用し、GTF_ORDER_SIDEEFF フラグに基づく枝刈りで全レベルでの最適化を実現
  • 不使用型の削除: fgSplitPredicate typedef を削除

パフォーマンスへの影響

スループット改善:

  • チェック JIT で -1.94% の命令数削減
  • リリース JIT(NoPgoOptimize ビルド)で -0.33% の命令数削減

函数ポインタ経由の間接呼び出しをダイレクト実装に置き換えることで、インライン化が可能になり、また Windows 環境では Control Flow Guard ディスパッチ スタブのオーバーヘッドが呼び出しごとに削減される。

コード品質: SuperPMI アセンブリ差分テスト(全11個の Windows x64 コレクション)で差分なし。

関連Issue

なし

その他

  • 互換性への影響: fgWalkTree* は内部 JIT API のため公開APIではなく、互換性上の問題なし
  • gtFindNodeInTree の枝刈り最適化により、GT_CATCH_ARG ノードが存在しないサブツリーへの不要な走査を回避
  • GenTreeVisitor はテンプレートベースの型安全な実装で、従来のコールバック機構より保守性が向上

#132465 Fix confusing exception message in Dictionary.CopyTo when index exceeds array length

概要

Dictionary<TKey, TValue>のCopyToメソッドにおいて、指定されたインデックスがターゲット配列の長さを超える場合の例外メッセージを改善します。従来の誤解を招く「Non-negative number required」メッセージの代わりに、ThrowHelper.ThrowArgumentOutOfRange_IndexMustBeLessOrEqualException()を使用して、より明確なメッセージを生成します。例外の型はArgumentOutOfRangeExceptionのままです。

変更内容

  • src/libraries/System.Private.CoreLib/src/System/Collections/Generic/Dictionary.cs
    • CopyToメソッドの例外処理ロジックを変更
    • インデックス検証エラーメッセージを、より適切な「Index must be less than or equal to」という内容に修正(1行追加、1行削除)

パフォーマンスへの影響

影響なし

関連Issue

#131782

その他

なし


#132152 [release/8.0] Update dependencies from dotnet/emsdk

概要

dotnet/emsdkの依存関係を更新するPull Request。Emscripten関連のNuGetパッケージを8.0.30から8.0.31へアップグレードしています。これはrelease/8.0ブランチ向けのサービシング更新です。

変更内容

  • NuGet.config: ソースフィード設定の更新(1行追加、1行削除)
  • eng/Version.Details.xml: 依存関係バージョン情報の更新
    • Microsoft.SourceBuild.Intermediate.emsdk: 8.0.30-servicing.26356.2 → 8.0.31-servicing.26418.4
    • Microsoft.NET.Workload.Emscripten.Current.Manifest-8.0.100: 8.0.30 → 8.0.31
  • eng/Versions.props: バージョン情報の更新(1行追加、1行削除)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • このPull Requestはdotnet-maestro[bot]による自動生成です(Maestroサブスクリプション: 4ebef09c-22a4-4345-9e95-08db9f47cad7)
  • emsdk commit: 66c8722e3897f210bd58059c9bdf87697c6e4963
  • WebAssembly/Emscripten関連の依存関係更新のため、Wasm開発環境に影響がある可能性があります

#132114 Re-enable binder tracing tests disabled during reflection invoke work

  • 作成者: @Copilot
  • 作成日時: 2026年08月11日 05:23:13(UTC)
  • マージ日時: 2026年08月20日 17:28:29(UTC)
  • ラベル: area-AssemblyLoader

概要

reflection invoke作業中に無効化されていたバインダートレーシングテストを再度有効化するPRです。テストはmainブランチで合格し、元の問題は解決されたと考えられます。

変更内容

  • BinderTracingTest.EventHandlers.cs: ActiveIssue属性を削除してテストを再度有効化(1行追加、3行削除)
  • BinderTracingTest.ResolutionFlow.cs: ActiveIssue属性を削除して複数のテストを再度有効化(6行追加、13行削除)

パフォーマンスへの影響

影響なし

関連Issue

#68521

その他

Copilot reviewerから以下の指摘が記録されていますが、PRでは対応されていない点があります:

  • ValidateBindOperationOrReturnFalseメソッドの命名が慣例的でなく、Try*パターンへの変更が推奨されている
  • PR説明では「#68521を修正」と記載されているものの、同じIssueで明示的にスキップされているテスト(例:AssemblyLoadFromResolveHandler_MissingDependency)が存在し、完全な解決が確認されていない点

#132096 Make DegreesToRadians and RadiansToDegrees correctly rounded

概要

DegreesToRadiansとRadiansToDegreesの正確な丸めを実現する改修。従来のx * (pi / 180)は2度の丸め誤差で最大~1 ulpの精度低下を招き、floatでは37.9%の入力が誤ったリジルト、0.042%が2 ulp誤差していました。マルチリム定数を導入して単一の丸めで計算し、スカラー・SIMD(Vector64/128/256/512)・Vector<T>・Decimal型すべてで正確丸めを達成します。

変更内容

  • Double.cs: マルチリム定数(head+mid+tail)を用いた正確丸め実装。2リムの高速パス、3リムのフォールバック、サブノーマル向けスケール パスを実装
  • Single.cs: doubleの頭部定数との乗算で単一丸めに変更、中間オーバーフロー回避
  • VectorMath.cs: SIMD向けの広幅定数乗算機構。FMA(Fused Multiply-Add)利用可能な場合はFMA、それ以外はVeltkamp分割で正確な積の丸め誤差回復
  • Vector64/128/256/512.cs、Vector.cs: SIMD変換ルーティング更新、float向け拡大精度選択対応
  • Half.cs、BFloat16.cs: 更新されたfloat実装への直接デリゲート に簡略化
  • Decimal32/64/128.cs: 新規DegreesToRadians/RadiansToDegrees API追加(ITrigonometricFunctions実装)
  • Number.DecimalIeee754.cs: decimal IEEE-754用マルチリム定数乗算ヘルパー追加、チャンク化除算で桁削減最適化
  • ITrigonometricFunctions.cs: インターフェース実装が正確丸め不可である理由をDIM(Default Interface Method)コメント に記載
  • テスト: 全型(Half、BFloat16、float全2^31、Decimal32全60M、double/decimal大型向け372kベクトル近似境界値)の詳細なビットパターン・境界値・near-tie テスト追加、0件の誤丸め検証

パフォーマンスへの影響

スカラー:0.90ns → 1.02ns(+13%)

  • Vector128:0.88ns → 1.81ns(+106%)
  • Vector256:0.85ns → 1.92ns(+126%)
  • Vector512:1.65ns → 3.00ns(+82%)

従来実装は除算スループット律速でしたが、新実装は除算なしで浮動小数点演算律速に変わり、幅に応じてスケール。Vector512は倍精度パイプラインため相対的に両欄で約2倍。サブノーマル向けスケール パスは約13ns。

関連Issue

#131930

その他

  • 破壊的変更なし: 既存API互換性保持
  • 新規公開API: Decimal32/64/128にDegreesToRadians/RadiansToDegreesメンバ追加(ref assemblyに記載)
  • Decimalゼロの動作変更: IEEE推奨指数に統一。Decimal32.DegreesToRadians(0E0)は0E-17に(従来0E-8)

#132048 Disable GC/Coverage/271010 on NativeAOT

  • 作成者: @Copilot
  • 作成日時: 2026年08月09日 04:17:36(UTC)
  • マージ日時: 2026年08月20日 20:48:51(UTC)
  • ラベル: area-NativeAOT-coreclr

概要

NativeAOT環境においてGC\Coverage\271010テストがEHHelpers.cpp:600のランタイムアサーション(ASSERT_UNCONDITIONALLY)でトリップする問題への対応。このテストをNativeAOT上で無効化する変更です。

変更内容

  • src/tests/GC/Coverage/271010.cs: NativeAOT環境でのテスト無効化フラグを追加(+1行)

パフォーマンスへの影響

影響なし(テストの無効化のみ)

関連Issue

その他

本変更はwindows-x64 Checked NativeAOT_Pri1 - GCビルドレグで再現される確定的なアサーション失敗に対する対処です。テストそのものの削除ではなく無効化により、NativeAOT環境での既知の問題を回避しています。


#130178 Add SequenceReaderExtensions.TryPeekEndian

概要

SequenceReader<byte> に対してリーダーを進めずに値をピークするエンドイアン対応APIを追加します。承認されたAPI仕様に基づいた実装で、符号付き整数型(short、int、long)のビッグエンディアン/リトルエンディアンピーク機能を提供します。

変更内容

  • ref/System.Memory.cs: TryPeekBigEndian および TryPeekLittleEndian の6つのオーバーロード(short、int、long各2種類)をパブリックAPI面として宣言
  • SequenceReaderExtensions.Binary.cs: エンドイアン対応ピーク機能の実装(132行追加)。リーダー位置を進めず、バイト列からエンディアンに基づいた値の読み取りを実行
  • BinaryExtensions.cs: ピーク動作、セグメント境界、失敗ケース、リーダー位置保持の検証テストを追加(90行追加)

パフォーマンスへの影響

影響なし

関連Issue

#116414

その他

XMLドキュメント上の指摘あり。サマリーは現在形三人称動詞(「Peeks」など)で始める必要があり、パラメータに<param>タグの説明、戻り値(bool)に標準的なtrue/falseのドキュメント記述が求められています。具体的には以下6つのメソッドのXML docが修正対象:

  • TryPeekBigEndian(short)、TryPeekLittleEndian(int)、TryPeekBigEndian(int)、TryPeekLittleEndian(long)、TryPeekBigEndian(long)、および対応するshortのリトルエンディアンオーバーロード

#126968 Convert Marshal test Variant usage to ComVariant with stack-local variant handling

概要

System.Runtime.InteropServices.Tests の GetNativeVariantForObjectTests において、テスト用ローカルヘルパー Variant から、ランタイムがサポートする ComVariant への移行を実施しました。これにより、テストコードが公開API層と一貫性のあるVARIANT interop実装を使用するようになります。

変更内容

  • GetNativeVariantForObjectTests.cs: ComVariant を使用したネイティブVARIANT割り当て・読み込みに変更。VarType プロパティおよび GetRawDataRef<T>() メソッドを活用した検証ロジックに更新。スタックローカルの ComVariant ポインタを直接渡すように修正。
  • GetNativeVariantForObjectTests.Windows.cs: Windows固有の無効配列テストを ComVariant を使用した割り当てに変更。
  • Marshal/Common/Variant.cs: 廃止されたテストヘルパー構体を削除。
  • System.Runtime.InteropServices.Tests.csproj: 削除されたヘルパーファイルのコンパイル include を削除。

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • テスト検証: GetNativeVariantForObjectTests 実行結果 Total: 2549, Errors: 0, Failed: 0
  • Copilotの低信頼度コメントで、variantInitialized フラグの不要性と VT_RECORD ケースでの ComVariant.Dispose() 呼び出し漏れが指摘されていますが、PR記述ではこれらへの対応状況が明記されていません。

目次