Pull Request on 2026年02月24日

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

注意点

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


目次

  1. #124793 Update API review meeting frequency to once a week
  2. #124776 Add OpenBSD target
  3. #124775 Set __NumProc on OpenBSD
  4. #124774 Build mscordac on OpenBSD
  5. #124773 Fix native aot outerloop
  6. #124772 [cDAC] Compute MethodDesc size directly to support more heap dump scenarios
  7. #124767 Fail inner build when running coreclr tests
  8. #124763 [Wasm RyuJit] Crossgen fixes
  9. #124709 Strip ARM64 TBI tag byte from addresses before pread on /proc//mem
  10. #124682 Add GetStackLimits cDAC API
  11. #124660 Fix debug assert in Uri.CreateThisFromUri when combining UNC base with "file:" relative URI
  12. #124655 Fix Uri.TryUnescapeDataString throwing instead of returning false with small destination buffers
  13. #124649 [r2r] Add helpers for class init
  14. #124634 Move Zstandard APIs from System.IO.Compression.Zstandard to System.IO.Compression
  15. #124599 Less optimistic checking for const vector to pattern checks
  16. #124567 JIT: Convert multi-target switches to branchless checks
  17. #124564 [cDAC] Add infrastructure to run cDAC tests using CLRMD and dumps
  18. #124560 Use Requires.Range in LastIndexOf
  19. #124537 [release/10.0] PersistedAssemblyBuilder: Fix encoding of custom modifiers. (#123925)
  20. #124532 [main] Source code updates from dotnet/dotnet
  21. #124486 Process Iri_UnicodePlane3_13 test in 0x10000-character chunks
  22. #124402 Don't crash when walking callstack roots in the debugger
  23. #124301 Improve exception message for empty assembly loading
  24. #124300 Fix NRange.GetOffsetAndLength truncation: cast to nuint instead of uint
  25. #124273 Publish Uri and UriBuilder threat models

#124793 Update API review meeting frequency to once a week

  • 作成者: @svick
  • 作成日時: 2026年02月24日 14:28:03(UTC)
  • マージ日時: 2026年02月24日 15:27:13(UTC)
  • ラベル: area-Meta

概要

API レビュー会議の開催スケジュールに関するドキュメント更新です。2025年5月以降、木曜日のレビュー会議が実施されていないため、ドキュメントを修正し、会議は週1回(火曜日のみ)に変更されました。

変更内容

  • docs/project/api-review-process.md: API レビュー会議の開催頻度を「週2回(火曜日・木曜日)」から「週1回(火曜日)」に更新

パフォーマンスへの影響

影響なし(ドキュメント更新のみ)

関連Issue

なし

その他

このドキュメント更新は、API Review のスケジュールカレンダーに基づいています。実際の運用状況とドキュメントの齟齬を修正する変更となります。


#124776 Add OpenBSD target

  • 作成者: @sethjackson
  • 作成日時: 2026年02月24日 01:06:44(UTC)
  • マージ日時: 2026年02月24日 16:09:13(UTC)
  • ラベル: area-Infrastructure community-contribution

概要

OpenBSDターゲットのサポートを.NETランタイムに追加するための初期変更です。現在のところビルドはまだ完全には成功していませんが、CoreCLRがOpenBSDで動作するようになることを目指しています。

変更内容

  • eng/build.sh: OpenBSDをOSリストに追加(+2行)
    • ビルドスクリプトにOpenBSD向けのターゲット設定を追加

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • このPull Requestはシリーズの第1段階であり、作成者は段階的にOpenBSDサポートを改善していく予定です
  • 現在、ビルドが完全に成功していない状態のため、フォローアップのコミットが予定されています
  • OpenBSDは*nix系OSですが、.NETランタイムの正式サポートOSリストには含まれていなかったため、この追加は既存のLinuxやFreeBSDサポートと同様のアプローチで進められると予想されます

#124775 Set __NumProc on OpenBSD

  • 作成者: @sethjackson
  • 作成日時: 2026年02月24日 00:56:25(UTC)
  • マージ日時: 2026年02月24日 16:07:05(UTC)
  • ラベル: area-Infrastructure-coreclr community-contribution

概要

OpenBSD プラットフォーム上で __NumProc 環境変数を設定するようにビルドスクリプトを修正しました。これにより、OpenBSD でのネイティブコンパイル時にプロセッサ数の検出が正しく機能するようになります。

変更内容

  • eng/native/build-commons.sh: __NumProc の設定ロジックに OpenBSD サポートを追加(1行追加、1行削除)

パフォーマンスへの影響

影響なし。ビルド時のプロセッサ数検出の正確性向上により、並列ビルド最適化がOpenBSDで機能するようになる可能性があります。

関連Issue

なし

その他

  • OpenBSD でのクロスプラットフォーム対応改善
  • ビルドスクリプトの軽微な修正のため、ランタイム動作への直接的な影響はありません

#124774 Build mscordac on OpenBSD

  • 作成者: @sethjackson
  • 作成日時: 2026年02月24日 00:51:35(UTC)
  • マージ日時: 2026年02月24日 18:24:42(UTC)
  • ラベル: area-Infrastructure-coreclr community-contribution

概要

OpenBSD プラットフォームで mscordac(Microsoft Common Language Runtime Debugging Access Component)のビルドを可能にする変更です。CMakeLists.txt の設定を調整して、OpenBSD での条件付きビルドに対応しました。

