注意点
このページは、dotnet/runtimeリポジトリにマージされたPull Requestを自動的に収集し、その内容をAIが要約した内容を表示しています。そのため、必ずしも正確な要約ではない場合があります。
目次
- #129950 Emit correct ELF symbol types for data in NativeAOT objects
- #129947 wasm: fix R2R generic dictionary lookup debug assert
- #129944 Skip build-time RID fallback for portable builds
- #129942 Use ThrowHelper.ThrowInvalidOperationException in ImmutableCollection
- #129934 [wasm] Bump chrome for testing - linux: 149.0.7827.200, windows: 149.0.7827.201
- #129931 [cDAC] Enumerate R2R hashmap pages into triage dumps for odd entry points
- #129898 JIT: Remove InlineCandidateInfo::exactContextNeedsRuntimeLookup
- #129890 Save async contexts for ValueTask methods
- #129856 JIT: ensure magic divisors are always marked DONT_CSE for all targets
- #129502 Move thin lock acquire/release in CoreCLR to managed code
#129950 Emit correct ELF symbol types for data in NativeAOT objects
- 作成者: @max-charlamb
- 作成日時: 2026年06月28日 18:56:57(UTC)
- マージ日時: 2026年06月28日 23:38:02(UTC)
- ラベル: area-NativeAOT-coreclr
概要
NativeAOT の ELF オブジェクトライター内で、シンボルテーブル生成時のシンボル型分類ロジックを修正しました。従来はシンボルサイズのみで型を決定していたため、非実行可能セクション内のデータシンボルが誤った型(STT_NOTYPE または STT_FUNC)として出力されていました。本変更はセクションフラグに基づいて正しい型を割り当て、デバッガ(lldb/gdb/nm など)での正確なシンボル認識を実現します。
変更内容
- src/coreclr/tools/Common/Compiler/ObjectWriter/ElfObjectWriter.cs
EmitSymbolTableメソッドのシンボル型分類ロジックを修正- TLS セクション:
STT_TLS、非実行可能セクション:STT_OBJECT、実行可能セクション:STT_FUNC/STT_NOTYPEで分類 - 修正前:シンボルサイズ(
Size > 0)のみで判定し、vtable がSTT_NOTYPE、.rodataのデータがSTT_FUNCとして誤分類 - 修正後:セクションフラグを優先的に参照し、実行可能セクション内のシンボル(コード)は既存動作を維持
パフォーマンスへの影響
影響なし。本変更は st_info 型バイトのみを変更するもので、オブジェクトファイルのサイズは変わりません(検証:修正前後で 3,555,456 バイト同一)。
関連Issue
なし
その他
- 検証結果(Linux x64 cross-emit、データ脱水化有効時):
.hydratedセクション:1084 個のNOTYPE+ 377 個のFUNC→ 1461 個のOBJECTに統一.rodataセクション:245 個のFUNC+ 2 個のNOTYPE→ 247 個のOBJECTに統一.dataセクション:338 個のFUNC→ 338 個のOBJECTに統一.textセクション(コード):83 個のFUNCのまま(変更なし)
- 実行可能セクション内のシンボルは変更されないため、ARM/AArch64/RISC-V のマッピングシンボル(
$a/$d/$x)とトランポリンに影響なし - 他の ELF プロデューサ(gcc/llvm など)の標準的な型分類規則に準拠
#129947 wasm: fix R2R generic dictionary lookup debug assert
- 作成者: @AndyAyersMS
- 作成日時: 2026年06月28日 16:38:11(UTC)
- マージ日時: 2026年06月28日 21:49:46(UTC)
- ラベル: area-VM-coreclr
概要
WebAssemblyでのReadyToRun(R2R)コード実行時に、ジェネリック辞書ルックアップのデバッグアサーション(_DEBUGオンリー)が誤発火する問題を修正しました。WebAssemblyではR2Rコードが関数テーブル、データがリニアメモリに配置されるため、コード範囲ルックアップが正しいモジュールを解決できず、複数のR2Rイメージロード時にIsNativeImageSharedByアサーションが不適切に発火していました。修正後は、WebAssemblyで署名アドレスが現在のモジュールのR2Rイメージ境界内に存在することを検証するようになります。
変更内容
- src/coreclr/vm/jithelpers.cpp:
GenericHandleWorkerCoreにTARGET_WASM専用のデバッグアサーション経路を追加(+10行)。署名アドレスが現在のモジュールのR2Rイメージ範囲内にあることを検証し、他のターゲットではアサーション動作は変わらず。
パフォーマンスへの影響
影響なし。_DEBUGオンリーのアサーションチェックであり、リリースビルドの動作は影響を受けません。
関連Issue
その他
- この修正はWebAssembly上でのPri-1 R2Rテストスイート実行時の最頻出アサーション失敗(全失敗の約50%、特にジェネリクステスト)を解決します。
- 修正対象はデバッグアサーションのみであり、本質的な機能動作には影響しません。
#129944 Skip build-time RID fallback for portable builds
- 作成者: @am11
- 作成日時: 2026年06月28日 10:23:29(UTC)
- マージ日時: 2026年06月28日 13:47:50(UTC)
- ラベル: area-Infrastructure-libraries community-contribution
概要
portable builds(ポータブルビルド)において、runtime.jsonレガシーグラフに存在しないRID(例:openbsd-x64)に対する build-time RID フォールバックをスキップするための修正です。これにより、self-referencing RID による不正な動作を防止しています。portable buildではTargetRID == PortableTargetRIDであり、distro固有の情報を含まないため、フォールバック処理は不要となります。
変更内容
src/libraries/Microsoft.NETCore.Platforms/src/Microsoft.NETCore.Platforms.csproj(+2/-2)- portable builds時におけるRIDフォールバック処理の条件付けロジックを修正
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
この修正はportable buildとnon-portable buildの動作の区別に関連しています。non-portable buildでは、異なるRID(バージョンやdistro名を含む)を使用し、サードパーティ依存関係をdistroパッケージから取得しますが、portable buildではそのような分岐処理が不要となります。
#129942 Use ThrowHelper.ThrowInvalidOperationException in ImmutableCollection
- 作成者: @prozolic
- 作成日時: 2026年06月28日 07:15:34(UTC)
- マージ日時: 2026年06月28日 13:49:22(UTC)
- ラベル: area-System.Collections
概要
System.Collections.Immutableライブラリで、インラインthrow new InvalidOperationException文をThrowHelper.ThrowInvalidOperationException呼び出しに置き換える内部リファクタリング。FrozenSet/FrozenDictionaryで確立されているパターンに統一することで、例外処理の一貫性と保守性を向上させます。
変更内容
- ImmutableArray_1.Enumerator.cs: 列挙子の無効状態チェックで例外スロー処理を統一
- ImmutableDictionary_2.HashBucket.cs: ハッシュバケット処理の例外処理を統一
- ImmutableList_1.Enumerator.cs: リスト列挙子の例外処理を統一
- ImmutableSortedDictionary_2.Enumerator.cs: ソート辞書列挙子の例外処理を統一
- ImmutableSortedSet_1.Enumerator.cs: ソート済みセット列挙子の例外処理を統一
- ImmutableStack_1.Enumerator.cs: スタック列挙子の例外処理を統一
- SortedInt32KeyNode.Enumerator.cs: キーノード列挙子の例外処理を統一
- ImmutableArrayExtensions.cs: 拡張メソッド内の例外処理を統一
全ての変更は内部実装(非公開API)の変更であり、公開APIシグネチャへの影響はありません。
パフォーマンスへの影響
ThrowHelper呼び出しの使用により、JIT最適化が向上し、ホットパスでの例外スロー処理がより効率的になる可能性があります。影響は軽微ですが、大規模な列挙操作でのわずかなメモリ/実行速度の改善が期待されます。
関連Issue
なし
その他
このPRは純粋なコード品質改善で、機能的な変更や互換性への影響はありません。例外処理パターンの統一により、将来の保守性が向上します。
#129934 [wasm] Bump chrome for testing - linux: 149.0.7827.200, windows: 149.0.7827.201
- 作成者: @github-actions[bot]
- 作成日時: 2026年06月28日 00:29:46(UTC)
- マージ日時: 2026年06月28日 17:31:56(UTC)
- ラベル: arch-wasm area-Infrastructure-mono
概要
WebAssembly(WASM)テスト環境で使用するChrome for Testingのバージョンを更新します。Linux環境を149.0.7827.200に、Windows環境を149.0.7827.201にそれぞれアップグレードします。
変更内容
eng/testing/BrowserVersions.props: Chrome for Testingのバージョン定義を更新- Linux: 新バージョン 149.0.7827.200
- Windows: 新バージョン 149.0.7827.201
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
このPull Requestは自動化されたバージョン更新(github-actions[bot]によるもの)です。WebAssemblyのテストインフラストラクチャに関連する変更であり、ランタイムのコア機能や公開APIへの直接的な影響はありません。
#129931 [cDAC] Enumerate R2R hashmap pages into triage dumps for odd entry points
- 作成者: @max-charlamb
- 作成日時: 2026年06月27日 22:29:20(UTC)
- マージ日時: 2026年06月28日 15:04:01(UTC)
- ラベル: area-Diagnostics-cdac
概要
macOS トライアージ ミニダンプでの cDAC の R2R スタックウォークが SoftwareExceptionFrame の一フレーム先で中止する問題を修正します。根本原因は、レガシー DAC のハッシュマップ プローブをスキップする奇数エントリポイント最適化にあり、プローブが参照するバケットページがトライアージダンプに列挙されず、cDAC コンシューマーがダンプに存在しないページを読み取ろうとして失敗します。
変更内容
src/coreclr/vm/readytoruninfo.cpp:!defined(DACCESS_COMPILE)で奇数エントリポイント最適化をゲーティング。本番ランタイム(非DAC)は性能最適化を維持し、DAC ビルドはハッシュマップ検索を実行してバケットページをトライアージミニダンプに列挙させます。また、不正確なコメントを削除- cDAC
ExecutionManagerCore.ReadyToRunJitManager: 奇数エントリポイント時の早期終了を完全に削除。DAC がページを列挙するため、コンシューマーはそれらを自然に読み取ります
パフォーマンスへの影響
- 本番ランタイム(非DAC): 影響なし。奇数エントリポイント最適化は維持
- DAC/cDAC: 新規トライアージダンプ作成時にハッシュマップ検索が実行されるため、ダンプの完全性は向上しますが、ダンプ生成時のオーバーヘッドが若干増加
関連Issue
その他
- この修正はコンシューマー側での症状隠蔽ではなく根本原因の修正であり、レガシー DAC コンシューマーにも利益をもたらします
- 古いバージョンの DAC で生成されたダンプには該当ページが含まれないため、この修正は新規作成されるダンプに適用されます
- 検証: ネイティブビルド(非DAC)と DAC ビルド共に成功、cDAC ユニットテスト(
Microsoft.Diagnostics.DataContractReader.Tests)は全てパス
#129898 JIT: Remove InlineCandidateInfo::exactContextNeedsRuntimeLookup
- 作成者: @jakobbotsch
- 作成日時: 2026年06月26日 16:48:05(UTC)
- マージ日時: 2026年06月28日 07:43:25(UTC)
- ラベル: area-CodeGen-coreclr
概要
JITコンパイラのInlineCandidateInfo構造体から未使用フィールドexactContextNeedsRuntimeLookupを削除するリファクタリングです。最近の変更により不要になったこのフィールドを削除し、コードベースをクリーンアップします。
変更内容
- inline.h:
InlineCandidateInfo::exactContextNeedsRuntimeLookupフィールド定義を削除 - compiler.h: 関連する宣言を2行削除
- importercalls.cpp: フィールドへのアクセス/割り当てロジックを削除(15行追加、24行削除)
- async.cpp: フィールド参照を削除(2行追加、2行削除)
- fginline.cpp: フィールド参照を削除(1行追加、1行削除)
パフォーマンスへの影響
影響なし。メモリ使用量の軽微な削減(InlineCandidateInfo構造体のサイズ縮小)が期待されます。
関連Issue
なし
その他
削除対象フィールドは最近のリファクタリングにより実装上から既に参照されていない未使用コードです。
#129890 Save async contexts for ValueTask methods
- 作成者: @jakobbotsch
- 作成日時: 2026年06月26日 13:03:34(UTC)
- マージ日時: 2026年06月28日 00:01:22(UTC)
- ラベル: area-CodeGen-coreclr runtime-async
概要
ValueTask返却型の非同期メソッドに対して、ExecutionContextの保存/復元が正しく行われていない問題を修正しました。VM内の非同期フラグチェック処理に誤りがあり、ValueTask変数がこのチェックで適切に扱われていませんでした。合わせてJIT内で最適化されたawaitをデバッグ時に選択的に制御する仕組みも追加されています。
変更内容
- src/coreclr/vm/method.hpp: ValueTask変数向けの非同期フラグチェックロジックを修正し、
operator~ヘルパーを追加してフラグマスク処理を改善 - src/coreclr/jit/importer.cpp: await最適化の可否を判定する
impCheckOptimizeAwaitロジックを追加(DEBUG設定で動作制御可能) - src/coreclr/jit/compiler.h: 新しいimporterヘルパー関数を宣言
- src/coreclr/jit/jitconfigvalues.h: DEBUG専用のawait最適化範囲/ブレークポイント設定項目を追加
- src/tests/async/execution-context/execution-context.cs:
async ValueTaskフロー向けのExecutionContext回帰テストを追加 - src/libraries/System.Net.Http/tests/FunctionalTests/DiagnosticsTests.cs: 本件の原因となっていたActiveIssueマークを削除して診断テストを再有効化
パフォーマンスへの影響
影響なし
関連Issue
その他
本バグはタイミング依存性があり、テストコード内でawait Task.Yield()を追加するだけで再現しなくなるほど微妙な条件下での問題でした。PR内で追加されたDEBUG専用のJIT設定により、await最適化に関する二分探索的なデバッグが可能になります。
#129856 JIT: ensure magic divisors are always marked DONT_CSE for all targets
- 作成者: @AndyAyersMS
- 作成日時: 2026年06月25日 14:55:57(UTC)
- マージ日時: 2026年06月28日 00:40:43(UTC)
- ラベル: area-CodeGen-coreclr
概要
JITのモーフィング段階で、符号付き整数除算(GT_DIV)のConstant-CSE最適化を制御する処理を追加しました。magic-divide展開が後の段階で定数除数を認識できるよう、eligible な定数除数に DONT_CSE フラグを確実に設定します。符号なし除算(GT_UDIV/GT_UMOD)は既に対応済みでしたが、符号付き除算が漏れていました。
変更内容
- src/coreclr/jit/morph.cpp:
fgMorphSmpOpOptional内のGT_DIVcase でCheckDivideByConstOptimizedを呼び出す処理を追加(val / 1の高速パス後) - src/coreclr/jit/gentree.cpp: 関連する処理の調整(+9/-2)
パフォーマンスへの影響
間接的な改善が期待されます。修正前は ARM64/RISC-V 環境で constant-CSE により定数除数がローカル変数に書き換えられ、その結果 magic-divide 最適化が失敗して低速なidiv命令へのフォールバックが発生していました。修正後は magic-divide 展開が正常に適用され、より高速な乗算ベースの除算が利用可能になります。
x64ではJitConstCSEデフォルト設定により整数定数CSEが抑制されているため、現状では影響が観測されません。
関連Issue
その他
- 修正前:符号付き
GT_DIVはval / 1チェックのみで breakし、定数除数が CSE の対象となっていた - 修正後:
GT_UDIV/GT_UMODと同じ処理フロー(CheckDivideByConstOptimized呼び出し)を適用 - 符号付き
GT_MODは既にfgMorphModToSubMulDivで対応済み
#129502 Move thin lock acquire/release in CoreCLR to managed code
- 作成者: @VSadov
- 作成日時: 2026年06月17日 05:40:43(UTC)
- マージ日時: 2026年06月28日 17:28:10(UTC)
- ラベル: area-System.Threading
概要
シンロック(オブジェクトヘッダ)の取得/解放処理をCoreClrでネイティブコードからマネージドコードに移行し、CoreClrとNativeAOT間の実装の共有を拡大させました。また、シンロックが他のスレッドに所有されている場合にTryAcquireが過度にスピンする問題を修正しました。パフォーマンスはプラットフォームとロック方式に応じて最大+30%の改善を実現しており、一部で軽微な-3%程度の回帰が見られますが、これはハードウェア差による「アーキテクチャノイズ」と評価されています。
変更内容
- ネイティブコード削除:
syncblk.inl,syncblk.hのシンロック実装、comsynchronizable.cpp/.hのFCALL実装、ecalllist.hのFCALL/ecall マッピングを削除 - マネージドコード実装(CoreCLR):
ObjectHeader.CoreCLR.csにシンロック取得/解放ロジックを実装し、AcquireThinLock()とRelease()を公開 - Monitor統合:
Monitor.CoreCLR.csから157行削除し、新しいマネージドシンロックエントリポイントへのルーティングに変更 - NativeAOT同期:
ObjectHeader.NativeAot.csとMonitor.NativeAot.csを更新し、統一されたAcquireThinLock()エントリポイントに対応 - ビルド設定: CMakeLists.txt、common.h、pal.hから不要なincludesと参照を削除
パフォーマンスへの影響
- 改善: スループットで最大+30%の向上(プラットフォームとシンロック/ファットロック方式に依存)
- 軽微な回帰: 一部シナリオで最大-3%
- 評価: 小さな差異はコード生成やハードウェア差異(AMD Epyc 7763 vs AMD Ryzen 7950など)に由来する「アーキテクチャノイズ」と判断
関連Issue
なし
その他
- 公開API仕様の変更なし(内部実装の移行)
- CoreClrとNativeAOT間の実装共有が大幅に増加
- FCALLサーフェスの削除により、マネージドコード割合が増加