注意点
このページは、dotnet/runtimeリポジトリにマージされたPull Requestを自動的に収集し、その内容をAIが要約した内容を表示しています。そのため、必ずしも正確な要約ではない場合があります。
目次
- #124894 [release/11.0-preview2] Revert forwarding activation signal
- #124884 Delete unnecessary test
- #124881 Handle single-node branches in ExtractCommonPrefixNode
- #124879 [release/10.0] Revert forwarding activation signal
- #124875 Fix GC handle dac bug
- #124869 [release/10.0] Add ERROR_NETNAME_DELETED to IsPathUnreachableError for Windows localhost removal
- #124867 [release/9.0] Disable ResolveLinkTarget_Succeeds returnFinalTarget=true for UNC paths
- #124865 Sve2 Scatters need a temp register for indices
- #124853 [browser][CoreCLR] lazy and satelite assemblies
- #124852 [browser] Add chrome provisioning on macos
- #124849 Disable FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories
- #124817 Implement ISOSDacInterface::GetThreadAllocData in cDAC SOSDacImpl
- #124816 Implement ISOSDacInterface::GetObjectClassName in cDAC SOSDacImpl
- #124809 JIT: Fix bugs and typos in objectalloc.cpp, extract AnalyzePseudoForCloning
- #124753 Tar: Only treat reparse points marked as junctions or symlinks as actual tar symlinks
- #124715 Fix assert in JIT:new() during early initialization
- #124664 Eliminate forwarder stubs by reusing method precodes for call counting indirection
- #124586 Fix memory leak in Assembler::EmitGenericParamConstraints
- #124504 Arm64: Add SM4 and SHA3 instructions
- #124493 Annotate
ServiceDescriptor.IsKeyedServicefor nullability flow and sync ref assembly - #124441 cDAC - fix ReJIT IsEnabled
- #124296 Cleanup EH / stackwalk interpreter frame handling
- #124250 [Wasm RyuJit] localloc
- #123810 Fix reachable Debug.Assert in StreamPipeReader.AdvanceTo
#124894 [release/11.0-preview2] Revert forwarding activation signal
- 作成者: @github-actions[bot]
- 作成日時: 2026年02月26日 13:01:25(UTC)
- マージ日時: 2026年02月26日 18:38:02(UTC)
- ラベル: Servicing-approved area-PAL-coreclr
概要
.NET 11.0-preview2へのバックポート。非同期シグナルハンドラ(アクティベーションシグナルハンドラ)内でのスレッドローカルストレージ(TLS)アクセスに起因するクラッシュを修正します。最新のglibc版でこの問題が顕在化し、Ubuntu 25.04などで報告されています。CheckActivationSafePoint関数がシグナルハンドラから呼び出される際、TLSアクセスはメモリ割り当てをトリガーする可能性があり、割り当てコード内での割り込み時にクラッシュするリスクがあります。
変更内容
- src/coreclr/pal/src/exception/signal.cpp: CheckActivationSafePoint関数内でのTLSアクセス方式の見直し(+13行/-11行)。シグナルハンドラ内での安全なThread インスタンス取得方法に変更
パフォーマンスへの影響
影響なし。本変更はシグナルハンドラ内の制御フロー最適化であり、CheckActivationSafePointは頻繁に実行されますが、パフォーマンス計測値に変化はありません。
関連Issue
#124877(main ブランチでの元のコミット)
その他
- 重要度: 高 - glibc版の変更により実際のクラッシュが報告されている
- 導入済み期間: main ブランチで2ヶ月間実装済みで、関連問題の報告なし
- テスト: CI テストと手動による詳細なテストで確認済み
- リスク評価: 低 - main での実績が豊富であり、既知の問題なし
#124884 Delete unnecessary test
- 作成者: @MichalStrehovsky
- 作成日時: 2026年02月26日 03:54:26(UTC)
- マージ日時: 2026年02月26日 06:22:16(UTC)
- ラベル: area-TypeSystem-coreclr
概要
重複するTypeDefを持つモジュール読み込みをテストするために設計されたテストケース(test5.il/test5.ilproj)を削除するPRです。このテストは、PEファイルの二進後処理(.cptファイルを使用した修正)を必要としていますが、そのセットアップがリポジトリに含まれていないため、実際にはテストシナリオが機能していませんでした。削除対象のテストは本質的に不完全で、その目的を達成していません。
変更内容
- src/tests/Loader/classloader/regressions/181424/test5.il (-99行) 二進後処理なしでは実行不可能なILソースファイルを削除
- src/tests/Loader/classloader/regressions/181424/test5.ilproj (-10行) 非機能的なテストのプロジェクトファイルを削除
パフォーマンスへの影響
影響なし (テストスイートのクリーンアップのため、パフォーマンス関連の変更なし)
関連Issue
#124883(このPRで削除が提案された)
その他
このテストは、重複するTypeDef名を持つモジュール読み込み時に例外をスローする挙動を検証することを目的としていました。しかし、二進後処理ステップ(ILasm、PEReaderでの構造確認、pewriter によるPE修正など)がリポジトリに実装されていないため、テストは実際のシナリオを検証できていませんでした。テストの再構築を望まないため、削除が最適な判断です。
#124881 Handle single-node branches in ExtractCommonPrefixNode
- 作成者: @danmoseley
- 作成日時: 2026年02月26日 02:16:21(UTC)
- マージ日時: 2026年02月26日 20:35:59(UTC)
- ラベル: area-System.Text.RegularExpressions
概要
正規表現の最適化において、先行する大文字小文字を区別しないプリフィックス抽出後に分岐が単一ノードに縮小される場合、ExtractCommonPrefixNodeが処理を停止していた問題を修正しました。例えば(http|https)というパターンでhttpではなくhttのみが抽出されていた不具合を解決しています。修正により、Concatenationと単一ノード両方の分岐を適切に処理し、共通プリフィックスを完全に抽出できるようになりました。
// 修正前: (http|https) IgnoreCase => "htt"を抽出
// 修正後: (http|https) IgnoreCase => "http"を抽出
変更内容
RegexNode.cs (+16/-15):
ExtractCommonPrefixNodeメソッドの事前ゲートチェック(すべての分岐がConcatenationである必要という制約)を削除し、抽出ループ内で分岐タイプを動的に判定。単一ノード分岐が共通プリフィックスと完全にマッチした場合、Emptyノードに置換する処理を追加RegexFindOptimizationsTests.cs (+25/-0):10の新規テストケース追加(http/https IgnoreCase、短い分岐がプリフィックス、複数文字差分、3分岐バリエーション、大文字小文字区別リグレッション検証など)
Regex.Match.Tests.cs (+5/-0):最適化後の
http|httpsパターンマッチングの正確性を検証する3つの機能テスト追加RegexReductionTests.cs (+15/-0):リグレッション防止テストを追加
パフォーマンスへの影響
影響なし。本修正は正規表現のコンパイル時最適化段階における論理的な改善であり、ランタイムパフォーマンスへの直接的な影響はありません。むしろより効率的なプリフィックス抽出により、生成される正規表現マッチング機械が最適化される可能性があります。
関連Issue
#124871
その他
修正はSystem.Text.RegularExpressions(公開API)の内部実装変更です。APIの破壊的変更はなく、既存の正規表現パターンの最適化精度が向上するため、互換性上の懸念はありません。
#124879 [release/10.0] Revert forwarding activation signal
- 作成者: @github-actions[bot]
- 作成日時: 2026年02月26日 00:41:51(UTC)
- マージ日時: 2026年02月26日 03:23:14(UTC)
- ラベル: Servicing-approved area-PAL-coreclr
概要
.NET 10.0.4 にバックポートされた変更(#124308)が vsdbg に問題を引き起こしたため、その変更の一部(アクティベーション信号をコアクラーより前に登録されたハンドラーに転送する機能)のみをリバートします。本質的な修正は維持しながら、問題を引き起こしていた追加実装を削除することで回帰を解決します。
変更内容
- src/coreclr/pal/src/exception/signal.cpp
- アクティベーション信号の転送処理を削除
- コアクラー初期化前に登録されたシグナルハンドラーへの信号転送ロジックをリバート
- 変更行数:+13/-11
パフォーマンスへの影響
影響なし。本変更はシグナル処理の動作を以前の状態に戻すもので、パフォーマンスの変化はありません。
関連Issue
#124877(本変更の原PR)、#124308(回帰を引き起こした変更)
その他
- リスク評価:Low - 信号転送の停止により、最近の変更以前の動作に戻すため、既知の安定した状態への復帰です
- テスト実施:ローカルテスト済み
- 顧客影響:内部で発見 - vsdbg を使用するユーザーへの重要な修正です
- .NET 10.0.4 のホットフィックスとして実装されるため、早期の公開が推奨されます
#124875 Fix GC handle dac bug
- 作成者: @rcj1
- 作成日時: 2026年02月25日 23:11:44(UTC)
- マージ日時: 2026年02月26日 13:50:05(UTC)
- ラベル: area-GC-coreclr
概要
複数のヒープが存在する場合のGCハンドル列挙の完全性を確保するバグ修正です。DAC(Debugging Access Component)がマルチヒープ環境でGCハンドルを正しく列挙できていなかった問題を解決します。これにより、デバッガやダンプ解析ツールが複数ヒープを持つシステムで正確なGCハンドル情報を取得できるようになります。
変更内容
- src/coreclr/debug/daccess/daccess.cpp (+16/-5): GCハンドル列挙ロジックの修正、複数ヒープ対応
- src/coreclr/gc/gc.cpp (+10/-1): GC側でのハンドル情報提供メカニズムの拡張
- src/coreclr/gc/gcinterface.dacvars.def (+3/-0): DAC用の新しいGC変数定義追加
- src/coreclr/gc/gcinterface.h (+1/-1): GCインターフェースの軽微な修正
- src/coreclr/gc/unix/gcenv.unix.cpp (+1/-1): Unix環境でのGC環境設定の調整
- src/coreclr/gc/windows/gcenv.windows.cpp (+8/-2): Windows環境でのGC環境設定の調整
パフォーマンスへの影響
影響なし。本修正はデバッグアクセスパスに限定されており、ランタイムのパフォーマンスには直接的な影響がありません。
関連Issue
#124872(マルチヒープ環境でのGCハンドル列挙不完全の問題)
その他
- DAC(Debugging Access Component)の修正であり、デバッガやダンプ解析ツール利用時の信頼性向上に貢献
- Windows/Unix両プラットフォームに対応した修正
#124869 [release/10.0] Add ERROR_NETNAME_DELETED to IsPathUnreachableError for Windows localhost removal
- 作成者: @github-actions[bot]
- 作成日時: 2026年02月25日 19:11:42(UTC)
- マージ日時: 2026年02月26日 20:12:19(UTC)
- ラベル: Servicing-approved area-System.IO
概要
Windows OS アップデートにより localhost サポートが削除されたことで発生した回帰問題に対応したパッチです。ResolveLinkTarget(returnFinalTarget: true) メソッドが ERROR_NETNAME_DELETED エラーを適切に処理できておらず、フォールバック処理が実行されず IOException が発生していました。この PR では ERROR_NETNAME_DELETED を IsPathUnreachableError に追加することで、正しくエラーハンドリングを行うようにしています。
変更内容
src/libraries/Common/src/Interop/Windows/Interop.Errors.cs
ERROR_NETNAME_DELETED定数(0x40)を追加src/libraries/Common/src/System/IO/FileSystem.Attributes.Windows.cs
IsPathUnreachableErrorパターンマッチにERROR_NETNAME_DELETEDを含める
パフォーマンスへの影響
影響なし。既存のエラーハンドリング処理にエラーコードを追加するのみで、パフォーマンス特性は変わりません。
関連Issue
#121569(main ブランチへのマージ済み)
その他
- 回帰について:Windows OS アップデートによる環境変化が原因で、2025年10月ごろの CI ビルドで新たに発生
- リスク評価:低リスク。類似のネットワークパスエラーコード(
ERROR_BAD_NETPATH、ERROR_BAD_NET_NAME、ERROR_NETWORK_ACCESS_DENIEDなど)と並行する形での追加となるため、既存の安定性に影響なし - 顧客影響:現時点でカスタマー報告はないが、環境によって今後報告される可能性あり
#124867 [release/9.0] Disable ResolveLinkTarget_Succeeds returnFinalTarget=true for UNC paths
- 作成者: @Copilot
- 作成日時: 2026年02月25日 17:52:40(UTC)
- マージ日時: 2026年02月26日 16:56:50(UTC)
- ラベル: Servicing-approved area-System.IO
概要
Windows で UNC アクセスが無効化されている環境で ResolveLinkTarget_Succeeds テストが失敗する問題を修正します。returnFinalTarget=true の場合に UNC パスの実際の解決を試みることが原因で、テストが IOException: The specified network name is no longer available で失敗していました。本変更はテストデータ生成ロジックを修正し、UNC パスに対しては returnFinalTarget=false のみを適用することで問題を回避します。
変更内容
- ファイル:
src/libraries/System.Runtime/tests/System.IO.FileSystem.Tests/Base/SymbolicLinks/BaseSymbolicLinks.csSymbolicLink_ResolveLinkTarget_PathToTarget_Dataテストデータ生成を修正returnFinalTarget=true/falseのテストケースを UNC パスとそれ以外で分離- UNC パスに対しては
returnFinalTarget=falseのみを生成し、Windows による UNC ネットワーク解決を防止
パフォーマンスへの影響
影響なし。テストデータ生成ロジックの変更のみで、ランタイムのパフォーマンスへの影響はありません。
関連Issue
- 関連する修正: dotnet/runtime#124869(10.0向けのバックポート)
その他
本変更は 9.0 および 8.0 リリースブランチ向けのテスト修正です。10.0 では根本的な修正がバックポートされているため、この対応は不要になります。Windows の UNC アクセス無効環境での CI 安定性向上が目的です。
#124865 Sve2 Scatters need a temp register for indices
- 作成者: @a74nh
- 作成日時: 2026年02月25日 17:45:52(UTC)
- マージ日時: 2026年02月26日 15:58:08(UTC)
- ラベル: area-CodeGen-coreclr community-contribution
概要
SVE2のscatter命令(非時間順序版)において、インデックスベースの形式でシフト済みオフセット値を保持するための一時レジスタが不足していた問題を修正しました。SVE1では3つのscatter形式(アドレスベクトル、単一アドレス+インデックスベクトル、単一アドレス+バイトオフセットベクトル)がサポートされていますが、SVE2のインデックス版はオフセットをシフトしてから命令を呼び出す必要があるため、このシフト値を保持する一時レジスタを確保するようにしました。
変更内容
- hwintrinsiccodegenarm64.cpp (+40/-14): SVE2 scatter命令のコード生成ロジックを修正。インデックスベースのscatter操作でオフセットをシフトするための一時レジスタ割り当てを追加
- lsraarm64.cpp (+16/-0): レジスタ割り当て分析(LSRA)の更新。SVE2 scatter命令に必要な一時レジスタをレジスタライフタイム解析に反映
パフォーマンスへの影響
直接的なパフォーマンス改善はありませんが、この修正により不正な一時レジスタ使用による予期しない挙動を防止します。オフセットシフト処理が適切なレジスタに割り当てられることで、スケジュール最適化やレジスタ割り当て効率が向上する可能性があります。
関連Issue
#124750
その他
本修正はARM64プラットフォーム固有の最適化に関するもので、C++組み込み関数の同等の実装と同じ手法を採用しています。SVE2 scatter命令の非時間順序版全体にわたって影響します。
#124853 [browser][CoreCLR] lazy and satelite assemblies
- 作成者: @pavelsavara
- 作成日時: 2026年02月25日 12:04:11(UTC)
- マージ日時: 2026年02月26日 07:23:53(UTC)
- ラベル: arch-wasm area-Host os-browser
概要
WebAssembly(WASM)ブラウザ環境におけるアセンブリのレイジーロード機能とサテライトアセンブリ対応を追加するPull Requestです。アセンブリの遅延読み込みにより、初期ロード時間の短縮とメモリ使用量の最適化を実現します。Issue #120226に関連した実装で、TypeScript/JavaScriptの相互運用層を中心に変更されています。
変更内容
- assets.ts(host): アセンブリメタデータの管理機能を拡張(+22行)
- assets.ts(loader): レイジーロードおよびサテライトアセンブリ対応ロジック追加(+91行)
- config.ts(loader): ローダー設定にレイジーロード関連オプションを追加(+5行)
- index.ts(loader): レイジーロード機能のエクスポート(+5行)
- run.ts: ランタイムの実行フロー調整
- exchange.ts: 型定義にサテライトアセンブリ関連の型を追加(+6行)
- lazy.ts: レイジーロード時のInterop処理実装
パフォーマンスへの影響
改善点:
- 初期ロード時に必須でないアセンブリの遅延読み込みが可能に
- WASMアプリケーションの初期化時間短縮
- メモリ効率向上による大規模アプリケーションの対応改善
具体的な数値は未記載ですが、設計上の効果が期待されます。
関連Issue
#120226
その他
- ブラウザ環境(WASM)向けの機能で、CoreCLRランタイムに統合
- TypeScriptで実装されたローダー層での機能拡張
- Copilotの自動レビューで問題指摘なし
#124852 [browser] Add chrome provisioning on macos
- 作成者: @radekdoulik
- 作成日時: 2026年02月25日 11:45:55(UTC)
- マージ日時: 2026年02月26日 14:50:12(UTC)
- ラベル: arch-wasm area-Infrastructure
概要
このPull Requestは、macOS上でWASMブラウザテストを実行するため、Chrome ブラウザとChromeDriverのプロビジョニング機能を追加します。Linux/Windows向けの既存プロビジョニング設定と同様の構成をmacOSに実装し、Chrome 143.0.7499.40、V8 14.3.127などのバージョン情報を含みます。
変更内容
- eng/testing/BrowserVersions.props: macOS向けChrome/V8バージョンプロパティを追加(Chrome版: 143.0.7499.40、リビジョン: 1536371、V8版: 14.3.127)
- eng/testing/wasm-provisioning.targets: macOS設定ブロックを追加し、ディレクトリ名、バイナリ名、ダウンロードURL、V8バイナリパスを構成。既存の3つのプロビジョニングターゲットのエラーメッセージをmacOS対応に更新
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
- 変更はLinux/Windows既存実装に準拠した構成で、互換性を損なわない追加機能です
- テストインフラストラクチャ(eng/testing配下)の機能拡張であり、ランタイムやコンパイラへの直接的な影響はありません
#124849 Disable FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories
- 作成者: @Copilot
- 作成日時: 2026年02月25日 06:01:46(UTC)
- マージ日時: 2026年02月26日 06:55:26(UTC)
- ラベル: area-System.IO
概要
macOS環境でReadyToRun(crossgen2)コンパイル時に継続的に失敗していたFileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectoriesテストを無効化しました。このテストはシンボリックリンク経由のディレクトリ監視でファイルシステム変更イベントの監視に関するもので、ReadyToRunコンパイル時にのみ問題が発生するため、該当条件下でのみスキップするように修正されています。
変更内容
- FileSystemWatcher.SymbolicLink.cs: テストメソッドに
[ActiveIssue]属性を追加し、PlatformDetection.IsOSXとPlatformDetection.IsReadyToRunCompiledの両条件を満たす場合にテストをスキップするよう設定。paramsコンストラクタオーバーロードを使用して、新たなプロパティ追加なしに複数条件を組み合わせています。
パフォーマンスへの影響
影響なし (テストスキップのみの変更であり、プロダクションコードへの影響はありません)
関連Issue
- #124847(macOS ReadyToRun環境でのテスト失敗)
その他
- テスト環境の特殊性: この問題はReadyToRun(AOT相当のJIT事前コンパイル)環境でのみ発生。通常のJIT実行環境では問題が出ていない
- 根本原因調査: テストスキップはテンポラリー対応であり、Issue #124847で根本原因の調査・修正が進行中と推定されます
- CI/CDパイプラインへの影響: macOS crossgen2パイプラインでの失敗がこれにより解消され、テスト実行の安定性が向上します
#124817 Implement ISOSDacInterface::GetThreadAllocData in cDAC SOSDacImpl
- 作成者: @Copilot
- 作成日時: 2026年02月24日 20:23:27(UTC)
- マージ日時: 2026年02月26日 16:53:31(UTC)
- ラベル: area-System.Threading
概要
cDAC(Compact Data Access Components)ベースの SOSDacImpl に ISOSDacInterface::GetThreadAllocData を実装しました。スレッド単位の GC アロケーションバイト数カウンター(AllocBytes と AllocBytesLoh)を gc_alloc_context から公開し、診断ツールがメモリ割り当て情報を取得できるようにします。
// ThreadAllocData レコード(新規)
public record ThreadAllocData
{
public ulong AllocBytes { get; set; }
public ulong AllocBytesLoh { get; set; }
}
変更内容
| ファイル | 変更内容 |
|---|---|
| datadescriptor.inc | GCAllocContext に AllocBytes・AllocBytesLoh フィールドディスクリプタを追加 |
| IThread.cs | ThreadAllocData レコードと GetThreadAllocContext メソッドを新規定義 |
| Thread_1.cs | GetThreadAllocContext の具体実装(スレッドのアロケーションコンテキスト読み込み) |
| GCAllocContext.cs | マネージド側で新フィールドを long プロパティとして公開 |
| SOSDacImpl.cs | GetThreadAllocData を実装(IThread コントラクト経由) |
| ISOSDacInterface.cs | DacpAllocData 構造体追加と GetThreadAllocData シグネチャ定義 |
| ThreadTests.cs | GetThreadAllocContext の単体テスト追加 |
| MockDescriptors.Thread.cs | モックディスクリプタでアロケーションコンテキスト階層とバイト値を拡張 |
| ThreadDumpTests.cs | すべてのスレッドからアロケーションコンテキスト読み込み検証の追加テスト |
| Thread.md・GC.md | 新フィールド依存関係のドキュメント更新 |
パフォーマンスへの影響
影響なし。本変更は診断インターフェース層の API 追加であり、ランタイムの実行時パフォーマンスに影響しません。スレッドのアロケーション情報読み込みは診断ツール使用時にのみ発生します。
関連Issue
Issue 番号の記載がありません。
その他
- 互換性:ISOSDacInterface の新メソッド追加のため、既存のバージョン依存 API との互換性確認が必要
- レビュープロセス:複数回のレビューサイクルを経て、マージコンフリクト修正やモックセットアップの不備も対応済み
- 公開 API の拡張:診断ツール(デバッガー、プロファイラー等)がスレッド単位のメモリ割り当て追跡に利用可能
#124816 Implement ISOSDacInterface::GetObjectClassName in cDAC SOSDacImpl
- 作成者: @Copilot
- 作成日時: 2026年02月24日 20:22:49(UTC)
- マージ日時: 2026年02月26日 23:21:46(UTC)
- ラベル: area-Infrastructure
概要
このPRはcDAC (Compact DAC)でISOSDacInterface::GetObjectClassNameの実装を追加し、レガシーのスタブを置き換えるものです。オブジェクトのMethodTableから型名を取得する機能をcDAC側で実装し、アンロード済みモジュールへの対応や複数のテストケースを含めています。
// 基本的な実装パターン
var methodTableAddress = obj.GetMethodTableAddress();
var typeHandle = runtimeTypeSystem.GetTypeHandle(methodTableAddress);
var typeName = TypeNameBuilder.AppendType(typeHandle, FormatNamespace | FormatFullInst);
変更内容
| ファイル | 変更内容 |
|---|---|
| SOSDacImpl.cs | GetObjectClassNameメソッドの実装:IObject経由でMethodTableを取得し、TypeHandleを解決。アンロード済みモジュール時は"<Unloaded Type>"を返す。TypeNameBuilder失敗時はDacStreamsにフォールバック。DEBUG時はレガシーDAC実装と検証 |
| ObjectTests.cs | ユニットテスト3種類を追加:ゼロアドレス入力、アンロード済みモジュール処理、NULLバッファでのサイズ取得。4アーキテクチャ(32/64-bit × リトル/ビッグエンディアン)対応 |
| RuntimeTypeSystemDumpTests.cs | System.ObjectおよびSystem.StringのMethodTableからモジュール解決フローを検証するダンプテスト |
パフォーマンスへの影響
影響なし。新規機能の追加であり、既存のパフォーマンスクリティカルパスへの変更がありません。
関連Issue
なし
その他
- 互換性:この実装は公開APIの置き換えであり、破壊的変更はなし
- エラーハンドリング:nullモジュールポインタをチェックしArgumentNullException防止
- フォールバック戦略:TypeNameBuilder例外発生時はDacStreams.StringFromEEAddressで代替
- テストカバレッジ:ユニットテストはMoqでコントラクトをモック、ダンプテストは実際のメタデータで検証(多層的なテスト戦略)
#124809 JIT: Fix bugs and typos in objectalloc.cpp, extract AnalyzePseudoForCloning
- 作成者: @AndyAyersMS
- 作成日時: 2026年02月24日 18:44:07(UTC)
- マージ日時: 2026年02月26日 23:53:23(UTC)
- ラベル: area-CodeGen-coreclr
概要
JIT のオブジェクト割り当て最適化コード (objectalloc.cpp) における複数のバグ修正とリファクタリング。エスケープ分析の誤りを修正し、AnalyzePseudoForCloning メソッドを新規抽出。これにより、不正なエスケープ判定やDUMP出力の不整合を解決。
変更内容
src/coreclr/jit/objectalloc.cpp
AnalyzeParentStackでの tree/parent ノード型チェックの不整合を修正(親のGT_STORE_BLK確認に統一)AnalyzeIfCloningCanPreventEscapeの break 文が早期終了していた問題を修正- JITDUMP 出力の printf 引数不足と形式指定子の欠落を修正
alloc tempエスケープチェック内のstalelclNumIndex変数参照を修正- コメント内の関数名誤記(
MorphAllocObjNodeHelperArr)を修正 - 複数のスペリングエラーをコメント内で修正(MarIndex → MarkIndex、indicies → indices、pseduo → pseudo など)
src/coreclr/jit/objectalloc.h
AnalyzePseudoForCloningメソッドの新規宣言
パフォーマンスへの影響
影響あり(コンパイル時間・最適化の正確性向上)
AnalyzeIfCloningCanPreventEscapeの break バグにより、複数の疑似オブジェクト(pseudo)の処理がスキップされていた。修正後、すべての pseudos が正確に評価され、エスケープ分析の精度が向上- tree/parent ミスマッチバグの修正により、不正なメモリ構造判定が防止され、最適化の信頼性向上
- JITDUMP の PRINTF バグ修正はデバッグ情報の正確性向上(ランタイムパフォーマンスへの直接影響なし)
関連Issue
なし
その他
- リファクタリングにより、
AnalyzeIfCloningCanPreventEscapeループ本体をAnalyzePseudoForCloningメソッドとして抽出。早期リターンの追加により可読性向上 - 本修正はJIT エスケープ分析の正確性に関わる重要なバグ修正。特に break 文バグはスタック割り当て最適化対象の遺漏につながる可能性がある
#124753 Tar: Only treat reparse points marked as junctions or symlinks as actual tar symlinks
- 作成者: @rzikm
- 作成日時: 2026年02月23日 12:57:58(UTC)
- マージ日時: 2026年02月26日 17:44:29(UTC)
- ラベル: area-System.Formats.Tar
概要
Windows上でTar作成時に、シンボリックリンク/ジャンクション以外の再解析ポイント(reparse point)を処理する際の動作を改善。従来は暗号的なエラーメッセージ(LinkTargetがnullのためLinkNameが空文字列エラー)が発生していましたが、本変更により以下の動作に統一:
- シンボリックリンク/ジャンクション:従来通りtar内で再解析ポイントとして処理
- AppExecLinkなど特定の再解析ポイント:ファイルオープン失敗時に適切なIOExceptionを発生
- ファイル重複排除などの他の再解析ポイント:通常ファイルとして含める
変更内容
主要な変更ファイル:
TarWriter.Windows.cs:Windows上での再解析ポイント判定ロジックを追加。LinkTargetがnullの場合の処理を改善し、サポートされていないファイルタイプのIOException処理を実装ReparsePointUtilities.cs:再解析ポイント判定用の新規ユーティリティクラスを追加TarWriter.Unix.cs:3行削除(重複コード整理)TarHelpers.cs:3行追加(サポートチェック関連の共通処理)- テスト:Windows固有の再解析ポイント処理用テストケースを69-70行単位で追加(非同期版含む)
パフォーマンスへの影響
影響なし
関連Issue
https://github.com/dotnet/runtime/issues/82949(Windows上の再解析ポイントを含むディレクトリのTar作成時にクラッシュする問題)
その他
破壊的変更ではなく、既存の不適切な例外処理を正常化した改善です。Windows環境でのTar作成の堅牢性が向上します。
#124715 Fix assert in JIT:new() during early initialization
- 作成者: @gwr
- 作成日時: 2026年02月22日 01:12:18(UTC)
- マージ日時: 2026年02月26日 12:41:39(UTC)
- ラベル: area-CodeGen-coreclr community-contribution
概要
JITの独立ビルドにおいて、throwing版のoperator new/deleteは上書きされていますが、nothrow版は上書きされていないため、libstdcのnothrow実装が内部的にthrowing版を呼び出す際、標準ライブラリではなくJITのアサート付きオーバーライド版を呼び出してしまう問題を修正しました。src/coreclr/jit/alloc.cppにnothrow版のoperator new/deleteオーバーライドを追加することで、libstdcがアサート付きの関数を呼び出さないようにしました。
変更内容
- src/coreclr/jit/alloc.cpp: nothrow版の
operator new/deleteオーバーライド関数を追加(+5行/-2行)
パフォーマンスへの影響
影響なし。本修正はメモリ割り当て失敗時の動作を正確にするための修正であり、通常のパフォーマンスパスには影響しません。
関連Issue
#124716の前提条件として位置づけられます。
その他
- この修正がないと、dotnetはアサーション失敗によってクラッシュします
- JITの独立ビルド環境(libstdc++を使用する環境)での問題への対応です
- 互換性への影響なし(内部実装の修正)
#124664 Eliminate forwarder stubs by reusing method precodes for call counting indirection
- 作成者: @davidwrighton
- 作成日時: 2026年02月20日 18:44:14(UTC)
- マージ日時: 2026年02月26日 21:37:56(UTC)
- ラベル: area-VM-coreclr
概要
versioningされた仮想/インターフェースメソッドのコール計数インフラストラクチャから専用のフォワーダースタブを廃止し、メソッド自体の一時エントリポイント(precode)を再利用することで、メモリオーバーヘッドと複雑性を削減しました。vtableスロットはprecodeをリセットして指し、precodeターゲットは呼び出し計数スタブにリダイレクトされます。これにより、vtableスロットが削除可能な呼び出し計数スタブを直接指すことがなくなりながら、フォワーダースタブの割り当てが完全に排除されます。
変更内容
- callcounting.cpp:
SetCodeEntryPoint()でバックパッチ可能なメソッドのフォワーダースタブ作成を廃止し、BackpatchToResetEntryPointSlots()とSetTargetInterlocked()でprecode管理に変更。CompleteCallCounting()とStopAllCallCounting()でprecode リセット処理を追加 - callcounting.h:
MethodDescForwarderStubHash関連の構造体とメンバ変数を削除。precode再利用アプローチのドキュメント更新 - method.cpp: 軽微な変更(+1/-1)
- prestub.cpp:
DoBackpatch()の注釈を更新し、precodeは prestub または呼び出し計数スタブのみを指すべきという不変性を明記
パフォーマンスへの影響
メモリ削減: フォワーダースタブの割り当てが廃止されることで、メソッド単位でのメモリ使用量削減。フォワーダースタブハッシュテーブルも廃止されるため、ヒープメモリの節減効果あり。
処理性能: コール計数時の precode 操作(SetTargetInterlocked()/ResetTargetInterlocked())が既存のフォワーダースタブ管理に比べてシンプル化され、トラッキングおよびリセット処理の複雑性低減。
関連Issue
なし
その他
重要な不変性: バックパッチ可能なメソッドの一時エントリポイント precodeターゲットは、prestubまたは呼び出し計数スタブのいずれかのみを指す必要があり、ネイティブコードを直接指してはいけません。ネイティブコードに設定するとDoBackpatch()のスロット記録がバイパスされ、後のコード版変更(ReJITなど)時にスロットが陳腐化する可能性があります。
GetMethodEntryPoint()はネイティブコードエントリポイントで保持されることで、DoBackpatch()内の早期終了チェックをスキップしないようにしています。
#124586 Fix memory leak in Assembler::EmitGenericParamConstraints
- 作成者: @tpa95
- 作成日時: 2026年02月19日 10:22:27(UTC)
- マージ日時: 2026年02月26日 15:05:48(UTC)
- ラベル: area-ILTools-coreclr community-contribution
概要
Assembler::EmitGenericParamConstraintsメソッドにおいて、ジェネリック型パラメータの制約情報を格納するバッファ(pConstraintsArrとpGPConstraintsArr)のメモリリークを修正しました。外側の配列ポインタのみが削除され、各型パラメータごとの内側のメモリ割り当てがリークしていた問題を解決します。SVACE静的解析ツールにより発見されました。
変更内容
- src/coreclr/ilasm/assembler.cpp: ポインタ配列削除前に、各パラメータのバッファを明示的に解放する処理を追加(+6行)
パフォーマンスへの影響
改善点:メモリリークの解決により、IL アセンブル処理時のメモリ使用量が削減されます。特に多数のジェネリック型パラメータを持つアセンブリのコンパイル時に累積的なメモリ効率化が期待できます。
懸念点:なし(削除処理の追加のため、パフォーマンス低下なし)
関連Issue
なし
その他
- Linux Verification Center (linuxtesting.org) の SVACE 静的解析ツールにより検出
- 実際の実行環境ではまだ顕在化されていない潜在的なメモリリーク
- IL アセンブラ(ilasm)のコア機能に関連する修正のため、全ユーザーに影響
#124504 Arm64: Add SM4 and SHA3 instructions
- 作成者: @a74nh
- 作成日時: 2026年02月17日 10:08:51(UTC)
- マージ日時: 2026年02月26日 00:36:40(UTC)
- ラベル: area-CodeGen-coreclr community-contribution
概要
ARM64アーキテクチャのJITコンパイラにSM4(暗号化)とSHA3(ハッシュ)命令セットを追加し、既存の暗号関連命令の実装を修正するPRです。umull/smull、stlurb、ldapur、smaddl などの命令グループの定義を修正し、テストケースを追加・更新しています。
変更内容
| ファイル | 変更内容 |
|---|---|
instrsarm64.h |
SM4/SHA3命令定義の追加、既存命令グループの修正(umull/smull/stlurb/smaddlなど) |
emitarm64.cpp |
命令エンコーディング実装の追加・修正(291行追加) |
emitfmtsarm64.h |
命令フォーマットの定義追加 |
codegenarm64test.cpp |
テストケースの追加・修正(sha1su1/sha256su0の配置修正、cdot値の修正) |
codegenarm64.cpp, codegenarmarch.cpp |
マイナー修正 |
パフォーマンスへの影響
SM4およびSHA3暗号化命令がネイティブコードジェネレーションで利用可能になるため、これらアルゴリズムを使用するコードの暗号処理性能が向上します。既存命令の修正(特にldapurのビット修正)により、正確な命令エンコーディングが実現されます。
関連Issue
#94425、#94426
その他
本PRは複数の暗号関連命令の定義エラーを修正しています:
- sha1su1/sha256su0の命令グループ分類を修正
- stlurb等がベクトルレジスタではなくスカラーレジスタを使用することを明確化
- cdotテスト即値の誤りを修正
- レジスタ表示問題の修正
これらは既存の潜在的なバグ修正を含む包括的なARM64暗号命令実装改善です。
#124493 Annotate ServiceDescriptor.IsKeyedService for nullability flow and sync ref assembly
- 作成者: @Copilot
- 作成日時: 2026年02月17日 01:59:44(UTC)
- マージ日時: 2026年02月26日 23:31:45(UTC)
- ラベル: area-Extensions-DependencyInjection
概要
ServiceDescriptor.IsKeyedServiceプロパティに[MemberNotNullWhen]属性を追加し、静的null可能性分析の精度を向上させました。これにより、IsKeyedServiceがtrueの場合にServiceKeyが非nullであることをコンパイラが認識でき、null許容演算子(!)の使用を不要にします。
if (descriptor.IsKeyedService)
{
object serviceKey = descriptor.ServiceKey; // null許容警告が発生しなくなる
}
変更内容
Microsoft.Extensions.DependencyInjection.Abstractions/src/ServiceDescriptor.cs
IsKeyedServiceプロパティに[MemberNotNullWhen(true, nameof(ServiceKey))]属性を追加
Microsoft.Extensions.DependencyInjection.Abstractions/ref/Microsoft.Extensions.DependencyInjection.Abstractions.cs
- ref assembly内の
IsKeyedServiceプロパティにも同じ[MemberNotNullWhen(true, "ServiceKey")]属性を追加し、公開API定義との同期を維持
- ref assembly内の
パフォーマンスへの影響
影響なし。この変更は実装のロジックを変更するのではなく、既存の実装の意図をコンパイラに正しく伝えるアノテーションの追加です。
関連Issue
dotnet/runtime#124465
その他
- 破壊的変更なし(既存コードと完全互換)
- 既存の回避策(null許容演算子の使用)は引き続き動作しますが、不要になります
- ref assembly とsrc実装の両方を更新することで、公開APIの型情報の一貫性を保証
#124441 cDAC - fix ReJIT IsEnabled
- 作成者: @noahfalk
- 作成日時: 2026年02月15日 08:35:54(UTC)
- マージ日時: 2026年02月26日 23:38:32(UTC)
- ラベル: area-Diagnostics-coreclr
概要
このPRは、DAC/cDAC環境下でのReJIT有効性検出の問題を修正します。ProfAPI_RejitOnAttach設定をターゲットランタイムにキャッシュし、cDACがデバッガプロセスの環境変数を誤って使用する代わりに、このキャッシュ値を読み込むようにしました。これにより、ReJITManager::IsReJITEnabled()がDAC環境で正確に動作するようになります。
変更内容
- profilepriv.h/profilepriv.inl:
ProfControlBlockにfRejitOnAttachEnabledフィールドを追加し、初期化時にCLRConfigから設定 - rejit.inl: ReJIT有効化チェックをDAC対応にするため、キャッシュされたランタイム状態を使用
- datadescriptor.inc: データ記述子に
ProfControlBlock.RejitOnAttachEnabledを追加 - cDAC関連:
ReJIT_1.cs:IsEnabled()メソッドを更新してRejitOnAttachEnabledを使用ProfControlBlock.cs: ターゲットメモリから新しいフィールドを読み込みReJITTests.cs:RejitOnAttach設定に基づくIsEnabled()テストを追加
- ドキュメント: ReJITコントラクト設計ドキュメントを更新
パフォーマンスへの影響
影響なし。変更はキャッシュメカニズムの導入のみであり、ランタイムパフォーマンスへの悪影響はありません。むしろ、デバッガ診断時にDAC読み込みの正確性が向上します。
関連Issue
#106148 - ReJIT IsEnabled detection under DAC/cDAC
その他
- この修正は破壊的変更ではなく、内部実装の改善です
- cDAC(Compact DAC)のデータコントラクト実装を拡張するため、デバッガ機能の信頼性が向上します
- テストカバレッジも同時に追加されており、回帰防止が可能です
#124296 Cleanup EH / stackwalk interpreter frame handling
- 作成者: @janvorli
- 作成日時: 2026年02月11日 20:50:52(UTC)
- マージ日時: 2026年02月26日 19:47:57(UTC)
- ラベル: area-CodeGen-Interpreter-coreclr
概要
インタープリター フレーム(InterpreterFrame)から管理コード/ネイティブコードへの遷移処理を、スタックフレームイテレータ内に完全に隠蔽し、例外処理(EH)コードの特殊ハンドリングを削除するリファクタリング。また、インタープリター起動時の遷移フレームを常に使用し、callee saved floating point レジスタを拡張することで、libunwindの使用を削減し、デバッガのシングルステップ実装を簡素化しています。
変更内容
- スタックウォーク処理(stackwalk.cpp): DummyCallerIPの特殊処理を削除し、インタープリター フレーム遷移を透過的に処理(+60/-84行)
- 例外処理(exceptionhandling.cpp): SfiNextWorkerでのインタープリター遷移フレーム特殊処理を完全削除(-57行)
- アセンブラ ヘルパー(複数アーキテクチャ対応): AMD64、ARM、ARM64、RISC-Vのアセンブラ で遷移フレーム拡張とcallee saved floating pointレジスタ対応を追加
- AsyncHelpers_ResumeInterpreterContinuation: QCALL からアセンブラヘルパーに変更し、有効なトランジションブロック(transition block)を持つように改修
- インタープリター EH funclets: アセンブラヘルパー経由での呼び出しに変更
- フレーム定義(frames.h/cpp): インタープリター遷移フレーム構造の拡張(callee saved FP レジスタ対応)
パフォーマンスへの影響
改善点:
- libunwindを使用しない仮想アンワインドが不要になり、フレーム遷移時の呼び出しオーバーヘッド削減
- スタックウォーク処理の簡素化による高速化(SfiNextWorkerの複雑な条件判定削除)
- トランジションフレームの常用化により、GC安全性とデバッグ情報の一貫性向上
懸念点:
- Copilot指摘:
AsyncHelpers_ResumeInterpreterContinuationで、OBJECTREF(contRef)がGC操作(GetOrCreateInterpThreadContext、InterpExecMethod、memmoveGCRefs)を跨いで保護されていない可能性。GC hole対策として GCPROTECT マクロまたは他のGC-safe機構が必要。
関連Issue
なし
その他
- 複数のアーキテクチャ(AMD64、ARM、ARM32、ARM64、RISC-V、LoongArch64)での実装が必要で、レビューアが多数参加(jkotas、BrzVlad など)
- この変更は libunwind 削減の一部であり、将来的な削除に向けた基盤整備
#124250 [Wasm RyuJit] localloc
- 作成者: @AndyAyersMS
- 作成日時: 2026年02月11日 00:12:11(UTC)
- マージ日時: 2026年02月26日 17:28:21(UTC)
- ラベル: arch-wasm area-CodeGen-coreclr
概要
WebAssembly RyuJIT コンパイラに localloc 命令のサポートを実装しました。スタック上に動的サイズのメモリを確保する機能を追加し、フレームポインタの管理、スタックアライメント(16バイト)、オーバーフロー検出対応を含みます。
変更内容
- codegenvasm.cpp: localloc の実装本体(+170行)- スタックポインタ管理とフレームポインタ保存ロジック
- emitwasm.cpp/h: WebAssembly 命令生成ロジック(+37行)- 単純なブロックシグネチャ(値をプッシュする if/else)のサポート
- lowerwasm.cpp: 低レベル最適化(+1行)- オーバーフローする乗算の適切な処理
- regallocwasm.cpp/h: レジスタ割り当て(+36行)- フレームポインタレジスタの確保と管理
- clr-abi.md: ドキュメント更新(+10行)- ABI 仕様の明記
パフォーマンスへの影響
スタック確保操作にはフレームポインタの保存とスタック16バイトアライメント調整が伴うため、初期オーバーヘッドが存在します。ただし、個別の計測値は提供されていません。大規模な動的メモリ確保を頻繁に行う場合、パフォーマンスへの影響を検証することを推奨します。
関連Issue
PR #124250(参照タイトルから)
その他
- スタックオーバーフロー検出は現在無視されています(将来の実装予定の可能性)
- ノード反復処理をリオーダリングに対応させるための改善を含みます
- Wasm ターゲット特有の実装で、他のプラットフォーム(x86/ARM)への影響はありません
#123810 Fix reachable Debug.Assert in StreamPipeReader.AdvanceTo
- 作成者: @Copilot
- 作成日時: 2026年01月30日 19:34:29(UTC)
- マージ日時: 2026年02月26日 23:31:16(UTC)
- ラベル: area-System.IO.Pipelines
概要
StreamPipeReader.AdvanceTo() メソッドで、異なる PipeReader の SequencePosition を渡した場合に到達可能な Debug.Assert を修正しました。Debug AssertをValidation例外に置き換え、無効な consumedBytes 値をチェックして InvalidOperationException をスローするようにしました。これにより、デバッグビルドでのアサート失敗だけでなく、リリースビルドでの状態破損も防止されます。
// 修正前:デバッグビルドで失敗、リリースビルドで状態破損
PipeReader reader1 = PipeReader.Create(new MemoryStream(new byte[10]));
PipeReader reader2 = PipeReader.Create(new MemoryStream(new byte[1000]));
var result2 = await reader2.ReadAsync();
reader1.AdvanceTo(result2.Buffer.End); // Debug.Assertで失敗または状態破損
// 修正後:すべてのビルドで例外をスロー
reader1.AdvanceTo(result2.Buffer.End); // InvalidOperationException
変更内容
- StreamPipeReader.cs:
Debug.Assert(_bufferedBytes >= 0)を、consumedBytesが負またはバッファサイズを超えた場合にInvalidOperationExceptionをスローするValidationに置き換え(破壊的変更でない内部実装の強化) - StreamPipeReaderTests.cs: 異なるリーダーからのPositionを使用した場合に例外がスローされることを検証するテスト
AdvanceWithPositionFromDifferentReaderThrowsを追加
パフォーマンスへの影響
影響なし。Debug Assertの代わりに条件チェックが追加されていますが、オーバーヘッドは最小限です。セグメント所有権の明示的なチェック(O(n)オーバーヘッド)は実装していません。
関連Issue
#123809
その他
修正は症状(無効な consumedBytes 値)を検証するアプローチで、セグメント所有権の明示的な確認ではありません。Pipe クラスにも同様の Debug.Assert(_unconsumedBytes >= 0) パターンがあり、同等の対応が必要な可能性があります。