Pull Request on 2026年07月27日

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

注意点

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


目次

  1. #131429 Make wasm 'V' signature raising deterministic and add a regression test
  2. #131427 [release/11.0-preview7] FileConfigurationProvider: Handle and forward IO exceptions to OnLoadException
  3. #131424 Feature-detect KMAC key size limits
  4. #131417 Fix the net481 build break in AllocationHelper
  5. #131401 [wasm] Assign frame offsets to dependently promoted parameter fields
  6. #131397 Support CIDR notation in NO_PROXY env variable
  7. #131380 [wasm] Bump chrome for testing - linux: 150.0.7871.186, windows: 150.0.7871.187, mac: 150.0.7871.187
  8. #131374 [wasm] Report on-frame GC slots as pinned
  9. #131369 JIT: cache the wasm image base in a local
  10. #131366 Implement ClrDataTypeInstance GetName and GetDefinition in cDAC
  11. #131362 JIT: recompute exit weight in loop inversion
  12. #131360 [browser] Turn the >2GB memory test into an interop conformance test
  13. #131359 Remove PEAssemblyUrlToPath and PEAssemblyFindLastPathSeparator
  14. #131358 Fix config binder source gen for a sole read-only collection ctor param
  15. #131324 Fix g_gc_lowest_address updating
  16. #131201 [release/10.0] Source code updates from dotnet/dotnet
  17. #131008 Start DBI changes needed for non-surrogate loading
  18. #130888 Fix GC.GetTotalMemory returning negative under regions GC
  19. #130881 Add contentEncoding: base64 to JSON schema for byte[], Memory<byte>, and ReadOnlyMemory<byte>
  20. #130871 JIT: Remove boxing from value type instance calls
  21. #130693 Fix native EH in external shared libs on macOS
  22. #130689 Avoid materializing Task/ValueTask in StreamReader/StreamWriter
  23. #130445 Fix reflection XmlSerializer choice identifier with XmlEnum aliases
  24. #130436 [Diagnostics] Serialize concurrent reporters in InProc Crash Reporter
  25. #129493 support isSequence in reflection xml serializer
  26. #126108 Migrate JitOptimizationSensitive and GCStressIncompatible to SkipOnCoreClr attributes
  27. #126093 FileConfigurationProvider: Handle and forward IO exceptions to OnLoadException
  28. #124721 Implement a workaround for ld-prime hitting an assert on large addends

#131429 Make wasm 'V' signature raising deterministic and add a regression test

概要

WebAssembly (wasm) の v128 シグネチャ解析(RaiseSignature)を決定的にする変更です。従来は並列コンパイル時にキャッシュされた最初のv128型に依存していましたが、wasm ABIで完全に決定される16バイト・16バイトアライメント境界に基づき、正規の Vector128<byte> に統一しました。これにより、コンパイル順序に依存しない安定的なシグネチャ生成を実現し、複数のテストケース(v128アライメント検証、引数レイアウト検証)を追加して回帰防止を図ります。

変更内容

  • CompilerTypeSystemContext.Wasm.cs: 先着キャッシュ方式の v128 型管理を、遅延初期化される正規の Vector128<byte> (WasmV128Type) に置き換え
  • WasmLowering.cs: RaiseSignature が 'V' を正規型に解析するよう変更、16バイトアライメント検証を IsWasmV128Type に集約(コンパイル順序依存の例外処理を削除)
  • WasmArgumentLayoutTests.cs (新規): 20テストケース、v128型の16バイトアライメント、引数オフセット、他のSIMD幅(Vector64/256/512)の非v128扱い、シグネチャ解析の順序独立性を検証
  • TestPaths.cs: System.Private.CoreLib.dll パス解析をテスト共通化(SystemPrivateCoreLibPath 追加、runtime-pack → CoreCLR成果物のフォールバック対応)
  • R2RTestRunner.cs: 既出パス解析をリファクタリング、共通化したパスを利用
  • ILCompiler.ReadyToRun.csproj: InternalsVisibleTo 属性追加
  • ILCompiler.ReadyToRun.Tests.csproj: 内部API アクセス用エイリアス参照追加

パフォーマンスへの影響

影響なし。変更は決定性向上が目的であり、実行時オーバーヘッドはありません。

関連Issue

#131339、#131328、#130866

その他

  • v128型の16バイトアライメント制約は VectorFieldLayoutAlgorithm に由来し(ARM除く全アーキテクチャ)、実際の回帰は System.Numerics.Vector<T> にありました。テストはこの実装の詳細(ARM固有の8バイトアライメント保持)を含むため、両者をカバーしています
  • CacheStructBySize/GetCachedStructOfSize に同じ先着キャッシュ問題が存在し、v128の潜在的危険と異なり実際の誤コンパイルを引き起こしています('S<N>' エンコーディング)。これは別途修正予定で、本PRから除外
  • ローカルテスト実行: ILCompiler.ReadyToRun.Tests 58件中57件成功、既知の環境依存障害1件(CompositeManifestAssemblyMvidsArePaddedWhenPdbPresent、Debug構成でのネイティブPDB COM writer例外)

#131427 [release/11.0-preview7] FileConfigurationProvider: Handle and forward IO exceptions to OnLoadException

概要

FileConfigurationProviderのIO例外処理を改善し、例外をOnLoadExceptionコールバックに適切に転送するようにしたバックポート。顧客からの長年の報告によるIssueに対応。

変更内容

  • FileConfigurationProvider.cs: IO例外のハンドリングロジックを拡張(+92/-35)。例外を適切にキャッチし、OnLoadExceptionコールバックに転送する処理を強化。
  • FileConfigurationSource.cs: 例外転送に関連する処理を追加(+5)。
  • FileLoadExceptionContext.cs: 軽微な修正(+1/-1)。
  • ConfigurationTests.cs: 新規追加された6つのテストケースを含む包括的なテスト追加(+218/-25)。IO例外シナリオの検証を強化。
  • DisposableFileSystem.cs: テスト支援ユーティリティの拡張(+22)。

パフォーマンスへの影響

影響なし

関連Issue

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

その他

  • このPRはPreview 7ブランチへのバックポートであり、ブランチスナップショット後、コード完成前のリリースのため、リスクレベルは低いと判断されています。
  • 顧客報告の長年のイシューに対する対応です。
  • FileConfigurationProviderの例外処理がより堅牢になり、ユーザーがOnLoadExceptionハンドラーで例外を適切にキャッチできるようになります。

