Pull Request on 2026年05月18日

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

注意点

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


目次

  1. #128337 Remove Attributes.BoxedValues from ILTrim expected failures
  2. #128315 Remove stale test analyzer suppressions
  3. #128288 [cDAC] Implement DacDbi GetCollectibleTypeStaticAddress
  4. #128278 Use bundle extraction path for CoreLib fallback in BindToSystem
  5. #128270 JIT: don't make local copy when devirtualizing boxed interface call
  6. #128257 [clr-interp] Detect Swift calling convention for transient-IL P/Invokes
  7. #128250 JIT: Move invariant nodes and LCL_VARs in LiftLIREdges
  8. #128248 [wasm][coreclr] Put generated callhelpers into libcoreclr_gen_static library
  9. #128243 Delete obsolete CORINFO_TYPE_... entries
  10. #128238 Use GTF_IND_TGT_NOT_HEAP/GTF_IND_TGT_HEAP for GT_STORE_BLK
  11. #128222 Add support for generating pointers to funclets, and calling funclets by index
  12. #128220 Sync TlsFrameHelper.cs typo/grammar fixes from dotnet/yarp
  13. #128217 Fix heap_segment_used watermark after compaction
  14. #128197 [release/10.0] Source code updates from dotnet/dotnet
  15. #128190 [ci-scan] Broaden duplicate detection and enforce correct KBE JSON schema
  16. #128188 Centralize MonoAotIncompatible exclusion for mono fullaot variants
  17. #128135 System.Runtime.Loader.Tests: use TargetsAppleMobile for test-assembly references to unblock trimmed simulator/macCatalyst builds
  18. #128074 Guard against overflow in SubReadStream
  19. #128039 perf: avoid per-observation array allocation in ObservableInstrument
  20. #127973 Cache continuation used for runtime async callable value task thunks
  21. #127932 JIT: Decouple "DoNotEnregister" from liveness
  22. #127596 Parse custom attribute value blobs for dependencies and rewrite type name strings
  23. #127536 [AMD64][APX] Introduce the remaining NCI instructions - CTEST, CFCMOV
  24. #127236 Implement LINQ FullJoin operators
  25. #127003 [release/10.0] Fix assertions generated by optCreateJumpTableImpliedAssertions
  26. #126569 [main] Update dependencies from dotnet/hotreload-utils, dotnet/icu, dotnet/runtime-assets
  27. #125024 Implement EqualityComparer<T>.Create with key selector parameters
  28. #122056 Fix ILVerify IndexOutOfRangeException for malformed exception handling clause bounds
  29. #109863 Add option GCTrimYoungestKeepPercent to specifies the percent of youngest gen to keep during trimming

#128337 Remove Attributes.BoxedValues from ILTrim expected failures

  • 作成者: @Copilot
  • 作成日時: 2026年05月18日 20:15:57(UTC)
  • マージ日時: 2026年05月18日 21:24:54(UTC)
  • ラベル: area-NativeAOT-coreclr

概要

ILTrim テストの Attributes.BoxedValues テストケースが予期せず成功するようになったため、期待失敗リストから削除するPRです。テストハーネスは期待失敗リストに登録されているが実際には成功するテストに対してエラーを発生させます。

変更内容

  • src/coreclr/tools/ILTrim.Tests/ILTrimExpectedFailures.txt から Attributes.BoxedValues を削除(1行削除)

パフォーマンスへの影響

影響なし

関連Issue

#127596 の副作用により Attributes.BoxedValues テストが成功するようになったと考えられます。

その他

このテストが成功するようになった根本原因は#127596と関連していますが、このPRの目的は単にテスト失敗リストのメンテナンス(整理)です。


#128315 Remove stale test analyzer suppressions

概要

複数のテストプロジェクト(.csproj)から不要になったアナライザー抑制(suppressions)を削除するPRです。Arcade修正と追加の分析により、これらの抑制は不要になったとのことです。

変更内容

  • 対象範囲: 24個のテストプロジェクト(.csproj)ファイル
  • 変更内容: プロジェクトファイルから <NoWarn> または関連するアナライザー抑制指定を削除
    • Microsoft.Extensions.Logging、System.Net.*(Http、Sockets、Security等)、System.Security.Cryptography.*、System.Threading など複数のライブラリテスト
    • System.Net.Security.Tests.csproj 関連では SslStreamAllowTlsResumeTests.cs にも軽微な変更あり
  • 削除対象: 合計40行程度のアナライザー抑制指定

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • ILLinkチーム(@dotnet/illink)への通知あり
  • 本変更は、より厳密なコード分析の実施を可能にするもので、テスト品質の向上に貢献します
  • アナライザー抑制の削除により、将来の警告検出がより容易になります

#128288 [cDAC] Implement DacDbi GetCollectibleTypeStaticAddress

  • 作成者: @Copilot
  • 作成日時: 2026年05月16日 17:41:18(UTC)
  • マージ日時: 2026年05月18日 23:20:19(UTC)
  • ラベル: area-Diagnostics-cdac

概要

cDAC RuntimeTypeSystemコントラクトを拡張し、GetFieldDescStaticAddressとGetFieldDescThreadStaticAddressにunboxValueTypesパラメータを追加しました。これにより、値型の静的フィールド/スレッド静的フィールドのアドレス計算時に、ボックス化された値をアンボックスするかどうかを呼び出し側で選択できるようになります。この機能を使用して、非レガシーパスでDacDbiImpl.GetCollectibleTypeStaticAddressを実装します。

変更内容

  • DacDbiImpl.cs: GetCollectibleTypeStaticAddressをIRuntimeTypeSystem.GetFieldDescStaticAddress(..., unboxValueTypes: false)経由で実装し、レガシー実装との検証をDEBUGで追加
  • IRuntimeTypeSystem.cs: GetFieldDescStaticAddress/GetFieldDescThreadStaticAddressにunboxValueTypesオプショナルパラメータを追加
  • RuntimeTypeSystem_1.cs: 上記インターフェイスの実装側で新パラメータをスレッド処理し、静的アドレスリゾルバに統合
  • RuntimeTypeSystem.md: 新パラメータの意味論と、ボックス化/アンボックス化されたアドレスの動作を文書化

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

