Pull Request on 2026年03月10日

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

注意点

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


目次

  1. #125398 [Wasm RyuJIT] Move genHomeRegisterParams' output out of the prolog
  2. #125390 [main] Update dependencies from dotnet/icu, dotnet/runtime-assets
  3. #125380 Run CI for all copilot/. PRs
  4. #125378 JIT: Fix patchpoint info out-of-bounds read for special OSR locals
  5. #125369 Improve documentation for ServiceProvider.DisposeAsync.
  6. #125362 JIT: Stop treating GT_LCLHEAP as inherently exceptional and remove dead StackOverflowException flag
  7. #125361 Fix fatal sched_setaffinity EPERM failure during PAL initialization on restricted kernels
  8. #125346 Use ValueAsnReader in more places where it is easy to do so
  9. #125345 [Tests][UserEvents] Fix tracee discovery race and improve failure diagnostics
  10. #125344 Read USTAR prefix field for PAX format entries in TarReader
  11. #125342 [Wasm RyuJIT] Disable multireg ret assert on Wasm because we don't have multireg rets there
  12. #125331 JIT: Disallow op2 for mulx to be in edx
  13. #125322 [browser][coreclr] Fix corerun to run in browser again
  14. #125318 Adding _tls_index global pointer to DACVARs
  15. #125316 Do not AOT compile ilc/crossgen2 twice
  16. #125308 Extract diagnostic reporting out of COM class generator
  17. #125284 [RyuJIT] Add a JIT flag for Portable Entry Points and set it by default for Browser compilations
  18. #125243 Rework and simplify initial versioning and tiering rules
  19. #125176 [coreclr] Fix LoadLibraryInitializer test
  20. #124730 [wasm][coreclr] Improve reverse thunk lookup
  21. #124424 Fix Ping RoundtripTime returning 0 for TtlExpired replies
  22. #124203 Emit Async Methods in crossgen2
  23. #123890 Implement SVE2 non-temporal gather loads

#125398 [Wasm RyuJIT] Move genHomeRegisterParams' output out of the prolog

  • 作成者: @kg
  • 作成日時: 2026年03月10日 19:02:28(UTC)
  • マージ日時: 2026年03月10日 23:54:23(UTC)
  • ラベル: arch-wasm area-CodeGen-coreclr

概要

WebAssembly RyuJIT でのレジスタパラメータの初期化コード生成をプロローグから最初の基本ブロックに移行する変更です。プロローグは単一の命令グループに制限されているため、WebAssembly では大量のコードが必要になる場合があり、その対応として Swift 構造体と同様の処理方式に変更しました。同時に未初期化の insGroup メンバーのバグも修正しています。

変更内容

  • codegen.h: genHomeRegisterParams の出力先制御用のロジック追加(+5/-2)
  • codegenlinear.cpp: 初期化コード生成ロジックの実装(+10 行追加)
  • codegenwasm.cpp: WebAssembly 固有の処理変更。プロローグの制限を回避するための新規実装(+18/-7)
  • emit.cpp: 未初期化メンバーのバグ修正(+4/-1)

パフォーマンスへの影響

パフォーマンスへの直接的な改善は記載されていません。ただし、プロローグのメモリ制約を超過する場合のコード生成失敗を回避できるため、WebAssembly ターゲットの安定性が向上します。プロローグが単一命令グループに制限されている制約を回避することで、複雑な関数シグネチャでの生成コード量の柔軟性が向上します。

関連Issue

#125200

その他

  • コード生成ロジックの変更はプロローグとは異なる基本ブロック上で実行されるため、命令の配置・レジスタ割り当てに影響する可能性があります
  • Swift 構造体と同じ処理方式を採用することで、既存の実装との一貫性が向上します
  • 4 ファイルの変更で範囲は限定的で、WebAssembly JIT コンパイラの安定性向上が主な目的です

#125390 [main] Update dependencies from dotnet/icu, dotnet/runtime-assets

  • 作成者: @dotnet-maestro[bot]
  • 作成日時: 2026年03月10日 15:56:43(UTC)
  • マージ日時: 2026年03月10日 20:00:37(UTC)
  • ラベル: area-codeflow

概要

このPRは、dotnet/runtime-assetsとdotnet/icuリポジトリからの依存関係を自動更新します。runtime-assetsは16個のテストデータおよびランタイムデータパッケージを11.0.0-beta.26071.1から11.0.0-beta.26159.1へ、ICUランタイムは11.0.0-alpha.1.26063.1から11.0.0-alpha.1.26128.1へ更新します。これらは主にテストデータやICU言語処理ライブラリの定期的な依存関係更新です。

変更内容

  • eng/Version.Details.props: 依存関係バージョン情報を更新(+116/-116行)
  • eng/Version.Details.xml: 依存関係の詳細メタデータを更新(+34/-34行)

更新される主なパッケージ:

  • System.Private.Runtime.UnicodeData
  • System.Runtime.TimeZoneData
  • Microsoft.NETCore.Runtime.ICU.Transport
  • System.ComponentModel.TypeConverter.TestData、System.Data.Common.TestData等(計16個)

パフォーマンスへの影響

影響なし

これらの変更は依存関係バージョンの更新のみであり、パフォーマンスに直接的な影響はありません。ただしICUランタイムやUnicodeData、TimeZoneDataの更新に伴い、国際化処理や時刻処理の動作が若干変更される可能性があります。

関連Issue

なし

その他

  • このPRはMaestro自動化ツールにより生成された定期的な依存関係更新PRです(dotnet-maestro[bot]作成者)
  • runtime-assetsビルドは2026年3月9日、ICUビルドは2026年3月1日に産出されました
  • 変更はVersion.Details関連ファイルのみで、実装コード変更はありません