#131424 Feature-detect KMAC key size limits

概要

OpenSSLのデフォルトプロバイダーにおけるKMAC(Keccak Message Authentication Code)の鍵サイズ制限(4~512バイト)をプロバイダー検出に頼らず、実行時にゼロ長鍵のインポート可否を試行して判定するように変更しました。Windows やSymCrypt-OpenSSLには同制限がないため、プラットフォーム依存の鍵サイズ要件を動的に決定します。

変更内容

  • src/libraries/System.Security.Cryptography/tests/KmacTestDriver.cs
    • ランタイムプローブを追加し、ゼロ長鍵の作成可否でOpenSSLのKMAC鍵サイズ制限を検出
    • プローブ結果から PlatformKeySizeRequirements を計算し、テスト期待値と最小鍵サイズを決定
    • プロバイダー存在検出(プラットフォーム検出ヒューリスティクス)から実行時プローブへの移行

パフォーマンスへの影響

影響なし

関連Issue

#129939

その他

  • 変更の範囲: テスト基盤のみで、公開APIや暗号化実装本体への変更なし
  • 互換性: テストロジックの内部変更のみで、破壊的変更なし
  • 設計パターン: プロバイダーメタデータ依存から機能検証への転換により、ポータビリティと保守性が向上

#131417 Fix the net481 build break in AllocationHelper

概要

.NET Framework (net481) でのMicrosoft.Bcl.Memory.Testsのビルド破損を修正しています。PR #131280でAllocationHelperがMarshal.AllocHGlobalからNativeMemoryに変更されましたが、net481ではNativeMemoryが存在しないため、テスト用のNativeMemoryポリフィルを追加しました。

// 変更前
memory = (IntPtr)NativeMemory.Alloc((nuint)size);

// 変更後
memory = (IntPtr)NativeMemory.Alloc((nuint)(void*)size);

変更内容

  • AllocationHelper.cs: IntPtrからnuintへの変換時にポインタを経由させることで、.NET Frameworkでのコンパイルエラーを回避
  • NativeMemory.cs(新規): Common/tests下にテスト用のNativeMemoryポリフィルを追加。Marshal.AllocHGlobal/FreeHGlobalで実装
  • Microsoft.Bcl.Memory.Tests.csproj: .NETFrameworkビルド時のみポリフィルをリンク

パフォーマンスへの影響

影響なし。ポリフィルはnet481テスト実行時のみ使用され、最新の.NETランタイムではネイティブNativeMemoryが使用されます。

関連Issue

#131390、#131280

その他

  • ローカルテストでnet481 innerloop 548パス、netcoreapp innerloop 52,929パスを確認済み
  • ポインタのラウンドトリップはフレームワークに関わらず合法で、コンパイル時にオーバーヘッドなし

#131401 [wasm] Assign frame offsets to dependently promoted parameter fields

概要

WebAssemblyのJITコンパイラにおいて、構造体パラメータの依存的に昇格されたフィールドに対するフレームオフセット割り当てが正しく行われていない不具合を修正します。wasm上ではパラメータがローカル変数として到着し、プロローグでホーミングされるため、lvaAssignFrameOffsetsToPromotedStructsでTARGET_WASMを処理対象に追加することで、フィールドが正しい親のオフセット相対位置を取得できるようにします。

変更内容

  • src/coreclr/jit/lclvars.cpp: lvaAssignFrameOffsetsToPromotedStructs内のmustProcessParamsゲート条件にTARGET_WASMを追加。従来のgateにはUNIX_AMD64_ABI、TARGET_ARM、TARGET_X86のみが含まれていたため、wasmではパラメータフィールドのオフセット修正がスキップされていました。

パフォーマンスへの影響

影響なし。このPRは正確性の修正であり、パフォーマンス特性には直接的な影響を及ぼしません。

関連Issue

なし

その他

バグの根本原因: 依存的に昇格されたパラメータフィールドがオフセット0を保持したまま、フレームデルタ適用後にフレーム末尾の1スロット先(呼び出し元フレーム内)のメモリを参照していました。

実装の背景: 従来のコード経路はlvaAssignVirtualFrameOffsetToArg(他のターゲットで機能)またはlvIsRegArgゲート(ARM系/RISC-V向け)に依存しており、wasmではいずれも該当しませんでした。

検証結果: System.Text.Json.Testsをブラウザwasm R2R環境で実行した際、DateTime/DateTimeOffset関連のテスト失敗が187件から0件に削減。全体では59,365テストのうち59,284が成功。残る39件の失敗はInt128/UInt128比較の別問題で、本修正と無関係です。

修正の影響範囲: wasm固有の修正であり、他のターゲットの動作は変更されません。


#131397 Support CIDR notation in NO_PROXY env variable

概要

NO_PROXY/no_proxy環境変数で指定されるIPv4/IPv6のCIDR記法(例:127.0.0.0/8)に対応しました。従来は完全一致するエントリ(例:127.0.0.1)のみが処理され、CIDR記法は無視されていました。本変更により、CIDR記法のネットワークアドレスを指定してプロキシをバイパスする機能が実装されます。CIDR解析はHttpEnvironmentProxy構築時に行われ、リクエスト処理のオーバーヘッドを最小化しています。

変更内容

  • HttpEnvironmentProxy.cs: CIDR記法対応ロジックを追加。IPv4/IPv6両方のCIDR解析機能を実装し、少なくとも1つのCIDRブロックが存在する場合のみCIDRベースのマッチング処理を実行
  • HttpEnvironmentProxyTest.cs: CIDR記法に対応した新しいユニットテストケースを追加(31行追加)

パフォーマンスへの影響

影響なし。CIDR解析は構築時に実行されるため、個々のHTTPリクエスト処理時のパフォーマンスへの影響を回避しています。

関連Issue

#131293

その他

なし


#131380 [wasm] Bump chrome for testing - linux: 150.0.7871.186, windows: 150.0.7871.187, mac: 150.0.7871.187

概要

WebAssembly テスト環境で使用する Chrome for Testing のバージョンをバンプアップします。Linux は 150.0.7871.186、Windows と macOS は 150.0.7871.187 に更新されます。

