Pull Request on 2026年05月29日

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

注意点

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


目次

  1. #128773 Fix typo in defined constant
  2. #128753 [ci-scan] Fix feedback workflow safe outputs and redesign KPI tracker
  3. #128739 Remove dotnet/corert#3873 workarounds
  4. #128730 Enable the cmake cache for WebAssembly builds on Windows
  5. #128725 Simplify/Improve the HashMap/PtrHashMap/EEHashTable
  6. #128724 [Release/10.0] JIT: Fix bug in GenTree::Equals (#128654)
  7. #128719 Include relocation addend in IMAGE_REL_SYMBOL_SIZE resolution
  8. #128715 [Wasm RyuJIT] Fix declared local off-by-one in reverse P-Invoke case
  9. #128713 Use a distinct wasm machine type for R2R dumps
  10. #128711 [cDAC] LegacyHandle on IEnum should be nuint
  11. #128708 Reduce thread count on 32-bit platforms for GThread01_threadstart (arm32/x86)
  12. #128701 JIT: avoid redundant nullcheck in LowerBlockStoreAsGcBulkCopyCall
  13. #128695 Add Process.TryGetProcessById and SafeProcessHandle.TryOpen APIs
  14. #128692 Validate sizes and offsets when parsing NTLM challenge
  15. #128691 Validate base64 in NegotiateAuthentication.GetOutgoingBlob(string)
  16. #128687 Remove CORINFO_HELP_ASSIGN_BYREF and related dead code
  17. #128679 [cDAC] Prepare for dacdbi stackwalk
  18. #128677 Improve the handling of popcnt and tzcnt on arm64
  19. #128672 [cDAC] Implement AreOptimizationsDisabled for cDAC
  20. #128669 Add wasm coverage to SuperPMI CI pipelines
  21. #128667 Guard unused llvm-libunwind symbols to avoid duplicates on Android
  22. #128629 [Android] Fix X509Store cleanup
  23. #128517 [cDAC] Implementing cDAC DacDbi API methods EnumerateMethodDescParams and EnumerateTypeHandleParams
  24. #128502 Add cdac CCR instructions
  25. #128455 Fix NativeAOT string GC config handling
  26. #128438 Reenable android arm32 tests
  27. #128417 Disable TpaLoadFailureTest cases on mobile platforms
  28. #128340 Update area-GC-coreclr ownership to @anicka-net
  29. #128268 Remove unused runtime_config_t::m_prop_keys and m_prop_values
  30. #128065 Enable sccache for arm64 and FreeBSD cross-builds
  31. #127909 Enable test builds with --bootstrap

#128773 Fix typo in defined constant

概要

System.Net.Socketsライブラリ内で定義されている定数のタイポを修正するPull Requestです。複数のファイルにおいて、誤字がある定数名を正しい名称に統一しています。

変更内容

  • System.Net.Sockets.csproj: 定義定数のタイポ修正(1行変更)
  • SafeSocketHandle.Unix.cs: 定数名のタイポ修正(3行変更)
  • SocketAsyncContext.Unix.cs: 定数名のタイポ修正(1行変更)
  • SocketPal.Unix.cs: 定数名のタイポ修正(2行変更)

変更は内部実装(プライベート定数・条件付きコンパイル定数)に限定されており、公開APIへの影響はありません。

パフォーマンスへの影響

影響なし

関連Issue

#128773

その他

なし


#128753 [ci-scan] Fix feedback workflow safe outputs and redesign KPI tracker

概要