このPRはコレクティブル型(collectible types)のデバッグ情報へのアクセスを改善するためのcDAC(Compact Data Access Contracts)インフラの変更です。パラメータは既定値を持つオプショナルパラメータとなるため、既存の呼び出し側への互換性への影響はありません。


#128278 Use bundle extraction path for CoreLib fallback in BindToSystem

  • 作成者: @elinor-fung
  • 作成日時: 2026年05月16日 02:41:04(UTC)
  • マージ日時: 2026年05月18日 20:21:46(UTC)
  • ラベル: area-VM-coreclr

概要

自己完結型単一ファイルアプリ(IncludeAllContentForSelfExtract=trueで公開)のSystem.Private.CoreLib.dllバインディング処理を最適化しました。システムディレクトリでの検索失敗時、TRUSTED_PLATFORM_ASSEMBLIES(TPA)全体をスキャンする代わりに、バンドル抽出ディレクトリを直接参照するよう変更。これにより、スタートアップ時のメモリ割り当てを削減します。

変更内容

  • src/coreclr/binder/assemblybindercommon.cpp: BindToSystem内のCoreLib検索フォールバック処理を変更。TPA リスト全体のスキャンからBundle::AppBundle->ExtractionPath()への直接参照に置き換え。configuration.hの依存関係も削除。
  • src/coreclr/hosts/corerun/corerun.cpp: 関連する初期化処理の更新。

パフォーマンスへの影響

メモリ割り当ての削減:

  • Hello, World!サンプル(TPA内でCoreLibが98番目/182エントリ)での改善実績
  • 1プロセス起動当たり:約209個の割り当てで約38KB削減
  • 測定結果(osx-arm64 Release、5回の平均):
    • 変更前:約25,425割り当て、約9,022KB
    • 変更後:約25,216割り当て、約8,984KB
    • 削減:約209割り当て、約38KB

削減量はTPA リストサイズとCoreLibの位置に依存(スキャン対象エントリ数 k に対し、約1個の大規模割り当て+2k個の小規模割り当てを削減)。

関連Issue

#42435

その他

  • 自己完結型単一ファイルアプリのスタートアップ性能を改善(メモリ使用量面)。
  • 通常のシステムディレクトリ検索フローと既存のトレース機構は維持される。

#128270 JIT: don't make local copy when devirtualizing boxed interface call

概要

ボックス化されたインターフェース呼び出しをデバーチャル化する際、JITが一時的なスタックローカルコピーを作成していた問題を修正します。UnscopedRefなどを介して内部マネージドポインタを返すメソッドの場合、返却されたbyrefが一時コピーにエイリアスされ、フレーム終了後にダングリングポインタになる安全性上の問題がありました。修正後は常にヒープボックスを保持し、ボックス+MTサイズのアドレスでアンボックス化されたエントリを呼び出すよう変更します。オブジェクトのスタック割り当て最適化によって、非エスケープなヒープボックスは既にスタックに昇格されるため、前の最適化は安全なケースで復元されます。

変更内容

  • src/coreclr/jit/importercalls.cpp: インターフェース呼び出しのデバーチャル化ロジックを修正(BR_MAKE_LOCAL_COPYに関連するローカルコピー生成コードを削除し、ヒープボックスを保持したまま呼び出しを書き直す処理を追加)
  • src/coreclr/jit/gentree.cpp: gtTryRemoveBoxUpstreamEffects関数から到達不可能なBR_MAKE_LOCAL_COPY削除ロジックを削除
  • src/coreclr/jit/compiler.h、jitmetadatalist.h: BR_MAKE_LOCAL_COPY関連の定義・オプション削除
  • src/tests/JIT/Regression/JitBlue/Runtime_122099/Runtime_122099.cs: デバーチャル化時のポインタ安全性を検証するリグレッションテスト追加

パフォーマンスへの影響

影響なし。オブジェクトスタック割り当てによって非エスケープなヒープボックスはスタックに昇格されるため、パフォーマンス最適化は既存メカニズムで継続されます。

関連Issue

#122099

その他

この変更は安全性問題(ダングリングポインタ)を修正するセキュリティ関連の修正です。内部実装の変更でありパブリックAPIに影響はありませんが、ボックス化インターフェース呼び出しの最適化コードパスに影響します。


#128257 [clr-interp] Detect Swift calling convention for transient-IL P/Invokes

概要

#126509で導入されたトランジェント-IL P/Invokeの呼び出し規約検出を修正するPR。Swift呼び出し規約を使用するトランジェント-IL P/Invokeでは、MethodDesc::IsILStub()がfalseを返すため、コンテキストMDが渡されず、Swift呼び出し規約検出に失敗していた問題を解決します。

変更内容

  • src/coreclr/vm/jitinterface.cpp: CInterpreterJitInfo::GetCookieForInterpreterCalliSigを修正し、P/Invokeメソッドがトランジェント-IL形式の場合、当該メソッドをコンテキストMDとしてCallStubGeneratorに渡すようにしました。これにより、既存のComputeCallStubのIsPInvokeブランチが有効になり、PInvoke::GetCallingConvention_IgnoreErrors経由でSwift呼び出し規約が正しく検出されます。

パフォーマンスへの影響

影響なし(バグ修正による動作の正確性向上)

関連Issue

#127897 #127898 #126509 #125177

その他

修正により以下の動作が改善されます:

  • RewriteSignatureForSwiftLoweringが適切に呼び出され、[ref SwiftError]検証エラーが正しく発生
  • ネイティブ呼び出し時にx21レジスタが適切に保存され、SwiftError値がリターン時に失われない

#128250 JIT: Move invariant nodes and LCL_VARs in LiftLIREdges

概要