変更内容

  • eng/testing/BrowserVersions.props: Chrome for Testing のバージョン指定を更新
    • Linux: 150.0.7871.186
    • Windows: 150.0.7871.187
    • macOS: 150.0.7871.187

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

自動生成の Pull Request(github-actions[bot] 作成)であり、wasm テスト環境の依存関係更新です。


#131374 [wasm] Report on-frame GC slots as pinned

概要

WebAssembly上でGCがフレーム上のGC参照を再配置した場合、スタック上にコピーされた古い参照ポインタが残ってNullReferenceExceptionが発生する問題を修正しました。WasmABIの仕様に従い、フレーム上のGC参照をGCに対してピン留め(GC_SLOT_PINNED)として報告することで、GCが参照を再配置する際に確実に更新されるようにしました。非Wasmターゲットには影響なく、生成イメージにコードは追加されません。

変更内容

  • src/coreclr/jit/gcencode.cpp: フレーム上のGC参照をWasm上でピン留めとして報告する処理を追加(+4行)
  • src/tests/JIT/Regression/JitBlue/Runtime_131373/Runtime_131373.cs: ref objectパラメータを介したストア操作がセーフポイント全体で保持されるシナリオをカバーする回帰テスト追加(+55行)
  • src/tests/JIT/Regression/JitBlue/Runtime_131373/Runtime_131373.csproj: ブラウザレグでWasm R2R実行を強制するテスト設定追加(+10行)

パフォーマンスへの影響

GCメタデータサイズの増加: +22,480バイトのGC情報フラグのみ

メモリ使用量: 実測では有意な差なし。ピン留めされたセットは各フレーム単位の一時的な小規模集合であるため、永続的で圧縮不可能な塊が生じません。

スピルパス最適化: GT_LCL_VARソースの参照スピルが5,167メソッド全体で13,018から170メソッド全体で431に削減され、RuntimeCustomAttributeDataはスピル対象から完全に除外される形態が確認されました。

関連Issue

#131373

その他

  • この修正は当初、fgWasmSpillRefs内でスピル処理を修正する方針でしたが、より根本的な原因であるピン留め報告の欠落に対処することで、スピルアプローチより268,644バイト小さい成果を達成
  • 実測でWasm R2R環境での5シードxUnit探索でNullReferenceException 3~8個/シードが完全に解消(0個に改善)
  • fgWasmSpillRefsは変更なく、コールローカル仲介や計算されたbyrefs等の代替手段として引き続き機能

#131369 JIT: cache the wasm image base in a local

概要

WebAssembly JIT バックエンドで、関数内でイメージベースが3回以上参照される場合、グローバルから毎回取得する代わりにローカル変数にキャッシュする最適化を実装します。グローバルインデックスへのアクセスは6バイトのコスト(パディング付きリロケーション)がかかるため、ローカル変数キャッシュによりコードサイズを削減します。

SPC R2R コード部分: 21,820,681 → 21,010,052 バイト(-810,629 バイト、-3.71%)

変更内容

  • regallocwasm.h/cpp: funclet単位でリロケータブルハンドル定数の使用回数を追跡し、イメージベースのマテリアライゼーション回数を計算。閾値(3回以上)を満たす場合、ローカルスロットを予約してそのインデックスを記録
  • compiler.h: FuncInfoDsc に funWasmImageBaseLocalIndex フィールドを追加
  • emitwasm.h/cpp: イメージベースをグローバルから取得するヘルパーメソッドを追加。グローバル取得とキャッシュされたローカル取得の2つの経路を切り分け
  • codegenwasm.cpp/codegen.h: ルート/funclet プロローグでキャッシュされたイメージベースローカルを初期化するヘルパーメソッドを追加
  • flowgraph.cpp: 全 FuncInfoDsc エントリに新しい wasm イメージベースローカルインデックスフィールドを初期化

パフォーマンスへの影響

  • コードサイズの削減: R2R コード全体で約810KB(-3.71%)削減
  • 実行時性能: グローバルアクセスをローカル変数アクセスに変更することで、メモリアクセスコストの削減が期待される
  • メモリ効率: funclet単位でローカルスロットを1つ追加消費するが、全体的なコードサイズ削減により相殺

関連Issue

なし

その他

この変更は WebAssembly JIT コンパイラの内部実装に限定され、公開APIへの影響はありません。funclet単位でのキャッシュ管理により、複数のエクセプションハンドラを含む関数でも効率的に動作します。


#131366 Implement ClrDataTypeInstance GetName and GetDefinition in cDAC

  • 作成者: @Copilot
  • 作成日時: 2026年07月25日 04:33:29(UTC)
  • マージ日時: 2026年07月27日 23:06:29(UTC)
  • ラベル: area-Diagnostics-cdac

概要

cDAC(Common Data Architecture)における ClrDataTypeInstance の GetName と GetDefinition メソッドをメタデータキャッシュへのフォールバック無しで実装するもの。型ハンドルパスを通じた名前フォーマット、配列・関数ポインタ・パラメータ化型・アンロード済みTypeDefなど様々な型定義の解決に対応し、ClrDataTypeDefinition にモジュール・トークン・nullable型ハンドル状態を追加する。

変更内容

  • CorDbHResults.cs: HRESULT定義の追加(+1)
  • ClrDataTypeDefinition.cs: モジュール、トークン、nullable型ハンドル状態関連の情報追加(+13)
  • ClrDataTypeInstance.cs: GetName と GetDefinition の実装追加、様々な型解決ロジックの実装(+118)
  • CdacStressApi.cs: ストレステスト用APIの修正(+2/-2)
  • TypeHandleTests.cs: 型ハンドルの単体テスト拡充、クロスアーキテクチャカバレッジの追加(+85)

パフォーマンスへの影響

影響なし

関連Issue

#131366

その他

cDACランタイム内部実装(ネイティブ診断インフラストラクチャ)の機能追加であり、公開APIへの影響なし。HRESULT検証とデバッグ検証が含まれているため、診断機能の信頼性向上が期待される。


#131362 JIT: recompute exit weight in loop inversion

概要

ループ反転(loop inversion)時にループ出口ブロックの重みを再計算することで、プロファイル一貫性の問題を回避する修正。従来の減算ベースの重み更新では、既存の小さなプロファイル不一致が増幅されるため、複製されたブロックの重みが更新された後に入力エッジから出口ブロックの重みを再計算する方式に変更しました。

