注意点
このページは、dotnet/runtimeリポジトリにマージされたPull Requestを自動的に収集し、その内容をAIが要約した内容を表示しています。そのため、必ずしも正確な要約ではない場合があります。
目次
- #131429 Make wasm 'V' signature raising deterministic and add a regression test
- #131427 [release/11.0-preview7] FileConfigurationProvider: Handle and forward IO exceptions to OnLoadException
- #131424 Feature-detect KMAC key size limits
- #131417 Fix the net481 build break in AllocationHelper
- #131401 [wasm] Assign frame offsets to dependently promoted parameter fields
- #131397 Support CIDR notation in NO_PROXY env variable
- #131380 [wasm] Bump chrome for testing - linux: 150.0.7871.186, windows: 150.0.7871.187, mac: 150.0.7871.187
- #131374 [wasm] Report on-frame GC slots as pinned
- #131369 JIT: cache the wasm image base in a local
- #131366 Implement ClrDataTypeInstance GetName and GetDefinition in cDAC
- #131362 JIT: recompute exit weight in loop inversion
- #131360 [browser] Turn the >2GB memory test into an interop conformance test
- #131359 Remove PEAssemblyUrlToPath and PEAssemblyFindLastPathSeparator
- #131358 Fix config binder source gen for a sole read-only collection ctor param
- #131324 Fix g_gc_lowest_address updating
- #131201 [release/10.0] Source code updates from dotnet/dotnet
- #131008 Start DBI changes needed for non-surrogate loading
- #130888 Fix GC.GetTotalMemory returning negative under regions GC
- #130881 Add
contentEncoding: base64to JSON schema for byte[], Memory<byte>, and ReadOnlyMemory<byte> - #130871 JIT: Remove boxing from value type instance calls
- #130693 Fix native EH in external shared libs on macOS
- #130689 Avoid materializing
Task/ValueTaskinStreamReader/StreamWriter - #130445 Fix reflection XmlSerializer choice identifier with XmlEnum aliases
- #130436 [Diagnostics] Serialize concurrent reporters in InProc Crash Reporter
- #129493 support isSequence in reflection xml serializer
- #126108 Migrate JitOptimizationSensitive and GCStressIncompatible to SkipOnCoreClr attributes
- #126093 FileConfigurationProvider: Handle and forward IO exceptions to OnLoadException
- #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
- 作成者: @tannergooding
- 作成日時: 2026年07月27日 17:28:05(UTC)
- マージ日時: 2026年07月27日 20:14:19(UTC)
- ラベル: area-crossgen2-coreclr
概要
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
その他
- v128型の16バイトアライメント制約は
VectorFieldLayoutAlgorithmに由来し(ARM除く全アーキテクチャ)、実際の回帰はSystem.Numerics.Vector<T>にありました。テストはこの実装の詳細(ARM固有の8バイトアライメント保持)を含むため、両者をカバーしています CacheStructBySize/GetCachedStructOfSizeに同じ先着キャッシュ問題が存在し、v128の潜在的危険と異なり実際の誤コンパイルを引き起こしています('S<N>'エンコーディング)。これは別途修正予定で、本PRから除外- ローカルテスト実行:
ILCompiler.ReadyToRun.Tests58件中57件成功、既知の環境依存障害1件(CompositeManifestAssemblyMvidsArePaddedWhenPdbPresent、Debug構成でのネイティブPDB COM writer例外)
#131427 [release/11.0-preview7] FileConfigurationProvider: Handle and forward IO exceptions to OnLoadException
- 作成者: @mrek-msft
- 作成日時: 2026年07月27日 17:16:27(UTC)
- マージ日時: 2026年07月27日 20:58:04(UTC)
- ラベル: Servicing-approved area-Extensions-Configuration
概要
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
- 作成者: @vcsjones
- 作成日時: 2026年07月27日 16:30:57(UTC)
- マージ日時: 2026年07月27日 20:04:44(UTC)
- ラベル: area-System.Security test-bug
概要
OpenSSLのデフォルトプロバイダーにおけるKMAC(Keccak Message Authentication Code)の鍵サイズ制限(4~512バイト)をプロバイダー検出に頼らず、実行時にゼロ長鍵のインポート可否を試行して判定するように変更しました。Windows やSymCrypt-OpenSSLには同制限がないため、プラットフォーム依存の鍵サイズ要件を動的に決定します。
変更内容
- src/libraries/System.Security.Cryptography/tests/KmacTestDriver.cs
- ランタイムプローブを追加し、ゼロ長鍵の作成可否でOpenSSLのKMAC鍵サイズ制限を検出
- プローブ結果から
PlatformKeySizeRequirementsを計算し、テスト期待値と最小鍵サイズを決定 - プロバイダー存在検出(プラットフォーム検出ヒューリスティクス)から実行時プローブへの移行
パフォーマンスへの影響
影響なし
関連Issue
その他
- 変更の範囲: テスト基盤のみで、公開APIや暗号化実装本体への変更なし
- 互換性: テストロジックの内部変更のみで、破壊的変更なし
- 設計パターン: プロバイダーメタデータ依存から機能検証への転換により、ポータビリティと保守性が向上
#131417 Fix the net481 build break in AllocationHelper
- 作成者: @tannergooding
- 作成日時: 2026年07月27日 13:26:28(UTC)
- マージ日時: 2026年07月27日 15:46:36(UTC)
- ラベル: area-System.Memory
概要
.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
その他
- ローカルテストで
net481innerloop 548パス、netcoreappinnerloop 52,929パスを確認済み - ポインタのラウンドトリップはフレームワークに関わらず合法で、コンパイル時にオーバーヘッドなし
#131401 [wasm] Assign frame offsets to dependently promoted parameter fields
- 作成者: @lewing
- 作成日時: 2026年07月26日 23:06:29(UTC)
- マージ日時: 2026年07月27日 03:32:35(UTC)
- ラベル: arch-wasm area-VM-coreclr
概要
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
- 作成者: @SapiensAnatis
- 作成日時: 2026年07月26日 17:44:43(UTC)
- マージ日時: 2026年07月27日 10:15:48(UTC)
- ラベル: area-System.Net.Http community-contribution
概要
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
その他
なし
#131380 [wasm] Bump chrome for testing - linux: 150.0.7871.186, windows: 150.0.7871.187, mac: 150.0.7871.187
- 作成者: @github-actions[bot]
- 作成日時: 2026年07月26日 00:25:26(UTC)
- マージ日時: 2026年07月27日 10:18:12(UTC)
- ラベル: arch-wasm area-Infrastructure-mono
概要
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
- 作成者: @lewing
- 作成日時: 2026年07月25日 20:25:58(UTC)
- マージ日時: 2026年07月27日 13:47:43(UTC)
- ラベル: arch-wasm area-CodeGen-coreclr
概要
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
その他
- この修正は当初、
fgWasmSpillRefs内でスピル処理を修正する方針でしたが、より根本的な原因であるピン留め報告の欠落に対処することで、スピルアプローチより268,644バイト小さい成果を達成 - 実測でWasm R2R環境での5シードxUnit探索でNullReferenceException 3~8個/シードが完全に解消(0個に改善)
fgWasmSpillRefsは変更なく、コールローカル仲介や計算されたbyrefs等の代替手段として引き続き機能
#131369 JIT: cache the wasm image base in a local
- 作成者: @AndyAyersMS
- 作成日時: 2026年07月25日 14:38:55(UTC)
- マージ日時: 2026年07月27日 18:19:32(UTC)
- ラベル: area-CodeGen-coreclr
概要
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
その他
cDACランタイム内部実装(ネイティブ診断インフラストラクチャ)の機能追加であり、公開APIへの影響なし。HRESULT検証とデバッグ検証が含まれているため、診断機能の信頼性向上が期待される。
#131362 JIT: recompute exit weight in loop inversion
- 作成者: @AndyAyersMS
- 作成日時: 2026年07月25日 01:42:24(UTC)
- マージ日時: 2026年07月27日 15:05:51(UTC)
- ラベル: area-CodeGen-coreclr
概要
ループ反転(loop inversion)時にループ出口ブロックの重みを再計算することで、プロファイル一貫性の問題を回避する修正。従来の減算ベースの重み更新では、既存の小さなプロファイル不一致が増幅されるため、複製されたブロックの重みが更新された後に入力エッジから出口ブロックの重みを再計算する方式に変更しました。
変更内容
- src/coreclr/jit/optimizer.cpp:
optTryInvertWhileLoop関数内のプロファイル重み更新ロジックを修正- ループ出口ブロック重みの減算による調整を削除
- 複製されたブロックの重み更新後に、入力エッジから出口ブロック重みを再計算するロジックを追加
パフォーマンスへの影響
影響なし(プロファイル計算ロジックの改善であり、実行時パフォーマンスへの直接的な影響はありません)
関連Issue
その他
なし
#131360 [browser] Turn the >2GB memory test into an interop conformance test
- 作成者: @lewing
- 作成日時: 2026年07月25日 01:24:52(UTC)
- マージ日時: 2026年07月27日 13:21:08(UTC)
- ラベル: arch-wasm area-VM-meta-mono os-browser
概要
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
その他
検証済みの結果として、このテストは.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
- 作成者: @TemRevil
- 作成日時: 2026年07月25日 00:00:42(UTC)
- マージ日時: 2026年07月27日 18:04:36(UTC)
- ラベル: area-Extensions-Configuration community-contribution source-generator
概要
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
その他
根本原因は、コンストラクタパラメータのバインディングが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
その他
本修正はランタイム内部(GCエンジン)の実装に限定される変更です。公開APIへの影響はありません。
#131201 [release/10.0] Source code updates from dotnet/dotnet
- 作成者: @dotnet-maestro[bot]
- 作成日時: 2026年07月22日 10:16:46(UTC)
- マージ日時: 2026年07月27日 10:28:06(UTC)
- ラベル: Servicing-approved area-codeflow
概要
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
- 作成者: @hoyosjs
- 作成日時: 2026年07月18日 02:59:55(UTC)
- マージ日時: 2026年07月27日 20:18:38(UTC)
- ラベル: area-Diagnostics-coreclr
概要
cDAC(Contract Data Access Component)を通じたライブデバッグを有効化するための基盤整備。DacDbiInterfaceInstanceエクスポートがcontractDescriptorAddressパラメータを受け取り、DBI側でシンボルから取得したランタイムのコントラクト記述子アドレスをcDAC側に渡すことで、ライブICorDebugセッションがcDACで処理可能になります。
変更内容
- dacdbiimpl(ネイティブDAC): contractDescriptorAddressパラメータを受け取り、cDAC bring-upパスに渡す
- shimdatatarget:
ICLRContractLocator/ICLRRuntimeLocatorCOM インターフェースを実装し、ランタイムベースアドレスの保存とシンボルからのコントラクト記述子アドレス解決を担当 - 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
その他
- 互換性: パブリック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
- 作成者: @jakobbotsch
- 作成日時: 2026年07月16日 13:35:54(UTC)
- マージ日時: 2026年07月27日 14:58:04(UTC)
- ラベル: area-CodeGen-coreclr
概要
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
その他
- 互換性: オプトイン機構(
RefSafetyRulesAttribute)により既存コードに影響なし。ライブラリが属性を明記した場合のみ最適化が適用される。 - セキュリティ: 属性で明示された安全性保証に基づいてのみ最適化を実施。
- クロスプラットフォーム対応: CoreCLR、R2R、NativeAOT各ランタイムで実装。
#130693 Fix native EH in external shared libs on macOS
概要
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
その他
- 破壊的変更: なし。これはApple(macOS)プラットフォーム固有の修正であり、他のプラットフォームへの影響なし
- 対象範囲: ネイティブホスト層(dotnet、apphost、corerun、nethost)のリンカ設定変更のみ
- 根本原因: macOS上で標準C例外のtypeinfoがホストとlibcの両方に存在し、リンカが外部ライブラリの参照をホストのローカルコピーに解決してしまう問題
#130689 Avoid materializing Task/ValueTask in StreamReader/StreamWriter
- 作成者: @jakobbotsch
- 作成日時: 2026年07月14日 14:02:06(UTC)
- マージ日時: 2026年07月27日 11:29:44(UTC)
- ラベル: area-System.IO runtime-async
概要
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
- 作成者: @StephenMolloy
- 作成日時: 2026年07月10日 00:09:56(UTC)
- マージ日時: 2026年07月27日 04:48:52(UTC)
- ラベル: area-Serialization
概要
リフレクションベースの XmlSerializer(ReflectionXmlSerializationReader)が、[XmlChoiceIdentifier] 属性を持つ列挙型メンバーを逆シリアル化する際に、[XmlEnum] エイリアスを正しく解決できない問題を修正しました。従来の直接的な識別子比較から、既に計算済みの要素インデックスを使用した位置ベースの解決に変更し、IL 生成リーダーと同じ動作を実現しました。
変更内容
- ReflectionXmlSerializationReader.cs: 選択列挙値の解決ロジックを位置ベースに変更。要素インデックスから対応する
choice.MemberIds[elementIndex]を取得するよう改善 - XmlSerializerTests.RuntimeOnly.cs:
Xml_TypeWithAliasedChoiceIdentifier回帰テストを追加。リフレクションリーダーと ReflectionOnly シリアライザ両方の設定でテスト実行 - SerializationTypes.RuntimeOnly.cs: テスト用の
AliasedChoiceType列挙型とTypeWithAliasedChoiceIdentifier型を追加
パフォーマンスへの影響
影響なし
関連Issue
その他
- 内部実装(ライブラリの XML シリアライゼーション機能)の修正
- [XmlEnum] エイリアスと [XmlChoiceIdentifier] の組み合わせは従来未テストだった機能
- 修正後、エイリアス指定された列挙型メンバーでもラウンドトリップシリアライゼーションが正常に動作するようになります
#130436 [Diagnostics] Serialize concurrent reporters in InProc Crash Reporter
- 作成者: @mdh1418
- 作成日時: 2026年07月09日 21:43:01(UTC)
- マージ日時: 2026年07月27日 10:58:06(UTC)
- ラベル: area-Diagnostics-coreclr
概要
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
その他
- 実装は
createdumpの既存のserialize=trueパス設計をミラーします。 - Copilotによるレビューコメントで、
signalChainAfterReportがfalseの場合にパイプがクローズされず、将来呼び出し元が無限にブロックされる可能性が指摘されています。また、SIGTRAP処理時のdeadlock懸念も報告されています。 - 内部実装変更であり、公開APIへの互換性影響はありません。
#129493 support isSequence in reflection xml serializer
- 作成者: @StephenMolloy
- 作成日時: 2026年06月16日 23:47:47(UTC)
- マージ日時: 2026年07月27日 04:51:31(UTC)
- ラベル: area-Serialization
概要
リフレクションベースの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
その他
この修正は公開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
- 作成者: @mrek-msft
- 作成日時: 2026年03月25日 15:31:05(UTC)
- マージ日時: 2026年07月27日 16:55:03(UTC)
- ラベル: breaking-change area-Extensions-FileSystem
概要
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
その他
このPRには本修正以外にも、エッジケースでの動作改善が含まれています。特にOnReload()の発火タイミングの変更は独立して検討・修正されており、必要に応じて無効化可能な設計になっています。
#124721 Implement a workaround for ld-prime hitting an assert on large addends
- 作成者: @filipnavara
- 作成日時: 2026年02月22日 08:57:29(UTC)
- マージ日時: 2026年07月27日 14:42:28(UTC)
- ラベル: os-mac-os-x os-ios community-contribution area-NativeAOT-coreclr
概要
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
その他
- 変更は内部実装(ObjectWriter)に限定されており、公開APIへの影響はなし
- Copilotレビューで指摘された懸念事項:ReleaseBuildではアサートが無効化されるため、加数が符号付き20ビット範囲を超えた場合にリンカー失敗が発生する可能性あり(ただし実践では小さなオフセットが想定される)