注意点
このページは、dotnet/runtimeリポジトリにマージされたPull Requestを自動的に収集し、その内容をAIが要約した内容を表示しています。そのため、必ずしも正確な要約ではない場合があります。
目次
- #127689 Ensure we preserve vn and produce a canonical tree
- #127677 Hide Environment.CallEntryPoint in unhandled exception message
- #127648 Fix INT_MIN overflow in RangeCheck::BetweenBounds
- #127633 Fix ImmutableHashSet.SetEquals correctness for mismatched comparers
- #127603 Fix handling of TypedReference returns in call stubs
- #127599 Disable Android arm32 test runs
- #127568 Improve clarity in mobile scanner workflow issues and PRs
- #127555 JIT: Use
VisitLocalDefNodesfromgtTreeHasLocalStore - #127511 Restore
ExecutionContextfrom dispatcher instead of from interpreter/JIT'ed code - #127474 [cDAC] Changing loader heaps from string-keyed to enum-keyed dict
- #127472 Rename area label from
area-assemblyloadingtoarea-AssemblyLoader - #127238 [Diagnostics]: High-performance EventSource runtime async profiler.
- #127112 Add Linux and Android support for ProcessStartInfo.KillOnParentExit using prctl(PR_SET_PDEATHSIG)
- #126932 [Wasm RyuJIT] Wire up GC info encoding/decoding for Wasm
#127689 Ensure we preserve vn and produce a canonical tree
- 作成者: @tannergooding
- 作成日時: 2026年05月02日 22:56:41(UTC)
- マージ日時: 2026年05月04日 05:23:22(UTC)
- ラベル: area-CodeGen-coreclr
概要
CoreCLR JIT morphing処理において、特定のパターン変換時にValue Numbering (VN)を保持し、正規化されたツリー構造を生成するようにしました。具体的には、MOD->AND強度削減パターンでVNを保存し、SUB->ADDパターンで定数を第2オペランドに配置する正規形を生成します。
変更内容
- src/coreclr/jit/morph.cpp:
(a % c) ==/!= 0(2のべき乗c)をa & (c - 1) ==/!= 0に書き換える際、VNを保存するロジックを追加cns1 - op2の書き換えを((-op2) + cns1)に調整し、定数を第2オペランドに配置- 正規ツリー形式の意図を反映するよう、コード内コメントを更新
パフォーマンスへの影響
影響なし(コンパイラ最適化ロジックの正確性向上が目的)
関連Issue
なし
その他
この変更はJIT最適化の正確性を向上させるもので、Value Numbering情報の保持により、後続の最適化パスでより正確な分析が可能になります。正規化されたツリー構造により、異なる書き方をされた同等の式を確実に認識できるようになります。
#127677 Hide Environment.CallEntryPoint in unhandled exception message
- 作成者: @jkotas
- 作成日時: 2026年05月02日 01:40:54(UTC)
- マージ日時: 2026年05月04日 13:15:46(UTC)
- ラベル: area-ExceptionHandling-coreclr
概要
未処理例外のスタックトレースに表示されるSystem.Environment.CallEntryPointヘルパーフレームを非表示にするための修正です。前回のIssue #126222で意図された変更が実際には反映されていなかったため、CoreCLRの例外スタックトレース取得ロジックを更新して、CallEntryPointメソッドのフレームをスキップするようにしました。
変更内容
- src/coreclr/vm/excep.cpp:
StackTraceInfo::AppendElementにおいて、現在のMethodDescがg_pEnvironmentCallEntryPointMethodDescである場合にスタックフレームを追加しないよう処理を追加しました(+3/-1)。診断用の非表示フレームに対する既存のフィルタリング動作は保持されます。
パフォーマンスへの影響
影響なし
関連Issue
その他
この変更はランタイム(CoreCLR)の内部実装に対するもので、公開APIへの影響はありません。未処理例外やトップレベルの例外レポートにおいて、スタックトレースがより簡潔になります。
#127648 Fix INT_MIN overflow in RangeCheck::BetweenBounds
- 作成者: @EgorBo
- 作成日時: 2026年05月01日 13:14:49(UTC)
- マージ日時: 2026年05月04日 12:11:39(UTC)
- ラベル: area-CodeGen-coreclr
概要
JIT範囲解析(RangeCheck::BetweenBounds)における符号付き整数オーバーフロー問題を修正しました。下限定数(lcns)がINT_MINの場合、-lcnsの否定がC++の未定義動作となり、不正な「範囲内」判定とそれに伴う誤った境界チェック除去が発生する問題を解決します。
変更内容
- src/coreclr/jit/rangecheck.cpp
- 比較式
-lcns > arrSizeを数学的に等価なlcns < -arrSizeに書き換え、INT_MINの否定を回避 BetweenBounds内の関連する2つのlcnsチェック箇所に同様の修正を適用- 修正意図を説明するコメントを追加
- 比較式
パフォーマンスへの影響
影響なし。修正は数学的に等価な比較への書き換えであり、ロジックの結果は同じです。
関連Issue
その他
この修正は、JIT最適化時に範囲チェック除去判定の正確性に影響する内部実装の修正です。INT_MINを含むエッジケースに対して、ランタイムコンパイラの信頼性が向上します。
#127633 Fix ImmutableHashSet.SetEquals correctness for mismatched comparers
- 作成者: @aw0lid
- 作成日時: 2026年05月01日 01:40:26(UTC)
- マージ日時: 2026年05月04日 12:15:53(UTC)
- ラベル: area-System.Collections community-contribution
概要
ImmutableHashSet.SetEqualsの正確性の問題を修正します。異なる比較子を持つ2つのセットを比較する際、Countチェックが比較子の検証ブロック外に配置されていたため、誤ってfalseを返していました。修正により、比較子が異なる場合は最適化パスをバイパスし、適切なセット比較にフォールバックします。
// 修正前は false を返していた(ただし正しくは true)
var main = ImmutableHashSet.Create(StringComparer.OrdinalIgnoreCase, "a");
var other = ImmutableHashSet.Create("a", "A");
Console.WriteLine(main.SetEquals(other)); // true が返るべき
変更内容
- ImmutableHashSet_1.cs:
Count != origin.CountチェックをEqualityComparer<IEqualityComparer<T>>.Default.Equalsブロック内に移動(内部実装の修正) - ImmutableHashSetTest.cs: 以下を含む包括的なユニットテストを追加:
- 異なる比較子(Ordinal vs. OrdinalIgnoreCase)でのSetEquals動作確認
- ICollectionと重複要素のフォールバックパス検証
- 比較子が一致する場合の最適化パスの動作確認
- 比較子が異なる場合の早期終了最適化の検証
- 空セットと異なる比較子のエッジケース
パフォーマンスへの影響
影響なし。修正は比較子が異なるケースで正しい動作を保証するもので、比較子が一致する場合の最適化パスは維持されます。
関連Issue
その他
本修正は前回のPR #126309で導入された回帰を修正するものです。
#127603 Fix handling of TypedReference returns in call stubs
- 作成者: @BrzVlad
- 作成日時: 2026年04月30日 11:11:45(UTC)
- マージ日時: 2026年05月04日 12:45:12(UTC)
- ラベル: area-CodeGen-Interpreter-coreclr
概要
TypedReferenceを返すメソッドをインタープリタからJIT経由で呼び出す際にクラッシュが発生する問題を修正しました。TypedReferenceを2つの8バイト整数値として特別に扱うことで、戻り値の型分類を正しく処理します。
変更内容
- src/coreclr/vm/callstubgenerator.cpp:
ELEMENT_TYPE_TYPEDBYREFの戻り値型分類を修正ELEMENT_TYPE_TYPEDBYREFを「ポインタ/参照のように扱う」カテゴリから削除ELEMENT_TYPE_TYPEDBYREFを2つの8バイト整数返却として明示的に処理するよう追加
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
- 修正対象: CoreCLRのインタープリタ/JIT呼び出しスタブ内での戻り値型処理(内部実装)
- 影響範囲:
System.Resources.Extensions.BinaryFormat.Testsのクラッシュ回避 TypedReferenceは16バイト(64ビット環境)の戻り値で、2つのポインタで構成されるため、適切な型分類が必要
#127599 Disable Android arm32 test runs
- 作成者: @vitek-karas
- 作成日時: 2026年04月30日 08:26:42(UTC)
- マージ日時: 2026年05月04日 13:31:08(UTC)
- ラベル: area-Infrastructure-mono
概要
Android arm32(32ビット)のテスト実行をdotnet/runtimeのCI/CDパイプラインから無効化するPRです。Android arm64(64ビット)のテストカバレッジは引き続き有効のままとなります。
変更内容
eng/pipelines/runtime.yml: デフォルトランタイムパイプラインのandroid_armMonoライブラリテストマトリックスエントリを無効化eng/pipelines/extra-platforms/runtime-extra-platforms-android.yml: Android専用エキストラプラットフォームパイプラインのandroid_armエントリを無効化
パフォーマンスへの影響
影響なし(テストパイプラインの設定変更のため)
関連Issue
その他
なし
#127568 Improve clarity in mobile scanner workflow issues and PRs
- 作成者: @kotlarmilos
- 作成日時: 2026年04月29日 15:21:56(UTC)
- マージ日時: 2026年05月04日 13:29:39(UTC)
- ラベル: area-Infrastructure
概要
Mobile Platform Failure Scannerワークフローの改善により、モバイルプラットフォーム障害の処理方法をより明確で予測可能にしました。従来は混在したPR、Issue、重複コメントが生成されていましたが、今後は各障害に対して「テスト属性修正用のドラフトPR」または「製品バグ・ネイティブクラッシュ・インフラ問題用のTracking Issue」のいずれかに統一されます。
変更内容
ワークフロー定義ファイル更新 (
.github/workflows/mobile-scan.md)- プロンプト全体を再構成し、PR vs Issue の明確な分岐ルールを設定
- PR/Issue本文テンプレートを統一(Reasoning、Impact on platforms、Errors log、First build it occurred、Recommended actionなど)
- Safe Outputs制限を引き上げ(5 PRs / 3 Issues per run)
- PR作成時の対象ファイルを制限(
src/libraries/**/tests/**とそのcsproj のみ) - GitHub MCP整合性チェック強化(
min-integrity: approved) pwshシェル許可リストから削除し、プロンプト内の無効な参照を削除
ワークフロー生成ファイル更新 (
.github/workflows/mobile-scan.lock.yml)- 上記の定義変更を反映した再生成
パフォーマンスへの影響
影響なし(管理プロセス改善であり、ランタイム/コンパイラパフォーマンスには影響なし)
関連Issue
その他
- 本変更は内部ワークフロー設定の改善であり、公開API・ランタイム動作への影響はありません
- ワークフロー検証済み(実際のdispatchでIssueが正常に生成されたことを確認)
- コメント申告機能を廃止し、
noopエンドステートを削除することで、より明確な実行結果を提供
#127555 JIT: Use VisitLocalDefNodes from gtTreeHasLocalStore
- 作成者: @jakobbotsch
- 作成日時: 2026年04月29日 10:56:23(UTC)
- マージ日時: 2026年05月04日 11:06:43(UTC)
- ラベル: area-CodeGen-coreclr
概要
gtTreeHasLocalStoreがローカル変数の定義をすべて適切に処理できていなかった問題を修正します。特にretbuf定義などを見落としていたため、既存の低レベルヘルパーVisitLocalDefNodesを活用して、ローカル定義の検出をより堅牢にします。
変更内容
- src/coreclr/jit/gentree.cpp:
Compiler::gtTreeHasLocalStoreの実装を変更OperIsLocalStore()とAsLclVarCommon()による直接的な判定ロジックを削除GenTree::VisitLocalDefNodesヘルパーに委譲する実装に統一GT_STORE_LCL_*だけでなくretbuf関連の定義なども包括的に検出可能に- 早期終了パスを
GenTree::VisitResultを使用するように更新
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
内部実装の改善であり、公開APIへの影響はありません。JIT実装の統一性と正確性の向上により、コンパイル結果の品質向上が期待されます。
#127511 Restore ExecutionContext from dispatcher instead of from interpreter/JIT'ed code
- 作成者: @jakobbotsch
- 作成日時: 2026年04月28日 14:16:55(UTC)
- マージ日時: 2026年05月04日 11:06:09(UTC)
- ラベル: area-VM-coreclr runtime-async
概要
非同期メソッド呼び出しの再開時にExecutionContextの復元をJITコード/インタプリタからディスパッチャーに移動するリファクタリング。これにより、再開パス上のTLSアクセスとヘルパー呼び出しが削減され、レジスタ割り当てが改善される。
変更内容
コア変更:
- async.cpp:
RestoreExecutionContext呼び出しをJIT再開コードから削除し、continuation内にExecutionContextの位置を エンコードするように変更 - AsyncHelpers.CoreCLR.cs: ディスパッチャーがcontinuation復元時に
ExecutionContextを直接復元するロジックを追加 - corinfo.h:
CORINFO_ASYNC_INFOからrestoreExecutionContextMethHndフィールドを削除 - interpreter/compiler.cpp: インタプリタからの
RestoreExecutionContext呼び出しを削除 - runtime-async-codegen.md: 非同期コード生成設計ドキュメントを更新
- object.h: continuation関連の構造体にメタデータを追加
- jitinterface.cpp, CorInfoImpl.cs: 関連フィールド参照を削除
その他の変更:
- JIT-EE GUID更新(corinfo.hの変更に伴う)
- NativeAOT・interpreter・ReadyToRun周辺コード更新
パフォーマンスへの影響
大幅な改善:
- 非同期サスペンション/レジュメーション: 7-8%改善
- マイクロベンチマーク結果: 268.5ms → 249.4ms(50回の10,000,000反復の測定)
- TLSアクセス削減による効果
バイナリサイズ改善:
- NativeAOT: System.Net.Http.Functional.Tests.exe で-93,184bytes (-0.30%)
- 大多数のテストアセンブリで0.01~0.3%の削減
- clrjit.dll: -512bytes
レジスタ割り当て改善:
- continuationをvolatile レジスタに保持できるようになり、複数の箇所で割り当てが改善
関連Issue
なし
その他
- 内部実装変更(公開APIへの影響なし)
- ディスパッチャーでの復元により、再開パスがシンプル化
- Copilot指摘:
InterpAsyncSuspendData.restoreExecutionContextMethodフィールドはまだ定義されているが読み取られていないため、今後の最適化で削除検討可能
#127474 [cDAC] Changing loader heaps from string-keyed to enum-keyed dict
- 作成者: @rcj1
- 作成日時: 2026年04月27日 21:04:04(UTC)
- マージ日時: 2026年05月04日 23:38:15(UTC)
- ラベル: area-Diagnostics-cdac
概要
cDAC(Common Data Access Component)のLoader契約における内部実装の改善。ローダーヒープを文字列キーの辞書から列挙型キーの辞書に変更し、タイプセーフ性を向上させ、メモリ効率とルックアップパフォーマンスを向上させます。
変更内容
- Loader.md: データ契約ドキュメントを更新し、新しい列挙型ベースのキー仕様を反映
- ILoader.cs: インターフェース定義を拡張し、列挙型キーのサポートを追加(16行追加)
- Loader_1.cs: 実装内で文字列キーから列挙型キーへの変換ロジックを修正
- SOSDacImpl.cs: レガシーAPI互換性を維持しながら新しいキー形式に対応(32行追加、36行削除)
- LoaderTests.cs: テストを更新し、新しい列挙型キーベースのアクセスパターンをカバー
パフォーマンスへの影響
- 文字列キーから列挙型キーへの変更により、ハッシュ計算とルックアップが高速化される見込み
- メモリ使用量の削減(整数キーは文字列キーより効率的)
関連Issue
#127296に関連する後続PR
その他
- cDACの診断機能に関連する内部APIの変更(公開APIではない)
- レガシー実装との互換性を維持しながらの段階的な改善
#127472 Rename area label from area-assemblyloading to area-AssemblyLoader
概要
リポジトリの area label を area-assemblyloading から area-AssemblyLoader に統一するリネーム変更です。これにより、他の area label(例:area-AssemblyLoader-mono)と使用されているケーシング規約に合わせます。
変更内容
.github/policies/resourceManagement.yml—labelAddedトリガーとhasLabel条件内の label 参照を更新docs/area-owners.md— area label 列のラベル名を更新.github/skills/issue-triage/references/area-label-heuristics.md— ヒューリスティックテーブルのエントリを更新
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
GitHub のポリシー設定、ドキュメント、自動トリアージスキル設定に関わる変更です。既存の area-assemblyloading ラベルで分類されている Issue/PR は、この変更後に area-AssemblyLoader ラベルへの移行が必要になる可能性があります。
#127238 [Diagnostics]: High-performance EventSource runtime async profiler.
- 作成者: @lateralusX
- 作成日時: 2026年04月21日 19:01:10(UTC)
- マージ日時: 2026年05月04日 07:19:12(UTC)
- ラベル: area-Diagnostics-coreclr
概要
高パフォーマンスな非同期プロファイラーを実装するPRです。Runtime Async (AsyncV2) の非同期メソッド実行を低オーバーヘッドで追跡する新しい AsyncProfilerBufferedEventSource を導入し、スレッド単位のバッファード事象送出と集中型フラッシュ調整を活用します。従来のTPLイベントプロファイリングと比較して約4~40倍のパフォーマンス向上を実現し、ETLファイルサイズを約10倍削減します。
変更内容
- AsyncProfiler.cs (共有コア実装): スレッド単位のイベントバッファ、LEB128+ジグザグ圧縮によるデルタタイムスタンプ・デルタIP符号化、スレッドコンテキストキャッシング、バッファシリアライゼーション、SyncPointメカニズム
- AsyncProfilerBufferedEventSource.cs: EventSourceベースの非同期プロファイラーバッファ送出とコマンド受信 (更新/フラッシュ)
- AsyncProfiler.CoreCLR.cs (CoreCLR固有): ラッパーテーブル、コールスタック捕捉、SyncPoint同期
- AsyncHelpers.CoreCLR.cs: Runtime非同期ディスパッチャーへのプロファイラー送出統合、ラッパーディスパッチパス追加 (~5 ns per resume)
- AsyncInstrumentation.cs: プロファイラーEventSource初期化により設定フラグ確立
- AsyncProfilerTests.cs (新規): バッファヘッダー、事象ストリーム、コールスタック符号化、ラッパーアンカリング、フラッシュ、マルチスレッド負荷検証を含む包括的テストスイート (2322行)
- Mono/NativeAOT対応: スタブ実装と プロジェクトファイル統合
パフォーマンスへの影響
オーバーヘッド削減:
- 1M/s: TPL >75% → プロファイラー ~20% (約4倍改善)
- 100K/s: TPL ~45% → プロファイラー <1% (約40倍改善)
- 10K/s: TPL ~10% → プロファイラー <0.3% (約30倍改善)
データ量削減:
- ETLファイルサイズ約10倍削減 (1M/s 20秒シナリオで3+ GB → ~330 MB)
- デフォルトETW設定で事象喪失なし
設計最適化:
- デルタタイムスタンプ: 8バイト → 1~2バイト
- ラッパーディスパッチオーバーヘッド: ~5 ns (CompleteAsyncMethod の ~30-40 ns に対して大幅削減)
- VS CPU プロファイリング出力への影響最小化 (プロファイラーメソッドが 0.01-0.03% 範囲)
関連Issue
なし
その他
- すべてのフォーマットは内部実装として扱われ、通知なく変更される可能性がある
- 環境変数
DOTNET_AsyncProfilerEventSource_EventBufferSizeで バッファサイズ設定可能 (デフォルト 16 KB - 256 bytes) - イベント種別: 非同期コンテキスト
#127112 Add Linux and Android support for ProcessStartInfo.KillOnParentExit using prctl(PR_SET_PDEATHSIG)
- 作成者: @Copilot
- 作成日時: 2026年04月18日 21:57:23(UTC)
- マージ日時: 2026年05月04日 22:06:20(UTC)
- ラベル: area-System.Diagnostics.Process os-linux
概要
ProcessStartInfo.KillOnParentExitをLinuxおよびAndroidに対応させるPRです。LinuxではシステムコールのPR_SET_PDEATHSIGに対応した専用の長時間生存スレッドを使用してfork+execを実行し、親プロセス終了時に子プロセスにSIGKILLを送信する仕組みを実装しています。
変更内容
- ネイティブ実装(pal_process.c):
PR_SET_PDEATHSIGの可用性を確認し、親プロセス終了時に信号を送信する専用スレッドPDeathSigForkRequestを実装。fork前に親プロセスが終了した場合をgetppid()で検出。 - P/Invoke署名更新(Interop.ForkAndExecProcess.cs、pal_process.h):
killOnParentExitパラメータをSystemNative_ForkAndExecProcessに追加。 - マネージド側の統合(SafeProcessHandle.Unix.cs):
KillOnParentExitをネイティブ呼び出しに伝播。 - プラットフォーム定義(configure.cmake、pal_config.h.in):ビルド時に
HAVE_PR_SET_PDEATHSIGを検出。 - API注釈更新(ProcessStartInfo.cs、ref/System.Diagnostics.Process.cs):
[SupportedOSPlatform("linux")]および[SupportedOSPlatform("android")]を追加。 - テスト拡張(KillOnParentExitTests.cs、ProcessTests.Mobile.cs):既存テストをLinux/Androidで実行可能に拡張。
パフォーマンスへの影響
KillOnParentExit有効時は専用の長時間生存スレッドが1つ起動されるため、若干のメモリ追加と同期コストが発生します。ただし、このコストはKillOnParentExit=trueの場合のみで、一般的な使用ケースではオプション機能の初期化コストの範囲内です。
関連Issue
なし
その他
- 破壊的変更なし:既存APIの互換性は維持されます。
- プラットフォーム非対応時の動作:HAVE_PR_SET_PDEATHSIGが未定義のプラットフォームではno-opとなります。
- WASI対応:pal_process_wasi.cのスタブも対応パラメータで更新されています。
- Androidサポート:PR_SET_PDEATHSIGはAndroidで利用可能なため明示的にサポート対象に追加されています。
#126932 [Wasm RyuJIT] Wire up GC info encoding/decoding for Wasm
- 作成者: @kg
- 作成日時: 2026年04月15日 03:04:19(UTC)
- マージ日時: 2026年05月04日 13:43:36(UTC)
- ラベル: arch-wasm area-CodeGen-coreclr
概要
WebAssembly(WASM)用RyuJITコンパイラのGC情報エンコーディング/デコーディング機能を有効化するPRです。EMIT_GENERATE_GCINFOをWASMで有効にし、GC情報の生成・エンコードをWASM固有の実装で対応させます。これにより、読み取り専用(R2R)リリースの対象となるS.P.CoreLibをWASM向けに正式サポートします。
変更内容
- targetwasm.h: WASMに対してGC情報生成を有効化(
EMIT_GENERATE_GCINFOを定義) - gcinfotypes.h:
Wasm32GcInfoEncodingを追加し、WASM用のGC情報エンコーディング定義を新規実装 - codegenwasm.cpp:
GcInfoEncoderを使用したGC情報の作成・出力処理を実装 - gcinfo.cpp, gcencode.cpp, emit.cpp: WASMではレジスタベースのGCトラッキングを無効化(条件コンパイル追加)
- codegencommon.cpp, codegenlinear.cpp: WASMでのGCレジスタ更新・検証パスをスキップ
- CMakeLists.txt: WASMスタンドアロンJIT用に
gcinfo_*ライブラリのリンク設定を追加、gcinfo_universal_wasmターゲットを新規作成 - regalloc.cpp, regallocwasm.cpp: WASM向けの登録割り当て最適化調整
パフォーマンスへの影響
影響なし(GC情報生成の有効化であり、ランタイムパフォーマンスへの直接的な変更ではありません)
関連Issue
なし
その他
潜在的な懸念事項: Copilotによるレビューコメントで、GCトラッキング対象のローカル変数がWASM仮想レジスタに割り当てられた場合、登録パスがスキップされるため、GC情報に含まれない可能性が指摘されています。作成者はコメント内で「まだクリーンアップ方法を検討中(feedback welcome)」と述べており、今後の改善が予定されている段階です。