変更内容

  • src/coreclr/jit/optimizer.cpp: optTryInvertWhileLoop関数内のプロファイル重み更新ロジックを修正
    • ループ出口ブロック重みの減算による調整を削除
    • 複製されたブロックの重み更新後に、入力エッジから出口ブロック重みを再計算するロジックを追加

パフォーマンスへの影響

影響なし(プロファイル計算ロジックの改善であり、実行時パフォーマンスへの直接的な影響はありません)

関連Issue

#131329

その他

なし


#131360 [browser] Turn the >2GB memory test into an interop conformance test

概要

WebAssembly/ブラウザ環境において、2GB以上のヒープ境界を越えるInterop動作の整合性を検証する包括的な適合性テストへと、既存のメモリテストを拡張しました。wasm i32がJavaScriptで符号付き数値として到着するため、2GB以上のポインタは負の値として現れ、これまでのテストでは検出できなかった暗黙的な失敗モードが存在していました。新しいテストはInterop境界全体でのデータ整合性を検証し、すべてのランタイム割り当てが2GB以上に配置されていることを確認します。

変更内容

  • MemoryTest.cs: シナリオを複数の適合性チェック群へ拡張。文字列(短形式、非ASCII、1M文字)、バイト配列/整数配列/double配列、Span<byte>、ArraySegment<byte>、JSObjectプロパティ、例外伝播、Task<int>、JSExport方向(JS→管理コード呼び出し)、RandomNumberGenerator.Fill、グローバライゼーション機能をカバー。ピン留めバッファのアドレスをレポートし、割り当てが実際に2GB以上に配置されていない場合は失敗
  • MemoryTests.cs(ビルドテスト): シナリオ完了確認とjiterpreterの「code generation failed」メッセージ出力の検査を追加
  • main.js: JSImport/JSExportの追加カバレッジのためのJS側インポート/エクスポートを拡充

パフォーマンスへの影響

影響なし(テストシナリオの拡張のため、ランタイムのパフォーマンス特性に変更なし)

関連Issue

#121221

その他

検証済みの結果として、このテストは.NET 10.0.9での既知の問題(RandomNumberGenerator.Fillが2GB以上で全ゼロバッファを返す、jiterpreterがvarintコーディング錯誤を報告)を検出できます。一方、.NET 11.0-preview.6では4GB未満のヒープサイズにおいて全チェックがパスしています。このPRはGitHub Copilotとの協調で実装されました。


#131359 Remove PEAssemblyUrlToPath and PEAssemblyFindLastPathSeparator

  • 作成者: @Copilot
  • 作成日時: 2026年07月25日 01:19:03(UTC)
  • マージ日時: 2026年07月27日 16:48:23(UTC)
  • ラベル: area-VM-coreclr

概要

PEAssemblyクラスから未使用の静的ヘルパーメソッドを削除するリファクタリング。UrlToPathメソッドを完全に削除し、FindLastPathSeparatorメソッドを既存のSString::FindBackへの呼び出しにインライン化することで、コードの簡潔性を向上させます。

変更内容

  • peassembly.h / peassembly.cpp: UrlToPath(呼び出し元なし)とFindLastPathSeparator(ワンライナーのラッパー)の2つの静的ヘルパーメソッドを削除
  • nativeimage.cpp / nativelibrary.cpp: FindLastPathSeparatorの2つの呼び出し箇所をSString::FindBackへの直接呼び出しに置き換え

パフォーマンスへの影響

影響なし(ヘルパーメソッドのインライン化による最適化)

関連Issue

なし

その他

  • CoreCLRランタイムの内部実装(vm/ディレクトリ)の変更で、パブリックAPIへの影響はありません
  • 破壊的変更ではなく、内部の死亡コード除去(dead code elimination)です

#131358 Fix config binder source gen for a sole read-only collection ctor param

概要

Configuration Binder ソースジェネレータが、唯一のメンバーが非バインド可能な読み取り専用コレクションコンストラクタパラメータのみであるパラメータ化コンストラクタ型に対して、生成されないInitializeメソッドへの呼び出しを出力していた問題を修正しました。これによりCS0103コンパイルエラーが発生していました。

// Before: コンパイルエラー(InitializeOptionsが存在しない)
public record Options(IReadOnlyList<string> Values);
var options = config.Get<Options>();

// After: 正常に動作

変更内容

  • BindingHelperInfo.cs: TryRegisterTransitiveTypesForMethodGenメソッドを修正。HasBindableMembersチェック内に限定されていたInitializeメソッド登録を、パラメータ化コンストラクタを持つ全ての型に対して実施するよう変更。
  • GeneratorTests.Helpers.cs: テストヘルパーにSoleReadOnlyCollectionConstructorParameterIsBindableテストケース追加。
  • GeneratorTests.cs: IReadOnlyList、IReadOnlyCollection、IReadOnlySet、IEnumerableの4つの読み取り専用コレクションインターフェースに対応するテストケースを追加。

パフォーマンスへの影響

影響なし

関連Issue

#131320

その他

根本原因は、コンストラクタパラメータのバインディングがtype内の他のバインド可能なプロパティの有無に関わらず常に行われるべきであるのに対し、Initialize メソッド登録がHasBindableMembersチェックに依存していたこと。修正後、BindCore登録は従来通りHasBindableMembersで制御されます。


#131324 Fix g_gc_lowest_address updating

  • 作成者: @janvorli
  • 作成日時: 2026年07月24日 15:35:20(UTC)
  • マージ日時: 2026年07月27日 14:57:06(UTC)
  • ラベル: area-GC-coreclr

概要

GCのカードテーブル拡張ロジックにおけるエッジケース修正です。仮想メモリブロックのアドレスが特定の条件(g_gc_lowest_addressがg_gc_highest_addressの正確に2/3)に該当する場合、g_gc_lowest_addressが誤って0に設定され、GCがNULLポインタを含むヒープメモリとして処理してしまう問題を修正しています。原因は境界値チェックで>を使用していたもので、>=に変更することでg_gc_lowest_addressがOS_PAGE_SIZEの最小値にクランプされるようになります。