JIT の async state machine lowering において、不変ノード(invariant nodes)と LCL_VAR が async 呼び出しを跨いでリフトされないよう最適化します。これらのノードを使用箇所の直前に移動することで、spill locals の生成を削減し、LCL_ADDR defs がリフトされないことを保証します(#128152 の前提条件)。

変更内容

  • src/coreclr/jit/async.cpp: AsyncTransformation::LiftLIREdges メソッドの最適化
    • GenTree::IsInvariant() で判定される不変ノードを async 呼び出しの直前に移動
    • アドレス公開されていない GT_LCL_VAR ノードについても同様の最適化を試行
    • spill locals への退避ではなく、ノード自体の再配置による処理

パフォーマンスへの影響

生成される spill locals の削減により、メモリ使用量と JIT コンパイル時間の軽微な改善が期待されます。具体的なベンチマーク結果は提供されていません。

関連Issue

#128152

その他

本変更は内部 JIT 最適化(コンパイラ実装)であり、公開 API への影響はありません。


#128248 [wasm][coreclr] Put generated callhelpers into libcoreclr_gen_static library

概要

WebAssembly/coreclrのビルド構成を変更し、生成されたcallhelper実装ファイル(callhelpers-interp-to-managed.cpp、callhelpers-reverse.cpp、callhelpers-pinvoke.cpp)を新しいlibcoreclr_gen_static静的ライブラリに分離しました。これにより、coreclr全体を再構築することなく、libcoreclr_staticと新しく生成されたcallhelperソースのみでの再リンクが可能になります。

変更内容

  • vm/CMakeLists.txt: callhelperファイルを既存のcee_wks_coreから削除し、新規のcee_wks_gen オブジェクトライブラリを作成
  • vm/wks/CMakeLists.txt: 新しいcoreclr_gen_static静的ライブラリを定義(16行追加)
  • dlls/mscoree/coreclr/CMakeLists.txt: coreclr_gen_staticを既存のライブラリにリンク(13行追加)
  • hosts/corerun/CMakeLists.txt: coreclr_gen_staticをリンクターゲットに追加
  • native/corehost/browserhost/CMakeLists.txt: coreclr_gen_staticをリンクターゲットに追加
  • mono/browser/build/BrowserWasmApp.CoreCLR.targets: インストール処理を簡潔化
  • installer/pkg/sfx/Microsoft.NETCore.App/Directory.Build.props: 新しいライブラリのインストール設定を追加

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

本変更により、WASM/coreclr全消費者(corerun、browserhost)が新しいcoreclr_gen_staticライブラリを使用するように統一されました。callhelperの生成と再ビルド時の作業を効率化することが目的です。


#128243 Delete obsolete CORINFO_TYPE_... entries

  • 作成者: @Copilot
  • 作成日時: 2026年05月15日 03:38:15(UTC)
  • マージ日時: 2026年05月18日 22:38:05(UTC)
  • ラベル: area-CodeGen-coreclr

概要

CoreCLR JIT/EE インターフェースの CorInfoType 列挙型から、レガシーな CORINFO_TYPE_STRING、CORINFO_TYPE_REFANY、CORINFO_TYPE_VAR を削除し、文字列を CLASS、型付き参照を VALUECLASS として再分類するクリーンアップです。JIT/EE版GUID も更新されています。

変更内容

  • corinfo.h: CorInfoType 列挙値を更新し、廃止エントリを削除
  • jiteeversionguid.h: JIT/EE インターフェース版GUID を更新(内部契約変更による)
  • VM層(jitinterface.cpp): 文字列を CORINFO_TYPE_CLASS へ、型付き参照を CORINFO_TYPE_VALUECLASS へマッピング
  • JIT層:
    • ee_il_dll.hpp/cpp: 型検索テーブルを新しい列挙レイアウト用に更新、廃止されたrefanyアサーション削除
    • compiler.cpp: refanyサイズ特殊ケース削除
    • importer.cpp: tailcall引数制約チェック更新
    • lclvars.cpp: refanyポインタ分類削除
    • eeinterface.cpp: 型マッピング処理更新
  • インタープリタ層(interpreter/): string/refanyケース削除、型・非同期戻り値処理更新
  • SuperPMI ツール: 型ユーティリティと IL ダンプ処理を削除エントリに対応
  • マネージド JIT インターフェース(CorInfoTypes.cs): 列挙型定義を同期更新

パフォーマンスへの影響

影響なし。これは内部的な型表現の合理化であり、実行時の性能変化はありません。

関連Issue

なし

その他

  • 互換性: 内部的な JIT/EE 契約変更のため、JIT/EE版GUID 更新が必須です。これはランタイム内部の実装詳細であり、公開 API への影響はありません。
  • 目的: レガシーな型エントリを廃止し、型システムを単純化することで、保守性を向上させるクリーンアップです。

#128238 Use GTF_IND_TGT_NOT_HEAP/GTF_IND_TGT_HEAP for GT_STORE_BLK

  • 作成者: @EgorBo
  • 作成日時: 2026年05月15日 00:17:50(UTC)
  • マージ日時: 2026年05月18日 19:04:15(UTC)
  • ラベル: area-CodeGen-coreclr

概要

JITコンパイラの書き込みバリア除去最適化をGT_STORE_BLKノードに拡張しました。これまでGT_STOREINDのみだった最適化をSTORE_BLKにも適用し、VN/アサーション解析によってブロック書き込み先がGCヒープ上にないことが証明できた場合、GTF_IND_TGT_NOT_HEAPフラグを設定して高速なCpObj/SIMD InitBlkパスを有効化します。

変更内容

  • assertionprop.cpp: GetWriteBarrierFormのGT_ADD解析を強化し、オフセットが非定数の場合でもVNタイプからBYREF/REFベースオペランドを識別できるよう対応。新しいoptWriteBarrierAssertionProp_StoreBlkヘルパーを実装し、optAssertionProp_BlockStoreから呼び出す。
  • compiler.h: optWriteBarrierAssertionProp_StoreBlk宣言を追加、optConservativeNormalVNのシグネチャをconst GenTree*に拡張。
  • gentree.h: IsOnHeapAndContainsReferencesがGTF_IND_TGT_NOT_HEAPフラグをチェックして、アサーション伝播結果がCpObj/InitBlk決定に反映されるよう修正。

パフォーマンスへの影響

STORE_BLK操作で書き込みバリアを除去できる場合、生成されるコードがより高速な非バリアパスを取得します。特にヒープ外オブジェクトへのブロック書き込みで最適化効果が期待できます。

関連Issue

なし

その他

内部JIT実装への変更で、公開APIへの互換性影響はありません。


#128222 Add support for generating pointers to funclets, and calling funclets by index

概要

WebAssembly JITコンパイラでfunclet(例外処理などの独立したコード断片)へのポインタ生成とfuncletのインデックス呼び出しをサポートする機能を追加します。リロケーションアディテンド機構を活用してfuncletを親メソッドのシンボルからのオフセットで識別し、WasmObjectWriterでこのアディテンドを処理することで、funcletに順序付きインデックスを割り当てる対応を実現します。

変更内容

  • emitwasm.cpp/h: 新しいemitFuncletAddressConstantヘルパーメソッドを実装し、フレームに実際のfunclet IDをリロケーション情報として格納。emitRecordRelocationWithAddlDelta経由でfunclet IDをアディテンドとして記録
  • emitfmtswasm.h: IF_FUNCLETPTRとIF_FUNCLETIDX新命令フォーマットを追加
  • instrswasm.h: INS_i32_const_funcletptrとINS_call_funclet疑似命令エントリを追加(サイズ/出力/逆アセンブル対応)
  • codegenwasm.cpp: フレームのfp[0]に格納する値を従来の0xBBBBプレースホルダーから実際のfunclet IDリロケーションに変更
  • WasmObjectWriter.cs: ResolveRelocationsメソッドを修更して、WASM_TABLE_INDEX_*およびWASM_FUNCTION_INDEX_LEBリロケーションの解決時にインプレースアディテンドを解決シンボルインデックスに加算

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • GitHub Copilot支援により開発
  • i32_const_funcletptr疑似命令は動作確認済みだが、call_funclet疑似命令は未テスト
  • WasmObjectWriterでのfunclet出力と関数インデックス調整に関する後続作業が必要

#128220 Sync TlsFrameHelper.cs typo/grammar fixes from dotnet/yarp

概要

TlsFrameHelper.csのdotnet/yarpでの修正内容をruntime側に同期するPRです。内部的な識別子とコメントのタイプ修正のみが対象で、パーサーの動作は変わりません。

変更内容

  • src/libraries/System.Net.Security/src/System/Net/Security/TlsFrameHelper.cs
    • 内部enum識別子の修正:
      • TlsAlertDescription.InsuffientSecurity → InsufficientSecurity
      • ExtensionType.MaximumFagmentLength → MaximumFragmentLength
    • ローカル定数名の修正:
      • TryParseServerHello内のCompressionMethiodLength → CompressionMethodLength
    • コメントのタイプ・文法修正(bellow→below、queses修正など)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • 変更はすべて内部実装に限定され、公開APIへの影響なし
  • ParsingStatusenum追加などyarpでの他の変更は意図的に除外(runtime内では内部型のため、dead API surfaceとなる可能性があるため)
  • yarpでの厳密な境界値チェック強化も除外(runtimeは別PRで独自のファザー駆動型のセキュリティ強化を実施済みのため)
  • テスト:TlsFrameHelperTestsで4058テスト実施、全て成功
  • リスク評価:低

#128217 Fix heap_segment_used watermark after compaction

概要

ガベージコレクション(GC)のコンパクション後にheap_segment_usedウォーターマークが古い状態のままになり、ヒープ破損につながる問題を修正します。compact_phase終了時に、heap_segment_usedをmax(used, plan_allocated)に更新することで、後続のGCサイクルでメモリ破損を防ぎます。

変更内容

  • src/coreclr/gc/relocate_compact.cpp: compact_phase終了時に、非読み取り専用領域(condemned世代および上位1世代)のheap_segment_usedをplan_allocated値まで更新するロジックを追加(+15行)

パフォーマンスへの影響

大幅な改善

  • 平均スループット:+2.1% (3,322,843 → 3,391,784 entries)
  • ピークスループット:+9.4% (4,708,191 → 5,152,893 entries)
  • OOM発生回数:-35% (52 → 34件)

コンパクション時に不要なmemclr操作を削減し、decommit_regionがより正確なウォーターマークで動作するため効率が向上。コンパクションが発生しない場合はオーバーヘッドなし。

関連Issue

#127892

その他

GCテストスイート全体でリグレッションなし:Windows x64およびLinux x64の両プラットフォーム(Checked構成)で112/112および111/111がパス。


#128197 [release/10.0] Source code updates from dotnet/dotnet

概要

このPull Requestはdotnet/dotnetのVMR(Virtual Monorepo)からのコードフロー更新です。複数の依存関係の更新と、System.Net.MailとSystem.Security.Cryptography.Xmlライブラリの機能改善・セキュリティ強化が含まれています。特にXML暗号化・復号化処理とメールアドレス解析の改善が主要な変更点です。

変更内容

  • 依存関係更新

    • Microsoft.CodeAnalysis系(5.0.0-2.26214.106 → 5.0.0-2.26257.101)
    • Microsoft.DotNet.Arcade.Sdk等のビルドツール系(10.0.0-beta.26214.106 → 10.0.0-beta.26257.101)
    • System.Text.Json、System.Reflection.Metadata等のコアライブラリ(10.0.7 → 10.0.9)
    • NuGet関連(7.0.2-rc.21506 → 7.0.3-rc.25801)
    • System.CommandLine(2.0.7 → 2.0.9)
  • System.Net.Mail改善

    • MailAddressParser.csに新しい解析ロジック追加(14行追加)
    • ユニットテスト拡充(MailAddressParserTest.cs、MailAddressParsingTest.csで計41行追加)
  • System.Security.Cryptography.Xml強化

    • LocalAppContextSwitches.cs新規追加(76行):互換性制御フラグの実装
    • CanonicalizationDispatcher.cs、EncryptedData.cs、EncryptedKey.cs、KeyInfo.cs等の大幅改善
    • XmlDecryptionTransform.cs改良(XXE脆弱性対策を含む可能性)
    • テスト拡充:EncryptedXmlTests.cs(+238行)、SignedXmlTest.cs(+279行)、XmlDsigC14NTransformTest.cs、XmlDsigExcC14NTransformTest.cs新規追加(各95行)
    • テスト用XMLファイル追加(EncryptedXmlSample4.xml:1994行)

パフォーマンスへの影響

提供情報にベンチマーク結果なし。LocalAppContextSwitchesの追加により、互換性維持と新実装の選択が可能になるが、パフォーマンス数値の詳細は提供されていません。

関連Issue

なし

その他

  • release/10.0.1xx ブランチからのコードフロー更新(2026年5月7日時点)
  • 複数の源リポジトリ(arcade、aspnetcore、efcore、roslyn、sdk等)からの統合更新
  • System.Security.Cryptography.Xmlの変更はXML処理のセキュリティ強化が主目的と推測されますが、具体的な脆弱性詳細は提供されていません
  • LocalAppContextSwitchesの導入は既存コードの互換性を保ちながら、新しい安全な実装へ段階的に移行するための仕組みと考えられます

#128190 [ci-scan] Broaden duplicate detection and enforce correct KBE JSON schema

概要

CI失敗スキャン機能において、既知のビルドエラー(KBE: Known Build Error)の重複検出ロジックを拡張し、KBE JSONスキーマの厳密化を実施しています。異なるプラットフォームまたはランタイム変種で同一テストクラスに対して報告された既知ビルドエラー、およびKBEラベルを欠いた既存のエリアチーム追跡者を適切に検出できるようにします。

変更内容

  • .github/workflows/ci-failure-scan.md:
    • ステップ4.2の重複検出ロジックを拡張
    • テストクラスベースのサーチ戦略を追加
    • エリアラベルベースのサーチ戦略を追加
    • 複数の結果候補をスキャンするKBE検索バリエーションを実装
    • 整合性フィルタリング済み検索結果の明示的な処理を追加

パフォーマンスへの影響

影響なし

関連Issue

#127866

その他

このPRはCIテスト失敗の分類・追跡プロセス改善に関連するもので、ランタイムのコンパイルやAPIに直接的な影響はありません。Build Analysis システムでの課題追跡の精度向上を目的としています。


#128188 Centralize MonoAotIncompatible exclusion for mono fullaot variants

概要

Mono の --full-aot モードにおいて、MonoAotIncompatible マークされたテストが minifullaot/llvmfullaot ビルドで DLL を読み込む際にプロセスを中止させる問題を修正。MonoAotIncompatible=true なプロジェクトを自動的に除外する規則を src/tests/Directory.Build.targets に一元化し、複数のプロジェクトファイルの重複コードを排除。

変更内容

  • src/tests/Directory.Build.targets: 中央ビルドターゲットに DisableProjectBuild 規則を追加。MonoAotIncompatible が true で、かつ RuntimeFlavor が mono かつ RuntimeVariant が minifullaot または llvmfullaot の場合、プロジェクトビルドを無効化する条件付き設定を追加
  • 4 つのテストプロジェクト (test76531.csproj、ExtendedLayout.csproj、ExtendedLayoutTypes.ilproj、badendfinally.ilproj): 今回の中央化により冗長となった個別プロジェクトレベルの DisableProjectBuild 定義を削除

パフォーマンスへの影響

影響なし

関連Issue

#128142

その他

  • 本 PR は既提案の #128184 を置き換え(39 ファイルに対する個別修正に代わり、一元化でスケーラビリティを確保)
  • テストビルドシステムの内部実装改善であり、公開 API への影響なし
  • MonoAotIncompatible マークされた既存テストへの自動適用となるため、将来的に同じ属性を持つテストを追加する際も自動的に除外される

#128135 System.Runtime.Loader.Tests: use TargetsAppleMobile for test-assembly references to unblock trimmed simulator/macCatalyst builds

  • 作成者: @Copilot
  • 作成日時: 2026年05月13日 12:27:24(UTC)
  • マージ日時: 2026年05月18日 12:59:48(UTC)
  • ラベル: area-AssemblyLoader

概要

System.Runtime.Loader.Tests が Apple mobile simulator/macCatalyst の CoreCLR ビルドで失敗していた問題を解決するため、プロジェクト参照の条件を TargetOS == ios/tvos から TargetsAppleMobile に変更しました。これにより、ILLink がアグレッシブなトリミング中に System.Runtime.Loader.Test.Assembly* を正しく解決できるようになります。

<ProjectReference Condition="'$(TargetsAppleMobile)' == 'true'"
                  Include="System.Runtime.Loader.Test.Assembly\System.Runtime.Loader.Test.Assembly.csproj" />

変更内容

  • src/libraries/System.Runtime.Loader/tests/System.Runtime.Loader.Tests.csproj
    • System.Runtime.Loader.Test.Assembly と System.Runtime.Loader.Test.Assembly2 の2つのプロジェクト参照の条件を変更
    • TargetsAppleMobile == true の場合:直接的な ProjectReference を使用(トリマーがアセンブリを参照可能)
    • その他の場合:既存の埋め込みリソース動作を維持(ReferenceOutputAssembly="false"、OutputItemType="EmbeddedResource")

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • テストコード変更なし、トリミングディスクリプタ変更なし
  • Apple mobile ターゲット(iOS/tvOS デバイス、シミュレータ、macCatalyst)で参照方式を統一することで、トリマーが依存関係を適切に解決可能になります

#128074 Guard against overflow in SubReadStream

概要

ZIP および TAR リーダーで使用される SubReadStream の実装を強化し、startPosition + maxLength が long.MaxValue を超える場合のオーバーフロー時に例外をスローするようにしました。従来は静かにラップアラウンドが発生していた問題を修正します。

変更内容

  • System.IO.Compression: ZipCustomStreams.SubReadStream の _endInSuperStream 計算に checked() を追加し、オーバーフロー検出を有効化
  • System.Formats.Tar: SubReadStream の _endInSuperStream 計算に同じチェック付き演算を追加

これらは内部実装の変更であり、公開APIに直接の影響はありません。

パフォーマンスへの影響

影響なし(チェック付き演算はコンパイラが最適化を行うため、パフォーマンス低下は最小限)

関連Issue

#128074

その他

セキュリティ脆弱性修正です。極めて大きな ZIP/TAR エントリ(long.MaxValue に近いサイズ)を扱う際に、オーバーフロー時の未定義動作を防止します。


#128039 perf: avoid per-observation array allocation in ObservableInstrument

概要

ObservableCounter<T>、ObservableGauge<T>、ObservableUpDownCounter<T>における単一値コールバック呼び出し時の配列割り当てを排除するパフォーマンス最適化。ObservableInstrument<T>.Observe(MeterListener)がパターンマッチングを使用して組み込み型の_callbackに直接アクセスし、単一値コールバックを配列ラッパーをスキップしてMeterListener.NotifyMeasurementに直接ディスパッチします。

変更内容

  • ObservableInstrument.cs: パターンマッチング処理を追加。組み込み型(ObservableCounter<T>、ObservableGauge<T>、ObservableUpDownCounter<T>)のコールバック形状に応じた最適化されたディスパッチロジックを実装
  • ObservableCounter.cs, ObservableGauge.cs, ObservableUpDownCounter.cs: 各型で_callbackフィールドの宣言を追加し、パターンマッチングで識別可能にする

パフォーマンスへの影響

大幅な改善(内部実装最適化):

  • Func<T>形状: 22.91ns → 5.71ns (−75%)、割り当て 72B → 0B
  • Func<Measurement<T>>形状: 24.52ns → 6.78ns (−72%)、割り当て 72B → 0B
  • Func<IEnumerable<Measurement<T>>>形状: 37.49ns → 28.75ns (−23%)、割り当て 104B → 72B (−32B)

単一値コールバックでの配列割り当てが完全に排除され、JIT最適化によるさらなる削減が実現。

関連Issue

なし

その他

  • 公開API変更なし。public sealedの組み込み型はinternalコンストラクタのみであり、パターンマッチングは完全に網羅されます
  • ユーザーが提供するIEnumerable<Measurement<T>>の割り当てには影響なし

#127973 Cache continuation used for runtime async callable value task thunks

  • 作成者: @jakobbotsch
  • 作成日時: 2026年05月08日 21:41:21(UTC)
  • マージ日時: 2026年05月18日 07:31:04(UTC)
  • ラベル: area-VM-coreclr

概要

IValueTaskSource でバックされた ValueTask が runtime async callable thunk を通して呼び出されるときのメモリ割り当てを削減します。従来は ValueTask が中断した場合に毎回割り当てが発生していましたが、キャッシュされた ValueTaskContinuation インスタンスを再利用することで、中断時の割り当てを排除します。

変更内容

ランタイム・ライブラリ側の変更:

  • AsyncHelpers.CoreCLR.cs: 新しい TransparentAwaitValueTask* メソッドを追加し、ValueTaskContinuation をスレッドローカルストレージでキャッシュ
  • AsyncHelpers.ValueTaskContinuation.cs (新規): ValueTaskContinuation 型を実装し、runtime async の中断/再開機構と統合
  • ValueTask.cs: 既存の AsTaskOrNotifier メソッドと ValueTaskSourceNotifier ヘルパー型を削除

VM側の変更:

  • asyncthunks.cpp/AsyncThunks.cs: thunk IL を更新し、AsTaskOrNotifier + TransparentAwait ではなく TransparentAwaitValueTask* で tail-await する処理に変更
  • methodtable.*, typehandle.*: メタデータを持つ継続(マネージドサブクラス)と動的生成されたメタデータなし継続を区別する IsContinuationWithMetadata() ロジックを追加
  • vars.*: グローバル g_singletonContinuationEEClass 宣言を追加し、DAC サポートを提供
  • asynccontinuations.cpp: singleton continuation EEClass ストレージをグローバル変数に移動

パフォーマンスへの影響

ValueTask<T> で支えられた runtime async callable thunk の呼び出しで、中断時のメモリ割り当てが削減されます。キャッシュされた ValueTaskContinuation の再利用により、スループット改善が期待されます。具体的なベンチマーク結果の記載なし。

関連Issue

#127973

その他

  • ValueTaskSourceNotifier メカニズムが削除されるため、既存コードとの互換性確認が必要です
  • PR作成者コメント内で、同じアプローチを Task 返却メソッド向けの runtime async callable thunk にも適用できる可能性を言及しています
  • コピロットレビュアーより、AsyncHelpers.CoreCLR.cs のコメント修正提案がありますが、本PRではまだ未対応です

#127932 JIT: Decouple "DoNotEnregister" from liveness

概要

JIT のコンパイラにおいて、ローカル変数の "DoNotEnregister" (DNER) フラグの設定をliveness解析から分離し、LSRA(Linear Scan Register Allocation)と lowering フェーズに移行するリファクタリング。これにより、liveness の複数実行時における sticky な DNER の問題を解決し、特に非同期関数における不要な DNER マーク付けを削減します。

変更内容

  • liveness.cpp: lvLiveInOutOfHandler フラグをliveness実行ごとにリセット。DNER設定ロジックを削除し、EH-related情報の再計算機能に集中。
  • regalloc.cpp / regallocwasm.cpp: checkForDNER メソッドを追加し、DNER設定判断を regalloc フェーズに統合。
  • lower.cpp: lvSetEHVarsDoNotEnreg() を呼び出し、lowering 時の EH 変数向けの DNER 設定を実施。
  • compiler.h / lclvars.cpp: LclVarDsc::IsLiveInOutOfHandler() メソッドを追加し、EH-liveness 状態をカプセル化(assert でアクセス制御)。Compiler::IsEHVarARegCandidate ヘルパー追加。
  • optimizer.cpp / earlyprop.cpp / copyprop.cpp: EH-liveness チェックを IsLiveInOutOfHandler() に統一し、DNER に依存しない設計に変更。
  • inductionvariableopts.cpp: IV widening ヒューリスティックを更新し、EH-liveness を DNER とは独立して考慮。
  • jiteh.cpp / gentree.cpp: EH clause 削除後の liveness 状態を追跡する仕組みを追加。

パフォーマンスへの影響

影響なし。リファクタリングが主体で、コード生成の挙動は保持されます。ただし、非同期関数において不要な DNER マーク付けが減少することで、レジスタ割り当ての柔軟性向上の可能性があります。

関連Issue

なし

その他

  • Copilot レビュアーより、optRemovedEHClausesAfterLiveness フラグが設定・リセットのみで消費されていない可能性が指摘されており、将来の活用か削除検討が必要。
  • 本 PR はコード生成結果への大きな差分がないため、主に内部設計の改善と保守性向上が目的。

#127596 Parse custom attribute value blobs for dependencies and rewrite type name strings

  • 作成者: @Copilot
  • 作成日時: 2026年04月30日 05:21:33(UTC)
  • マージ日時: 2026年05月18日 00:15:39(UTC)
  • ラベル: area-Tools-ILLink

概要

ILTrimのカスタム属性処理を強化する変更です。CustomAttributeNodeがカスタム属性値blobをデコードして依存関係を検出し、型名文字列を再エンコードして古い型フォワーダー参照を正規化します。これにより、トリミング後の陳腐化した型名を防ぎます。

変更内容

  • CustomAttributeNode.cs: カスタム属性blobのデコード処理を追加

    • GetStaticDependenciesでtypeof()引数、Enum型、名前付き引数のプロパティ/フィールド、非プリミティブ配列要素型の依存関係を報告
    • WriteInternalでRewriteCustomAttributeBlobを実装し、System.TypeペイロードとEnum型名の型名文字列のみを再エンコード
    • デコード失敗時に_isCorruptedフラグを設定し、既知の不正なblobの再処理を回避
  • NodeFactory.cs: 型安全性の向上

    • ReflectedType、ReflectedMethod、ReflectedFieldがobjectの代わりにDependencyNodeを直接返すように変更
    • 呼び出し元でのis DependencyNodeパターンチェックが不要に
  • ILTrimExpectedFailures.txt: 新たに成功するテスト25個分の期待失敗エントリを削除

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • TryGetMethodを使用してコンストラクタ解決を改善(try/catchの代わり)
  • GetTypeDefinition()を使用してジェネリック属性型上のプロパティセッターを正しく解決
  • GetTypeByCustomAttributeTypeName(..., throwIfNotFound: false)で型名解決に失敗時は元のシリアライズ型名を保持
  • 検証: dotnet build、dotnet test(AttributesTests)、Code Review、CodeQL実施完了

#127536 [AMD64][APX] Introduce the remaining NCI instructions - CTEST, CFCMOV

概要

AMD64 APX(Advanced Performance Extensions)の新しい条件付き命令 CTESTcc と CFCMOVcc をJITコンパイラに導入します。これらの命令により、CCMP reg, 0 を1バイト小さい CTEST reg, reg に最適化できます。CFCMOVはJIT段階での最適化は未実装です。

変更内容

  • instrsxarch.h: APX命令定義として CFCMOV と CTEST およびそれらの命令範囲マーカーを追加
  • emitxarch.h: APX条件付き命令を分類するためのヘルパーAPI を追加
  • emitxarch.cpp: 新しいAPX条件付き命令の分類ロジックと EVEX/APX エミッション拡張(ND/NF/DFV フラグ、プレフィックス/レイアウト処理)を実装
  • codegenxarch.cpp: CCMP reg, 0 → CTEST reg, reg への最適化を追加し、CFCMOV/CTEST のエミッタユニットテストを統合
  • codegenlinear.cpp: 新しい「cfcmov」「ctest」ユニットテストセクションを genEmitterUnitTests() にワイヤリング
  • codegen.h: 新しいエミッタユニットテストエントリポイントを宣言

パフォーマンスへの影響

CCMP reg, 0 の最適化により、生成されるコード サイズが1バイト削減されます。これにより、命令キャッシュ効率とコード密度が向上する可能性があります。

関連Issue

なし

その他

Copilot のレビューで emitIns_C_I 関数が instOptions パラメータを受け入れるが、APX/EVEX オプション(NF/DFV/ND)を命令ディスクリプタに適用していない可能性が指摘されています。


#127236 Implement LINQ FullJoin operators

概要

LINQ に FullJoin オペレータを追加する実装です。Enumerable、Queryable、AsyncEnumerable に対応し、承認済みのAPI形状(単一のオプション IEqualityComparer<TKey>? comparer = null パラメータ)を使用しています。Full outer join セマンティクスを .NET の LINQ 表面積でサポートします。

変更内容

  • System.Linq: Enumerable.FullJoin 実装(231行)、テスト(516行)、ref アセンブリ更新
  • System.Linq.Queryable: Queryable.FullJoin メソッド実装(83行、MethodCallExpression 生成)、テスト(316行)、ref アセンブリ更新
  • System.Linq.AsyncEnumerable: AsyncEnumerable.FullJoin 実装(330行、同期・非同期キーセレクタバリアント対応)、テスト(244行)、ref アセンブリ更新、csproj 更新
  • 既存テスト拡張: LeftJoinTests.cs と RightJoinTests.cs に テスト追加(各ライブラリで複数行)

パフォーマンスへの影響

影響なし

関連Issue

#124787

その他

  • 公開APIの追加(破壊的変更なし)
  • Tuple オーバーロードを含む複数のシグネチャを実装
  • AsyncEnumerable では同期・非同期キーセレクタの両バリアントに対応
  • ref アセンブリとプロジェクトファイルが適切に更新されており、ビルド・API互換性チェーンに組み込まれている

#127003 [release/10.0] Fix assertions generated by optCreateJumpTableImpliedAssertions

概要

JITコンパイラがswitch文のdefault:ケースに関する変数の値域についての不正な仮定を行い、不正な定数畳み込みと分岐削除を引き起こしていたバグを修正します。このバグはPR #113998で導入された最適化に起因するもので、release/10.0ブランチへのバックポートです。

変更内容

  • src/coreclr/jit/assertionprop.cpp: optCreateJumpTableImpliedAssertionsで生成されるアサーションの修正(+2/-1)
  • src/tests/JIT/Regression/JitBlue/Runtime_122254/Runtime_122254.cs: バグの再現と検証用のリグレッションテストを追加(+47)

パフォーマンスへの影響

影響なし(バグ修正のため、不正な最適化を抑止する変更)

関連Issue

#122254 - 元のバグ報告 #123240 - 主ブランチへの修正

その他

  • 顧客報告のバグ
  • PR #113998で導入されたJIT最適化による回帰
  • リスク評価: Low
  • テストケースが追加されており、修正内容の検証が可能

#126569 [main] Update dependencies from dotnet/hotreload-utils, dotnet/icu, dotnet/runtime-assets

概要

dotnet/runtimeの依存関係を自動更新するPull Requestです。dotnet/hotreload-utils、dotnet/runtime-assets、dotnet/icuの3つのリポジトリから複数のパッケージがアップデートされています。

変更内容

  • eng/Version.Details.props: バージョン情報の更新(+17行/-17行)
  • eng/Version.Details.xml: 依存パッケージの詳細情報の更新(+38行/-34行)

更新パッケージ:

  • Microsoft.DotNet.HotReload.Utils.Generator.BuildTool: 11.0.0-alpha.0.26173.1 → 11.0.0-alpha.0.26180.1
  • Microsoft.NETCore.Runtime.ICU.Transport: 11.0.0-alpha.1.26181.1 → 11.0.0-alpha.1.26263.1
  • runtime-assetsパッケージ群(16個): 11.0.0-beta.26180.1 → 11.0.0-beta.26261.1
    • CilStrip.Sources、UnicodeData、TimeZoneData、各種TestDataなど

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • このPRはMaestroの自動化ツールによって生成されています
  • レビュワー: lewing

#125024 Implement EqualityComparer<T>.Create with key selector parameters

概要

EqualityComparer<T>に新しいファクトリメソッドCreate<TKey>オーバーロードを追加し、キーセレクタとオプショナルなキーコンパラーを指定して等値比較器を構築できるようにしました。プロパティ値による比較など一般的なシナリオに対応します。

// 使用例
var comparer = EqualityComparer<Person>.Create(p => p.Name);
var comparer2 = EqualityComparer<Person>.Create(p => p.Age, EqualityComparer<int>.Default);

変更内容

  • System.Private.CoreLib: EqualityComparer<T>.Create<TKey>(Func<T?, TKey?> keySelector, IEqualityComparer<TKey>? keyComparer = null)メソッドを追加。既存のデリゲートベースのコンパラー実装を利用して実装。
  • System.Collections.Tests: 新規メソッドの引数検証(null keySelector)と等値動作のテストケースを追加(120行)。
  • System.Collections ref: 参照アセンブリに新規APIを追加。

パフォーマンスへの影響

影響なし

関連Issue

#115797

その他

  • nullキーセレクタの検証が行われます。
  • 公開API追加のため、参照アセンブリの更新が含まれます。

#122056 Fix ILVerify IndexOutOfRangeException for malformed exception handling clause bounds

概要

ILVerifyが不正形式の例外処理(EH)句を処理する際に発生していたIndexOutOfRangeExceptionを修正します。診断ツールは例外をスローするのではなく、意味のある検証エラーを報告すべきという原則に基づいています。EH句の境界値が無効な場合、新しいEHClauseOutOfRange検証エラーを報告するようになりました。

変更内容

  • ILImporter.cs (共通): FindEHTargets()に共有EH句境界値検証を追加。TryOffset/TryLength、HandlerOffset/HandlerLength、FilterOffsetのオーバーフロー安全チェックを実装。
  • ILImporter.Verify.cs: CodeSizeZeroチェックをFindBasicBlocks()の前に移動。EHClauseOutOfRangeエラー報告を追加。
  • VerifierError.cs: 新しいEHClauseOutOfRange検証エラーを定義。
  • Strings.resx: エラーメッセージ"Exception handling clause bounds outside code size."を追加。
  • ILImporter.Scanner.cs: スキャナー側のReportInvalidExceptionRegion()実装を追加(InvalidProgramExceptionをスロー)。
  • ExceptionRegionTests.il: ilasm -ERRフラグを使用した不正なEH句テストケースを追加(範囲外の開始/終了、無効なフィルタ/ハンドラ順序など)。

パフォーマンスへの影響

影響なし

関連Issue

#63227

その他

  • 修正は内部実装(ILImporterの検証ロジック)に限定され、公開APIへの影響なし。
  • 不正なEH句境界(フィルタオフセット≥ハンドラオフセット)に対する構造的検証も追加。
  • 不正なEH句ごとにEHClauseOutOfRangeエラーは最大1回報告される設計。

#109863 Add option GCTrimYoungestKeepPercent to specifies the percent of youngest gen to keep during trimming

概要

GC トリミング時に最若世代(youngest generation)に保持する割合を制御する新しい設定オプション GCTrimYoungestKeepPercent を追加します。メモリフットプリント最適化のための GC レイテンシーレベルと起動時間のバランスを取ることが目的です。

使用例:

DOTNET_GCLatencyLevel=0
DOTNET_GCTrimYoungestKeepPercent=0xF

変更内容

  • src/coreclr/gc/dynamic_tuning.cpp: GC 動的チューニングロジックに新しい設定パラメータの処理を追加(+6/-1)
  • src/coreclr/gc/gcconfig.h: 新しい設定オプション定義を追加(+1/-0)

パフォーマンスへの影響

間接的な影響があります。GCTrimYoungestKeepPercent により、トリミングの積極性と起動時間への影響のバランスを調整可能になるため、適切に設定すればメモリ消費量削減と起動時間の両立が期待できます。具体的なベンチマーク数値は提供されていません。

関連Issue

#109863

その他

  • ランタイム GC エンジンの内部実装の変更です。
  • 環境変数 DOTNET_GCTrimYoungestKeepPercent により設定可能です。
  • @gbalykov へのコールアウトがあります。

目次