#125380 Run CI for all copilot/. PRs

  • 作成者: @adamsitnik
  • 作成日時: 2026年03月10日 12:36:32(UTC)
  • マージ日時: 2026年03月10日 16:32:06(UTC)
  • ラベル: area-Infrastructure

概要

CI/CD パイプラインの設定を変更し、copilot/*.* ブランチをターゲットとするPull Requestに対してもCI実行を有効化します。これにより、GitHub Copilotを使用した分割作業における依存PRでも、マージ前にコンパイルと動作確認のフィードバックが得られるようになります。

変更内容

  • eng/pipelines/runtime.yml: CI トリガー条件に copilot/*.* パターンを追加(+1行)

パフォーマンスへの影響

直接的なパフォーマンス改善はありません。ただし、CI リソースの使用量が増加する可能性があります(copilot/* ブランチ向けPRでもCI実行が発生)。一方、開発生産性の向上につながる可能性があります。

関連Issue

なし

その他

本変更は開発ワークフロー の改善を目的としています。GitHub Copilotで大規模タスクを小さなPRに分割する際、各依存PR(前のPR のブランチをターゲット)でもCI実行が可能になります。これにより、レビュー前に早期に問題を検出でき、開発効率が向上します。


#125378 JIT: Fix patchpoint info out-of-bounds read for special OSR locals

  • 作成者: @jakobbotsch
  • 作成日時: 2026年03月10日 12:14:03(UTC)
  • マージ日時: 2026年03月10日 16:49:29(UTC)
  • ラベル: area-CodeGen-coreclr

概要

OSR(On-Stack Replacement)JITコンパイル中に、MonitorAcquiredやasync contextなどの特殊なOSRローカル変数がenregistered(レジスタに割り当て)された場合、tier0スタックオフセットの計算時にpatchpointのオフセットテーブルを不正にアクセスしていた。新たにCompiler::lvaOSRLocalTier0FrameOffsetヘルパーメソッドを導入して、特殊なOSRローカル変数を含めたtier0フレームオフセットの検索を一元化し、out-of-bounds読み取りを防止している。

変更内容

  • compiler.h: lvaOSRLocalTier0FrameOffsetメソッドを宣言
  • compiler.cpp: 特殊なOSRローカル変数の明示的な処理を含むヘルパーメソッドを実装(+32行)
  • lclvars.cpp: tier0フレームオフセット計算時に新しいヘルパーを使用し、重複した特殊ローカル処理ロジックを削除(-20行)
  • codegencommon.cpp: enregisteredなOSRローカル変数の初期化時にヘルパーを使用

パフォーマンスへの影響

影響なし。本修正はクラッシュを防止する安定性向上であり、パフォーマンスの変化はない。

関連Issue

Fix #125255(regression from #121672)

その他

リグレッション修正。#121672で3つのローカル変数(MonitorAcquiredと2つのasync context変数)がOSRローカルとしてマークされるようになった際、これらがenregisteredされるケースでの処理が不完全だった。特にasync contextローカル変数がenregisteredされると、不正なオフセット参照によってout-of-boundsエラーが発生していた。


#125369 Improve documentation for ServiceProvider.DisposeAsync.

  • 作成者: @cincuranet
  • 作成日時: 2026年03月10日 09:40:11(UTC)
  • マージ日時: 2026年03月10日 13:24:27(UTC)
  • ラベル: area-Extensions-DependencyInjection

概要

ServiceProvider.DisposeAsync メソッドのドキュメンテーション(XML コメント)を改善する変更です。Issue #124419 に対応した documentation のみの更新となります。

変更内容

  • ファイル: src/libraries/Microsoft.Extensions.DependencyInjection/src/ServiceProvider.cs
    • 変更: +5行/-0行
    • 内容: DisposeAsync メソッドの XML ドキュメンテーションを拡充

パフォーマンスへの影響

影響なし(ドキュメンテーションのみの変更)

関連Issue

#124419

その他

  • Copilot による自動レビューでは新たなコメントは生成されていません
  • 本変更は Microsoft.Extensions.DependencyInjection ライブラリの公開APIドキュメントの改善であり、ランタイム動作への影響はありません

#125362 JIT: Stop treating GT_LCLHEAP as inherently exceptional and remove dead StackOverflowException flag

  • 作成者: @Copilot
  • 作成日時: 2026年03月10日 04:01:58(UTC)
  • マージ日時: 2026年03月10日 23:58:39(UTC)
  • ラベル: area-CodeGen-coreclr

概要

このPRは、JIT コンパイラの GT_LCLHEAP(localloc命令)ノードの例外処理を簡素化するものです。従来は例外フラグ GTF_EXCEPT により自動的に例外を発生させる可能性があるものとして扱われていましたが、この変更により例外フラグの特別扱いを廃止し、明示的な例外処理のみに統一しました。また、使用されなくなった StackOverflowException フラグを削除しています。

変更内容

ファイル 主な変更
importer.cpp GT_LCLHEAP ノードに対する GTF_EXCEPT フラグの設定を廃止。GTF_DONT_CSE フラグは保持
gentree.cpp OperExceptions() から GT_LCLHEAP ケースを削除し、StackOverflowException の自動報告を廃止
morph.cpp 関数呼び出し引数の並べ替えロジックを更新。GTF_EXCEPT に依存するのではなく、GT_LCLHEAP を明示的に検出
liveness.cpp GT_LCLHEAP 専用の不到達コード削除処理をリバート
utils.h 使用されなくなった ExceptionSetFlags::StackOverflowException 列挙値を削除
lower.cpp LowerLclHeap コメント内のパラメータ名を関数シグネチャと一致させる(小変更)

パフォーマンスへの影響

影響なし — このPRは JIT フラグ設定の簡素化であり、実行時パフォーマンスには直接的な影響を与えません。むしろ、コンパイラの複雑性を削減し、将来の最適化の基盤を整えるリファクタリングです。

関連Issue

なし

その他

  • テスト実績: build.sh clr.jitbuild.sh libs、および localloc テストスイート(localloc3_cs_r.csproj)で検証済み
  • 破壊的変更: なし(内部 JIT フラグの変更のため、公開 API への影響なし)
  • 設計の改善: GT_LCLHEAP の例外処理がフラグ駆動から明示的検出へと移行することで、JIT 実装の意図がより明確になります

#125361 Fix fatal sched_setaffinity EPERM failure during PAL initialization on restricted kernels

  • 作成者: @Pietrodjaowjao
  • 作成日時: 2026年03月10日 03:28:47(UTC)
  • マージ日時: 2026年03月10日 16:00:15(UTC)
  • ラベル: area-PAL-coreclr community-contribution

概要

Android 13とカスタマイズされたカーネル5.10を搭載するデバイスで、PALスレッド初期化時のsched_setaffinity呼び出しがEPERMエラーで失敗し、coreclr_initialize0x8007054Fエラーを返して初期化に失敗する問題を修正しました。EPERMEACCESエラーを非致命的なものとして扱い、警告をログして処理を続行するようにしました。

// 修正前:EPERMでも致命的エラーとして処理
// 修正後:EPERMとEACCESは非致命的、他のエラーのみ致命的エラー

変更内容

  • src/coreclr/pal/src/thread/thread.cpp
    • sched_setaffinityの戻り値チェックを改善
    • EPERM(操作が許可されない)とEACCES(アクセス拒否)エラーを非致命的として扱い、警告ログを出力して処理継続
    • その他のエラーは既存通り致命的エラーとしてアサート発動

パフォーマンスへの影響

影響なし - 機能的には、EPERMエラー時に制限されたCPUアフィニティを設定しない代わりに、利用可能なCPUで実行するようになるため、パフォーマンス上の大きな変化はありません。

関連Issue

  • snap環境での同様の制限に関する既知の対応:#1634

その他

  • 制限されたカーネル環境(snap confinement など)でのsched_setaffinityエラー対応は既に同ファイルとgcenv.unix.cppに存在するため、本修正はその対応範囲を拡張するものです
  • カーネル6.1以降(Android 14以上)では当該問題は発生しません
  • 実デバイス上での検証済み(Android 13デバイス)

#125346 Use ValueAsnReader in more places where it is easy to do so

  • 作成者: @vcsjones
  • 作成日時: 2026年03月09日 20:23:40(UTC)
  • マージ日時: 2026年03月10日 02:07:05(UTC)
  • ラベル: area-System.Security

概要

ASN.1パース処理でヒープ割り当てを削減するため、複数の箇所でAsnReaderValueAsnReader(スタックのみ)に置き換えました。X.509証明書、PKCS、ECC/RSA鍵形式パースなど、暗号スタック全体で7つのファイルを更新し、スパン型APIの活用によりメモリ効率を改善しています。

// 変更例: AsnReader → ValueAsnReader
// 従来: AsnReader reader = new AsnReader(bytes, AsnEncodingRules.DER);
// 新: ValueAsnReader reader = new ValueAsnReader(bytes, AsnEncodingRules.DER);

変更内容

  • X509EnhancedKeyUsageExtension.cs: EKU シーケンスデコードでValueAsnReaderを使用
  • ManagedCertificateFinder.cs: テンプレート名のASN.1文字列デコード時にValueAsnReaderを適用
  • EccKeyFormatHelper.cs: ECC指定曲線パラメータのデコード、整数バイト読み込みをスパン型APIに更新
  • CmsSignature.cs: DER DSA署名パース(DsaDerToIeee)でValueAsnReaderを使用
  • ManagedPal.cs: アルゴリズムパラメータからのIVオクテット文字列パースにValueAsnReaderを適用
  • RSAAppleCrypto.cs / RSAAppleCrypto.macOS.cs: レガシー鍵エクスポート時のシーケンス/タグ検査でValueAsnReaderを使用

パフォーマンスへの影響

改善: ヒープ割り当て削減。ValueAsnReaderはスタック上のみで動作する値型(ref struct)であるため、GC圧力が軽減。特にX.509証明書チェーン検証やPKCS署名処理など頻繁に呼び出される暗号パス全体で累積的な効率化が期待できます。.Spanアクセサの削除により、不要な仲介層をカット。

関連Issue

なし

その他

  • すべての変更は既存の「spanified」パースパターンに準拠しており、互換性への影響なし
  • リーダーが外部スコープを逃す必要のない単純なASN.1パースケースに限定した保守的な変更
  • Copilot レビューで全7ファイルを対象に検査完了、指摘なし

#125345 [Tests][UserEvents] Fix tracee discovery race and improve failure diagnostics

  • 作成者: @mdh1418
  • 作成日時: 2026年03月09日 20:19:20(UTC)
  • マージ日時: 2026年03月10日 15:01:46(UTC)
  • ラベル: area-Tracing-coreclr

概要

ユーザーイベント追跡テストの競合状態を修正し、診断機能を強化しました。ARM64 CI環境で record-trace のスタートアップに1845msかかる問題に対応し、固定の300ms遅延を「Recording started」メッセージの監視に置き換えました。

変更内容

  • Directory.Build.props: ログフィルタリング機能を有効化するプロパティを追加(+3行)
  • UserEventsTestRunner.cs:
    • ManualResetEventSlim を使用して record-trace の起動完了を待機(固定遅延の廃止)
    • --log-filter オプションで debug レベル診断情報を記録
    • DumpTraceeEvents() メソッドで追跡対象プロセスからのイベントサマリーをログ出力
    • 追跡対象プロセス終了コードのログ記録機能を追加

パフォーマンスへの影響

改善点:

  • 固定300ms遅延を廃止し、実際のイベント準備完了まで待機するため、テスト実行時間が最大300ms短縮可能
  • 不要なspinwait を排除し、ARM64環境での不安定性を解消

懸念事項なし。むしろ診断ログ出力により、失敗時の根本原因分析が迅速化します。

関連Issue

https://github.com/dotnet/runtime/issues/123442

その他

  • 診断ログはHelix上で失敗時のみアップロードされ、ストレージ効率が考慮されている
  • イベント検出失敗の原因特定が容易になり、「イベント未キャプチャ」と「メタデータ異常」の区別が可能に

#125344 Read USTAR prefix field for PAX format entries in TarReader

  • 作成者: @rzikm
  • 作成日時: 2026年03月09日 18:20:53(UTC)
  • マージ日時: 2026年03月10日 12:08:29(UTC)
  • ラベル: area-System.Formats.Tar

概要

TarReaderでPAX形式のtarballを読み込む際、USTAR prefix fieldが正しく読み込まれていないバグを修正しました。macOS bsdtarが生成する長いシンボリックリンク対象を含むtarballで、ディレクトリプレフィックスが削除されていた問題を解決します。PAX形式はUSTARを拡張しており、同じヘッダレイアウト(prefixフィールド含む)を使用するため、PAX拡張属性ヘッダの後続エントリもReadUstarAttributesを呼び出す必要がありました。

変更内容

  • TarHeader.Read.cs: TryReadAttributesメソッドの条件を変更し、TarEntryFormat.UstarだけでなくTarEntryFormat.PaxでもReadUstarAttributesを呼び出すようにしました(1行の修正)
  • TarReader.GetNextEntry.Tests.cs: macOS bsdtarの動作をシミュレートした同期テストを追加。PAX拡張属性にlinkpathのみを含む場合のprefix+name組み合わせを検証
  • TarReader.GetNextEntryAsync.Tests.cs: 上記の非同期バリアント
  • TarTestsBase.cs: テスト共通ユーティリティを追加

パフォーマンスへの影響

影響なし

関連Issue

#125332

その他

根本原因は以下の通りです:

// 修正前:TarEntryFormat.Ustarのみで呼び出し
if (header._format == TarEntryFormat.Ustar)
{
    ReadUstarAttributes(buffer, header);
}

// 修正後:PAX形式でも呼び出し
if (header._format == TarEntryFormat.Ustar || header._format == TarEntryFormat.Pax)
{
    ReadUstarAttributes(buffer, header);
}

PAX拡張属性エントリが先行する場合、形式がPAXに強制されます。その後、PAXのpath拡張属性(存在時)が正しく截断された名前をオーバーライドします。macOS bsdtarは長いシンボリックリンク対象の場合、linkpathのみを出力し、pathキーを含まないため、このバグが顕在化していました。すべての6420個のSystem.Formats.Tarテストがパスしています。


#125342 [Wasm RyuJIT] Disable multireg ret assert on Wasm because we don't have multireg rets there

  • 作成者: @kg
  • 作成日時: 2026年03月09日 17:45:24(UTC)
  • マージ日時: 2026年03月10日 20:39:34(UTC)
  • ラベル: arch-wasm area-CodeGen-coreclr

概要

WebAssembly (WASM) ターゲットにおいて、マルチレジスタ構造体戻り値に対するJITコンパイラのアサーション検証をスキップする修正です。WASMはABI上マルチレジスタ戻り値をサポートしていないため、ターゲット固有の処理分岐を追加しました。

変更内容

  • ファイル: src/coreclr/jit/lower.cpp
  • 変更: HasMultiRegRetVal() アサーションに TARGET_WASM 条件を追加して除外
    • 関数呼び出しからマルチスロット構造体結果を格納する際のデバッグ時検証を、WASMターゲットに対してのみスキップ

パフォーマンスへの影響

影響なし(デバッグ時アサーション処理の削除のため、リリースビルドへの影響なし)

関連Issue

  • #125199 関連の残存エラーを修正

その他

  • コード生成ロジック自体は正常に機能しており、アサーション検証のみの問題
  • WASM ABIの制限(マルチレジスタ構造体戻り値非サポート)に対応した条件分岐

#125331 JIT: Disallow op2 for mulx to be in edx

  • 作成者: @jakobbotsch
  • 作成日時: 2026年03月09日 13:39:29(UTC)
  • マージ日時: 2026年03月10日 11:13:54(UTC)
  • ラベル: area-CodeGen-coreclr

概要

mulx (AVX2 MultiplyNoFlags) 命令の LSRA レジスタ割り当て処理を修正しました。mulx は第1オペランドが edx に固定されていますが、codegen での移動命令の挿入を考慮して、第2オペランドが edx に割り当てられないよう制約を追加しました。これにより LSRA の理想化されたロケーションモデルと実際の codegen の動作を同期させます。

// mulx は以下のような形式が固定
// mulx edx:eax, op1(edx), op2
// op1 が別のレジスタにある場合、mov で edx に移動する際に
// op2 が edx に割り当てられていないことが必須

変更内容

  • lsraxarch.cpp: NI_AVX2(_X64)_MultiplyNoFlags に対して、第2オペランドの候補レジスタから EDX を除外する制約を追加
  • Runtime_125328.cs: 元のアサーション失敗を再現し、正しい動作を検証する JIT リグレッションテストを追加
  • Regression_ro_2.csproj: 新規リグレッションテストをプロジェクトに登録

パフォーマンスへの影響

影響なし(レジスタ割り当てロジックの正確性向上のみで、パフォーマンスの変化なし)

関連Issue

#125328

その他

この PR は、LSRA の理想化されたロケーションモデルと実際の codegen 処理のミスマッチに対する部分的な対応です。作成者は、def-use コンフリクトをレジスタ変更で解決することの設計についての検討も進めており、別途 PR で関連する制約を削除する実験を予定しています。シフト命令の ecx 制約と同様のパターンを採用しています。


#125322 [browser][coreclr] Fix corerun to run in browser again

  • 作成者: @radekdoulik
  • 作成日時: 2026年03月09日 09:02:24(UTC)
  • マージ日時: 2026年03月10日 13:26:03(UTC)
  • ラベル: arch-wasm area-Infrastructure-coreclr

概要

WebAssembly上で動作するcorerunをブラウザ環境で再度実行できるようにするための修正です。ES6モジュール形式(-sEXPORT_ES6=1 -sMODULARIZE=1)でビルドされたcorerun.jsがブラウザで正常に動作するよう、HTMLローダー、モジュールスコープの変数シャドウイング、Emscriptenのモジュール依存関係管理を修正しました。

変更内容

  • corerun.html: プレーンな<script>タグから<script type="module">に変更し、ES6インポートでselfRunをexportするよう修正
  • libCorerun.extpost.js: グローバルfetchをシャドウイングしていたvar fetch宣言を削除し、process.exit()をNode.js環境に限定、selfRun()の自動実行もNode.js のみに制限
  • libCorerun.browser.js: ブラウザ専用のEmscripten JSライブラリを追加(Node FS依存なし)
  • libCorerun.js: Node FS($NODEFS/$NODERAWFS)への無条件依存をLibraryManager.libraryチェックで条件付きに変更
  • CMakeLists.txt: CORERUN_IN_BROWSERフラグに基づいてJS ライブラリを切り替え、ENVをEXPORTED_RUNTIME_METHODSに追加

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

本修正では複数のEmscriptenモジュール化の問題に対応しています:

  1. preRunコールバック問題: Emscriptenの非同期preRunコールバックがファイルプリロード前に実行される問題を、addRunDependency/monitorRunDependenciesで仮想FS上のファイル利用可能まで遅延させることで解決

  2. モジュールスコープアクセス: FS/ENV等のグローバル変数にモジュールパラメータ経由でアクセスするよう修正

  3. 環境別の条件分岐: Node.js環境とブラウザ環境の異なる要件に対応するため、環境別ライブラリファイルとビルド時フラグを導入


#125318 Adding _tls_index global pointer to DACVARs

  • 作成者: @rcj1
  • 作成日時: 2026年03月09日 04:13:28(UTC)
  • マージ日時: 2026年03月10日 16:17:34(UTC)
  • ラベル: area-Diagnostics-coreclr

概要

.NET ランタイムのデバッグ機能を強化するため、_tls_index グローバルポインタを DACVARS(Debug-Aware Compiler Variables)に追加するパッチです。これにより、ミニダンプおよびヒープダンプのシナリオで _tls_index が正しく取得されるようになります。

変更内容

  • src/coreclr/inc/dacvars.h: _tls_index グローバルポインタを DACVARS リストに3行追加

パフォーマンスへの影響

影響なし。本変更はデバッグメタデータの定義追加であり、ランタイムのパフォーマンスには影響を与えません。

関連Issue

なし

その他

DACVARS は Debug-Aware Compiler Variables の略で、ダンパー(dumper)やデバッガが正確にランタイム内部状態を読み取るための変数定義です。_tls_index(Thread Local Storage インデックス)をここに追加することで、ダンプ解析時にスレッドローカルストレージの状態を正確に追跡できるようになり、ミニダンプやヒープダンプの分析精度が向上します。


#125316 Do not AOT compile ilc/crossgen2 twice

  • 作成者: @MichalStrehovsky
  • 作成日時: 2026年03月09日 02:28:40(UTC)
  • マージ日時: 2026年03月10日 03:27:36(UTC)
  • ラベル: area-crossgen2-coreclr

概要

CoreCLRのAOT編集ツール(ilcとcrossgen2)のビルド構成を簡潔化し、条件付きのWindows-only NativeAOT公開パスを削除して、常にシングルファイルとして公開するように統一しました。これにより、clr.toolsビルド時の冗長なAOT編集を回避します。

変更内容

ファイル 変更内容
src/coreclr/tools/aot/ILCompiler/ILCompiler_inbuild.csproj Windows-only NativeAOT公開ロジックを削除、常にシングルファイルで公開(+1/-6行)
src/coreclr/tools/aot/crossgen2/crossgen2_inbuild.csproj Windows-only NativeAOT公開ロジックを削除、常にシングルファイルで公開(+1/-6行)

パフォーマンスへの影響

改善:ビルド時間の削減

  • ilcおよびcrossgen2のAOT編集が2回行われていた冗長な処理を排除
  • 特に開発時にclr.toolsを頻繁にビルドする場合、顕著なビルド時間短縮が期待できます
  • Windows環境においても、以前のNativeAOT公開からシングルファイル公開への切り替えによる影響は最小限

関連Issue

なし

その他

  • PR #125165の結果を踏まえた変更で、crossgen2についてはNativeAOT公開が不要である可能性が確認されています
  • ilcについては元々NativeAOT公開が不要だったと作成者が述べています
  • この変更は内部ビルドツールの構成変更であり、ランタイムの公開API・機能には影響を与えません

#125308 Extract diagnostic reporting out of COM class generator

  • 作成者: @DoctorKrolic
  • 作成日時: 2026年03月08日 15:31:27(UTC)
  • マージ日時: 2026年03月10日 21:18:07(UTC)
  • ラベル: area-System.Runtime.InteropServices community-contribution

概要

このPRは、COM クラス生成時の診断報告責任を ComClassGenerator から専用の Roslyn アナライザー ComClassGeneratorDiagnosticsAnalyzer に分離するリファクタリングです。ジェネレータは純粋なコード生成に専念し、診断報告はアナライザーインフラストラクチャ経由で行われるようになりました。これにより関心の分離が改善され、ジェネレータの責務が単純化されます。

// 変更前: ジェネレータが診断を報告
public static DiagnosticOr<ComClassInfo> TryGetFrom(...)
// 変更後: ジェネレータはnullableを返却
public static ComClassInfo? TryGetFrom(...)

変更内容

  • ComClassGeneratorDiagnosticsAnalyzer.cs (+106):新規作成。COM クラス診断を報告し、エラー存在時に警告を抑制するアナライザー
  • ComClassGenerator.csTryGetFrom の戻り値を ComClassInfo? に変更し、null フィルタリングを追加
  • ComClassInfo.csDiagnosticOr<ComClassInfo> から ComClassInfo? へ変更。診断判定ロジックをアナライザーへ移譲
  • DiagnosticOr.cs (削除):不要となったインクリメンタルプロバイダーヘルパー拡張メソッドを削除
  • IncrementalGeneratorInitializationContextExtensions.cs (削除):診断登録ヘルパーを削除
  • ComClassGeneratorDiagnostics.cs:テストをアナライザー出力検証へ切り替え、テストケース拡充
  • ComClassGeneratorOutputShape.cs:型引数検証の小規模リファクタリング

パフォーマンスへの影響

影響なし

診断報告メカニズムの移行であり、コード生成の性能には直接的な影響はありません。ただし、責務分離により各コンポーネントが最適化される余地が生まれます。

関連Issue

なし

その他

**注意点:**Copilot指摘による潜在的な nullability ウォーニング発生可能性。.Where(info => info is not null) 後も ComClassInfo? として扱われるため、Nullable=enableTreatWarningsAsErrors=true の環境では .Select(info => info!) などで明示的なアンラップが必要な可能性があります。


#125284 [RyuJIT] Add a JIT flag for Portable Entry Points and set it by default for Browser compilations

  • 作成者: @kg
  • 作成日時: 2026年03月06日 22:44:45(UTC)
  • マージ日時: 2026年03月10日 18:30:38(UTC)
  • ラベル: area-CodeGen-coreclr

概要

RyuJIT JITコンパイラに対して、Portable Entry Points(ポータブルエントリポイント)用の新しいJITフラグを追加し、Browser向けコンパイルではデフォルトで有効にする変更です。これにより、WebAssemblyなどのブラウザ環境でのコンパイル最適化が改善されます。

変更内容

  • corjitflags.h: JITフラグ定義を更新し、Portable Entry Points用の新フラグを追加
  • jiteeversionguid.h: JIT-EEインターフェースのバージョンGUIDを更新(インターフェース変更に伴う更新)
  • jitee.h: JIT関連のヘッダ定義を調整
  • lclvars.cpp: ローカル変数処理の最適化ロジックを拡張(16行追加、7行削除)
  • CorInfoImpl.cs: C#側のJIT情報実装にPortable Entry Points対応を追加
  • CorInfoTypes.cs: JIT関連の型定義を更新
  • methodcontext.cpp/spmidumphelper.cpp: SuperPMI(パフォーマンス測定ツール)に新フラグの対応を追加

パフォーマンスへの影響

Browser環境(特にWebAssembly)でのコンパイル時にポータブルエントリポイントを自動的に使用することで、プラットフォーム間の互換性が向上し、エントリポイント生成のオーバーヘッドが削減される可能性があります。具体的なベンチマーク数値の記載はありませんが、Browser向けコンパイルではこのフラグがデフォルト有効化されることで、最適化の恩恵を受けます。

関連Issue

記載情報より判定不可

その他

  • JIT-EEインターフェースのバージョンGUIDが更新されているため、JITホストの実装側との互換性を確認する必要があります
  • SuperPMIツールも新フラグに対応しており、パフォーマンス計測時に正しく処理される設計になっています
  • Browser/WebAssembly向けコンパイルが主な対象となる機能です

#125243 Rework and simplify initial versioning and tiering rules

  • 作成者: @davidwrighton
  • 作成日時: 2026年03月05日 22:15:16(UTC)
  • マージ日時: 2026年03月10日 02:41:06(UTC)
  • ラベル: area-VM-coreclr

概要

このPRは、.NET Runtimeの初期バージョニングおよびティアリングルールの仕組みを大幅に簡素化したものです。呼び出し数カウント機構の無効化ステージを廃止し、JIT時の動的ロジックからEEConfig同期時の静的決定へ最適化ティアの決定を移行させることで、コード複雑性を削減しながら同等の機能を実現しています。

// 変更例:EEConfig::sync()で一度だけ最適化ティアを決定
// 従来のメソッドごとのJIT時ロジックから移行
TieredCompilation_DefaultTier = ComputeDefaultOptimizationTier();

変更内容

  • callcounting.cpp/h: CallCountingInfo::Disabledステージおよび関連メソッド(DisableCallCountingIsCallCountingEnabled等)を削除(89行削除)
  • eeconfig.cpp/h: TieredCompilation_DefaultTierを追加し、EEConfig::sync()時に最適化ティアを一度だけ計算
  • method.cpp/hpp: WasTieringDisabledBeforeJittingフラグを削除、MethodDescCodeDataに最適化ティアを直接格納
  • codeversion.cpp/h: 最適化ティア決定ロジックを簡素化
  • prestub.cpp: GetJitFlags()の単純化(デフォルト版の高速パスを削除)
  • tieredcompilation.cpp: FinalizeOptimizationTierForTier0Load()を簡素化し、R2Rロード時の動作をストレージされたティアに基づいて処理

パフォーマンスへの影響

影響なし。このPRは内部実装の簡素化であり、実行時の動作やパフォーマンス特性への直接的な変化はありません。ただし、JIT時の判定ロジックが削減されるため、若干のJIT処理時間短縮が期待できる可能性があります。

関連Issue

なし

その他

  • 互換性: 公開APIへの変更なし。内部実装の整理で、破壊的変更なし
  • 技術的意義: ティアード・コンパイレーション機構の理解と保守性が向上。呼び出し数カウント無効化を最適化ティア決定シグナルとして利用していた間接的アプローチを廃止し、より明示的な設計に変更
  • 新しいセンチネル値: OptimizationTierUnknownを追加して未初期化状態を区別

#125176 [coreclr] Fix LoadLibraryInitializer test

  • 作成者: @ilonatommy
  • 作成日時: 2026年03月04日 13:46:50(UTC)
  • マージ日時: 2026年03月10日 16:33:21(UTC)
  • ラベル: arch-wasm area-Infrastructure-coreclr os-browser

概要

CoreCLR WASM ローダーのライブラリ初期化機能に関する複数の問題を修正しました。ローダーが onRuntimeConfigLoadedonRuntimeReady コールバックに適切な引数を渡せていなかったほか、エラーハンドリングの問題を解決しています。テストの有効化と CoreCLR 専用テストケースの追加も含まれます。

変更内容

ローダー変更(run.ts, exit.ts):

  • invokeLibraryInitializersargs パラメータを追加し、onRuntimeConfigLoadedloaderConfigonRuntimeReadydotnetApigetAssemblyExports/getConfig を含む)を渡すように修正
  • exit.tsruntimeState.creatingRuntime チェックを復活(onRuntimeReady で例外発生時の対応)
  • すべてのライブラリ初期化処理で onRuntimeReady を呼び出すように統一
  • ライブラリ初期化エラーをスクリプト名でラップする共有ヘルパー関数を追加

テスト変更:

  • AbortStartupOnError を Mono 専用に、CoreCLR 専用の AbortStartupOnError_CoreCLR テストを追加(onRuntimeReady で例外をスロー)
  • WasmBasicTestApp.lib.module.jsthrowErrorOnReady クエリパラメータサポートを追加
  • BuildTestBase.csIsCoreClrRuntime ヘルパー関数を追加
  • LibraryInitializerTestsBuildWasmAppsJobsListCoreCLR.txt に追加して再有効化

パフォーマンスへの影響

影響なし

関連Issue

#124899

その他

この修正は WASM プラットフォーム上で CoreCLR ランタイムのライブラリ初期化機能の互換性を向上させます。API の変更は内部実装に限定されており、公開 API への破壊的変更はありません。


#124730 [wasm][coreclr] Improve reverse thunk lookup

  • 作成者: @radekdoulik
  • 作成日時: 2026年02月22日 20:30:11(UTC)
  • マージ日時: 2026年03月10日 10:41:50(UTC)
  • ラベル: arch-wasm area-VM-coreclr

概要

WebAssembly(wasm)環境におけるリバースサンク(JavaScript→マネージドコード呼び出し)のルックアップ機構を改善。トークンベースのプライマリキーを削除することで、cg2がヘルパー生成を引き継ぐ前のヘルパー更新の頻度を削減。衝突検出機構とログ機能を追加。

変更内容

  • callhelpers-reverse.cpp (+55/-55): リバースサンク関連のルックアップロジック刷新(55行変更)
  • helpers.cpp (+57/-52): ヘルパー初期化・管理コードを更新(109行全体)
  • callhelpers.hpp (+2/-2): ヘッダーファイルのインターフェース定義を調整
  • callhelpers-pinvoke.cpp (+1/-1): P/Invoke ヘルパー関連の軽微な調整
  • PInvokeTableGenerator.cs (+2/-2): Wasm P/Invoke テーブル生成ロジックの微調整

パフォーマンスへの影響

トークンベースキーの削除により、ヘルパー生成フェーズ前の更新処理が削減される。ルックアップ性能への直接的な改善測定値は提供されていないが、キー管理のオーバーヘッド軽減が期待される。

衝突検出機構の追加により、実行時の安全性が向上。診断ログ追加により、デバッグ時のオーバーヘッドは微増だが、本番環境では最小限。

関連Issue

なし

その他

  • この変更は Wasm/CoreCLR の相互運用機構に限定的な影響
  • cg2(次世代ヘルパー生成ツール)への段階的な移行を考慮した設計
  • 衝突検出とログは保守性・デバッグ性を強化する防御的機構

#124424 Fix Ping RoundtripTime returning 0 for TtlExpired replies

  • 作成者: @lufen
  • 作成日時: 2026年02月14日 18:26:12(UTC)
  • マージ日時: 2026年03月10日 22:05:50(UTC)
  • ラベル: area-System.Net community-contribution

概要

Ping操作がTtlExpiredまたはTimeExceededで終了した場合、RoundtripTimeが正しく取得されていなかった問題を修正しました。これまでは非Success状態のすべてのケースでRoundtripTimeが0に硬化されていましたが、今回の修正により、中間ルーターからの有効なラウンドトリップタイムをICMP_ECHO_REPLY構造体から読み取るようになりました。これによりWindows上の動作がUnixのraw socketの実装と一致するようになります。

変更内容

  • src/libraries/System.Net.Ping/src/System/Net/NetworkInformation/Ping.Windows.cs (12行変更)

    • Windows ICMP実装でTtlExpiredおよびTimeExceededステータスの場合、ICMP_ECHO_REPLY構造体からRoundtripTimeを読み取るロジックを追加
    • IPv4とIPv6の両方の実装パスで対応
  • src/libraries/System.Net.Ping/tests/FunctionalTests/PingTest.cs (56行追加)

    • TtlExpiredおよびTimeExceededシナリオでのRoundtripTimeが0ではないことを検証するテストケースを追加

パフォーマンスへの影響

影響なし。本修正は既存の状態チェック処理フローに条件分岐を追加するもので、パフォーマンス上の劣化はありません。

関連Issue

#118150

その他

Windows環境でPingの応答がTtlExpiredまたはTimeExceededの場合、RoundtripTimeが実際の値を返すようになります。これまではこれらのステータスではRoundtripTimeが常に0でしたが、修正後はUnixのraw socket実装と同様に中間ルーターから受信した有効なRTT値が返されるようになり、ネットワーク診断の精度が向上します。


#124203 Emit Async Methods in crossgen2

  • 作成者: @jtschuster
  • 作成日時: 2026年02月09日 23:25:04(UTC)
  • マージ日時: 2026年03月10日 20:09:51(UTC)
  • ラベル: area-crossgen2-coreclr runtime-async

概要

crossgen2でasync メソッドとその再開スタブ(resumption stub)をReadyToRun(R2R)イメージに直接エミットできるようにする機能追加です。async メソッドの署名にENCODE_METHOD_SIG_AsyncVariant (0x100)フラグを追加し、再開スタブはprecode fixupとしてエンコードされます。await を含まないasync メソッドは再開スタブが不要なため、エミットされません。

// async メソッドの署名にAsyncVariantフラグが追加される
// 従来: InstanceMethodテーブルに標準的なシグネチャ
// 変更: InstanceMethodテーブルにENCADE_METHOD_SIG_AsyncVariant フラグ付きで記録

変更内容

  • ReadyToRun形式の更新: async メソッド署名とresumption stub の エンコーディング仕様をドキュメント化
  • JIT統合: async.cppimporter.cppでasync メソッド検出ロジック追加
  • 署名処理: ResumptionStubEntryPointSignature.cs(新規)でresumption stub署名生成、InstanceEntryPointTableNode.csでInstanceMethod テーブル拡張
  • IL処理: ReadyToRunILProvider.csでasync メソッド用thunkコンパイルロジック追加(106行追加)
  • CorInfo インターフェース: CorInfoImpl.ReadyToRun.csでasync メソッド情報提供ロジック大幅更新(83行追加)
  • Readyを実行時リーダー: ReadyToRunReader.csでR2Rイメージからasync メソッド情報読込み対応

パフォーマンスへの影響

  • 起動時間改善: async メソッドを事前コンパイル(R2R)で提供することで、JIT コンパイルオーバーヘッド削減
  • メモリ効率: await を含まないasync メソッドは再開スタブ不要なため、無駄なコード生成を回避
  • 具体的な計測値: 提供されていません

関連Issue

なし

その他

  • 複数の工程でのレビュー(jkotas、MichalStrehovsky、jakobbotsch、davidwrighton)で設計精査済み
  • crossgen2パイプラインテスト追加(crossgen2.yml)により、回帰防止対応
  • DynamicMethodDesc/ILStub パターンに準拠した実装で、既存GC・unwind情報解決メカニズムとの互換性確保

#123890 Implement SVE2 non-temporal gather loads

  • 作成者: @ylpoonlg
  • 作成日時: 2026年02月02日 15:42:15(UTC)
  • マージ日時: 2026年03月10日 21:56:09(UTC)
  • ラベル: area-System.Runtime.Intrinsics community-contribution

概要

ARM64アーキテクチャ向けのSVE2(Scalable Vector Extension 2)非時間的ギャザーロード命令を実装するPull Requestです。SVE2のスカラブルベクトル機能を活用して、メモリから非順序的にデータを読み込む高性能な命令セットをJITコンパイラとランタイムライブラリに統合しています。

変更内容

  • JITコンパイラ側の実装

    • gentree.cpp: ツリーノードの処理ロジック追加(+31行)
    • hwintrinsic.cpp: ハードウェアイントリンシック処理の統合(+14行)
    • hwintrinsiccodegenarm64.cpp: ARM64向けコード生成の実装(+73行)
    • hwintrinsiclistarm64sve.h: SVE2命令定義の追加(+12行)
    • lsraarm64.cpp: レジスタ割り当て戦略の調整(+5行)
  • ランタイムライブラリの拡張

    • Sve2.cs: SVE2非時間的ギャザーロードイントリンシックのマネージドAPI実装(+578行)
    • Sve2.PlatformNotSupported.cs: プラットフォーム非対応時のスタブ実装(+578行)
    • System.Runtime.Intrinsics.cs: パブリックAPI参照の追加(+89行)
  • テスト実装

    • Sve2Tests.cs: SVE2機能の自動テスト生成用クラス追加(+101行)

パフォーマンスへの影響

非時間的ロード命令の実装により、キャッシュプレッシャー低下が期待されます。メモリアクセスパターンが不規則な場合、キャッシュラインの過度な汚染を回避することで、全体的なメモリサブシステムのスループット向上が見込まれます。具体的なベンチマーク数値は提供されていません。

関連Issue

#94019

その他

  • ARM64専用機能の実装(プラットフォーム非対応時のスタブも併せて実装)
  • @dotnet/arm64-contrib および @a74nh への技術レビュー依頼あり

目次