変更内容

  • src/coreclr/gc/card_table.cpp: 新しい最小アドレスをOS_PAGE_SIZEにクランプするかどうかの判定条件を>から>=に変更(1行修正)

パフォーマンスへの影響

影響なし

関連Issue

#131216

その他

本修正はランタイム内部(GCエンジン)の実装に限定される変更です。公開APIへの影響はありません。


#131201 [release/10.0] Source code updates from dotnet/dotnet

概要

dotnet/dotnetリポジトリからの定期的なコードフロー更新PR。Microsoft.CodeAnalysis、NuGet関連パッケージ、ビルドタスク、テストツール等の複数の依存パッケージがバージョンアップされています。

変更内容

  • NuGet.config: NuGetソース設定の更新(1行削除)
  • eng/Version.Details.props: バージョン定義ファイルの更新(29行追加/削除)
  • eng/Version.Details.xml: 依存パッケージバージョン定義の更新(69行追加/削除)
  • global.json: グローバル設定ファイルの更新(3行追加/削除)

主な依存パッケージ更新:

  • Microsoft.CodeAnalysis関連: 5.0.0-2.26360.118 → 5.0.0-2.26361.102
  • Microsoft.DotNet.Arcade.Sdk等のビルドツール: 10.0.0-beta.26360.118 → 10.0.0-beta.26361.102
  • NuGet関連パッケージ: 7.0.3-rc.36118 → 7.0.3-rc.36202
  • その他: Microsoft.DotNet.Cecil、Microsoft.NET.Sdk.IL等が更新

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • このPRはdotnet/dotnetリポジトリからの自動コードフロー更新(Maestroによる定期同期)
  • ビルド日時: 2026年7月11日 UTC
  • release/10.0.1xxブランチからの変更を取り込み
  • aspnetcore、windowsdesktop、wpfリポジトリの関連変更も含まれる

#131008 Start DBI changes needed for non-surrogate loading

概要

cDAC(Contract Data Access Component)を通じたライブデバッグを有効化するための基盤整備。DacDbiInterfaceInstanceエクスポートがcontractDescriptorAddressパラメータを受け取り、DBI側でシンボルから取得したランタイムのコントラクト記述子アドレスをcDAC側に渡すことで、ライブICorDebugセッションがcDACで処理可能になります。

変更内容

  • dacdbiimpl(ネイティブDAC): contractDescriptorAddressパラメータを受け取り、cDAC bring-upパスに渡す
  • shimdatatarget: ICLRContractLocator/ICLRRuntimeLocator COM インターフェースを実装し、ランタイムベースアドレスの保存とシンボルからのコントラクト記述子アドレス解決を担当
  • process.cpp: ライブデータターゲットに対してDAC/DBIインターフェース作成前にランタイムベースを設定
  • Entrypoints.cs(マネージドcDAC): スレッドコンテキストバッファの16バイト アラインメント要件を集約、オプショナルミュータブルターゲットサポートの追加、ReadVirtualのセマンティクス厳密化
  • IDacDbiInterface.cs: マネージドCOM投影としてICorDebugMutableDataTargetを定義
  • CMakeLists.txt: mscordbiにシンボルルックアップ支援用のdbgutilをリンク

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • 公開API: ICLRContractLocator(CLR data IDL)、ICorDebugMutableDataTarget(マネージドCOM)が新規追加
  • 非破壊的変更:既存のCOMインターフェースを拡張するもので、後方互換性を維持
  • ネイティブとマネージドのcDACコンポーネント間での相互運用性を強化し、非サロゲートロード環境でのデバッグ機能を支持します

#130888 Fix GC.GetTotalMemory returning negative under regions GC

  • 作成者: @kkokosa
  • 作成日時: 2026年07月16日 17:17:49(UTC)
  • マージ日時: 2026年07月27日 15:04:53(UTC)
  • ラベル: area-GC-coreclr

概要

GC.GetTotalMemory(false)がregions GC(.NET 7以降のデフォルト)で間欠的に負の値を返すバグを修正します。根本原因は、gen0のサイズ計算時にephemeral regionまでの領域のみをカウントしていた一方で、断片化はすべてのgen0 regionを対象にカウントしていたため、符号なし整数の減算がアンダーフローして負の長整数にキャストされていました。

変更内容

  • src/coreclr/gc/interface.cpp - GCHeap::ApproxTotalBytesInUse内のgen0サイズ計算を修正。ephemeral regionで途中終了していた処理をすべてのgen0 regionチェーンを走査するよう変更し、断片化カウントと対応させました。さらに防御的なクランプ(totsize = (gen0_size > gen0_frag) ? (gen0_size - gen0_frag) : 0)を追加し、未検出の一時的なアンダーフロー時にも0以上を保証します。

  • src/tests/GC/API/GC/GetTotalMemoryConcurrent.cs / .csproj - 回帰テストを新規追加。ピン留めされた小さなオブジェクトのリングを保持しながら複数スレッドでgen0に負荷をかけ、GC.GetTotalMemory(false)が負の値を返さないことを確認します。Priority 1、プロセス分離、GCStress非互換で構成。

パフォーマンスへの影響

Release(出荷構成):

  • 通常時(gen0 region 1個): ~45.4 ns → ~43.7 ns(変化なし、同一結果626,712個)
  • 断片化時(複数 region): ~48.8 ns → ~47.0 ns(変化なし、正しい計測値に修正)

Debug:

  • 通常時: +2 ns(≈0%)
  • 断片化時: +53 ns(≈9%、Debug用契約チェックのオーバーヘッドが原因)

gen0 regionカウントは通常数個程度に限定されるため、影響は軽微です。GetTotalMemoryは診断API(gc-heap-sizeカウンターが約1回/秒ポール)であり、ホットパスではありません。

関連Issue

#106712

その他

  • 互換性: パブリックAPI署名や仕様の変更なし。返却される数値が正確になるのみです。
  • 影響範囲: ApproxTotalBytesInUseの呼び出し元はGC.GetTotalMemory(bool)QCall(CoreCLR)とRhpGetTotalBytesInUse(NativeAOT)のみ。EventCounters/dotnet-counters経由で露出していた負の値が修正されます。
  • Segments GC では非該当: 単一の連続するephemeral segmentにgeneration 0が存在するため、断片化がカウント対象に含まれ、アンダーフロー不可能です。
  • 修正前後の対比: 未修正時に断片化が大きい場合、約0.4 MBと過少報告されていた値が正しく約16.0 MBとなります。