変更内容

  • src/coreclr/dlls/mscordac/CMakeLists.txt: ビルド設定の追加・修正(2行追加、2行削除)
    • OpenBSD プラットフォームでの mscordac ビルド対応に関するプラットフォーム判定条件を更新

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • OpenBSD はクロスプラットフォーム対応の一環です
  • mscordac は CLR デバッグ機能に関連するコンポーネントであり、デバッグシナリオでの利用を想定した変更と考えられます
  • CMakeLists.txt への軽微な変更(計4行)のため、既存の機能への影響は最小限です

#124773 Fix native aot outerloop

  • 作成者: @MichalStrehovsky
  • 作成日時: 2026年02月24日 00:38:33(UTC)
  • マージ日時: 2026年02月24日 16:19:42(UTC)
  • ラベル: area-NativeAOT-coreclr

概要

NativeAOT outerloop テストの回帰を修正します。#111514 での変更により System.Diagnostics.Process テストの LongPath ヘルパーアセンブリの処理が破損していました。LongPath プロジェクト参照を ReferenceOutputAssembly=false に設定し、参照ではなくコンテンツとして扱うことで、テスト出力ディレクトリへの適切なコピーを復旧しています。

変更内容

  • src/libraries/System.Diagnostics.Process/tests/System.Diagnostics.Process.Tests.csproj
    • LongPath プロジェクト参照に ReferenceOutputAssembly=false を追加
    • OutputItemType=ContentCopyToOutputDirectory=PreserveNewest で、アセンブリをコンテンツとしてコピー
    • 既存の PublishReadyToRunExclude は継続(ReadyToRun処理から除外)

パフォーマンスへの影響

影響なし。ビルド/テスト構成の修正であり、ランタイムパフォーマンスへの直接的な影響はありません。

関連Issue

#111514(この変更で回帰を引き起こしたPR) https://github.com/dotnet/sdk/issues/30718(ReadyToRun処理のSDK既知の問題)

その他

作成者によると、技術的には破壊的変更として扱うべきですが、実ユーザーシナリオに該当するかは不確実とのこと。コメント内で指摘されている通り、ReferenceOutputAssembly=false に変更された今、既存の参照/コンテンツ参照の組み合わせに関するコメントは今後のメンテナンスのため更新検討が推奨されています。


#124772 [cDAC] Compute MethodDesc size directly to support more heap dump scenarios

  • 作成者: @max-charlamb
  • 作成日時: 2026年02月24日 00:20:11(UTC)
  • マージ日時: 2026年02月24日 03:19:00(UTC)
  • ラベル: area-Diagnostics-coreclr

概要

このPRは、cDAC RuntimeTypeSystemコントラクトにおけるMethodDescのサイズ計算方式を変更しています。従来はランタイムのs_ClassificationSizeTableグローバルテーブルを参照していましたが、ヒープダンプには存在しないため、データディスクリプタから直接サイズを計算するように改修されました。これにより、ヒープダンプシナリオでのデバッグ分析が可能になります。

// 変更前:グローバルテーブル参照
// size = s_ClassificationSizeTable[methodDescType]

// 変更後:データディスクリプタから動的計算
// MethodDescの基本サイズ + AsyncMethodDataスロットサイズ = 合計サイズ

変更内容

  • RuntimeTypeSystem_1.cs: ComputeSizeメソッドを再実装し、s_ClassificationSizeTable参照からデータディスクリプタサイズベースの計算に変更
  • Constants.cs: MethodDescSizeTableグローバル定数を削除
  • DataType.cs: AsyncMethodData列挙値を追加
  • datadescriptor.inc: AsyncMethodDataディスクリプタを追加、MethodDescSizeTableグローバルを削除
  • MockDescriptors.MethodDescriptors.cs: ダミーのMethodDescSizeTableを削除、AsyncMethodDataタイプ情報を追加
  • RuntimeTypeSystemDumpTests.cs: ダンプタイプの明示的オーバーライドを削除
  • TypeHierarchy.csproj: ダンプタイプを"Full"から"Heap"に変更
  • ドキュメント: 新しいサイズ計算方式とグローバル削除を反映

パフォーマンスへの影響

影響なし。サイズ計算ロジックはランタイムの既存テーブル参照から動的計算に変わりますが、デバッグ時の処理のため実行時パフォーマンスは関係ありません。ヒープダンプ解析時のメモリ使用量および計算スループットは、実装上の変更がなく同等と予想されます。

関連Issue

なし

その他

  • 互換性への影響: 内部API(cDAC)の変更であり、公開APIへの影響なし
  • テスト範囲拡大: ヒープダンプでのDumpTestsの動作検証が追加され、より実用的なシナリオでの検証が可能に
  • 技術的意義: ランタイムグローバル依存を排除することで、ポストモーテムデバッグなどヒープダンプのみが利用可能な環境での分析機能を向上

#124767 Fail inner build when running coreclr tests

  • 作成者: @jtschuster
  • 作成日時: 2026年02月23日 20:58:06(UTC)
  • マージ日時: 2026年02月24日 19:34:46(UTC)
  • ラベル: area-Infrastructure-coreclr

概要

CoreCLR テスト実行時にテストがクラッシュしても MSBuild ビルドが成功してしまい、run.py が前回実行の古い testRun.xml ファイルを読み込んでしまう問題を修正しました。MSBuild の Exec タスクの属性を IgnoreExitCode="true" から ContinueOnError="ErrorAndContinue" に変更することで、すべてのテスト実行を継続させつつビルドは失敗するようにしました。

変更内容

  • src/tests/Common/tests.targets (+2/-3)
    • MSBuild Exec タスクの属性を変更し、テスト失敗時にビルドを失敗させるように修正
    • 冗長なエラーメッセージ ログを削除(MSBuild の組み込みエラー報告で充分)
    • 軽微なフォーマット調整

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

