Pull Request on 2026年03月09日

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

注意点

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


目次

  1. #125340 Revert "Bump serialize-javascript and @rollup/plugin-terser in /src/native"
  2. #125320 Stop ilasm from printing warnings when -ERR option is specified
  3. #125310 Ensure DAC volatile globals included in mini dump
  4. #125307 Move NullableBool to Common with sbyte backing; replace scattered tri-state int/sbyte patterns
  5. #125292 JIT: Clean up comments and remove redundancy in flowgraph.cpp
  6. #125279 [Wasm RyuJIT] Handle case where a TYP_STRUCT return has had its type information erased and we are trying to write it to a TYP_STRUCT local
  7. #125278 [Wasm RyuJIT] Fix classifier embiggening small structs that are being passed-as a wasm primitive
  8. #125267 JIT: Disallow partial compilation of runtime async functions
  9. #125262 Re-enable Manual_CertificateOnlySentWhenValid_Success for WinHttpHandler
  10. #125261 Re-enable PlatformHandlerTest_Cookies_Http2 for WinHttpHandler
  11. #125230 Bump serialize-javascript and @rollup/plugin-terser in /src/native
  12. #125205 Refactor C# DIM resolution to match C++ structure and fix static virtual dispatch
  13. #125163 SVE: Match, NoMatch
  14. #125153 [Wasm RyuJIT] Call signatures
  15. #125141 JIT: Expand simple stfld addresses early and spill data nodes to retain evaluation order
  16. #125138 [wasm][coreclr] Fix call delegate with IL stubs
  17. #125049 Disable AIA certificate downloads for server client-cert validation by default
  18. #125017 [wasm] Bump chrome for testing - linux: 145.0.7632.116, windows: 146.0.7680.31
  19. #124963 Cache boundary delimiter strings in MultipartContent
  20. #124818 Implement ISOSDacInterface::GetLoaderAllocatorHeapNames and GetLoaderAllocatorHeaps in cDAC SOSDacImpl
  21. #124624 [X86][APX] Update the CPUID check logics for APX.
  22. #124561 Add FileHandleType enum and SafeFileHandle.Type property
  23. #122602 Implement SVE2 Counting APIs

#125340 Revert "Bump serialize-javascript and @rollup/plugin-terser in /src/native"

  • 作成者: @akoeplinger
  • 作成日時: 2026年03月09日 17:15:53(UTC)
  • マージ日時: 2026年03月09日 17:17:19(UTC)
  • ラベル: area-NativeAOT-coreclr

概要

PR #125230で行われたserialize-javascript@rollup/plugin-terserの依存関係バージョンアップをリバートするPRです。新しいバージョンではNode.jsのcryptoグローバルオブジェクトが必須となり、CI環境でのビルド失敗(ReferenceError: crypto is not defined)が発生していました。このリバートにより、以前の安定したバージョンに戻して問題を解決します。

変更内容

  • src/native/package.json: @rollup/plugin-terserのバージョンを前のバージョンにダウングレード
  • src/native/package-lock.json: パッケージロックファイルの更新(+42行/-11行)

パフォーマンスへの影響

影響なし。本変更はCI環境のビルド失敗を解決するためのリバートであり、パフォーマンスの改善や低下に関わるコード変更ではありません。

関連Issue

  • dotnet/runtime#125230(リバート対象のPR)
  • dotnet/runtime#125264(同様の問題が報告されたPR)

その他

本変更はsrc/nativeディレクトリのWebAssembly(wasm)ビルド構成に関連しています。CI環境でのRollupビルド実行時に、serialize-javascriptパッケージがNode.jsのグローバルcryptoオブジェクトへのアクセスを要求し、これが提供されていない環境での失敗が原因です。依存関係のバージョン管理時には、CI環境との互換性を事前に確認する必要があります。


#125320 Stop ilasm from printing warnings when -ERR option is specified

  • 作成者: @Copilot
  • 作成日時: 2026年03月09日 06:24:04(UTC)
  • マージ日時: 2026年03月09日 17:45:39(UTC)
  • ラベル: area-ILTools-coreclr

概要

ilasm(IL Assembler)の -ERR オプション(エラー許容モード)で、不要な警告出力を抑制する変更。このモードは意図的に無効なILを生成するテスト時に使用されますが、警告が出力されてビルドスクリプトのパイプラインを汚染する問題を解決します。

変更内容

ファイル 変更内容
src/coreclr/ilasm/grammar_after.cpp AsmParse::warn() メソッドで OnErrGo フラグが立っている場合は早期リターンして警告出力を抑止。同時に出力ストリーム判定の到達不可能な分岐を削除。
src/tools/ilasm/src/ilasm/Program.cs Managed ilasm の警告出力を !errorTolerant 条件でガード、C++ 版と同じ動作に統一。

パフォーマンスへの影響

影響なし。単純な条件分岐追加による警告出力パスの抑止のため、パフォーマンスへの影響はありません。

関連Issue

なし

その他

セキュリティ上の懸念点: Copilot が指摘している通り、src/coreclr/ilasm/grammar_after.cppAsmParse::warn() メソッドで va_start に対応する va_end の呼び出しが不足しています。本変更では既存コードを保持していますが、C/C++ の varargs 契約に従い va_end の追加が望ましい点に注意してください。このPRの本質的な目的(警告抑止)には影響しませんが、将来の修正対象として記録されるべきです。


#125310 Ensure DAC volatile globals included in mini dump

  • 作成者: @rcj1
  • 作成日時: 2026年03月08日 16:57:27(UTC)
  • マージ日時: 2026年03月09日 02:43:26(UTC)
  • ラベル: area-Diagnostics-coreclr

概要

DAC(Debug Access Component)のボラタイル グローバル変数(DEFINE_DACVAR_VOLATILEで宣言)がミニダンプに確実に含まれるよう修正しました。非ボラタイル グローバルDACVAR と同じく EnumMemCLRStatic 経由で包含されるようになり、g_pContinuationClassIfSubTypeCreated などcDAC向けの重要なグローバル変数がダンプに含まれるようになります。