#130881 Add contentEncoding: base64 to JSON schema for byte[], Memory<byte>, and ReadOnlyMemory<byte>

  • 作成者: @Copilot
  • 作成日時: 2026年07月16日 15:31:53(UTC)
  • マージ日時: 2026年07月27日 09:44:23(UTC)
  • ラベル: area-Infrastructure

概要

JsonSchemaExporterがバイト配列型(byte[]、Memory<byte>、ReadOnlyMemory<byte>)に対してJSON Schemaに"contentEncoding": "base64"を出力していなかった問題を修正。System.Text.Jsonがこれらの型をbase64文字列としてシリアライズしているにもかかわらず、スキーマ定義と実装が不一致していました。JSON Schema 2020-12の仕様に準拠するため、エンコード形式を明示的に記載するようになりました。

変更内容

  • JsonSchema.cs: ContentEncodingプロパティおよびContentEncodingPropertyName定数を内部JsonSchemaクラスに追加。既存のFormatやPatternと同じパターンで実装
  • KeywordCount・ToJsonNode: ContentEncodingを考慮した処理を追加
  • ByteArrayConverter、MemoryByteConverter、ReadOnlyMemoryByteConverter: 各GetSchema()メソッドでContentEncoding = "base64"を返すように更新
  • テスト: スキーマ検証テストを更新

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

本変更はスキーマ出力形式の改善で、既存のシリアライゼーション動作には変更ありません。生成されるJSON Schemaがより正確に実装を反映するようになり、スキーマ検証ツールやコード生成ツールとの相互運用性が向上します。


#130871 JIT: Remove boxing from value type instance calls

概要

JITが値型インスタンスメソッド呼び出しでのボックス化を回避する最適化を再実装するもの。RefSafetyRulesAttributeと[UnscopedRef]属性を参照して、値型のthisポインタが呼び出し先から脱出しないことが保証される場合にのみボックスを避ける。依存: #130863、修正対象: #130185。

変更内容

  • JIT↔EE インターフェース: 新しいメソッド canValueClassInstancePointerEscape を追加し、JITが値型ポインタの脱出可能性を照会可能に。インターフェースGUID(jiteeversionguid.h)を更新。
  • コンパイラロジック: JIT (importercalls.cpp) で適格なボックスをスタックローカルコピーに置き換え。gentree.cpp でBR_MAKE_LOCAL_COPYオプションを追加実装。
  • ランタイム実装: CEEInfo::canValueClassInstancePointerEscape を実装し、モジュール単位のRefSafetyRulesAttributeとメソッド単位の[UnscopedRef]属性を参照して脱出可否を判定(jitinterface.cpp、ceeload.cpp)。
  • メタデータ処理: wellknownattributes.h で属性をサポート。CorInfoImpl.cs で管理側の脱出判定を実装。
  • ツール統合: SuperPMI、ThunkGenerator、R2R属性フィルタ、AOT JITインターフェースで新しいAPI呼び出しに対応。
  • メトリクス: jitmetadatalist.h に"removed box"カウンタを追加。

パフォーマンスへの影響

改善: 提供されたディフで示される例(AsyncTaskMethodBuilder.AwaitUnsafeOnCompleted)では:

  • コード長: 112 → 68バイト(約39%削減)
  • プロローグサイズ: 21 → 16バイト
  • PerfScore: 24.00 → 13.50(約43%改善)
  • 命令数: 36 → 20
  • ボックス割り当てとメモリ参照が削除され、スタック上でのローカルコピー操作に置き換わる。

関連Issue

#130185(修正対象) #130863(依存)

その他

  • 互換性: オプトイン機構(RefSafetyRulesAttribute)により既存コードに影響なし。ライブラリが属性を明記した場合のみ最適化が適用される。
  • セキュリティ: 属性で明示された安全性保証に基づいてのみ最適化を実施。
  • クロスプラットフォーム対応: CoreCLR、R2R、NativeAOT各ランタイムで実装。

#130693 Fix native EH in external shared libs on macOS

  • 作成者: @janvorli
  • 作成日時: 2026年07月14日 15:02:16(UTC)
  • マージ日時: 2026年07月27日 15:02:34(UTC)
  • ラベル: area-Host

概要

macOSで外部共有ライブラリをロードする際、ホスト実行ファイル/ライブラリ内のローカルなC++ RTTI/typeinfo シンボルが誤ってバインドされ、型付きC例外キャッチが失敗する問題を修正します。リンカオプションでホストから不要なシンボルのエクスポートを抑制し、外部ライブラリがlibcの正しいtypeinfoを参照するようにします。

変更内容

  • dotnet/CMakeLists.txt: dotnetホスト実行ファイルからシンボルエクスポートを無効化するApple固有のリンカオプション(-exported_symbols_list)を追加
  • apphost/CMakeLists.txt: apphost実行ファイルからシンボルエクスポートを無効化するApple固有のリンカオプションを追加
  • corerun/CMakeLists.txt: corerunテストホストからシンボルエクスポートを無効化するApple固有のリンカオプションを追加
  • nethost/CMakeLists.txt: nethostライブラリのエクスポートをAppleプラットフォーム上で_get_hostfxr_pathのみに制限

パフォーマンスへの影響

影響なし

関連Issue

#122445

その他

  • 破壊的変更: なし。これはApple(macOS)プラットフォーム固有の修正であり、他のプラットフォームへの影響なし
  • 対象範囲: ネイティブホスト層(dotnet、apphost、corerun、nethost)のリンカ設定変更のみ
  • 根本原因: macOS上で標準C例外のtypeinfoがホストとlibcの両方に存在し、リンカが外部ライブラリの参照をホストのローカルコピーに解決してしまう問題

#130689 Avoid materializing Task/ValueTask in StreamReader/StreamWriter

概要

StreamReaderとStreamWriterの非同期読み書き重複実行診断の実装を改善し、不要なTaskオブジェクトの割り当てを回避するもの。従来は_asyncReadTaskフィールドで進行中のタスクを追跡していたが、本変更では軽量な_asyncIOInProgressフラグとtry-finallyスコープを使用する実装に切り替え。これにより、ランタイム非同期呼び出しにおけるタスク割り当てを削減しつつ、async1呼び出し元での回帰を防ぐ。