この修正は、テスト実行の信頼性を大幅に向上させます。ContinueOnError="ErrorAndContinue" により、並列実行されるすべてのテストは完了まで実行されますが、いずれかのテストが失敗またはクラッシュすると MSBuild ビルド全体が失敗し、run.py が誤った古い結果を報告することを防止します。これは CI/CD パイプラインにおける重要な修正です。


#124763 [Wasm RyuJit] Crossgen fixes

  • 作成者: @AndyAyersMS
  • 作成日時: 2026年02月23日 19:58:37(UTC)
  • マージ日時: 2026年02月24日 02:55:49(UTC)
  • ラベル: area-CodeGen-coreclr

概要

WebAssembly RyuJIT のクロスジェン処理における複数のバグ修正です。ローカル変数の格納時のレイアウト取得の改善、BBJ_COND フロー制御の処理、P/Invoke プロローグの最適化、値番号付けのアサーション修正など、System.Private.Corelib のクロスジェン時に発見された問題を解決しています。

変更内容

  • codegenwasm.cpp: WebAssembly コード生成時のローカル変数格納処理の修正
  • fgbasic.cpp: フロー制御ロジックの調整(2行)
  • fgwasm.cpp: WebAssembly フロー グラフの再配列処理で縮退した BBJ_COND の処理対応(28/-24)
  • gentree.cpp: Wasm 特殊呼び出し引数のダンプ出力時における名前付け処理
  • regallocwasm.cpp: レジスタ割り当て時の構造体引数処理の修正
  • valuenum.cpp: 追加の PE 引数に対する値番号付けアサーションの修正(11/-4)

パフォーマンスへの影響

影響なし。本変更はバグ修正と正確性の向上が主目的であり、パフォーマンス最適化ではありません。

関連Issue

#124763

その他

本修正は WebAssembly をターゲットとした RyuJIT コンパイラのクロスジェン機能における正確性の改善です。特に System.Private.Corelib などの重要なランタイム ライブラリのコンパイル時の信頼性が向上します。


#124709 Strip ARM64 TBI tag byte from addresses before pread on /proc//mem

  • 作成者: @steveisok
  • 作成日時: 2026年02月21日 19:49:07(UTC)
  • マージ日時: 2026年02月24日 11:56:18(UTC)
  • ラベル: area-Diagnostics-coreclr

概要

Android の scudo ヒープアロケータが ARM64 Top-Byte Ignore (TBI) を使用してヒープポインタにタグを付与する際、/proc/<pid>/mem での pread 呼び出しが失敗する問題を修正します。TBI タグ付きアドレスは CPU では無視されますが、カーネルのファイルオフセット処理では適用されないため、pread 実行前にトップバイトをストリップします。

// 修正例:pread 実行前にアドレスの上位バイトをマスク
ulong addressWithoutTbi = address & 0x00FFFFFFFFFFFFFFUL; // ARM64 TBI対応
pread(fd, buffer, size, addressWithoutTbi);

変更内容

  • src/coreclr/pal/src/debug/debug.cpp: PAL_ReadProcessMemory で非 Apple プラットフォーム向けに TBI タグバイトをストリップする処理を追加(+11行)
  • src/coreclr/debug/createdump/crashinfounix.cpp: クラッシュダンプメモリ読み取り時に TARGET_ARM64 ガードの下で TBI タグバイトをストリップ(+11行)

パフォーマンスへの影響

影響なし。TBI タグバイトのストリップはビット AND 演算で実現され、処理オーバーヘッドは無視できるレベルです。Android 環境のみで有効な修正であり、他のプラットフォームではコンパイル条件付きで無視されます。

関連Issue

リポジトリ issue #124709

その他