変更内容

  • src/coreclr/debug/daccess/enummem.cpp
    • ボラタイル DAC グローバル変数をミニダンプ列挙対象に追加(+2行)
    • EnumMemCLRStatic 処理の拡張により、ボラタイル グローバル変数も非ボラタイル変数と同じ方法で処理されるようになりました

パフォーマンスへの影響

影響なし。ミニダンプに含まれるデータ量は微増する可能性がありますが、デバッグ情報の収集ロジック自体への性能影響はありません。

関連Issue

修正対象となったテスト失敗: https://dev.azure.com/dnceng-public/public/_build/results?buildId=1324292

その他

  • 変更は最小限の2行追加のみで、既存ロジックへの影響は限定的です
  • デバッグシナリオにおいてダンプの完全性を向上させる修正で、ランタイムの実行時動作には影響しません
  • cDAC(Compact DAC)のようなデバッガツールの診断精度向上に寄与します

#125307 Move NullableBool to Common with sbyte backing; replace scattered tri-state int/sbyte patterns

  • 作成者: @Copilot
  • 作成日時: 2026年03月08日 15:12:35(UTC)
  • マージ日時: 2026年03月09日 17:24:50(UTC)
  • ラベル: area-Meta

概要

.NETランタイム全体で散在する「遅延初期化キャッシュbool」パターンを統合し、共有のNullableBool : sbyte列挙型を導入するリファクタリングです。複数ライブラリのvolatile int/volatile sbyteを使った非標準の三値状態パターンとTextInfoの私有Tristate列挙型を置き換え、コード一貫性を向上させます。

// 新しい共有型
internal enum NullableBool : sbyte 
{ 
    Undefined = 0, 
    False = -1, 
    True = 1 
}

変更内容

  • 新規作成: src/libraries/Common/src/System/NullableBool.cssbyteバッキングの三値列挙型
  • 削除: SafeFileHandle.Unix.csの私有NullableBool列挙型(共有版に統合)
  • 置き換え対象:
    • TextInfo.cs/TextInfo.Icu.cs: TristateNullableBoolに変更
    • Environment.cs: s_privilegedProcess (volatile sbyte)
    • SslStream.Protocol.cs: TLSキャッシュ (s_disableTlsResume, s_enableServerAiaDownloads)
    • NameResolutionPal.Windows.cs: GetAddrInfoEx対応キャッシュ
    • AuthenticationHelper.NtAuth.cs: SPN設定キャッシュ
    • ConsoleUtils.cs: ANSI色出力フラグ
    • Interop.MemfdCreate.cs: memfd対応検出
    • ProcessManager.Linux.cs: プロセス名前空間マッチング(エンコーディング変更)
  • プロジェクトファイル更新: 8つのプロジェクトにNullableBool.csをリンク

パフォーマンスへの影響

  • メモリ効率: volatile sbyte (1バイト) のため、Nullable<bool>(2フィールド構造体)より効率的かつスレッドセーフ
  • 削除の改善: NameResolutionPal.Windows.csInterop.MemfdCreate.csから不要なInterlocked.CompareExchangeを削除(初期化がべき等性を持つため)
  • 全体への影響: 微小(型の統一化のみで動作は等価)

関連Issue

なし

その他

  • 互換性: 内部API変更のみ(internal enumのため破壊的変更なし)
  • テスト: 全ターゲットライブラリのビルドが成功。Windows CI のCS0246エラーはテストプロジェクトへのNullableBool.cs追加で解決
  • セキュリティ: 複数スレッドアクセスを想定した設計(bool?のティアリング問題を回避)

#125292 JIT: Clean up comments and remove redundancy in flowgraph.cpp

  • 作成者: @AndyAyersMS
  • 作成日時: 2026年03月07日 16:41:25(UTC)
  • マージ日時: 2026年03月09日 14:41:20(UTC)
  • ラベル: area-CodeGen-coreclr

概要

JITコンパイラのflowgraph.cppファイルを対象とした、コメント整備とコード冗長性の削除作業です。複数の関数のヘッダーコメントを統一フォーマットで追加・更新し、タイポ修正とコード品質の向上を実施しています。パフォーマンスに直結する変更はありませんが、保守性の向上を目指しています。