CI失敗スキャンフィードバックワークフローの3つの改善を実施しました。

  1. Safe-outputsの修正: gh-awのprotect_top_level_dot_foldersルール対象外とするため、.github/workflows/ci-failure-scan.mdに対する明示的なprotected-files設定を追加し、ワークフロー生成時にprotected_dot_folder_excludesとprotected_files_policyを含める設定を追加
  2. KPIトラッカーの再設計: 統計的に意味のある指標に変更
    • Scanner artifact acceptance rate(30d/90d rolling window、Wilson 95% lower bound、N≥10で計測)
    • CI環境: 観測された障害数(7d/30dと前週比)と主要パイプライン分析
    • Scanner activity: KBE/PR作成・解決数
    • Coverage and latency: KBEファイル数、初期観測から提出までの時間(中央値+P90)
    • Diagnostics: メンテナー報告数、重複数、CI失敗数
  3. スケジュール実行対応: target: "*"を追加し、長寿命KPIトラッカー(#128742)をissue番号で更新可能に

変更内容

  • .github/workflows/ci-failure-scan-feedback.md: Safe-output protected-files例外設定の追加、KPIトラッカー構成の再設計(メトリクス追加、統計的ゲートの実装)
  • .github/workflows/ci-failure-scan-feedback.lock.yml: コンパイル済みgh-aw出力を更新、protected_dot_folder_excludesとprotected_files_policy設定を反映

パフォーマンスへの影響

影響なし

関連Issue

#128742 #128755

その他

  • 検証済み: ディスパッチ実行26633745456で全7ジョブ成功、両方のsafe outputsが正常に実行(トラッカー更新、proposal issue #128755作成)
  • 再設計されたトラッカー本体は次回スケジュール実行時に自動更新される予定
  • ADR-28486に基づいた設定(ドットフォルダルールはフォルダ単位で制御可能)

#128739 Remove dotnet/corert#3873 workarounds

概要

dotnet/corert#3873で導入されたワークアラウンドを削除し、コンパイル時の汎用メソッド検索を厳密化します。従来は遅延初期化で処理していた仮想テーブルスライスと汎用辞書レイアウトの生成を事前計算必須に変更し、スキャナの漏れを明示的にエラーで検出するようにします。

変更内容

src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/ILScanner.cs

  • スキャン済み仮想テーブル検索時にプリコンピュートされたスライスを必須化
  • スキャン済み汎用辞書レイアウト検索でプリコンピュートされたレイアウトを必須化
  • 強制的に遅延検索処理に戻されるエンティティを除外
  • IL スキャナの遅延初期化ロジック(44行)を削除・簡潔化

パフォーマンスへの影響

影響なし(意図的な動作変更で、パフォーマンス面での変化は報告されていません)

関連Issue

#128384

その他

このPRはILスキャナの脆弱性や隠れたバグの検出を目的としており、CIが残存する問題を明示的に報告します。コンパイラの非Ecmaメソッドボディにおける汎用検索の必要性が実質的に解消されたと判断されています。


#128730 Enable the cmake cache for WebAssembly builds on Windows

  • 作成者: @davidwrighton
  • 作成日時: 2026年05月28日 22:22:35(UTC)
  • マージ日時: 2026年05月29日 16:51:01(UTC)
  • ラベル: area-Build-mono

概要

WebAssembly(browser)ビルドのCMakeキャッシュ機能をWindowsでも有効化します。非Windows環境ですでに実装されていたtryrun.browser.cmakeキャッシュの使用をWindows環境にも適用し、configure処理の高速化を実現します。

変更内容

  • eng/native/gen-buildsys.cmd: WebAssembly browser builds (arch=wasm + os=browser)に対してCMakeの-Cオプションでeng/native/tryrun.browser.cmakeプリロードを追加(2行追加)

パフォーマンスへの影響

configure処理の高速化(キャッシュされたtry-run結果の再利用により)

関連Issue

なし

その他

  • 内部ビルドシステムの改善(公開APIへの影響なし)
  • Windows開発者向けのビルド体験の統一化
  • 既存のLinux/macOS実装との同等化

#128725 Simplify/Improve the HashMap/PtrHashMap/EEHashTable

  • 作成者: @davidwrighton
  • 作成日時: 2026年05月28日 20:17:01(UTC)
  • マージ日時: 2026年05月29日 14:05:13(UTC)
  • ラベル: area-VM-coreclr

概要

HashMap、PtrHashMap、EEHashTableの実装を簡素化・最適化するPRです。未使用の置換関数を削除し、仮想関数を使用するCompare関数を非仮想のComptrFunc関数に置き換えることで、メモリ効率と実行速度を向上させます。また、LookupValueの代わりにGetHashを適切に使用するよう変更しています。

変更内容

  • hash.h/hash.cpp: HashMap/PtrHashMapの実装を簡素化。未使用の置換関数を削除し、仮想関数を使用するCompare関数を非仮想のComparePtr関数に置き換え。GetHash実装をより効率的に変更(Compare関数の使用を削除)
  • eehash.h/eehash.cpp/eehash.inl: EEHashTableから未使用の置換関数を削除
  • asynccontinuations.h/asynccontinuations.cpp: 関連するクラス/関数の呼び出し更新(未使用の置換関数削除に伴う変更)
  • contractimpl.cpp/dispatchinfo.cpp/loaderallocator.cpp/readytoruninfo.cpp: HashMap/EEHashTableの使用箇所を更新

パフォーマンスへの影響

改善が期待されます:

  • 仮想関数呼び出しの削除により、ハッシュテーブルのルックアップ時のオーバーヘッドが削減
  • GetHashの直接使用により、より効率的な実装が可能に
  • 未使用の置換関数削除によるコードサイズ削減

具体的なベンチマーク結果の記載はありませんが、仮想関数呼び出し削減による性能向上が期待されます。

関連Issue

なし

その他

  • ランタイム内部実装(CoreCLR VM層)の変更で、公開APIには影響なし
  • 103行削除、27行追加で全体的にコード削減

#128724 [Release/10.0] JIT: Fix bug in GenTree::Equals (#128654)

概要

JITのテール マージ最適化におけるバグを修正します。仮想スタブ呼び出しを正しく区別せず、異なる型の共有ジェネリックメソッドを呼び出す複数のテール コール サイトで呼び出しを誤って統合し、間違ったメソッドが呼び出される問題を解決します。

// 問題のパターン例
if (tag == "bytes")  return ((IFoo<byte[]>)this).Get();
if (tag == "string") return ((IFoo<string>)this).Get();

変更内容

  • src/coreclr/jit/gentree.cpp: GenTree::Equals()メソッドに仮想スタブ呼び出しアドレスの比較ロジックを追加(6行追加)
  • src/tests/JIT/Regression/JitBlue/Runtime_128631/: 回帰テストケース(顧客報告事例および局所的な再現ケース)を追加

パフォーマンスへの影響

影響なし。SPMI(Static Per-Method Inspection)でのベンチマークでコード差分なし。JITがテール マージ最適化に対してより適切な慎重さを持つようになります。

関連Issue

#128631 / #128654(本PRのバックポート)

その他

  • 導入時期: .NET 8で#77103により導入されたバグ
  • リスク評価: 低。メソッド呼び出しが同一であるかを判定するロジックに追加の検証を行うのみ
  • 適用対象: release/10.0ブランチへのバックポート

#128719 Include relocation addend in IMAGE_REL_SYMBOL_SIZE resolution

  • 作成者: @jtschuster
  • 作成日時: 2026年05月28日 19:10:02(UTC)
  • マージ日時: 2026年05月29日 16:24:38(UTC)
  • ラベル: area-ReadyToRun

概要

IMAGE_REL_SYMBOL_SIZE解決パスでリロケーション加数(addend)とインライン値が無視されていた問題を修正しました。PE/COFF形式のシンボルサイズ計算で、呼び出し元の加数と既存のインライン値を組み合わせるようにしました。これにより、R2Rヘッダー内のRuntimeFunctions エントリが、不正に4バイトの末尾sentinelを含めずに正しいサイズを報告するようになります。

具体的には、definedSymbol.Size + addend + inline という計算式に修正され、すべてのCOFF/PEターゲットで意図された動作が復元されます。

変更内容

  • ObjectWriter.cs: IMAGE_REL_SYMBOL_SIZEの解決ロジックを修正し、加数とインライン値を組み合わせてからスロットに書き込むように変更
  • TestCases/R2RTestSuites.cs: RuntimeFunctionsSectionSizeExcludesSentinelテストを追加し、R2RヘッダーのRuntimeFunctionsセクションサイズがターゲット固有のエントリサイズ(x64で12バイト、その他で8バイト)の倍数になっていることを検証

パフォーマンスへの影響

影響なし

関連Issue

#128719

その他

本修正は公開APIの変更ではなく、内部のReadyToRun(R2R)コンパイラの実装改善です。修正前は、RuntimeFunctionsテーブルのサイズ報告に4バイトのsentinel値が誤って含まれていたため、不正なサイズ情報がR2Rヘッダーに書き込まれていました。


#128715 [Wasm RyuJIT] Fix declared local off-by-one in reverse P-Invoke case

概要

Wasm RyuJIT の逆P-Invoke(RPI)ケースにおいて、宣言されたローカル変数のカウントに1つのずれが生じていた問題を修正します。スタックポインタ(SP)が RPI では明示的に宣言されたローカル変数に存在する一方、非RPI では入力引数として扱われることによる不一致を解決しています。

変更内容

  • src/coreclr/jit/regallocwasm.cpp
    • data->m_spReg == argReg の条件チェックを argLclNum == m_compiler->lvaWasmSpArg に置き換え
    • 入力引数に対する宣言済みローカルカウント(DeclaredCount)のデクリメント判定を修正

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

この修正は RPI における仮想レジスタの管理と宣言済みローカル変数の追跡の正確性を改善します。スタックポインタがローカル変数として扱われる RPI ケースと、引数として扱われる通常のケースを正確に区別することで、レジスタ割り当ての正確性が向上します。


#128713 Use a distinct wasm machine type for R2R dumps

  • 作成者: @jtschuster
  • 作成日時: 2026年05月28日 17:43:20(UTC)
  • マージ日時: 2026年05月29日 16:24:08(UTC)
  • ラベル: area-ReadyToRun

概要

Webcil/WebAssembly ReadyToRun (R2R) イメージが従来Machine.I386として扱われていたため、x86固有のデコーディングパスを再利用していた問題を解決します。WebAssembly専用の機械タイプセンチネル(WasmMachine.Wasm32)を導入し、ポインタサイズ、インポートセクション、トランジションブロック、GC情報、r2rdumpのアーキテクチャ処理をWebAssembly固有のコードパスにルーティングします。

変更内容

  • ReadyToRunReader.cs: WebAssembly機械センチネルを定義し、ポインタサイズとインポートセクションのサイジングをWebAssembly対応に変更
  • WebcilImageReader.cs: Webcilイメージに対してMachine.I386ではなくWebAssembly機械センチネルを報告
  • TransitionBlock.cs: WebAssembly32用トランジションブロック実装を追加
  • GCInfoTypes.cs: WebAssembly固有のGC情報エンコーディングベースを追加
  • Program.cs (r2rdump): WebAssembly機械をTargetArchitecture.Wasm32にマッピング
  • CoreDisTools.cs (r2rdump): WebAssembly機械に対してCoreDisToolsの逆アセンブル初期化をスキップ
  • DebugInfo.cs, GcTransition.cs, GcSlotTable.cs: WebAssembly機械ケースのハンドリングを追加(現在は例外をスロー)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

この変更は主にR2Rリフレクション読取ツール(r2rdump)とReadyToRun metadata処理の内部実装に限定されています。WebAssembly用のコード生成やランタイムの公開APIには直接的な影響はありません。一部のデバッグ機能(レジスタ名、スロット状態表示)はWebAssembly対応がまだ実装されていないため、該当コードパスで例外をスロー予定です。


#128711 [cDAC] LegacyHandle on IEnum should be nuint

  • 作成者: @rcj1
  • 作成日時: 2026年05月28日 17:09:25(UTC)
  • マージ日時: 2026年05月29日 04:40:36(UTC)
  • ラベル: area-Diagnostics-cdac

概要

Legacy DAC (Data Access Component) の列挙型インターフェース IEnum<T>.LegacyHandle の型を TargetPointer から nuint に修正するPRです。Legacy DAC列挙ハンドルはホスト側の不透明なポインタであり、ネイティブDAC内で CLRDATA_ENUM 経由で (ULONG_PTR) として格納されるため、nuint が意味論的に正しくなります。これはプロジェクト内の既存慣例(DBI stack/heap/ref walkハンドルなど)に準拠しています。

変更内容

  • IEnum.cs: IEnum<T>.LegacyHandle プロパティの型を TargetPointer から nuint に変更
  • SOSDacImpl.IXCLRDataProcess.cs: EnumMethodInstances.LegacyHandle と関連の呼び出し元を nuint に更新
  • ClrDataModule.cs: EnumMethodDefinitions.LegacyHandle、コンストラクタパラメータ、呼び出し元を nuint に更新
  • ClrDataMethodDefinition.cs: レガシーハンドルの割り当てとゼロチェック(!= TargetPointer.Null から != 0 に変更)を nuint で処理
  • EnumMethodDefinitionsTests.cs: テストコードを対応するアップデート(4行)

全変更は内部実装の型修正であり、Legacy DAC APIの正確性を改善するものです。

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

ulong レガシーハンドルから nuint への明示的なキャストがすべての割り当て箇所で追加されています。


#128708 Reduce thread count on 32-bit platforms for GThread01_threadstart (arm32/x86)

  • 作成者: @Copilot
  • 作成日時: 2026年05月28日 15:47:37(UTC)
  • マージ日時: 2026年05月29日 01:35:50(UTC)
  • ラベル: area-System.Threading

概要

32ビットプラットフォーム(arm32/x86)で GThread01_threadstart テストが OutOfMemoryException で失敗するのを防ぐため、スレッド数を50から5に削減する変更です。32ビットプロセスの限定的な仮想アドレス空間を考慮し、テストスキップではなく実行継続しながら安定動作させます。

// Use fewer threads on 32-bit platforms to avoid OOM from exhausting the virtual address space.
public static int nThreads = PlatformDetection.Is32BitProcess ? 5 : 50;

変更内容

  • src/tests/baseservices/threading/generics/threadstart/thread01.cs:
    • nThreads を固定値 50 から条件分岐に変更
    • 32ビットプロセスで 5、64ビットプロセスで 50 を設定
    • 仮想アドレス空間枯渇を防ぐ旨の説明コメント追加

パフォーマンスへの影響

32ビットプラットフォームでテスト実行時間が短縮されますが、これはテストケース数削減による副次的効果であり、テスト対象のスレッド処理自体のパフォーマンスへの影響ではありません。

関連Issue

なし

その他

テストスキップではなく全プラットフォームで実行継続することで、32ビット環境でのスレッド処理検証も保持される設計です。


#128701 JIT: avoid redundant nullcheck in LowerBlockStoreAsGcBulkCopyCall

  • 作成者: @EgorBo
  • 作成日時: 2026年05月28日 14:04:21(UTC)
  • マージ日時: 2026年05月29日 15:03:17(UTC)
  • ラベル: area-CodeGen-coreclr

概要

JITコンパイラのLowerBlockStoreAsGcBulkCopyCall関数において、GC含有ブロックストアをバルク書き込みバリアヘルパーに変換する際の冗長なnullcheck処理を削除します。先行フェーズで間接参照がfaultしないことが証明されている場合、元のGT_STORE_BLKの例外フラグに依存することで、不要な明示的nullcheckをスキップします。

変更内容

  • src/coreclr/jit/lower.cpp: gtBashToNOP実行前に元のブロックストアのGTF_EXCEPT状態を保存し、元のブロックストアが非faultingであることが証明されている場合はヘルパーオペランドをnullcheckでラップしません。

パフォーマンスへの影響

不要なnullcheck処理が削除されることで、生成されるJITコードの命令数が削減され、若干のパフォーマンス向上が期待されます。

関連Issue

#128696

その他

なし


#128695 Add Process.TryGetProcessById and SafeProcessHandle.TryOpen APIs

概要

Process.GetProcessById と SafeProcessHandle.Open の非スロー型代替メソッドを追加します。これらの新しいAPI(Process.TryGetProcessById と SafeProcessHandle.TryOpen)はプロセスが存在しない場合に false を返し、存在する場合に true を返します。UnauthorizedAccessException などの権限エラーはスロー型と同じく例外として発生します。これにより、プロセスID取得時の競合状態を安全に処理できます。

// プロセスが存在しない場合は false を返す(権限エラーは例外をスロー)
SafeProcessHandle.TryOpen(int processId, out SafeProcessHandle? processHandle);
Process.TryGetProcessById(int processId, out Process? process);

変更内容

  • Reference assembly (System.Diagnostics.Process.cs): 新しい2つのAPI(TryOpen、TryGetProcessById)を追加、[NotNullWhen(true)] 属性で戻り値がtrueの場合のみ出力パラメータがnullでないことを表現
  • Windows実装 (SafeProcessHandle.Windows.cs): TryOpenCore メソッドを抽出、ERROR_ACCESS_DENIED エラー時は UnauthorizedAccessException をスロー
  • Unix実装 (SafeProcessHandle.Unix.cs): kill(pid, 0) でプロセスを検証、EPERM エラー時は UnauthorizedAccessException をスロー
  • SafeProcessHandle.cs: パブリック TryOpen メソッド追加、既存の Open メソッドは TryOpen に委譲
  • Process.cs: SafeProcessHandle を受け取るプライベートコンストラクタを追加してハンドル再取得を回避、TryGetProcessById メソッド実装
  • テスト (ProcessOpenTests.cs): Open/TryOpen および GetProcessById/TryGetProcessById のテストを統合、OS固有の UnauthorizedAccessException テスト追加(Windows: lsass.exe、Linux: PID 1)、プロセス終了動作の検証テスト含む

パフォーマンスへの影響

影響なし

関連Issue

#101582

その他

  • 新API設計により、既存の GetProcessById でハンドルが失われるケースを回避できる仕組みが提供されます
  • 権限エラーと存在しないプロセスの区別が可能になることで、より適切なエラー処理が実装できます
  • 破壊的変更なし(既存APIは変更されていません)

#128692 Validate sizes and offsets when parsing NTLM challenge

  • 作成者: @rzikm
  • 作成日時: 2026年05月28日 11:05:29(UTC)
  • マージ日時: 2026年05月29日 06:46:32(UTC)
  • ラベル: area-System.Net.Security

概要

マネージドNTLMクライアントのCHALLENGE_MESSAGE解析を強化し、不正形式または切詰められたチャレンジが範囲外スライス例外やサイレント誤解析を引き起こさないようにしました。宣言されたオフセット、長さ、およびAVペアサイズが提供されたblobに適合することを検証し、不正な入力に対してはInvalidTokenを返すようにしました。

変更内容

  • NegotiateAuthenticationPal.ManagedNtlm.cs:

    • ProcessChallengeで最小サイズチェック(固定ChallengeMessageヘッダサイズ)を追加
    • GetFieldでネガティブオフセットとオーバーフロー対策を強化(offset > payload.Length - lengthで検証)
    • ProcessTargetInfoでAVペアのサイズ検証(Timestamp AVの最小8バイト確認)を追加
    • 不正な入力時はnullを返し、ProcessChallengeがInvalidTokenを呼び出し元に返す
    • targetInfoBufferのサイズをEOLバイト含めて調整
  • NegotiateAuthenticationTests.cs: 不正形式のチャレンジケースに対する新しいユニットテストを追加

パフォーマンスへの影響

影響なし。正常な形式のチャレンジの動作は変わらず、不正な入力のみが新たに安全に検証される。

関連Issue

#128692

その他

  • これまでの// TODO: Validate size and offsetsコメントに対応した実装
  • 内部実装の安定性強化(公開APIの変更なし)
  • 既知のバグやセキュリティ脆弱性を段階的に修正する形式の改善

#128691 Validate base64 in NegotiateAuthentication.GetOutgoingBlob(string)

  • 作成者: @rzikm
  • 作成日時: 2026年05月28日 11:04:55(UTC)
  • マージ日時: 2026年05月29日 06:46:05(UTC)
  • ラベル: area-System.Net.Security

概要

NegotiateAuthentication.GetOutgoingBlob(string) メソッドの base64 デコード処理を改善しました。従来は Convert.FromBase64String を使用して例外をスローしていましたが、Convert.TryFromBase64String に切り替えることで、不正な base64 入力を InvalidToken ステータスコードとして返すようにしました。HTTP サーバーなど、信頼できないクライアントトークンを処理する場合に try/catch を使用する必要がなくなります。

変更内容

  • NegotiateAuthentication.cs: base64 デコード処理を TryFromBase64String に変更し、ArrayPool<byte> から取得したバッファを使用。デコード失敗時は NegotiateAuthenticationStatusCode.InvalidToken を返し、outgoing blob は null となります。成功時は既存の ReadOnlySpan<byte> オーバーロードに委譲。
  • NegotiateAuthenticationTests.cs: 不正な base64 入力(非 base64 文字、不正な長さ、配置エラーなど)のテスト追加。

パフォーマンスへの影響

  • 正常系での追加の例外スロー/キャッチが削除されるため改善。
  • ArrayPool 使用による一時バッファのプール化で、メモリ割り当て削減。
  • 例外発生時も例外スローなしで処理されるため、失敗パスも効率化。

関連Issue

なし

その他

この変更は公開 API の戻り値の動作を変更するもの(例外発生から InvalidToken ステータス返却へ)ですが、既存の契約(失敗時にステータスコードで報告)に合わせた改善であり、互換性の問題は明記されていません。


#128687 Remove CORINFO_HELP_ASSIGN_BYREF and related dead code

  • 作成者: @EgorBo
  • 作成日時: 2026年05月28日 10:35:03(UTC)
  • マージ日時: 2026年05月29日 15:48:04(UTC)
  • ラベル: area-VM-coreclr

概要

CORINFO_HELP_ASSIGN_BYREF ヘルパーと JIT_ByRefWriteBarrier / RhpByRefAssignRef 実装を削除する変更です。これは前回のPR #128542 のフォローアップで、JIT-EE インターフェースから不要になったByRef write barrier ヘルパーを完全に削除し、ReadyToRun(R2R)ヘルパーマッピングを更新し、JIT/EEバージョンGUIDをバンプします。

変更内容

  • ヘルパー定義削除: corinfo.h から CORINFO_HELP_ASSIGN_BYREF を削除、jithelpers.h から登録を削除
  • 実装削除: AMD64、x86、ARM、ARM64、RISC-V、LoongArch64 各アーキテクチャの JIT_ByRefWriteBarrier / RhpByRefAssignRef アセンブリ実装を削除(約1,000行以上)
  • R2R対応: ReadyToRunConstants を v19.0 にバンプし、ByRef write barrier ヘルパーを未サポートとしてマークし、readytorunhelpers.h から対応マッピングを削除
  • AOT/RyuJIT: ILCompiler 内の CORINFO_HELP_ASSIGN_BYREF マッピング処理を削除
  • JIT/EE GUID: インターフェース変更に伴い jiteeversionguid.h を更新
  • 例外処理: NativeAOT EH ヘルパーと excep.cpp でByRef write barrier の AV 位置追跡処理を削除
  • テスト・コメント: 関連するテストコメントとコード内ドキュメントを更新

パフォーマンスへの影響

影響なし(不要な実装の削除のため、パフォーマンス数値の変化なし)

関連Issue

#128542

その他

  • 互換性: R2R v19 以前では ByRef write barrier ヘルパーが使用されていたため、古い ReadyToRun バイナリとの互換性に影響。新しいランタイムでは v19 以降の形式のみサポート。
  • JIT-EE インターフェース変更: GUID 更新により JIT と EE(実行エンジン)の互換性チェックが機能し、バージョン不一致の検出が可能。

#128679 [cDAC] Prepare for dacdbi stackwalk

  • 作成者: @rcj1
  • 作成日時: 2026年05月28日 04:28:50(UTC)
  • マージ日時: 2026年05月29日 13:59:44(UTC)
  • ラベル: area-Diagnostics-cdac

概要

cDAC(Compact Data Access Component)のスタックウォーク機能をDacDbi向けに準備するため、スタックウォーキングイテレータをリファクタリングしました。ネイティブマーカーフレームをcDAC APIから公開し、レガシーのSOSDac互換性を保ちながらDacDbiスタックウォークで消費可能にします。フレームフィルタリングはコンシューマーレベルで実施されます。

変更内容

  • IStackWalk.cs: StackWalkStateをコントラクト抽象化層に移動し、GetStateメソッドを追加
  • StackWalk_1.cs: ネイティブスタックウォーク状態を初期状態/ネイティブマーカー/フレーム状態に分割し、GC参照フィルタリングを更新
  • StackWalk_1.ExceptionHandling.cs: funcletチェックをマネージドフレームレス状態に限定
  • ClrDataStackWalk.cs: 拡張されたスタックウォークをレガシー互換のフレーム状態にフィルタリング
  • StackWalk.md: 新しいスタックウォーク状態API仕様を文書化
  • テストファイル: 複数のダンプテストを更新してネイティブマーカーフレームの変更に対応

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

このPRはDacDbiスタックウォークAPIの準備であり、既存のIXCLRDataStackWalkコンシューマーに対するレガシー互換性を維持しています。ネイティブマーカーフレームの追加により、より詳細なスタック情報がDacDbiで利用可能になる予定です。


#128677 Improve the handling of popcnt and tzcnt on arm64

概要

ARM64プラットフォームにおいて、popcnt(ポップカウント)とtzcnt(末尾のゼロビット数)命令の処理を改善します。従来はpopcntがまったく処理されておらず、tzcntが2つのIRノードとしてインポートされていたため、ヒューリスティクスやパターンマッチングに悪影響を及ぼしていました。この変更により、これら命令の処理を最適化し、コード生成の効率を向上させます。

変更内容

  • codegenarmarch.cpp: ARM64向けコード生成でpopcntとtzcntの命令生成ロジックを追加(40行追加)
  • importercalls.cpp: メソッドインポーター内のtzcnt処理を改善(11行追加、7行削除)
  • lsraarm64.cpp: ARM64レジスタ割り当て処理でpopcntとtzcnt用の線形スキャンロジックを追加(26行追加)
  • valuenum.cpp: 不要な値の番号付けロジックを削除(5行削除)

パフォーマンスへの影響

  • popcnt命令が新たに最適化されることで、ポップカウント操作のパフォーマンスが向上
  • tzcntが単一のIRノードで処理されることで、JITヒューリスティクスの精度向上とパターンマッチング効率の改善を期待
  • レジスタ割り当て最適化により、これら命令周辺のコード品質が向上する可能性あり

関連Issue

なし

その他

内部実装(JIT、コード生成、レジスタ割り当て)の改善であり、公開APIへの影響はありません。


#128672 [cDAC] Implement AreOptimizationsDisabled for cDAC

  • 作成者: @barosiak
  • 作成日時: 2026年05月27日 23:25:57(UTC)
  • マージ日時: 2026年05月29日 21:29:39(UTC)
  • ラベル: area-Diagnostics-cdac

概要

cDAC(CoreDAC)における AreOptimizationsDisabled メソッドの実装を完了するPRです。従来のレガシー実装へのフォールバックを排除し、IReJIT コントラクトに IsDeoptimized を追加し、ILCodeVersionNode に Deoptimized フィールドを公開しています。

変更内容

  • cDAC コントラクト層: IReJIT インターフェースに IsDeoptimized メソッドを追加、ReJIT_1 実装クラスで実装(合成版は false を返す、明示的版はノードの Deoptimized フィールドを参照)
  • ネイティブ層: ILCodeVersionNode::m_deoptimized フィールドをデータディスクリプタ経由で公開(codeversion.h と datadescriptor.inc を更新)
  • マネージド層: ILCodeVersionNode クラスに Deoptimized プロパティを追加(uint として読み込み、bool として公開)
  • DacDbiImpl: AreOptimizationsDisabled をcDACコントラクト経由で実装。#if DEBUG で従来実装との検証を追加
  • テスト: ReJITおよびDacDbiImpl向けに包括的な単体テストを追加(合成版/明示版の動作、null チェック、無効なトークンなど)
  • ドキュメント: ReJIT.md を更新し、新しい IsDeoptimized API と Deoptimized フィールドを記載

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • 変更はすべてcDAC内部の実装およびテストに限定されており、公開APIの変更はありません
  • デバッグビルド時にのみレガシー実装との cross-check が実行され、本番ビルドでは追加のオーバーヘッドはありません
  • 11ファイル全変更がCopilotレビューの対象となっています

#128669 Add wasm coverage to SuperPMI CI pipelines

概要

SuperPMI(JIT性能測定・比較ツール)のCI パイプラインにWebAssembly(wasm)クロスターゲット JIT対応を追加します。wasm JIT(clrjit_universal_wasm_<host_arch>)のコレクション、リプレイ、アセンブリ差分解析機能を統合し、パイプライン・スクリプト・ビルドシステムを拡張して wasm をクロスターゲット altjit ケースとして処理します。

変更内容

  • SuperPMIスクリプト(src/coreclr/scripts/):

    • superpmi.py にターゲットOS/アーチパラメータ(--targetos/--targetarch)を追加
    • superpmi_collect_setup.py でwasm用の単一アセンブリパーティショニングと checked JIT オーバーレイを実装
    • superpmi_replay.py でwasm をクロスターゲット altjit として処理し、ホストOS/アーチを実行時に再導出
    • superpmi_diffs.py と superpmi_asmdiffs_checked_release.py で wasm ターゲット時に自動的に --altjit を付加
    • superpmi_diffs_setup.py で wasm コレクション発見機能を拡張
  • AzDOパイプラインテンプレート(eng/pipelines/coreclr/templates/):

    • superpmi-send-to-helix.yml に targetOS/targetArch パラメータを追加
    • run-superpmi-collect-job.yml でターゲットOS/アーチをセットアップ・Helix送信・ストレージアップロードを通じて処理
    • superpmi-collect-job.yml で wasm ビルドアーティファクトをダウンロード
  • パイプライン定義(eng/pipelines/coreclr/):

    • 新規 superpmi-replay-wasm.yml:Windows x64での日次 wasm リプレイパイプライン
    • jit-replay-pipeline.yml、superpmi-diffs.yml、superpmi-asmdiffs-checked-release.yml で clr.wasmjit ビルド・発行を統合
    • jitrollingbuild.yml で wasm asmdiffs ベースライン用 clr.wasmjit アップロードを追加
  • MSBuild プロジェクト(src/coreclr/scripts/*.proj):

    • superpmi-collect.proj にターゲットOS/アーチ引き渡し
    • superpmi-replay.proj に browser/wasm パーティション追加
    • superpmi-asmdiffs-checked-release.proj に browser/wasm パーティション追加

パフォーマンスへの影響

影響なし(この変更は測定・比較インフラストラクチャの拡張であり、ランタイム性能に直接影響しません)

関連Issue

なし

その他

  • 内部実装の変更: SuperPMI関連スクリプト・パイプライン・ビルドシステムへの拡張であり、公開APIに影響なし
  • 互換性: 破壊的変更なし。既存のx64/arm64 JIT測定継続可能
  • 作成者(AndyAyers)はMicrosoft CoreCLR JIT チームのメンバーで、既存 SuperPMI インフラに関する深い知見

#128667 Guard unused llvm-libunwind symbols to avoid duplicates on Android

  • 作成者: @sbomer
  • 作成日時: 2026年05月27日 21:31:16(UTC)
  • マージ日時: 2026年05月29日 16:57:12(UTC)
  • ラベル: area-NativeAOT-coreclr

概要

NativeAOTが使用しないllvm-libunwindの公開API(unw_*関数など)をガード化し、Android NDK r29などのプラットフォームlibunwindとのシンボル重複を回避する変更です。NativeAOTは内部C++クラス(DwarfInstructions、CompactUnwinder、UnwindCursorなど)のみを使用するため、これらの公開APIをコンパイル時に除外し、新たにUnwindHelpers::FindUnwindSections()アクセッサを導入してアンワインドセクション検出を処理します。

変更内容

  • llvm-libunwind(外部ベンダー): _LIBUNWIND_NATIVEAOT定義により、libunwind.cppのunw_*関数とLocalAddressSpace::sThisAddressSpaceシングルトン、AddressSpace.hppの静的メンバ宣言、Unwind-EHABI.cppのC++例外ディスパッチ関数をガード化
  • NativeAOT Runtime: UnwindHelpers.h/cppに新たにFindUnwindSections()アクセッサを実装し、UnixNativeCodeManager.cppがこれを利用するよう変更。ファイルスコープの_addressSpaceインスタンスへデリゲート
  • CMake設定: Unix NativeAOTビルド時に_LIBUNWIND_NATIVEAOT=1を定義

パフォーマンスへの影響

影響なし

関連Issue

#121172

その他

  • 互換性: 内部実装の変更のため公開APIへの影響なし
  • プラットフォーム特有: Android NDK r29を含むLinux/Unix系プラットフォームのNativeAOTビルドに対する修正
  • バージョン管理: llvm-libunwind-version.txtにパッチ適用記録を追記

#128629 [Android] Fix X509Store cleanup

概要

AndroidプラットフォームにおけるX509Storeのメモリリーク問題を修正します。JNIローカル参照とプライベートキーエントリの破棄漏れを解決し、証明書列挙、ストアオープン失敗時のクリーンアップ、および証明書削除の各パスでリソースリークを防ぎます。

変更内容

  • pal_x509store.c: KeyStore.aliases()列挙時のJNI例外チェック追加、X509StoreOpenDefault/X509StoreRemoveCertificateの早期リターンパスにおけるローカル参照クリーンアップ修正、信頼された証明書列挙時のJNI参照解放追加
  • AndroidCertificatePal.cs: Dispose()メソッドで保持されているKeyStore.PrivateKeyEntryのSafeJObjectHandleを確実に破棄してグローバル参照リークを防止

パフォーマンスへの影響

メモリリーク修正に伴い、JVMメモリ圧力が軽減されるため、長期実行時のメモリ使用量削減が期待できます。追加される例外チェックはAndroidプラットフォームのX509Store操作のオーバーヘッドですが、正常系では軽微です。

関連Issue

#128284

その他

本PRはAndroid環境でのX509証明書操作に関連するメモリリークの修正です。内部実装(PAL層)の変更であり、公開APIへの影響はありません。


#128517 [cDAC] Implementing cDAC DacDbi API methods EnumerateMethodDescParams and EnumerateTypeHandleParams

  • 作成者: @Copilot
  • 作成日時: 2026年05月23日 04:30:31(UTC)
  • マージ日時: 2026年05月29日 00:29:34(UTC)
  • ラベル: area-Diagnostics-cdac

概要

DAC/DBI型パラメータ取得APIを、割り当てられたTypeParamsListバッファを返すモデルから、コールバックベースの列挙方式へリファクタリングしました。GetMethodDescParams/GetTypeHandleParamsをEnumerateMethodDescParams/EnumerateTypeHandleParamsに置き換え、ネイティブ(DAC/DBI+RS)および管理cDAC側の対応インフラを整備しています。

変更内容

  • DacDbiInterface(ネイティブ): FP_TYPEPARAM_CALLBACKコールバック型を導入し、新しい列挙APIに切り替え
  • DAC実装(dacdbiimpl.cpp/h): 列挙メソッドの実装、コールバック発行への切り替え
  • RS呼び出しサイト(rstype.cpp、rsthread.cpp): 新しいCallbackAccumulatorアダプタを使用した列挙方式へ対応
  • 管理cDAC実装(DacDbiImpl.cs): 列挙ロジックの実装、汎用トークン解決、パラメータごとの失敗時にSystem.__Canonへフォールバック
  • グローバル追加: CanonMethodTableグローバルを追加し、管理cDACがSystem.__Canonを解決できるように対応
  • プロトコル変更: kCurrentDacDbiProtocolBreakingChangeCounterをインクリメント(破壊的インターフェース変更を反映)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • 本変更は新しいコントラクトを導入しません
  • DAC/DBIプロトコルの破壊的変更であり、デバッガのバージョン互換性に影響します
  • コールバックベースの列挙方式により、メモリ割り当てが削減され、大規模な型パラメータセットの処理時の効率が向上します

#128502 Add cdac CCR instructions

  • 作成者: @rcj1
  • 作成日時: 2026年05月22日 19:17:58(UTC)
  • マージ日時: 2026年05月29日 16:27:32(UTC)
  • ラベル: area-Diagnostics-cdac

概要

cDAC(Common Data Access Component)領域のレビュー/自動化ガイダンスを明確化するため、フォルダ固有のインストラクション文書を追加します。繰り返されるレビューコメントを削減し、レビュー基準を統一することを目的としています。

変更内容

  • .github/instructions/cdac-instructions.md(新規追加、34行): cDAC領域向けのレビュー基準と慣例を記載
    • API レビュー適用範囲の明確化
    • DacDbi インターフェース変更に関する要件
    • ダンプ互換性への考慮
    • 例外マッピング要件
    • ドキュメンテーション要件

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

このドキュメントは src/native/managed/cdac/** 配下への変更に対するレビュープロセスを規定する内部ガイダンスです。コード変更ではなく、開発プロセス改善を目的とした変更です。


#128455 Fix NativeAOT string GC config handling

概要

NativeAOTランタイムのGC設定処理を修正し、文字列型のGC設定値(例:GCHeapAffinitizeRanges)が正しく取得できるようにしました。従来はGCToEEInterface::GetStringConfigValueが常にfalseを返していたため、文字列設定の抽出ができず、CoreCLRとの動作差異が生じていました。本修正により、環境変数および組み込み設定ブロブから文字列設定値を読み込めるようになります。

変更内容

  • RhConfig.h/cpp: 環境変数(DOTNET_*)および組み込み設定ブロブから文字列設定値を読み込むヘルパー関数を追加実装し、メモリ解放処理も統一管理
  • gcenv.ee.cpp: GCToEEInterface::GetStringConfigValueとGCToEEInterface::FreeStringConfigValueをNativeAOTのRhConfigに委譲するよう実装
  • プラットフォーム固有処理: Windows(PalMinWin.cpp)およびUnix(PalUnix.cpp)の文字列設定値読み込み処理を対応
  • テスト: GetConfigurationVariables テストに文字列型GC設定値の検証ロジックを追加

パフォーマンスへの影響

影響なし

関連Issue

#128396

その他

この修正はNativeAOTのGC設定処理をCoreCLRに合わせるもので、特にGCヒープアフィニティ化(GCHeapAffinitizeRanges)などの文字列ベースの設定がNativeAOTでも有効に機能するようになります。公開APIの変更ではなく、内部実装の修正です。


#128438 Reenable android arm32 tests

概要

Android arm32デバイス上でのテスト実行を再有効化するPR。新しいAndroidキューの作成により、arm32エミュレーション対応デバイスを個別に管理し、既存の大規模キューはarm64専用に変更。これにより#125440が解決される。

変更内容

  • eng/pipelines/runtime.yml: メインランタイムパイプラインのMonoAndroidデバイスマトリックスでandroid_armを再有効化
  • eng/pipelines/extra-platforms/runtime-extra-platforms-android.yml: 追加プラットフォーム用AndroidパイプラインのMonoAndroidデバイスマトリックスでandroid_armを再有効化

パフォーマンスへの影響

影響なし。新キューは小規模(10デバイス)で、実行テスト数も限定的。

関連Issue

#125440

その他

なし


#128417 Disable TpaLoadFailureTest cases on mobile platforms

  • 作成者: @Copilot
  • 作成日時: 2026年05月20日 21:08:31(UTC)
  • マージ日時: 2026年05月29日 16:57:50(UTC)
  • ラベル: area-AssemblyLoader

概要

モバイルプラットフォーム上でのアセンブリロード失敗テストの失敗を解決するPRです。TpaLoadFailureTestの2つのテストケースにモバイルプラットフォーム除外条件を追加します。モバイルではファイル削除とパッケージング/バンドリングの相互作用によってテストが失敗するため、デスクトップ/CoreCLRプラットフォームのみでのテスト実行に限定します。

変更内容

  • src/libraries/System.Runtime.Loader/tests/TpaLoadFailureTest.cs
    • NotFound_ExceptionContainsAssemblyPathテストのConditionalFact属性にPlatformDetection.IsNotMobile条件を追加
    • Corrupt_ExceptionContainsPathAndHResultテストのConditionalFact属性にPlatformDetection.IsNotMobile条件を追加
    • SharingViolation_ExceptionContainsPathAndHResult(Windows専用テスト)は変更なし

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • 対象プラットフォーム: iossimulator-arm64(AllSubsets_CoreCLR)
  • 変更は内部テストコード(公開APIへの影響なし)
  • モバイルプラットフォームではTPA(Third Party Assembly)バインド動作がデスクトップと異なるため、テストシナリオが適用されない

#128340 Update area-GC-coreclr ownership to @anicka-net

  • 作成者: @Copilot
  • 作成日時: 2026年05月18日 21:29:14(UTC)
  • マージ日時: 2026年05月29日 16:16:54(UTC)
  • ラベル: area-GC-coreclr

概要

area-GC-coreclrの所有者を@JulieLeeMSFTから@anicka-netに変更し、GitHub policies設定も同期して、エリアタグ付けの動作を所有権更新に合わせたものです。

変更内容

  • docs/area-owners.md: area-GC-coreclrのリード所有者を@anicka-netに更新
  • .github/policies/resourceManagement.yml: area-GC-coreclrのmentionees(メンション対象者)をJulieLeeMSFTからanicka-netに変更(@dotnet/gcチームは変更なし)
  • mainブランチとのマージ競合を解決:area-Extensions-Logging、area-Extensions-Options、area-Extensions-Primitivesのアップストリーム所有者更新を取り込みつつ、本PRのarea-GC-coreclr変更を保持

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

このPRは組織管理用のメタデータ更新です。ランタイムコードへの変更はなく、GitHub上でのIssue/PRルーティングと所有権管理の整備のみです。


#128268 Remove unused runtime_config_t::m_prop_keys and m_prop_values

  • 作成者: @elinor-fung
  • 作成日時: 2026年05月15日 21:36:26(UTC)
  • マージ日時: 2026年05月29日 18:51:46(UTC)
  • ラベル: area-Host

概要

runtime_config_tから未使用のプライベートメンバ変数m_prop_keysとm_prop_valuesを削除し、ランタイム設定型の不要な状態を削減しました。

変更内容

  • src/native/corehost/runtime_config.h: runtime_config_tのプライベートメンバ変数m_prop_keysとm_prop_values(ベクトル)を削除

パフォーマンスへの影響

わずかなメモリ削減(未使用メンバ変数の削除による)

関連Issue

なし

その他

リポジトリ全体で参照がないことが確認済みです。


#128065 Enable sccache for arm64 and FreeBSD cross-builds

概要

sccacheのキャッシング機能をarm64とFreeBSDのクロスコンパイルに対応させるPRです。キャッシュキーにarchTypeとosSubgroupを含めることで、各バリアント(arm64、FreeBSD、musl)が個別のキャッシュエントリを取得できるようにしています。arm64とFreeBSDはx64マシン上でクロスコンパイルされるため、既存のx64 sccacheバイナリで対応可能です。

変更内容

  • setup-sccache.yml: sccacheの有効化条件を拡張し、arm64とFreeBSDのクロスコンパイルをサポート
  • sccache-stats.yml: キャッシュ統計情報の条件を更新
  • jit-hardware-intrinsics-common.yml: JITハードウェア組み込み関連のキャッシング設定を追加
  • global-build.yml、runtime.yml: パイプライン定義を更新し、拡張されたキャッシング対象に対応

パフォーマンスへの影響

ビルドキャッシュの適用範囲が拡大することで、arm64とFreeBSDのクロスコンパイルビルド時間の削減が期待できます。キャッシュキーにosSubgroupを含めることにより、musl対応時も適切に分離されたキャッシュが活用されます。

関連Issue

#128048(musl対応の予定)

その他

  • Copilot assistanceで作成されたPR
  • キャッシュキー設計により、異なるアーキテクチャとOS構成が相互にキャッシュを汚染しない構造となっています

#127909 Enable test builds with --bootstrap

概要

ブートストラップビルド機能をテストビルドで有効化するための変更。--use-bootstrapフラグをライブラリテストとランタイムテストで使用できるようにし、ローカルターゲットパック基盤を統一することで、クロスコンパイルテストの構築プロセスを改善します。

変更内容

  • ビルドスクリプト: src/tests/build.shに--use-bootstrapオプションを追加し、クロスコンパイル時にブートストラップビルドを使用可能に
  • ライブラリテスト設定: src/libraries/Directory.Build.propsとsrc/libraries/tests.projでUseBootstrapプロパティを有効化
  • ランタイムテスト設定: src/tests/Directory.Build.props、src/tests/Directory.Build.targets、src/tests/build.projでUseBootstrapサポートを追加
  • ターゲットパック基盤: eng/targetingpacks.targetsからローカルターゲットパック参照をテストプロジェクトで利用可能に統一
  • ドキュメント: docs/workflow/building/coreclr/cross-building.mdにブートストラップビルド用クロスコンパイル手順を追加
  • テストアセット: NativeExports.csprojでターゲットフレームワーク定義を簡潔化

パフォーマンスへの影響

影響なし

関連Issue

#115622

その他

なし


目次