本修正は現在 Android ARM64 Linux に限定されていますが、ARM Memory Tagging Extension (MTE) の採用が他のディストリビューションに広がった場合に備えた将来対応です。修正はカーネルドキュメント(https://www.kernel.org/doc/html/latest/arch/arm64/tagged-address-abi.html)に基づいています。


#124682 Add GetStackLimits cDAC API

  • 作成者: @barosiak
  • 作成日時: 2026年02月21日 00:19:53(UTC)
  • マージ日時: 2026年02月24日 20:40:59(UTC)
  • ラベル: area-Diagnostics-coreclr

概要

cDAC (Common Data Access Contract) API に GetStackLimits メソッドを追加しました。このAPIは、スレッドのスタック上限と下限を取得するための新しいコントラクトです。診断ツールがスレッドのスタック情報にアクセスする際に使用されます。

変更内容

  • Thread.md: cDAC Thread コントラクトドキュメントを更新し、GetStackLimits API の仕様を追加(+21/-11)
  • threads.h: スタック制限情報に関連するネイティブ定義を追加(+3/-1)
  • IThread.cs: GetStackLimits メソッドの抽象インターフェース定義を追加(+2/-0)
  • Thread_1.cs: コントラクト実装に GetStackLimits の具体的な実装を追加(+10/-0)
  • Thread.cs: データコントラクト用の構造体/データ定義を追加(+4/-0)
  • SOSDacImpl.cs: レガシーSOS DAC互換性のための実装を追加(+42/-1)
  • MockDescriptors.Thread.cs: テスト用モック実装を追加(+9/-0)
  • ThreadTests.cs: GetStackLimits 機能の単体テストを新規追加(+32/-0)

パフォーマンスへの影響

影響なし。本変更は診断API の拡張であり、実行時パフォーマンスには直接的な影響を与えません。

関連Issue

#124696 に関連

その他

  • cDAC (Common Data Access Contract) は、ランタイム内部の診断情報にアクセスするための標準化されたコントラクトです
  • 本変更は既存の Thread コントラクトの拡張で、破壊的変更はありません
  • テストが包括的に追加されており、モック実装とともに複数の診断シナリオをカバーしています

#124660 Fix debug assert in Uri.CreateThisFromUri when combining UNC base with "file:" relative URI

  • 作成者: @Copilot
  • 作成日時: 2026年02月20日 17:06:06(UTC)
  • マージ日時: 2026年02月24日 14:11:17(UTC)
  • ラベル: area-System.Net

概要

Uri(Uri, Uri) コンストラクタで UNC ファイル URI ベースと "file:" 相対 URI を組み合わせるとデバッグアサーション失敗が発生していました。根本原因は CreateThisFromUriDebug_LeftConstructor フラグを含むすべてのフラグをコピーしていたことです。修正として、フラグコピー時に Debug_LeftConstructor フラグを除外します。

// 修正前後の比較
var baseUri = new Uri(@"\\aa", UriKind.Absolute);  // file://aa/
var relUri = new Uri("file:", UriKind.Relative);
_ = new Uri(baseUri, relUri);  // 修正前: Debug.Assert failure → 修正後: 正常動作

変更内容

  • UriExt.cs: CreateThisFromUri メソッドでフラグをコピーする際、Debug_LeftConstructor フラグを除外(_flags = otherUri._flags & ~Flags.Debug_LeftConstructor;
  • UncTest.cs: UNC ベース + "file:" 相対 URI の組み合わせをカバーする回帰テストを追加

パフォーマンスへの影響

影響なし

関連Issue

dotnet/runtime#124659

その他

  • Debug_LeftConstructor はインスタンスごとの状態であり、現在のコンストラクタ終了時に DebugSetLeftCtor() 経由でのみ設定されるべき
  • 問題は再入的な URI 構築時に、先行する呼び出しから継承されたフラグがアサーション条件に違反していたこと
  • デバッグビルドのみに影響する修正で、リリースビルドには影響なし

#124655 Fix Uri.TryUnescapeDataString throwing instead of returning false with small destination buffers

  • 作成者: @Copilot
  • 作成日時: 2026年02月20日 16:17:58(UTC)
  • マージ日時: 2026年02月24日 20:00:38(UTC)
  • ラベル: area-System.Net

概要

Uri.TryUnescapeDataStringメソッドが、デスティネーションSpanが入力内の最初の%のインデックスより小さい場合に、ArgumentOutOfRangeExceptionをスロー していた問題を修正しました。修正により、小さいバッファに対して適切にfalseを返すようになります。

// 修正前:ArgumentOutOfRangeExceptionがスロー
Uri.TryUnescapeDataString("aa%", [], out _);

// 修正後:falseを返す
Uri.TryUnescapeDataString("aa%", [], out _); // false

変更内容

  • UriExt.cs: TryUnescapeDataStringメソッドに早期終了ガード追加。デスティネーションのサイズが最初のエスケープシーケンス前のリテラル部分を保持できない場合、即座にfalseを返却(charsWritten = 0
  • UriEscapingTest.cs: 複数のテストケースを追加("aa%""aaa%41"など、デスティネーションサイズが接頭辞長より小さいシナリオを網羅)

パフォーマンスへの影響

影響なし。追加チェックは例外スロー防止のための早期終了ロジックであり、正常系の性能低下はありません。

関連Issue

#124654

その他

修正はdestination.Slice(indexOfFirstToUnescape)の呼び出し前に配置されており、オーバーラップバッファ検出より前に条件チェックが発生するため、オーバーラップ/非オーバーラップ両ケースで無条件に動作します。


#124649 [r2r] Add helpers for class init

  • 作成者: @BrzVlad
  • 作成日時: 2026年02月20日 14:45:33(UTC)
  • マージ日時: 2026年02月24日 19:33:56(UTC)
  • ラベル: area-ReadyToRun-coreclr

概要

R2R(Ready-to-Run)コンパイル時にクラス初期化チェックをスキップしていた問題を修正するもの。iOS環境では、チェックをスキップされたメソッド全体がインタプリタ実行され、パフォーマンスが大幅に低下していました。本修正により、R2Rヘルパーを通じてクラス初期化チェック(InitClass/InitInstantiatedClass)を呼び出すようになり、インタプリタ実行回避が可能になります。

public class G<T>
{
    static Type theType;
    static G()
    {
        theType = typeof(T);
    }

    [MethodImpl(MethodImplOptions.NoInlining)]
    public static Type Touch()
    {
        return theType;  // この呼び出しがR2Rで最適化されるようになる
    }
}

変更内容

  • readytorun.h: R2Rヘルパー定義に新たなクラス初期化ヘルパー列挙値を追加
  • readytorunhelpers.h: ヘルパー関数シグネチャ定義を追加
  • ModuleHeaders.h/ModuleHeaders.cs: モジュールヘッダー定義を同期更新
  • ReadyToRunConstants.cs: R2R定数に初期化ヘルパー関連の定数を追加
  • CorInfoImpl.ReadyToRun.cs: JitInterfaceがクラス初期化ヘルパーを認識し、R2Rコード生成時に活用
  • ReadyToRunSignature.cs: シグネチャ解析にヘルパー対応を追加

パフォーマンスへの影響

改善: iOS環境でのパフォーマンス大幅向上。従来はチェック対象メソッド全体がインタプリタ実行されていましたが、本修正後はR2R小規模チェック呼び出しのみとなり、インタプリタ実行オーバーヘッドが排除されます。

関連Issue

なし

その他

  • 本変更は内部実装レベルのR2Rコード生成最適化であり、公開API互換性への影響なし
  • ジェネリック型のスタティック初期化に対応(InitInstantiatedClass
  • 既存のJITヘルパー(System.Runtime.CompilerServices.Helpers)と統合

#124634 Move Zstandard APIs from System.IO.Compression.Zstandard to System.IO.Compression

  • 作成者: @rzikm
  • 作成日時: 2026年02月20日 10:42:55(UTC)
  • マージ日時: 2026年02月24日 13:52:18(UTC)
  • ラベル: area-System.IO.Compression

概要

Zstandard圧縮API(ZstandardStreamZstandardEncoderZstandardDecoderなど)を独立したアセンブリ System.IO.Compression.Zstandard から System.IO.Compression に統合する変更です。マネージコードサイズが小さく、System.IO.Compression.Native への P/Invoke依存が共通のため、分離メリットがなく、将来の循環依存問題を防ぐためです。

変更内容

  • 削除: System.IO.Compression.Zstandard アセンブリ全体を廃止(Directory.Build.props、csproj、ref、tests)
  • 追加: Zstandard関連クラスを System.IO.Compression に統合
    • Zstandard/ZstandardStream.csZstandardEncoder.csZstandardDecoder.csZstandardCompressionOptions.csZstandardDictionary.cs
    • プラットフォーム未対応時の実装 Zstandard.PlatformNotSupported.cs
    • リソース文字列(Strings.resx)とテスト(Zstandard配下のテストファイル)
  • 修正: System.Net.Http の参照を更新

パフォーマンスへの影響

影響なし。機能的には変更されず、API呼び出しのパス長が若干変わりますが、既に System.IO.Compression.Native への P/Invoke経由のため顕著な差異はありません。アセンブリ統合により、ロード時のメモリオーバーヘッドが削減される可能性があります。

関連Issue

  • #123532(この変更により循環依存が防止される見込み)

その他

  • 互換性: NuGetパッケージレベルではBreaking Change。System.IO.Compression.Zstandard への直接参照は廃止されます。ただし、アプリケーションが System.IO.Compression を参照していれば、API利用可能性に変わりありません。
  • コード移動: 機能コードはほぼ移動のみで、新規実装なし。

#124599 Less optimistic checking for const vector to pattern checks

  • 作成者: @a74nh
  • 作成日時: 2026年02月19日 14:42:02(UTC)
  • マージ日時: 2026年02月24日 12:58:15(UTC)
  • ラベル: area-CodeGen-coreclr community-contribution

概要

このPRは、const vector パターンチェック時の最適化ロジックを修正しています。TBase サイズの要素をチェック時に、最初のビット以外のビットが設定されていないことを確実にするための変更です。Issue #124511の修正に対応しています。

変更内容

  • src/coreclr/jit/simd.h: const vector のパターンチェックロジックを修正(30行追加/20行削除)。要素サイズのチェック時により厳密なビット検証を実装
  • src/tests/JIT/Regression/JitBlue/Runtime_124511/Runtime_124511.cs: 新規テストケース追加(38行)。修正されたパターンチェック動作を検証
  • src/tests/JIT/Regression/JitBlue/Runtime_105719/Runtime_105719.cs: 既存テストの軽微な調整(1行変更)
  • src/tests/JIT/Regression/Regression_ro_1.csproj: テストプロジェクト参照の追加

パフォーマンスへの影響

パフォーマンスへの直接的な悪化は予想されません。むしろ、より正確なパターン判定により不適切な最適化が回避され、正確性が向上します。const vector チェックはコンパイル時に実行されるため、実行時パフォーマンスへの影響は最小限です。

関連Issue

Issue #124511 - const vector パターンチェック時の検証ロジック改善

その他

JIT コンパイラの SIMD 最適化パスにおける重要な修正です。過度に楽観的なパターン判定が修正されることで、正確なコード生成がされるようになります。


#124567 JIT: Convert multi-target switches to branchless checks

  • 作成者: @JulieLeeMSFT
  • 作成日時: 2026年02月18日 19:25:47(UTC)
  • マージ日時: 2026年02月24日 17:48:08(UTC)
  • ラベル: area-CodeGen-coreclr

概要

このPRはJITコンパイラの最適化で、複数のターゲットを持つswitch文を分岐のない比較チェックに変換します。C#のパターンマッチング(x is A or B or C)の意図に合わせた最適なコード生成を実現します。例えば、Unicode カテゴリの判定で、複数の条件判定をブランチレス命令(setbe)に変換することで、より効率的なアセンブリコードを生成します。

変更内容

  • src/coreclr/jit/fgopt.cpp (+64行): fgOptimizeSwitchBranchesに新たなロジックを追加。2つのユニークなサクセッサのみを持つswitch文を符号なし範囲比較に変換。ターゲットブロックがシンプルなreturn文の場合、fgFoldCondToReturnBlockでさらに最適化
  • src/tests/JIT/opt/OptSwitchRecognition/optSwitchRecognition.cs (+48行): ゼロベース及び非ゼロベースの連続範囲のテストケースを追加

パフォーマンスへの影響

改善あり - SPMI asmdiffsで83バイトのコードサイズ削減を確認。具体例として以下のような改善が達成されました:

変換前:

cmp      ecx, 4
ja       SHORT G_M22758_IG05
mov      eax, 1
ret
G_M22758_IG05:
xor      eax, eax
ret

変換後:

cmp      ecx, 4
setbe    al
movzx    rax, al
ret

ブランチ命令が削除され、条件設定命令(setbe)を使用することで、パイプラインストールとブランチ予測の失敗を回避し、命令数削減によるキャッシュ効率改善が期待できます。

関連Issue

#123858

その他

  • 比較方向はGT_LTに統一
  • 変換後のエッジ重複カウント(edge dup counts)が適切に修正される
  • 複数のテストケースで検証済み

#124564 [cDAC] Add infrastructure to run cDAC tests using CLRMD and dumps

  • 作成者: @max-charlamb
  • 作成日時: 2026年02月18日 18:36:24(UTC)
  • マージ日時: 2026年02月24日 00:13:30(UTC)
  • ラベル: area-Diagnostics-coreclr

概要

cDAC(契約ベースのデータアクセスコンポーネント)の統合テスト基盤を追加しました。DebugeeアプリがFailFastでクラッシュし、生成されたダンプをClrMDで読み込むことで、cDACが実際のランタイムデータ構造を正しく読み取れることを検証します。Thread、RuntimeInfo、GCHeap、StackWalk、RuntimeTypeSystem、Loader、EcmaMetadataなど複数のcDACコントラクトをテストします。

変更内容

  • インフラストラクチャ

    • DumpTests.targets — Debugeeアプリをビルド・実行し、クラッシュダンプを収集するMSBuildロジック
    • DumpTestBase.cs — ClrMDでダンプを読み込み、ContractDescriptorTargetを作成するテスト基底クラス
    • ClrMdDumpHost.cs — ClrMDのDataTargetをラップしメモリ読み取り・シンボル解決コールバック実装
    • RunDumpTests.ps1 — ローカル開発用のPowerShellスクリプト
  • Debugeeアプリ群 — 各シナリオをテストするアプリを追加

    • BasicThreads(複数マネージスレッド)、ExceptionState(ネスト例外)、GCRoots(GCオブジェクトグラフ)
    • ServerGC(サーバーGC)、StackWalk(決定論的スタック)、MultiModule(複数アセンブリ)、TypeHierarchy(クラス継承階層)
  • CI パイプラインeng/pipelines/runtime-diagnostics.ymlを追加

    • Build、DumpCreation、DumpTestステージで構成。ダンプはローカルバージョン生成のみ対応
  • その他の変更

    • Thread.cs に変更あり(詳細は不明)
    • eng/Subsets.props、eng/Versions.props を更新

パフォーマンスへの影響

影響なし(テスト基盤の追加のため、ランタイムパフォーマンスへの直接的な影響はありません)

関連Issue

なし

その他

  • 現在、CIではローカル版ダンプのみ生成。net10.0の自己完結型公開に必要なSDKがCI環境にないため、net10.0のヒープダンプテストはスキップされます
  • 将来計画:Helixへのテスト実行移行、クロスプラットフォーム対応の拡大、以前バージョンのダンプでのテスト実施を検討

#124560 Use Requires.Range in LastIndexOf

  • 作成者: @prozolic
  • 作成日時: 2026年02月18日 16:40:12(UTC)
  • マージ日時: 2026年02月24日 06:27:09(UTC)
  • ラベル: area-System.Collections community-contribution

概要

ImmutableList<T>.Node.LastIndexOfメソッドのパラメータ検証をRequires.ArgumentからRequires.Rangeに変更し、ImmutableArray<T>.LastIndexOfと同じ検証方式に統一するPRです。また、テストケースを追加してパラメータ名の検証を含めるようにしました。

変更内容

  • ImmutableList_1.Node.cs: LastIndexOfメソッドの検証ロジックをRequires.Rangeに統一し、パラメータ名をindexからstartIndexにリネーム
  • ImmutableListTestBase.cs: ArgumentOutOfRangeExceptionが正しくスローされることを検証するテストケースを追加
  • IndexOfTests.cs: パラメータ名の検証を含むテストケースを追加・修正

パフォーマンスへの影響

影響なし。検証方式の統一であり、ランタイムパフォーマンスへの変更はありません。

関連Issue

#124161(前回のPRでRequires.Rangeの統一が開始されたことへの追従対応)

その他

このPRは前回のPR #124161におけるImmutableArray<T>.LastIndexOfでの検証方式変更に追従し、同じコレクション型内での一貫性を確保するものです。API仕様に変更はなく、内部実装の統一による互換性への影響はありません。


#124537 [release/10.0] PersistedAssemblyBuilder: Fix encoding of custom modifiers. (#123925)

  • 作成者: @jkotas
  • 作成日時: 2026年02月18日 07:11:37(UTC)
  • マージ日時: 2026年02月24日 23:11:38(UTC)
  • ラベル: Servicing-approved area-System.Reflection.Emit

概要

PersistedAssemblyBuilderでカスタム修飾子(modopt/modreq)のエンコーディングに関するバグを修正しました。C#のreadonly refinキーワードを含むメソッド/フィールドシグネチャの参照を出力する際に失敗していた問題を解決します。.NET 9で導入されたバグで、回避策がない採用ブロッカーです。

変更内容

  • SignatureHelper.cs: カスタム修飾子のエンコーディング処理を改善(75行追加、35行削除)
  • ModuleBuilderImpl.cs: シグネチャ生成ロジックを簡潔化(7行追加、21行削除)
  • ParameterBuilderImpl.cs: パラメータの修飾子処理を強化(3行追加、2行削除)
  • ModifiedType.cs/ModifiedType.Mono.cs: 型修飾子の処理を改善
  • FieldBuilderImpl.cs: フィールド修飾子の処理を追加
  • テストファイル: AssemblySaveTypeBuilderTests.cs に246行の包括的なテストケースを追加

パフォーマンスへの影響

影響なし。本変更はシグネチャエンコーディングの正確性の修正であり、パフォーマンス関連の変更ではありません。

関連Issue

  • #119935、#121128、#123925のバックポート
  • 顧客報告による採用ブロッカー(回避策なし)

その他

  • リスク評価: 中程度。複数PR(3つ)の統合修正により、変更量が大きいため中程度のリスク
  • テスト: 専用テストが追加されており、modoptおよびmodreqを含むシグネチャの処理をカバー
  • 互換性: .NET 9で導入されたバグの修正であり、破壊的変更ではありません
  • 対象: release/10.0へのバックポートのため、.NET 10で対応される予定

#124532 [main] Source code updates from dotnet/dotnet

  • 作成者: @dotnet-maestro[bot]
  • 作成日時: 2026年02月18日 02:04:05(UTC)
  • マージ日時: 2026年02月24日 00:00:58(UTC)
  • ラベル: area-codeflow

概要

このPull Requestは、dotnet/dotnetリポジトリからのコードフロー更新です。Microsoft.CodeAnalysis、Microsoft.DotNet.Arcade.Sdk、NuGet関連パッケージなど、複数のビルドおよび開発ツールの依存関係を更新しています。更新範囲は2026年2月17日時点のVMRコミット(6699c73)に同期されています。

変更内容

  • eng/Version.Details.props: 依存パッケージのバージョン情報を更新(39行追加/削除)
  • eng/Version.Details.xml: 詳細なバージョン管理情報を更新(79行追加/削除)
  • global.json: グローバル設定ファイルを更新(4行追加/削除)

主な更新パッケージ:

  • Microsoft.CodeAnalysis系: 5.5.0-2.26116.109 → 5.5.0-2.26117.101
  • Microsoft.DotNet.Arcade.Sdk系: 11.0.0-beta.26116.109 → 11.0.0-beta.26117.101
  • NuGet系: 7.5.0-rc.11709 → 7.5.0-rc.11801
  • System.Reflection.Metadata、System.Text.Json他、合計20以上のパッケージを更新

パフォーマンスへの影響

影響なし(依存関係の更新のため、直接的なランタイムパフォーマンス変更はありません)

関連Issue

なし

その他

このPRはdotnet-maestro[bot]による自動化されたコードフロー更新です。VMR(Virtual Mono Repository)同期メカニズムの一部で、dotnet/dotnetリポジトリの変更を自動的にdotnet/runtimeに統合します。


#124486 Process Iri_UnicodePlane3_13 test in 0x10000-character chunks

  • 作成者: @Copilot
  • 作成日時: 2026年02月16日 22:49:11(UTC)
  • マージ日時: 2026年02月24日 14:10:03(UTC)
  • ラベル: area-System.Net

概要

32ビットプラットフォームでのOutOfMemoryException対策として、Iri_UnicodePlane3_13テストをリファクタリング。Unicode平面3~13(0x30000-0xDFFFF、約720K文字)をメモリ効率的に処理するため、0x10000文字(65Kチャンク)ずつ11回に分割して実行。テストカバレッジは変わらず、メモリ使用量を大幅に削減。

変更内容

  • ファイル: src/libraries/System.Private.Uri/tests/FunctionalTests/IriTest.cs
  • 変更内容:
    • テストメソッドIri_UnicodePlane3_13()をループ構造に変更
    • Unicode範囲を0x10000単位のチャンク(11回反復)に分割処理
    • ループ内でEscapeUnescapeTestUnicodePlane(start, end)を呼び出し
    • OutOfMemoryException対策として例外をキャッチ

パフォーマンスへの影響

メモリ使用量の大幅削減

  • ピークメモリ割り当て: 約720K文字 → 約65K文字/イテレーション(約91%削減)
  • 32ビットプラットフォームでのメモリ枯渇によるテスト失敗を解決
  • テスト実行パターンの変更により、メモリ圧力環境での信頼性が向上

関連Issue

  • #124417(修正対象Issue)

その他

  • Issue内の初期提案は「32ビット時にテストを無効化」でしたが、このPRは代わりにチャンク処理による最適化を採用し、テストカバレッジを保証しながらメモリ問題を解決
  • システムメモリが非常に限定されている環境では、個別チャンク処理でもOutOfMemoryが発生する可能性がある(例外ハンドルで対応)

#124402 Don't crash when walking callstack roots in the debugger

  • 作成者: @leculver
  • 作成日時: 2026年02月13日 20:37:55(UTC)
  • マージ日時: 2026年02月24日 00:14:40(UTC)
  • ラベル: area-VM-coreclr

概要

デバッガがコールスタックのルートをウォークする際にクラッシュする回帰を修正するプルリクエストです。前回のchangeset(#1fa1745)で導入されたスタックウォーキング処理の問題を、コンテキストをローカルコピーに指すように修正することで解決します。複数のアーキテクチャ(AMD64、ARM、ARM64、i386、LoongArch64、RISC-V64)で統一的に対応しています。

変更内容

  • cgenamd64.cpp: レジスタのアンワインド/レポート処理でコンテキストをローカルコピーに変更(+24/-15)
  • excep.cpp: コンテキスト処理の修正(+3/-3)
  • arm/stubs.cpp: ARM用のコンテキスト処理修正(+17/-8)
  • arm64/stubs.cpp: ARM64用のコンテキスト処理修正(+21/-12)
  • i386/cgenx86.cpp: x86用のコンテキスト処理修正(+11/-2)
  • loongarch64/stubs.cpp: LoongArch64用のコンテキスト処理修正(+20/-11)
  • riscv64/stubs.cpp: RISC-V64用のコンテキスト処理修正(+24/-15)
  • gcinfodecoder.cpp: 将来の同種問題を予防する追加修正

パフォーマンスへの影響

影響なし。本修正はバグ修正であり、クラッシュを防ぐための動作の正確性向上です。

関連Issue

#124401

その他

本修正は複数のプロセッサアーキテクチャに影響するため、特に異なるプラットフォーム上でのデバッグ操作時の安定性が改善されます。


#124301 Improve exception message for empty assembly loading

  • 作成者: @Copilot
  • 作成日時: 2026年02月11日 22:46:16(UTC)
  • マージ日時: 2026年02月24日 21:23:11(UTC)
  • ラベル: area-AssemblyLoader-coreclr

概要

空のアセンブリ(0バイト配列またはストリーム)の読み込み時の例外メッセージを改善しました。従来の汎用メッセージ「Bad IL format.」から、より診断的で実用的なメッセージに変更されます。

// 変更前
Assembly.Load(new byte[0]);
// BadImageFormatException: Bad IL format.

// 変更後
Assembly.Load(new byte[0]);
// BadImageFormatException: Assembly image is empty. The stream or byte array must contain a valid PE file.

変更内容

  • Strings.resx: 新しいリソース文字列 BadImageFormat_EmptyAssembly を追加
  • Assembly.cs: Assembly.Load(byte[]) に空のバイト配列チェックを追加し、特定のエラーメッセージを使用
  • AssemblyLoadContext.cs: LoadFromStream() に空のストリームチェックを追加し、同様のエラーメッセージを使用
  • テストファイル: 新しいエラーメッセージに「empty」が含まれることを検証するテストケースを追加

パフォーマンスへの影響

影響なし。入力検証は管理コードで実行される明示的なチェックであり、パフォーマンスオーバーヘッドは無視できる程度です。

関連Issue

dotnet/runtime#36814(および Roslyn#39470 で報告された関連シナリオ)

その他

  • この変更は破壊的ではなく、互換性を保持しています(同じ BadImageFormatException を発生させるが、メッセージのみ改善)
  • ネイティブコードパス(AssemblyNative_LoadFromStream)は既に管理コードレベルの検証により非空入力が保証されます
  • 動的に生成されたアセンブリのバグデバッグ時に開発者体験が向上します

#124300 Fix NRange.GetOffsetAndLength truncation: cast to nuint instead of uint

  • 作成者: @Copilot
  • 作成日時: 2026年02月11日 21:39:28(UTC)
  • マージ日時: 2026年02月24日 23:35:19(UTC)
  • ラベル: area-System.Numerics.Tensors

概要

NRange.GetOffsetAndLengthメソッドの範囲検証バグを修正しました。64ビットプラットフォームでnintパラメータをuintにキャストすると、uint.MaxValueを超える値が切り詰められ、無効な範囲が検証をすり抜けていました。nuintキャストに変更することで、すべてのnint値に対して正しく比較されるようになります。

// 修正前: 64ビットプラットフォームで上位32ビットが切り詰められる
if ((uint)end > (uint)length || (uint)start > (uint)end)

// 修正後: すべてのnint値に対して正しく比較
if ((nuint)end > (nuint)length || (nuint)start > (nuint)end)

変更内容

ファイル 変更内容
src/libraries/System.Numerics.Tensors/src/System/Buffers/NRange.cs GetOffsetAndLengthの検証ロジックでuintキャストをnuintに変更(1行修正)
src/libraries/System.Numerics.Tensors/tests/NRangeTests.cs テストを[Fact]から[Theory]に変更し、64ビット専用テスト([ConditionalTheory(Is64BitProcess)])を追加。uint.MaxValueを超える値の検証テストを追加(39行追加、23行削除)

パフォーマンスへの影響

uintからnuintへのキャスト変更のため、64ビットプラットフォームではキャスト時の処理が若干簡潔になりますが、実質的なパフォーマンス差異はありません。ただし、セキュリティ上の改善として、大きなインデックス値の不正な受け入れを防止します。

関連Issue

#124294(NRange内の他の(uint)変換問題に関連)

その他

  • この修正は破壊的変更ではなく、バグ修正です。従来間違った値を受け入れていたコードが正しく拒否されるようになります。
  • 修正対象外の他の(uint)変換問題(例:ToString)は意図的に除外され、別途Issue #124294で対応予定です。
  • 64ビット専用テストの追加により、32ビットと64ビットプラットフォーム間での動作差異を検出できるようになっています。

#124273 Publish Uri and UriBuilder threat models

  • 作成者: @MihaZupan
  • 作成日時: 2026年02月11日 14:12:40(UTC)
  • マージ日時: 2026年02月24日 17:20:21(UTC)
  • ラベル: area-System.Net

概要

dotnet/runtimeのSystem.UriSystem.UriBuilderクラスに対する脅威モデル(Threat Model)とセキュリティ設計ドキュメントを新規追加するPull Requestです。セキュリティレビューと実装設計に関する包括的なドキュメント化で、開発者がURI処理時の潜在的なセキュリティリスクを理解できるようになります。

変更内容

  • src/libraries/System.Private.Uri/docs/System.Uri Threat Model.md (+516行)

    • Uri クラスの脅威モデルドキュメントを新規作成
  • src/libraries/System.Private.Uri/docs/System.UriBuilder Threat Model.md (+140行)

    • UriBuilder クラスの脅威モデルドキュメントを新規作成
  • .markdownlint.json (+1/-1)

    • Markdown lint設定の調整

パフォーマンスへの影響

影響なし(ドキュメント追加のみ)

関連Issue

  • #123932 に依存(Fuzzing関連ファイルはそちらのマージ後に追加予定)

その他

作成者の説明によると、このドキュメントは公開ドキュメントからリンクされる予定です。Fuzzing セクションに関しては、依存するPull Request #123932のマージを待機中のため、現在は存在しないファイルを参照しています。


目次