変更内容

  • StreamReader.cs: _asyncReadTaskフィールドを_asyncIOInProgressフラグに置き換え。Disposableガード機構を導入し、非同期操作中のフラグ管理をtry-finallyで実装。ReadLineAsync*、ReadToEndAsync*、ReadAsync*、ReadBlockAsync*APIを新ガードパターンで更新。(+69行、-13行)
  • StreamWriter.cs: 同様にフラグベースの診断機構に切り替え、非同期書き込みAPIの実装を更新。(+60行、-38行)

パフォーマンスへの影響

タスク割り当ての削減により、メモリ使用量と割り当て圧力が改善。ベンチマーク結果が公開されている模様(GitHub EgorBot Benchmarks #357)。try-finallyに基づく継続/ステートマシン生成が発生する場合は従来のタスクベースアプローチを保持しているため、async1呼び出し元での回帰なし。

関連Issue

なし

その他

本変更は診断機構であり、スレッドセーフティの保証ではなく、ベストエフォート型のもの。公開API仕様に影響なし。


#130445 Fix reflection XmlSerializer choice identifier with XmlEnum aliases

概要

リフレクションベースの XmlSerializer(ReflectionXmlSerializationReader)が、[XmlChoiceIdentifier] 属性を持つ列挙型メンバーを逆シリアル化する際に、[XmlEnum] エイリアスを正しく解決できない問題を修正しました。従来の直接的な識別子比較から、既に計算済みの要素インデックスを使用した位置ベースの解決に変更し、IL 生成リーダーと同じ動作を実現しました。

変更内容

  • ReflectionXmlSerializationReader.cs: 選択列挙値の解決ロジックを位置ベースに変更。要素インデックスから対応する choice.MemberIds[elementIndex] を取得するよう改善
  • XmlSerializerTests.RuntimeOnly.cs: Xml_TypeWithAliasedChoiceIdentifier 回帰テストを追加。リフレクションリーダーと ReflectionOnly シリアライザ両方の設定でテスト実行
  • SerializationTypes.RuntimeOnly.cs: テスト用の AliasedChoiceType 列挙型と TypeWithAliasedChoiceIdentifier 型を追加

パフォーマンスへの影響

影響なし

関連Issue

#130017

その他

  • 内部実装(ライブラリの XML シリアライゼーション機能)の修正
  • [XmlEnum] エイリアスと [XmlChoiceIdentifier] の組み合わせは従来未テストだった機能
  • 修正後、エイリアス指定された列挙型メンバーでもラウンドトリップシリアライゼーションが正常に動作するようになります

#130436 [Diagnostics] Serialize concurrent reporters in InProc Crash Reporter

概要

InProc Crash ReporterのCreateReport()メソッドにおいて、複数のスレッドが同時に呼び出される場合のシリアライゼーションを改善しました。従来は最初のスレッドのみがクラッシュレポートを生成し、他のスレッドはすぐにPROCAbort()に進んでプロセスをダウンさせていたため、レポートが途中で切り詰められる問題がありました。本変更により、負けたスレッドはCreateReport()内でブロックされ、優勝スレッドがレポート生成を完了するまで待機するようになります。

変更内容

  • src/coreclr/debug/crashreport/inproccrashreporter.cpp: InterlockedCompareExchange64を使用したスレッドID based CASガード(64ビット)を実装し、優勝スレッドを記録。負けたスレッドはパイプの読み取りで待機。再入的な致命的シグナルに対応し、優勝スレッドはデッドロック回避のため即座にベイルアウト。
  • src/coreclr/pal/inc/pal.h: PROCCreateCrashDumpIfEnabled()関数にserialize引数を追加。
  • src/coreclr/pal/src/exception/signal.cpp: signal chaining前後の適切なserialize値を設定。
  • src/coreclr/pal/src/include/pal/process.h, src/coreclr/pal/src/thread/process.cpp: 関連する内部実装の調整。

パフォーマンスへの影響

影響なし。本変更はシリアライゼーション機構の追加であり、複数の致命的パス同時呼び出しの可能性は限定的です。むしろ、クラッシュレポートの完全性を保証することで、診断情報の信頼性が向上します。

関連Issue

#130436

その他

  • 実装はcreatedumpの既存のserialize=trueパス設計をミラーします。
  • Copilotによるレビューコメントで、signalChainAfterReportがfalseの場合にパイプがクローズされず、将来呼び出し元が無限にブロックされる可能性が指摘されています。また、SIGTRAP処理時のdeadlock懸念も報告されています。
  • 内部実装変更であり、公開APIへの互換性影響はありません。

#129493 support isSequence in reflection xml serializer

概要

リフレクションベースのXmlSerializerデシリアライザーが、[XmlElement(Order = N)]で明示的に順序付けられたメンバー(xsd:sequence)をサポートしていなかった問題を修正します。従来はIsSequence()が常にfalseにハードコーディングされていたため、同じ要素名で順序のみで区別されるメンバーが誤割り当てされていました。IL/CodeGenベースのリーダーと同じ順序追跡状態マシンを実装し、現在のシーケンス位置を追跡して期待されるメンバーのみをマッチさせます。

変更内容

  • ReflectionXmlSerializationReader.cs: シーケンス位置追跡ロジックを追加し、順序付きメンバーのマッチング処理を実装(+57/-24)
  • XmlSerializerTests.cs: XML_TypeWithFieldsOrderedテストをコメント解除し、リフレクションシリアライザーに対して実行可能に(-20)
  • XmlSerializerTests.Internal.cs: 重複していたテストコピーを削除(-24)
  • XmlSerializerTests.RuntimeOnly.cs: 新たなテストケース追加(+40)
  • SerializationTypes.RuntimeOnly.cs: テスト用の型定義追加(+17)

パフォーマンスへの影響

影響なし

関連Issue

#1402

その他

この修正は公開APIの動作を正す内部実装の改善です。[XmlElement(Order = N)]を使用してXML要素の順序を明示的に指定しているコードで、以前誤動作していたケースが正常に動作するようになります。


#126108 Migrate JitOptimizationSensitive and GCStressIncompatible to SkipOnCoreClr attributes

  • 作成者: @Copilot
  • 作成日時: 2026年03月25日 17:27:31(UTC)
  • マージ日時: 2026年07月27日 17:12:18(UTC)
  • ラベル: area-GC-coreclr

概要

MSBuild の <JitOptimizationSensitive> と <GCStressIncompatible> プロパティを [SkipOnCoreClr(...)] XUnit 属性に移行する大規模リファクタリング。ビルド時のプロセス分離要件をテスト実行時の属性ベースのスキップに置き換えることで、テスト実行時のプロセス分離オーバーヘッドを削減し、テストをインプロセスで実行可能にする。

// 変更前
[Fact]
public void MyTest() { }
// .csproj: <GCStressIncompatible>true</GCStressIncompatible>

// 変更後
[SkipOnCoreClr("This test is not compatible with GC stress.", RuntimeTestModes.AnyGCStress)]
[Fact]
public void MyTest() { }

変更内容

  • C# テスト(~300 ファイル): 150 個の .cs ファイルに [SkipOnCoreClr] 属性を追加;対応する .csproj から <GCStressIncompatible> と関連する <RequiresProcessIsolation> を削除
  • IL テスト(6 .ilproj + 3 .il): JIT 最適化と GC ストレス不互換テストに SkipOnCoreClrAttribute を追加;プロジェクトファイルのプロパティを削除
  • インフラストラクチャ: browser-wasm CoreCLR ヘリックス作業アイテムタイムアウトを 123 → 246 分に延長;requiresprocessisolation.md を更新し <IsLongRunningGCTest> と <CLRTestExecutionArguments> を新たに文書化
  • コメント整理: 廃止された GC ストレススキップコンテキストをスキップ理由の詳細と共に削除、重要な issue 情報を属性メッセージに移行
  • CI 修正: プロセス分離が必要なテスト(GC 測定精度、長時間実行 GC、カスタム CLR 引数など)には <RequiresProcessIsolation> を保持;browser-wasm に対象化された [ActiveIssue] を追加

パフォーマンスへの影響

  • 改善: プロセス分離が不要なテストはインプロセス実行となり、プロセス生成のオーバーヘッドが削減される
  • 懸念: ヘリックステストスイート全体の実行時間が増加する可能性があるため、タイムアウトを倍増(246 分)に設定

関連Issue

なし

その他

  • 非移行対象: XUnit ラッパー未使用テスト、プロファイラーテスト、HW intrinsics ラッパー、OutputType=Library プロジェクト、トップレベルステートメント使用テスト、F# テスト(コンパイル失敗)、ReadyToRun クロスコンパイル pre-command テスト、プロセス分離が別の理由で必要なテストは MSBuild プロパティを保持
  • 大規模リファクタリング(300 ファイル超過)のため、Copilot による完全レビューは実施されていない

#126093 FileConfigurationProvider: Handle and forward IO exceptions to OnLoadException

概要

FileConfigurationProviderのIO例外処理を改善し、ファイルオープン時のIO失敗を従来のデータ解析失敗と同じ方法でOnLoadExceptionコールバックを通じて処理するように統一しました。これにより、リロード時に予期しない例外が発生する問題(#113964)が解決されます。

変更内容

  • FileConfigurationProvider.cs: ストリームのオープン処理を例外処理領域内に移動し、IO例外もHandleException/OnLoadExceptionを通じてルーティングするように変更。Load(stream)で発生した例外をInvalidDataExceptionでラップし統一された例外処理を実現。
  • FileConfigurationSource.cs: 例外処理関連のサポート機能を追加。
  • FileLoadExceptionContext.cs: 例外コンテキスト情報の微調整。
  • テスト: IO失敗とパース失敗の両方のシナリオでのOnLoadExceptionトリガーおよびOnReload()動作に関する包括的なテストケースを追加。

行動の変更

  • 初回ロード時: IO失敗時もOnLoadExceptionコールバックが呼び出されるようになりました。
  • リロード時: IO失敗時にUnobservedTaskExceptionが発生する代わりに、OnLoadExceptionコールバック経由で処理されます。(コールバック未登録時は例外が発生する可能性あり)
  • 例外型の拡張: OnLoadExceptionはInvalidDataExceptionだけでなくIOExceptionや他の例外も受け取る可能性があるため、例外キャストの際は注意が必要。
  • OnReload()の動作: 初回ロード時のパース/IO失敗時にOnLoadExceptionでIgnore = trueが設定された場合、データが実際に変更されていないためOnReload()が発火しなくなりました(従来は無条件に発火)。

パフォーマンスへの影響

影響なし

関連Issue

#113964

その他

このPRには本修正以外にも、エッジケースでの動作改善が含まれています。特にOnReload()の発火タイミングの変更は独立して検討・修正されており、必要に応じて無効化可能な設計になっています。


#124721 Implement a workaround for ld-prime hitting an assert on large addends

概要

ARM64およびx64向けMach-Oオブジェクトファイル生成時に、IMAGE_REL_BASED_RELPTR32リロケーションをエミュレートする際にld-primeがアサート失敗する問題に対応しました。セクション内に2^19バイト間隔でアンカーラベルを配置し、リロケーション加数を最も近いアンカーラベルからの相対値として調整することで、加数を符号付き20ビット範囲内に保証します。

変更内容

  • MachObjectWriter.cs: リロケーション加数バインディング用の一時ラベル生成・再利用機能を追加。IMAGE_REL_BASED_RELPTR32(ARM64)およびX86_64_RELOC_SUBTRACTOR + X86_64_RELOC_UNSIGNED(x64)のリロケーション処理で、セクション単位でアンカーラベルを管理。SUBTRACTOR形式のリロケーションでセクション基底シンボルの代わりに一時ラベルシンボルを参照可能に変更。
  • MachNative.cs: 定数定義を追加
  • build.sh: macOSでXcodeバージョン切り替えロジックを追加

パフォーマンスへの影響

影響なし(ベンチマーク結果なし)

関連Issue

#119380

その他

  • 変更は内部実装(ObjectWriter)に限定されており、公開APIへの影響はなし
  • Copilotレビューで指摘された懸念事項:ReleaseBuildではアサートが無効化されるため、加数が符号付き20ビット範囲を超えた場合にリンカー失敗が発生する可能性あり(ただし実践では小さなオフセットが想定される)

目次