変更内容

  • ヘッダーコメントの追加: fgIsBlockCold、fgGetSharedCCtor、fgCastNeeded、fgGetCritSectOfStaticMethod に現代的なヘッダーコメント形式を追加
  • コメント形式の統一: fgCreateMonitorTree、fgConvertSyncReturnToLeave のインフォーマルなコメントを統一フォーマットへ標準化
  • 旧形式コメントの変換: fgIsThrow、fgInDifferentRegions、fgIsCommaThrow、fgAddSyncMethodEnterExit、fgMoreThanOneReturnBlock、fgInsertFuncletPrologBlock を /*** から //-------- 形式へ統一
  • ヘッダー誤記修正: fgGetStaticsCCtorHelper(BasicBlockと記載されていたが実際はGenTreeCallを返却)、IsDecreasingLoop(IsIncreasingLoopと誤記)
  • タイポ修正: helepr → helper、depents → depends、openrand → operand、querstion → question、desinator → designator、enclsoing → enclosing、domnates → dominates
  • コードスタイル改善: Yoda比較(BBJ_SWITCH との比較)を block->KindIs(BBJ_SWITCH) へ統一
  • 冗長処理削除: AnalyzeIteration関数で重複していた2番目のVisitDefs走査を削除(既にexit edgeループで実施済み)

パフォーマンスへの影響

冗長処理削除による改善: AnalyzeIteration関数でのVisitDefs走査の重複排除により、ループ解析フェーズのコンパイル時間が若干改善される可能性があります。ただし、flowgraph.cpp 内の局所的最適化のため、全体的なJITコンパイル性能への影響は限定的と考えられます。

関連Issue

なし

その他

本変更は言語非依存的な保守性向上作業です。JITコンパイラのコードベース品質向上の一環として、将来の機能拡張やバグ修正の効率化に寄与します。


#125279 [Wasm RyuJIT] Handle case where a TYP_STRUCT return has had its type information erased and we are trying to write it to a TYP_STRUCT local

  • 作成者: @kg
  • 作成日時: 2026年03月06日 21:39:25(UTC)
  • マージ日時: 2026年03月09日 21:06:50(UTC)
  • ラベル: arch-wasm area-CodeGen-coreclr

概要

WebAssembly RyuJIT コンパイラで、TYP_STRUCT 戻り値の型情報が消去されたケースに対応する修正。構造体型の戻り値がローカル変数に書き込まれる際の型情報管理の問題を解決します。

変更内容

  • ファイル: src/coreclr/jit/regallocwasm.cpp
    • 変更: +15行/-4行(合計19行修正)
    • 主な変更: WASM 環境下での構造体戻り値の型情報復元ロジック追加
    • 影響範囲: WASM プラットフォーム向け RyuJIT レジスタアロケータ

パフォーマンスへの影響

影響なし

この修正はコンパイル段階での型情報処理に関するもので、生成されるコード自体のパフォーマンスへの直接的な影響はありません。

関連Issue

#125199

その他

  • レビューコメント: Copilot により 2 件のコメント生成
  • 作成者の注記: 「この解決方法について改善案のフィードバック歓迎」とのことで、暫定的な修正の可能性あり
  • WASM 環境での構造体型の型情報管理に関する複雑な問題に対応

#125278 [Wasm RyuJIT] Fix classifier embiggening small structs that are being passed-as a wasm primitive

  • 作成者: @kg
  • 作成日時: 2026年03月06日 20:30:44(UTC)
  • マージ日時: 2026年03月09日 16:38:23(UTC)
  • ラベル: arch-wasm area-CodeGen-coreclr

概要

WebAssembly (Wasm) RyuJIT コンパイラにおいて、小さな構造体(struct)がWasm プリミティブとして渡される際に、不正にサイズが拡大される問題を修正しました。この修正により、構造体の分類(classifier)ロジックが正確に動作し、パラメータ渡しの最適化が改善されます。

変更内容

  • src/coreclr/jit/targetwasm.cpp: 7行の変更(+5/-2)
    • Wasm プリミティブとして渡される小さな構造体に対する分類ロジックの修正
    • 構造体のサイズ拡大を防ぐためのチェック処理を改善

パフォーマンスへの影響

改善が期待される:

  • 小さな構造体パラメータの渡し方が最適化され、不要なメモリコピーが削減
  • Wasm コード生成の効率化による実行時オーバーヘッドの軽減
  • 具体的な計測値は PR の情報には含まれていません

関連Issue

#125199(部分的に対応)

その他

  • 変更はコンパイラの内部実装(JIT)に限定されており、公開API への影響はなし
  • Wasm ターゲット固有の修正のため、他のプラットフォーム(x86、ARM64など)への影響なし

#125267 JIT: Disallow partial compilation of runtime async functions

  • 作成者: @jakobbotsch
  • 作成日時: 2026年03月06日 12:46:05(UTC)
  • マージ日時: 2026年03月09日 11:27:42(UTC)
  • ラベル: area-CodeGen-coreclr

概要

ランタイム非同期関数におけるTier0 Partial Compilation(部分コンパイル)を禁止する変更です。部分コンパイルがIR(中間表現)を削除することで、ランタイム非同期関数の生存期間分析(liveness analysis)が不正確になり、OSR(On-Stack Replacement)遷移後に必要な変数をキャプチャできなくなる問題を修正します。

変更内容

src/coreclr/jit/importer.cpp

  • OSR有効化と部分コンパイル有効化を別々のブール値(enableOSRenablePartialCompilation)に分離
  • compIsAsync()がtrueの場合、部分コンパイルパッチポイントのマーキングを禁止する条件を追加

パフォーマンスへの影響

改善点: 非同期関数におけるOSR遷移時の変数キャプチャの正確性が向上し、変数漏落による実行エラーを防止します。

懸念点: 部分コンパイルが非同期関数に適用されなくなるため、該当関数のコンパイル最適化がやや制限される可能性があります。ただし、正確性の方が優先されます。

関連Issue

#125247 - 部分コンパイル時の非同期関数における変数キャプチャの失敗問題

その他

将来的にこの機能を有効化する場合の推奨方針として、TransformPartialCompilation内で使用を保持し、CORINFO_HELP_PATCHPOINT_FORCEDの引数として追加する方式が提案されています。これはより包括的なソリューションになる見込みです。


#125262 Re-enable Manual_CertificateOnlySentWhenValid_Success for WinHttpHandler

  • 作成者: @ManickaP
  • 作成日時: 2026年03月06日 09:05:07(UTC)
  • マージ日時: 2026年03月09日 15:23:14(UTC)
  • ラベル: area-System.Net.Http

概要

WinHttpHandler の Manual_CertificateOnlySentWhenValid_Success テストを再度有効化するPRです。以前は issue #69238 で報告されたクライアント証明書送信時の断続的な失敗(WINHTTP_CALLBACK_STATUS_REQUEST_ERROR)を回避するため、スキップされていました。作成者が 20 回連続実行で 0 失敗を確認したため、skip ガードを削除してテストを復活させます。

変更内容

  • ファイル: src/libraries/Common/tests/System/Net/Http/HttpClientHandlerTest.ClientCertificates.cs
  • 変更内容:
    • // [ActiveIssue("...")] コメント(既知の問題マーク)を削除
    • WinHttpHandler のテストをスキップしていた if (IsWinHttpHandler) throw new SkipTestException(...) ガードを削除
    • 削除行数: 3 行

パフォーマンスへの影響

影響なし(テスト スイートの追加実行)

関連Issue

  • #69238: WinHttpHandler でのクライアント証明書テストの断続的失敗

その他

テスト検証済み:

  • Windows 環境で実行(net11.0 および net481 TFM)
  • 20 回連続実行で全実行において 0 失敗
  • フレーキーな動作は観測されず

この変更により、以前は断続的に失敗していた WinHttpHandler のクライアント証明書関連テストが恒久的に有効化されます。


#125261 Re-enable PlatformHandlerTest_Cookies_Http2 for WinHttpHandler

  • 作成者: @ManickaP
  • 作成日時: 2026年03月06日 09:04:57(UTC)
  • マージ日時: 2026年03月09日 14:32:07(UTC)
  • ラベル: area-System.Net.Http

概要

WinHttpHandler の HTTP/2 クッキー機能テスト (PlatformHandlerTest_Cookies_Http2) を再度有効化するPRです。以前は #if !WINHTTPHANDLER_TEST プリプロセッサガードで無効化されていましたが、このガードを削除して全プラットフォームハンドラーに統一したテストカバレッジを実現します。20回の連続実行で全テストが成功し、フレーキネス(不安定性)は観測されていません。

変更内容

ファイル 変更内容
src/libraries/System.Net.Http.WinHttpHandler/tests/FunctionalTests/PlatformHandlerTest.cs #if !WINHTTPHANDLER_TEST プリプロセッサガード(2行)を削除し、PlatformHandlerTest_Cookies_Http2 テストクラスを WinHttpHandler ビルドで有効化

パフォーマンスへの影響

影響なし。本変更はテストコードの有効化であり、本番コードへのパフォーマンス影響はありません。ただしテスト実行時間は増加します(新たに HTTP/2 クッキーテストが実行される)。

関連Issue

dotnet/runtime#33930

その他

  • 検証状況: Windows環境での検証が完了
    • net11.0 TFM: 60テスト/実行
    • net481 TFM: 28テスト/実行
    • 20回連続実行で全テスト成功(0失敗)
    • フレーキネス観測なし
  • テスト対象: GetAsync_ReceiveSetCookieHeader 関連テストを含む HTTP/2 クッキー処理機能

#125230 Bump serialize-javascript and @rollup/plugin-terser in /src/native

  • 作成者: @dependabot[bot]
  • 作成日時: 2026年03月05日 17:50:59(UTC)
  • マージ日時: 2026年03月09日 15:47:38(UTC)
  • ラベル: area-codeflow javascript dependencies

概要

dotnet/runtimeの/src/nativeディレクトリに含まれるNode.jsの依存関係を更新するPRです。serialize-javascriptを6.0.2から7.0.4に、@rollup/plugin-terserを0.4.4から1.0.0にアップグレードします。これらの依存関係は相互に関連しているため、一緒に更新する必要があります。

変更内容

  • src/native/package.json: @rollup/plugin-terserのバージョンを0.4.4から1.0.0に更新(1行変更)
  • src/native/package-lock.json: ロックファイルを更新し、serialize-javascript@rollup/plugin-terserの依存関係を反映(+11行、-42行)

パフォーマンスへの影響

影響なし。このPRは開発ツールチェーン(Rollupプラグイン)の依存関係更新であり、ランタイムのパフォーマンスに直接的な影響はありません。

セキュリティとバグ修正

重要: serialize-javascript v7.0.3に含まれるセキュリティ修正

  • CVE-2020-7660の脆弱性修正:RegExp.flagsおよびDate.prototype.toISOString関連の問題を解決
  • 機能のサニタイズ化:v7.0.1でfunction bodyのサニタイズ処理が追加(セキュリティ強化)

互換性への影響

破壊的変更あり

  • serialize-javascript v7.0.0からNode.js v20以上が必須(旧バージョンからの制限強化)
  • @rollup/plugin-terser v1.0.0はserialize-javascript v7への対応が必須

関連Issue

なし

その他

このPRは自動生成されたDependabot PR(dependabot[bot]作成)であり、セキュリティアップデートが含まれているため、マージを推奨します。ツールチェーン内でのバージョン依存関係の整合性が確保されています。


#125205 Refactor C# DIM resolution to match C++ structure and fix static virtual dispatch

  • 作成者: @MichalStrehovsky
  • 作成日時: 2026年03月05日 04:20:58(UTC)
  • マージ日時: 2026年03月09日 00:28:40(UTC)
  • ラベル: area-NativeAOT-coreclr

概要

このPRはNativeAOTの型システムにおけるDefault Interface Method (DIM)解決とstatic virtual メソッドディスパッチをC++ランタイム実装に合わせるリファクタリングです。static virtualメソッドのリファレンス型での処理バグを修正し、ILC Scannerのクラッシュを解決します。

// static virtualメソッドがクラスでも正常に動作するように修正
interface IStatic
{
    static virtual void M();
}

class Impl : IStatic
{
    public static void M() { }
}

変更内容

  • DIM解決のリファクタリング: MetadataVirtualMethodAlgorithm.csFindDefaultInterfaceImplementationワーカーメソッドを統一実装(allowVarianceフラグ付き)し、C++実装構造と一致させた
  • Static virtual dispatch修正: TypeExtensions.csTryResolveConstraintMethodApproxをリファレンス型(クラス)でのstatic virtualに対応、static virtualチェックをvalue type前に移動
  • Canonical equivalence処理: IsCanonicalDefinitionTypeガードをcanonicalEquivalentFoundチェックに変更してC++実装に同期
  • アサーション緩和: Scanner・RyuJITアサーションをIsValueType || Signature.IsStaticに拡張
  • ILC Scanner修正: GenericLookupResult.csHasInstantiationをVTable呼び出し前にチェック、Generic Virtual Methods(GVM)のみのインターフェース処理でクラッシュ解決
  • テスト追加: StaticVirtualOnReferenceType、GenericStaticVirtualMethod、CanonicalEquivalentFound、StaticVirtualDIMOnReferenceTypeなど複数の回帰テストを追加

パフォーマンスへの影響

影響なし。本変更はコード構造の整理とバグ修正が主体で、アルゴリズム計算量に変化なし。むしろILC Scannerのクラッシュ修正により、GVM専用インターフェース処理の効率が向上。

関連Issue

  • #88690(static virtualディスパッチバグ)
  • #121167(先行PR)

その他

  • Loaderテスト数が642から646に増加(4つの新規回帰テスト追加)
  • C++実装との構造的な同期により、将来のメンテナンスと互換性が向上
  • 破壊的変更なし。公開API変更なし。

#125163 SVE: Match, NoMatch

  • 作成者: @dhartglassMSFT
  • 作成日時: 2026年03月04日 02:14:15(UTC)
  • マージ日時: 2026年03月09日 20:21:22(UTC)
  • ラベル: area-System.Runtime.Intrinsics

概要

ARM64 SVE2アーキテクチャ向けのMatchおよびNoMatchイントリンシクを追加しました。これらは3つのベクトルパラメータ(マスク、左、右)を受け取り、条件付きで値を選択する操作です。対応型はsbyte、short、byte、ushortです。

public static unsafe Vector<T> Match(Vector<T> mask, Vector<T> left, Vector<T> right);   // MATCH命令
public static unsafe Vector<T> NoMatch(Vector<T> mask, Vector<T> left, Vector<T> right);  // NMATCH命令

変更内容

  • src/coreclr/jit/hwintrinsiclistarm64sve.h: JITイントリンシックテーブルに新しいSVE2イントリンシック2つを登録
  • src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Arm/Sve2.cs: Match/NoMatchのSVE2 API実装(55行追加)
  • src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Arm/Sve2.PlatformNotSupported.cs: SVE2非対応プラットフォーム向けのPlatformNotSupportedExceptionスタブ(53行追加)
  • src/libraries/System.Runtime.Intrinsics/ref/System.Runtime.Intrinsics.cs: パブリックAPI宣言(8行追加)
  • src/tests/Common/GenerateHWIntrinsicTests/Arm/Sve2Tests.cs: テスト生成器にエントリ追加(10行追加)
  • src/tests/JIT/HardwareIntrinsics/Arm/Shared/Helpers.cs: 期待値計算用のテストヘルパー実装(38行追加)

パフォーマンスへの影響

影響なし。新規APIの追加であり、既存コードのパフォーマンス特性は変わりません。SVE2ハードウェアで実行時は、ネイティブMATCH/NMATCH命令として最適化されます。

関連Issue

#94021(部分的に貢献)

その他

本PR は#94021の段階的実装の一部です。公開API変更ですが、SVE2対応のARM64プラットフォーム限定であり、他プラットフォームではPlatformNotSupportedExceptionが発生します。テストの自動生成インフラも整備されています。


#125153 [Wasm RyuJIT] Call signatures

  • 作成者: @kg
  • 作成日時: 2026年03月03日 23:12:32(UTC)
  • マージ日時: 2026年03月09日 20:38:59(UTC)
  • ラベル: arch-wasm area-CodeGen-coreclr

概要

WebAssembly (Wasm) RyuJIT コンパイラで正しいコール署名を生成することにより、有効なモジュール生成をサポートします。これにより、GC Write Barrier ヘルパーなどの関数呼び出しに対して、正確な型情報を含む call_indirect 命令が生成されるようになります。

変更内容

  • codegenwasm.cpp (+106/-12): Wasm コール署名の生成ロジックを実装
  • emitwasm.cpp/h (+19/-17, +3/-1): WebAssembly 命令エミッタで署名インデックスをサポート
  • instrswasm.h (+2/-0): Wasm 命令定義に署名関連情報を追加
  • emit.h (+3/-0): 共通エミッタインターフェイスに署名サポート追加
  • lower.cpp/registeropswasm.cpp/h: ローレベル最適化パス で署名情報を伝播
  • morph.cpp (-5): 不要な処理を削除

生成されるコードは call_indirect tables[0] ; v(ii) のような形式で、テーブルインデックスと関数型署名を含むようになります。

パフォーマンスへの影響

影響なし。本変更は正確性の向上に焦点を当てており、生成されるコードの型安全性を確保しますが、実行時パフォーマンスへの直接的な影響はありません。

関連Issue

なし

その他

重要な制限: 本PR では WebAssembly アドレス再配置 (address relocation) を crossgen で完全サポートしていません。そのため、ヘルパー関数アドレスは __r2r_start グローバル変数からのオフセットとして「生値」で埋め込まれています。これは暫定的な実装であり、将来の改善が必要です。


#125141 JIT: Expand simple stfld addresses early and spill data nodes to retain evaluation order

  • 作成者: @jakobbotsch
  • 作成日時: 2026年03月03日 18:05:07(UTC)
  • マージ日時: 2026年03月09日 22:25:29(UTC)
  • ラベル: area-CodeGen-coreclr

概要

JITコンパイラのstfld(構造体フィールドストア)命令処理において、評価順序のバグを修正するPRです。従来はobj -> nullcheck(obj) -> data -> storeの順序で評価されていましたが、正しくはobj -> data -> nullcheck(obj) -> storeである必要があります。本修正では、(1)単純なフィールドアドレスの早期展開と、(2)必要に応じてデータノードのスピル処理を導入することで、評価順序を正しく保証します。

変更内容

  • importer.cpp: 単純なフィールドアドレスの早期展開ロジック(約94行追加)とデータノードのスピル処理を実装
  • compiler.h: 新規ヘルパー関数の宣言追加(2行追加)
  • importercalls.cpp: 不要なコード削除(3行削除)
  • lclmorph.cpp: 軽微な修正(1行変更)
  • Runtime_125124.cs: 回帰テストケース追加(48行)- stfld命令の評価順序を検証するテスト

パフォーマンスへの影響

改善の見込みあり。データノードのスピル処理により、不要なレジスタ割り当てを回避でき、場合によってはメモリ効率が向上する可能性があります。ただし、詳細なベンチマーク結果は記載されていません。

// 修正対象のコード例
// 修正前(評価順序が不正)
STORE(FIELD_ADDR(obj), data)  // obj -> nullcheck -> data -> store

// 修正後(評価順序が正しい)
obj -> data -> nullcheck(obj) -> store

関連Issue

  • #125124 (修正対象)
  • #125343 (morph段階での不正な変換に関連、別途対応予定)

その他

本PRはimporter段階での修正であり、morph段階での不正な変換そのものは#125343で別途対応予定です。JIT最適化パイプラインの初期段階で評価順序を厳密に制御することで、後続の最適化がより正確になることが期待されます。


#125138 [wasm][coreclr] Fix call delegate with IL stubs

  • 作成者: @radekdoulik
  • 作成日時: 2026年03月03日 17:58:12(UTC)
  • マージ日時: 2026年03月09日 07:51:58(UTC)
  • ラベル: arch-wasm area-CodeGen-Interpreter-coreclr

概要

WebAssembly環境でのインタープリタにおいて、オープン仮想デリゲートをインターフェースメソッド経由で呼び出す際のクラッシュを修正しました。インタープリタコードが未コンパイルの場合、fallback pathが不正なエントリーポイントをNonVirtualEntry2MethodDescに渡していたため、IsValid()アサーションで失敗していました。修正により、解決されたメソッドをDoPrestubで事前コンパイルしてからインタープリタコード確認を行うようにしました。

変更内容

  • interpexec.cpp (+50/-37): EnsureInterpreterCodeヘルパーメソッドを抽出し、既存のCALL_INTERP_METHOD logicと重複を排除。オープン仮想デリゲート呼び出しパスでDoPrestubを呼び出すように修正
  • method.hpp (+12/-0): EnsureInterpreterCodeヘルパーの宣言を追加
  • テストファイル: issue #124221の解決に伴い、Runtime_70259、Runtime_79354、GSDelegateテストのActiveIssue属性を削除

パフォーマンスへの影響

パフォーマンス上の負の影響なし。修正前はクラッシュしていたため、本修正によりインタープリタ経由のデリゲート呼び出しが正常に動作するようになります。事前コンパイル(DoPrestub)は既存のCALL_INTERP_METHOD logicと同じ処理フローを採用しており、追加のオーバーヘッドはありません。

関連Issue

  • #124221(この修正で解決)
  • #125138(このPull Request番号)

その他

  • WASM + CoreCLR環境におけるインタープリタのメソッドディスパッチロジックの修正
  • FEATURE_PORTABLE_ENTRYPOINTS機能が有効な環境での不正なエントリーポイント処理を改善
  • テストスイート(Runtime_70259、Runtime_79354、GSDelegate)で実装の正確性が確認済み

#125049 Disable AIA certificate downloads for server client-cert validation by default

  • 作成者: @rzikm
  • 作成日時: 2026年03月02日 13:32:08(UTC)
  • マージ日時: 2026年03月09日 09:12:43(UTC)
  • ラベル: area-System.Net.Security breaking-change needs-breaking-change-doc-created

概要

TLS ハンドシェイク時にサーバー側の SslStream インスタンスで Authority Information Access (AIA) 拡張を使用した中間証明書の自動ダウンロードをデフォルトで無効化する変更です。これにより、パフォーマンス低下と、クライアント指定エンドポイントへのアウトバウンド HTTP GET リクエストによるセキュリティリスクを軽減します。ユーザーが X509ChainPolicy を明示的に指定している場合は影響を受けません。

変更内容

  • SslStream.Protocol.cs: サーバー側の証明書チェーン検証時に AIA ダウンロードを無効化するロジックを追加(+35行)
  • SslStreamRemoteExecutorTests.cs: サーバー側証明書検証の AIA ダウンロード無効化動作を検証するテストを追加(+59行)

パフォーマンスへの影響

改善点:

  • AIA サーバーへのネットワーク I/O が発生しないため、TLS ハンドシェイクのレイテンシ削減
  • 応答が遅いまたは無応答の AIA サーバーによるハンドシェイク遅延を回避

懸念点:

  • クライアントが必要な中間証明書をハンドシェイクに含めない場合、証明書検証に失敗する可能性あり

関連Issue

Issue #125049

その他

破壊的変更の可能性: この変更は以下のシナリオで既存の動作を変更します:

  • クライアントがハンドシェイクに必要な中間証明書を送信していない場合
  • サーバーの証明書ストアに必要な中間証明書がない場合

対応方法:

// 方法1: X509ChainPolicyで中間証明書を明示的に指定
var chainPolicy = new X509ChainPolicy();
chainPolicy.ExtraStore.Add(intermediateCert);
chainPolicy.DisableCertificateDownloads = true;
sslOptions.CertificateChainPolicy = chainPolicy;

// 方法2: 証明書ストアに中間証明書をインストール
// または
// 方法3: AIA ダウンロードを許可(非推奨)
var chainPolicy = new X509ChainPolicy 
{ 
    DisableCertificateDownloads = false 
};

#125017 [wasm] Bump chrome for testing - linux: 145.0.7632.116, windows: 146.0.7680.31

  • 作成者: @github-actions[bot]
  • 作成日時: 2026年03月01日 00:11:13(UTC)
  • マージ日時: 2026年03月09日 18:53:15(UTC)
  • ラベル: arch-wasm area-Infrastructure-mono

概要

Chrome for Testingのバージョンをアップデートしました。Linuxを145.0.7632.116に、Windowsを146.0.7680.31にバンプしています。また、Wasmテンプレートテストのベースクラスにテスト用コードが追加されました。

変更内容

  • eng/testing/BrowserVersions.props

    • Chrome for Testingのバージョン定義を更新(Linux/Windowsで異なるバージョン指定)
  • src/mono/wasm/Wasm.Build.Tests/Templates/WasmTemplateTestsBase.cs

    • テスト用の新規コード追加(13行)
    • Wasmテンプレートテスト基盤の拡張

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

本変更はChrome for Testingのメンテナンス用自動更新(github-actions[bot]による定期更新)です。Wasmテンプレートテストの動作確認にあたり、テスト環境のブラウザバージョンを最新化することで、テストの信頼性向上が期待されます。


#124963 Cache boundary delimiter strings in MultipartContent

  • 作成者: @cincuranet
  • 作成日時: 2026年02月27日 12:26:01(UTC)
  • マージ日時: 2026年03月09日 10:10:14(UTC)
  • ラベル: area-System.Net.Http

概要

MultipartContentクラスのコンストラクタで境界デリミタ文字列(_startBoundary_endBoundary)をプリコンピュートしてキャッシュすることで、SerializeToStreamSerializeToStreamAsyncCreateContentReadStreamの呼び出し時における繰り返しの文字列連結を回避します。また、SerializeHeadersToStreamでの書き込み呼び出しを3回から2回に削減します。

変更内容

  • src/libraries/System.Net.Http/src/System/Net/Http/MultipartContent.cs
    • _startBoundary_endBoundaryフィールドの初期化をコンストラクタで実施
    • 境界デリミタ文字列の事前生成により、後続のSerializeメソッド内での文字列連結処理を削減
    • SerializeHeadersToStreamメソッドの書き込み操作を最適化(3呼び出し→2呼び出し)

パフォーマンスへの影響

改善点:

  • MultipartContentインスタンスのシリアライズ処理における文字列連結の削減により、CPU使用率とアロケーションが減少
  • ストリーム書き込み呼び出し回数の削減(3回→2回)によるI/Oオーバーヘッドの軽減
  • コンストラクタ実行時に一度のみ文字列生成を行うため、複数回のSerializeToStream呼び出し時に効果が顕著

懸念点: 特に記載なし(変更は明らかに最適化)

関連Issue

記載なし

その他

  • 変更行数は比較的小さい(+23/-33)で、既存の動作に対する破壊的変更なし
  • キャッシング戦略により、MultipartContentの複数回の使用シーンで効果的
  • HTTPマルチパートリクエスト処理の性能向上に寄与する内部実装最適化

#124818 Implement ISOSDacInterface::GetLoaderAllocatorHeapNames and GetLoaderAllocatorHeaps in cDAC SOSDacImpl

  • 作成者: @Copilot
  • 作成日時: 2026年02月24日 20:24:35(UTC)
  • マージ日時: 2026年03月09日 20:03:04(UTC)
  • ラベル: area-Diagnostics-coreclr

概要

このPRは、マネージドcDACでISOSDacInterface13.GetLoaderAllocatorHeapNamesISOSDacInterface13.GetLoaderAllocatorHeapsを実装し、レガシーDAC委譲スタブを置き換えます。LoaderAllocatorとVirtualCallStubManagerのヒープ情報をネイティブデータディスクリプタから取得し、ディクショナリ形式で提供する機能です。診断ツールがランタイムのメモリ管理情報にアクセスするための重要な実装となります。

変更内容

ネイティブレイヤー:

  • loaderallocator.hpp: StaticsHeap、ExecutableHeap、条件付きヒープ(FixupPrecodeHeap、NewStubPrecodeHeap、DynamicHelpersStubHeap、VirtualCallStubManager)をcdac_dataに追加
  • virtualcallstub.h: VirtualCallStubManager用cdac_data特殊化を追加(IndcellHeap、CacheEntryHeap)
  • datadescriptor.inc: 機能ガード付きでLoaderAllocatorおよびVirtualCallStubManagerフィールドを登録

マネージドレイヤー:

  • ILoader.cs: GetLoaderAllocatorHeaps(TargetPointer) メソッドを追加(ヒープ名→ポインタのディクショナリを返却)
  • Loader_1.cs: データディスクリプタの存在確認により動的にディクショナリを構築、機能条件付きヒープを含める
  • LoaderAllocator.csVirtualCallStubManager.cs: 対応するマネージド型を追加(nullable型で機能条件付きフィールドを表現)
  • SOSDacImpl.cs: 両メソッドを実装、lazy初期化でANSI文字列をキャッシュ、DEBUG検証で従来DAC出力と照合

テスト:

  • 8テストメソッド×4アーキテクチャ=32テストケース、全900cDAC テスト合格

パフォーマンスへの影響

影響なし。初期化時のANSI文字列変換コスト(Marshal.StringToHGlobalAnsi)はインスタンスレベルでキャッシュされるため、複数クエリ時のオーバーヘッドは最小限です。ディクショナリの動的構築は診断時のみの操作であり、ランタイムパフォーマンスに影響しません。

関連Issue

なし

その他

  • 互換性: 破壊的変更なし。レガシーDAC委譲スタブをマネージド実装に置き換えるため、APIレベルでの互換性は維持されます
  • 設計: データディスクリプタの存在確認(ContainsKey)により、プラットフォーム/ビルド設定による機能条件付きヒープを動的に対応。固定配列順序を保持(names[i]heaps[i]の対応保証)
  • 検証: DEBUG時に従来DAC出力との結果比較により、実装の正確性を確保するクロスバージョンテストを実装

#124624 [X86][APX] Update the CPUID check logics for APX.

  • 作成者: @Ruihan-Yin
  • 作成日時: 2026年02月19日 23:21:28(UTC)
  • マージ日時: 2026年03月09日 20:34:21(UTC)
  • ラベル: area-Infrastructure community-contribution

概要

Intel APX(Advanced Performance Extensions)命令セットの新しいCPUID判定ロジックを更新するPRです。Intel仕様書に記載された新たなAPX関連のCPUID ビット(APX_NDD_NCI_NF)を追加しています。ただし、このPRはCPUID ビットの導入のみで、JITの最適化動作に変更はなく、既存のAPX_Fビットが設定されていれば全機能が利用可能です。

変更内容

  • src/native/minipal/cpufeatures.c: CPUID チェックロジックの更新(+16行/-2行)
    • Intel APX仕様書に準拠した新しいCPUID ビット判定ロジックを追加
    • APX_NDD_NCI_NFビット対応を導入
    • 既存のAPX_Fビット判定との関係性を整備

パフォーマンスへの影響

影響なし。このPRはCPUID ビットの認識を追加するのみで、実際のJIT最適化やランタイム動作には変更がありません。APX_Fビットが設定されている限り、全てのAPX機能が利用可能です。

関連Issue

情報なし(PR内で明示的な関連Issue記載なし)

その他

  • Intel公式仕様書(Document 784266)に基づく変更です
  • APX_Fビットが存在する場合、Intel プロセッサ上ではAPX_NDD_NCI_NFビットが保証されるため、将来の機能拡張にも対応可能な設計となっています
  • 変更ファイルが限定的(1ファイルのみ)で、影響範囲が明確です

#124561 Add FileHandleType enum and SafeFileHandle.Type property

  • 作成者: @Copilot
  • 作成日時: 2026年02月18日 17:06:22(UTC)
  • マージ日時: 2026年03月09日 14:00:07(UTC)
  • ラベル: area-System.IO

概要

System.IO.FileHandleType 列挙型と SafeFileHandle.Type プロパティを追加し、ファイルハンドルの種別(通常ファイル、パイプ、ソケット、キャラクターデバイス、ディレクトリ、シンボリックリンク、ブロックデバイス)を効率的に実行時に検出できるようにします。ハンドルの生存期間中に1回の syscall でキャッシュされるため、繰り返しのネイティブクエリが不要になります。

using SafeFileHandle handle = File.OpenHandle("file.txt", FileMode.Open);
FileHandleType type = handle.Type;  // FileHandleType.RegularFile(キャッシュ済み)

変更内容

  • System.IO.FileHandleType enum: 8つの値(Unknown、RegularFile、Pipe、Socket、CharacterDevice、Directory、SymbolicLink、BlockDevice)をクロスプラットフォーム対応で追加
  • SafeFileHandle.Type プロパティ: キャッシュされた FileHandleType を返す。ハンドル閉鎖時は ObjectDisposedException をスロー
  • Windows 実装: GetFileType() を使用し、Pipe の場合は GetNamedPipeInfo で確認。GetFileInformationByHandleEx でリパースタグを取得しシンボリックリンクを判定。CanSeek をリファイン(ディレクトリ・シンボリックリンク除外)
  • Unix 実装: fstat と S_IFMT モードビットマッピングで型判定。Init() で機会的にキャッシング
  • Interop: GetNamedPipeInfo パラメータを SafePipeHandle から SafeHandle に変更。FILE_ATTRIBUTE_TAG_INFO 新規追加
  • System.IO.Ports: SerialStream.Windows.csType プロパティを使用(NET11_0_OR_GREATER)、旧ターゲットは従来の GetFileType() にフォールバック

パフォーマンスへの影響

改善点:

  • ハンドル生存期間中に1回の syscall で型情報をキャッシュ(volatile int _cachedFileType)。以降のアクセスはメモリ読み込みのみで、繰り返しのネイティブ呼び出しが排除されます
  • Unix での Init() 時に機会的にキャッシング(既に fstat を実行している場合)により、追加の syscall コストなし

その他:

  • Windows での CanSeek 動作がリファイン(以前は FILE_TYPE_DISK で判定、今は RegularFile に限定)。これによりディレクトリやシンボリックリンク上での不適切なシーク操作の検出が改善されます

関連Issue

Issue #122806(API提案前の実現可能性検証)

その他

  • 包括的なテストカバレッジ:9,195テスト合格、0失敗
  • クロスプラットフォーム対応:Windows(Win32 API)、Unix(fstat)の双方を実装
  • 後方互換性パターン実装:System.IO.Ports での .NET 11.0 以前向けマルチターゲット対応で後方互換性を確保
  • 全レビュー指摘に対応済み(エラーコード処理、リパースタグ確

#122602 Implement SVE2 Counting APIs

  • 作成者: @ylpoonlg
  • 作成日時: 2025年12月17日 10:37:22(UTC)
  • マージ日時: 2026年03月09日 14:44:58(UTC)
  • ラベル: area-System.Runtime.Intrinsics community-contribution

概要

Arm64 SVE2アーキテクチャ向けの新しいカウント系インストリクション「CountMatchingElements」と「CountMatchingElementsIn128BitSegments」を実装しました。これらのAPI(HISTCNT/HISTSEG命令に対応)により、ベクトル要素の条件マッチングとカウント処理が効率化されます。また、マスク付きターナリオペレーションテストテンプレートを改善し、異なる型サイズの演算をサポートするよう修正しました。

// 新しいSVE2 Counting APIs の例用法
public static Vector<uint> CountMatchingElements(Vector<T> left, Vector<T> right);
public static Vector<uint> CountMatchingElementsIn128BitSegments(Vector<T> left, Vector<T> right);

変更内容

  • Sve2.cs: CountMatchingElementsおよびCountMatchingElementsIn128BitSegmentsの2つのオーバーロードを追加
  • Sve2.PlatformNotSupported.cs: PlatformNotSupported実装を追加
  • System.Runtime.Intrinsics.cs: 公開API表面領域に新メソッドを登録
  • hwintrinsiclistarm64sve.h: CoreCLR JIT向けにHISTCNT/HISTSEG命令の内在関数定義を追加
  • Sve2Tests.cs: 新しいカウント系インストリクションの生成テストケースを登録
  • Helpers.cs: マネージ実装による「ゴールデン」リファレンス実装を追加(テスト検証用)
  • _SveTernOpMaskedOpTestTemplate.template: Op1BaseType == RetBaseTypeの厳密な要件をsizeof(Op1BaseType) == sizeof(RetBaseType)に緩和し、異なる型(符号付き/符号なし)の戻り値をサポート

パフォーマンスへの影響

影響なし。本PR は新しいインストリクションの追加であり、既存のコードパスに変更はありません。SVE2ハードウェアでのベクトルカウント処理が高速化される可能性がありますが、具体的なベンチマーク値は記載されていません。

関連Issue

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

その他

マスク付きターナリオペレーションテストテンプレートの修正により、異なる型サイズ(同一バイト数)の混合演算シナリオに対応。これにより、符号付き/符号なし型の混在するSVE2命令をより柔軟にテスト可能になります。


目次