Pull Request on 2026年06月02日

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

注意点

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


目次

  1. #128920 Restore E_NOTIMPL fallback in DacDbiInterfaceImpl::GetContext (#128499)
  2. #128904 Wasm spmi use checked jit
  3. #128883 Revert "Guard unused llvm-libunwind symbols to avoid duplicates on Android"
  4. #128870 JIT: add profitability heuristic for loop cloning
  5. #128868 Serialize VSD DispatchCache unlinking with cache write lock
  6. #128855 JIT/x64: Route FMA embedded-rounding fallback through genFmaIntrinsic
  7. #128853 Replace OSX.14.Arm64.Open with OSX.15.Arm64.Open queues
  8. #128846 [cdac] Introduce FlushScope and add TargetState scope
  9. #128845 cDac fixes: StressLog address and exceptions flowing out of NativeAOT
  10. #128840 [ci-scan-feedback] Strengthen do-not-disable detection and cross-pipeline dedup
  11. #128826 Define TARGET_LINUX for Android native builds and preserve Android-specific exclusions
  12. #128778 JIT: don't kill FP/SIMD/mask regs across x64 write barriers
  13. #128770 Fix incorrect CoercedConstantValue usage in IsVNIntegralConstant
  14. #128750 Share SubReadStream between System.IO.Compression and System.Formats.Tar
  15. #128736 crossgen2: Extract funclets in WasmObjectWriter
  16. #128731 Fix for 127141 - Remove unneeded spilling around profiler hooks
  17. #128716 [cdac] Generalize LayoutPair to LayoutSet and move IData.md in-tree
  18. #128678 Ensure Log2 can actually be imported as intrinsic
  19. #128671 [release/10.0] Add LOCKREADIFFAILRET to unlocked MDInternalRW read methods
  20. #128656 Add async validation support for System.ComponentModel.DataAnnotations
  21. #128649 Fix format pre-commit hook
  22. #128615 [cDAC] Remove GetObjectContents from DAC/DBI
  23. #128606 Reapply "A few fixes in the threadpool semaphore. Unify Windows/Unix implementation of LIFO policy." (#125193)
  24. #128599 Add IsClosedTypeAttribute
  25. #128553 Add NativeAOT aggregate executable shims with preview-feature gating
  26. #128516 [release/10.0] Source code updates from dotnet/dotnet
  27. #128513 JIT: add post-inline cleanup for no-return calls
  28. #128508 Add ObjectiveCMarshal.GetOrCreateReferenceTrackingMemory API
  29. #128426 [main] Update dependencies from dotnet/icu, dotnet/runtime-assets
  30. #128408 [clr-ios] Clear stale Apple mobile CoreCLR test exclusions
  31. #128383 Make runtimeconfig.dev.json configProperties take precedence over runtimeconfig.json
  32. #128366 Revert MemoryStream breaking change
  33. #128346 Bump ws from 8.17.1 to 8.20.1 in /src/libraries/System.Net.WebSockets.Client/tests
  34. #128343 Bump ws from 8.17.1 to 8.20.1 in /src/libraries/System.Net.Http/tests/FunctionalTests
  35. #128312 [release/9.0-staging] Update dependencies from dotnet/xharness
  36. #128147 Arm64: [PAC-RET] VM and coreclr support
  37. #128024 Update container image digests
  38. #127133 [main] Update dependencies from dotnet/xharness
  39. #127079 JIT: Fix CEA cloning when enumerator local is reassigned from an untracked source
  40. #126769 Fix XmlSerializer consuming sibling elements when deserializing empty XmlElement member
  41. #126630 Enhance type and nullability handling for collection items in schema import
  42. #118571 System.Runtime.Serialization.Xml: throw SerializationException on malformed prefix

#128920 Restore E_NOTIMPL fallback in DacDbiInterfaceImpl::GetContext (#128499)

概要

マネージドデバッグのスタックウォークをサポートするため、DacDbiInterfaceImpl::GetContextにE_NOTIMPLフォールバックを復元しました。プラットフォームでICorDebugDataTarget::GetThreadContextがE_NOTIMPLを返す場合、スレッドのFrameチェーンを走査してREGDISPLAYからレジスタコンテキストを再構築することで、非Windows環境での管理されたデバッグを有効にします。

変更内容

  • dacdbiimpl.cpp: GetContextメソッドにGetThreadContextのHRESULTを検査するロジックを追加
    • E_NOTIMPLが返された場合、スレッドのFrameチェーンを走査してコンテキストを合成
    • InterpreterFrameに対する特別な処理を実装
    • フィルターコンテキストの既存動作とE_NOTIMPL以外のエラーの処理は保持

パフォーマンスへの影響

影響なし

関連Issue

#128499

その他

  • 本変更は過去のコミット5391e9ec4fbで削除されたフォールバック機能の復元です
  • 内部Visual Studioテストで検出されました

#128904 Wasm spmi use checked jit

概要

SuperPMI収集パイプラインを調整し、browser/wasm corelib crossgen2の収集でChecked wasm cross-targeting JITを使用するようにしました。これにより、収集中にJITアサーションが有効になります。

変更内容

  • eng/pipelines/coreclr/templates/superpmi-collect-pipeline.yml: SuperPMI収集パイプラインの設定を更新
    • Checked windows_x64/linux_x64 ビルドに clr.wasmjit のビルドを追加(Checked Core_Root成果物で利用可能に)
    • Release windows_x64/linux_x64 ビルドから clr.wasmjit のビルドを削除(wasm収集がRelease configで実行されなくなったため)
    • browser/wasm corelib crossgen2 SuperPMI収集ジョブを buildConfig: release から buildConfig: checked に変更

パフォーマンスへの影響

ビルド成果物のサイズと生成時間に若干の影響がある可能性があります(Checkedビルドではアサートチェックが有効)。

関連Issue

なし

その他

なし


#128883 Revert "Guard unused llvm-libunwind symbols to avoid duplicates on Android"

概要

PR #128667で追加されたAndroid上でのllvm-libunwindの未使用シンボルをガード処理をリバートします。このリバートにより、以前のシンボルガード機能が削除されます。

変更内容

  • src/coreclr/nativeaot/Runtime/CMakeLists.txt: シンボルガード関連のCMake設定を削除(-6行)
  • src/coreclr/nativeaot/Runtime/unix/UnwindHelpers.cpp: ガード処理実装を削除(-5行)
  • src/coreclr/nativeaot/Runtime/unix/UnwindHelpers.h: ガード関連ヘッダー定義を削除(-1行)
  • src/coreclr/nativeaot/Runtime/unix/UnixNativeCodeManager.cpp: ガード処理呼び出しを削除(変更)
  • src/native/external/llvm-libunwind-version.txt: バージョン情報の一行削除
  • src/native/external/llvm-libunwind/src/Unwind-EHABI.cpp: ガード実装を削除(-8行)
  • src/native/external/llvm-libunwind/src/libunwind.cpp: ガード実装を削除(-4行)

パフォーマンスへの影響

影響なし

関連Issue

#128866(リバート対象: #128667)

その他

このPRはNativeAOTランタイム(Unix/Android環境)のllvm-libunwindシンボル管理機能をリバートするもので、内部実装の変更です。


#128870 JIT: add profitability heuristic for loop cloning

概要

JIT ループクローニングに収益性判定ロジックを追加しました。サイクル削減効果とコード重複コストの比率に基づいて、ループクローニング候補を受け入れるかどうかを決定します。新しい設定値 JitCloneLoopsMinPerCallRatio(デフォルト値:4)でこのヒューリスティックの厳密さを制御できます。

変更内容

  • loopcloning.cpp: optCloningHeuristicヘルパーメソッドを実装し、利益(サイクル削減)とコスト(重複IR ノード数)の比率を計算して判定
  • jitconfigvalues.h: JitCloneLoopsMinPerCallRatioリリース設定値を追加(デフォルト値:4、0で無効化)
  • jitmetadatalist.h: LoopsRejectedForInsufficientBenefitメトリクスを追加してヒューリスティック落選ループを追跡
  • compiler.h: optCloningHeuristicメソッド宣言を追加

パフォーマンスへの影響

  • ループクローニングの判定が厳密化され、不利益なクローニングが削減される可能性
  • 利益コスト比が閾値未満のループはクローニングされない
    • 利益推定値:ブロック重みで加重されたサイクル削減(配列/スパン境界チェック=2.0、GDV 形式テスト=3.0)
    • コスト推定値:重複される IR ノード数(最大値はJitCloneLoopsSizeLimitに制限)
  • メモリ使用量とコードサイズの削減が期待される

関連Issue

なし

その他

これはコンパイラの最適化ロジック(内部実装)の変更であり、公開 API への影響はありません。SPMI 詳細出力で拒否されたループの数が可視化されるようになります。


#128868 Serialize VSD DispatchCache unlinking with cache write lock

  • 作成者: @Copilot
  • 作成日時: 2026年06月01日 21:54:05(UTC)
  • マージ日時: 2026年06月02日 01:52:10(UTC)
  • ラベル: area-VM-coreclr

概要

Collectible Assembly Load Context (ALC)のティアダウン中に、VSD(Virtual Stub Dispatch)のDispatchCacheバケットエントリがInsert/PromoteChainEntryと同時にアンリンクされ、キャッシュの単一ライター仮定に違反することで、自己参照チェーンサイクルが発生してVSD解決がハングするバグを修正します。本変更はアンリンクパスのライター側シリアライゼーションを復元します。

変更内容

  • virtualcallstub.h: DispatchCache::GetWriteLock()メソッドを追加(CHAIN_LOOKUPビルド条件下)し、既存のキャッシュライターロックを安全な外部ミューテーションパスのために公開
  • virtualcallstub.cpp: VirtualCallStubManager::ResetCache()およびVirtualCallStubManager::~VirtualCallStubManager()内のDispatchCache::Iterator::UnlinkEntry()ループをCrstHolderでラップし、ロック取得をCHAIN_LOOKUP条件下で実行

パフォーマンスへの影響

影響なし。既存のキャッシュライターロックを再利用し、アンリンク処理にシリアライゼーションを追加するもので、新たなロックオーバーヘッドではなく競合状態排除による安定性向上です。

関連Issue

#128859

その他

  • 変更はCHAIN_LOOKUPマクロビルド条件下でのみ適用
  • すべてのチェーンミューテーション(Insert、PromoteChainEntry、アンリンク削除)が同一ロックでシリアライズされることで、チェーンサイクルの形成を防止

#128855 JIT/x64: Route FMA embedded-rounding fallback through genFmaIntrinsic

  • 作成者: @Copilot
  • 作成日時: 2026年06月01日 15:05:44(UTC)
  • マージ日時: 2026年06月02日 00:01:15(UTC)
  • ラベル: area-CodeGen-coreclr

概要

AVX-512 FMA intrinsics with embedded-rounding において、non-immediate operand時のジャンプテーブルフォールバック処理がレジスタエイリアシングによるアサーション失敗を引き起こしていた問題を修正。手動で命令を生成していたパスを既存のgenFmaIntrinsicヘルパー関数経由に統一し、適切なオペランドスワッピングと形式選択(132/213/231)を確保することで、ライブソースレジスタの破壊を防止します。

変更内容

  • genFmaIntrinsicの再入性確保: genConsumeMultiOpOperandsとgenProduceRegをcallerに移行し、ジャンプテーブルラムダから呼び出し可能に
  • AVXファミリーパス更新: genAvxFamilyIntrinsic内でgenerate/consume/produce処理を統合
  • FMAフォールバック統合: genNonTableDrivenHWIntrinsicsJumpTableFallbackのNI_AVX512_FusedMultiply*処理を、直接的なgenHWIntrinsic_R_R_R_RM呼び出しからgenFmaIntrinsic(node, newInstOptions)経由に変更
  • 防御的アサーション追加: embedded-rounding時にop1/op2/op3が非containedであることを検証

パフォーマンスへの影響

影響なし(アサーション修正のため、ランタイム動作に変化なし)

関連Issue

#128544(再発)

その他

jitstress2_jitstressregs0x80環境下での回帰テスト対応。修正前は固定的に213形式の命令を出力していたため、LSRA(Linear Scan Register Allocation)がop2/op3をtargetRegに配置した際に先行するmov targetReg, op1Regがライブソースを破壊していました。修正後はgenFmaIntrinsic内の形式選択ロジックがこのシナリオに対応します。


#128853 Replace OSX.14.Arm64.Open with OSX.15.Arm64.Open queues

概要

macOS 14 Arm64 Open ビルドキューをmacOS 15 Arm64 Open キューに置き換えます。iOS/Catalyst シミュレーターターゲットが現在macOS 15キューで統一して対応可能になったための変更です。

変更内容

  • eng/pipelines/coreclr/templates/helix-queues-setup.yml: OSX.14.Arm64.Open をOSX.15.Arm64.Open に置き換え
  • eng/pipelines/libraries/helix-queues-setup.yml: OSX.14.Arm64.Open をOSX.15.Arm64.Open に置き換え

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

Helix ビルドキューの統一化により、インフラストラクチャの保守が簡素化されます。


#128846 [cdac] Introduce FlushScope and add TargetState scope

概要

cDAC(Compact Diagnostic Access Component)のキャッシュ管理を改善するため、Flush() メソッドを Flush(FlushScope) オーバーロードに置き換え、FlushScope 列挙型を導入しました。FlushScope.All は全キャッシュをクリア(従来動作)、FlushScope.TargetState はターゲット状態キャッシュのみをクリアします。これにより、不変メタデータ(CoreLib の型情報など)をストレステスト中に保持でき、基本割り当てストレステストで 2 倍のパフォーマンス向上を実現しています。

変更内容

  • FlushScope 列挙型 (FlushScope.cs): All(全キャッシュクリア)と TargetState(ターゲット状態キャッシュのみクリア)を定義
  • IContract インターフェース: Flush(FlushScope) パラメータ化メソッドに変更、デフォルト実装で互換性を保証
  • Contract 実装の更新:
    • ManagedTypeSource_1: CoreLib キャッシュを FlushScope.TargetState で保持
    • ReJIT_1, PlatformMetadata_1: 遅延スナップショットパターンに変更(構築時ではなく読み取り時にスナップショット取得)
    • ExecutionManager_1/_2/Core: RangeSectionMap を遅延解決に変更
    • EcmaMetadata_1, Signature_1, RuntimeTypeSystem_1: 両スコープで同一動作(クリア時に実行)
  • 公開 API の更新: SOSDacImpl.FlushCache, ISOSDacInterface13.LockedFlush, IXCLRDataProcess.Flush, DacDbiImpl.FlushCache で FlushScope.All を指定、テストハーネス更新

パフォーマンスへの影響

BasicAlloc cDAC ストレステストで顕著な改善を実現:

スコープ動作 実行時間 (秒)
FlushScope.TargetState でCoreLib キャッシュ保持(本PR) 5.81
全フラッシュで全キャッシュクリア(従来) 11.83

約 2 倍のスピードアップを達成。メタデータは不変のため、ストレステスト中の繰り返し再構築を削減。

関連Issue

なし

その他

  • 互換性: すべての公開 Flush() エントリポイントは FlushScope 引数が必須(破壊的変更)。dotnet/runtime 内の全呼び出し箇所で更新済み
  • 将来の最適化対象: cDAC ストレスハーネス実装、DataCache 二段階辞書リファクタリング、EcmaMetadata_1 メタデータキャッシュ最適化、LayoutPair N-ソース遅延解決
  • テスト: Microsoft.Diagnostics.DataContractReader.Tests で 2417 テスト合格、ビルド 0 警告

#128845 cDac fixes: StressLog address and exceptions flowing out of NativeAOT

  • 作成者: @leculver
  • 作成日時: 2026年06月01日 12:44:39(UTC)
  • マージ日時: 2026年06月02日 00:28:46(UTC)
  • ラベル: area-Diagnostics-cdac

概要

cDac(CoreCLR Data Access Component)の2つのバグを修正します:

  1. StressLog アドレス修正: StressLog グローバルポインタが誤ったアドレスをエクスポートしていた問題を、&StressLog::theLog の正しいアドレスに修正
  2. NativeAOT 境界の例外対策: cDac のアンマネージド エントリポイントで例外がキャッチされておらず、NativeAOT コンパイル時にプロセスがハードクラッシュする問題を、try/catch で囲んで HRESULT で返却するように修正

変更内容

  • datadescriptor.inc (CoreCLR + NativeAOT)

    • StressLog グローバルポインタ エクスポートを &g_pStressLog から &StressLog::theLog に修正
  • Entrypoints.cs

    • CLRDataCreateInstanceImpl を含むアンマネージド エントリポイントに try/catch ガードを追加
    • 捕捉した例外を E_FAIL HRESULT に変換して返却
    • 引数検証を強化(レビュー指摘対応)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • インターナル実装(cDac アンマネージド インターフェース層)への変更
  • NativeAOT コンパイルでの堅牢性向上が主要な目的
  • 破壊的変更なし

#128840 [ci-scan-feedback] Strengthen do-not-disable detection and cross-pipeline dedup

  • 作成者: @Copilot
  • 作成日時: 2026年06月01日 10:16:26(UTC)
  • マージ日時: 2026年06月02日 08:10:44(UTC)
  • ラベル: area-Infrastructure

概要

CI Outer-Loop Failure ScannerのプロンプトLet me update to reduce unwanted test-disable PRsと重複するKnown Build Error (KBE)の自動ファイリングを削減します。以下の2つの改善を実施:

  1. メンテナーが問題調査や修正予定を示している場合、test-disable PRの自動作成を抑止
  2. 同一スキャン実行内で異なるパイプライン定義にまたがる同じシグネチャのKBEの重複ファイリングを防止

変更内容

  • .github/workflows/ci-failure-scan.md:ワークフロープロンプトを更新
    • Step 4.7(do-not-disable検出強化):MEMBER/OWNERコメント内の拒否フレーズリストに6つのキーワード(trying to understand、without disabling、i'm fixing、i am fixing、understand the problem、root cause)を追加。完全一致がなくても調査・修正予定の意図を検出できる汎用ヒューリスティックを追加
    • Step 4.0(クロス定義dedup):定義IDに依存しない共通キー(<queue>|<stress_mode>|<signature_norm>)でKBEの重複チェックを実施。同一スキャン内で異なるパイプライン定義から同じシグネチャが報告された場合、2番目以降はスキップ(test-disable PRについては定義ごとの作成は継続許可)

パフォーマンスへの影響

影響なし。ワークフロープロンプトのみの変更で、生成されるロックファイル(ci-failure-scan.lock.yml)には変更がないため、CI実行時の処理負荷に変化なし。

関連Issue

#128737、#128697、#128531

その他

  • プロンプトボディは実行時にリポジトリから読み込まれるため、ロックファイル生成に影響しない
  • これはCI自動化の精度向上を目的とした内部プロセス改善

#128826 Define TARGET_LINUX for Android native builds and preserve Android-specific exclusions

  • 作成者: @Copilot
  • 作成日時: 2026年06月01日 01:46:53(UTC)
  • マージ日時: 2026年06月02日 05:03:03(UTC)
  • ラベル: area-PAL-coreclr

概要

AndroidのネイティブビルドにおけるLinux定義の一貫性を改善するPRです。マネージド層では既にTargetsLinuxがAndroidに適用されていましたが、ネイティブC/C++コンパイル定義では一貫性がありませんでした。このPRでは、AndroidビルドにおいてTARGET_LINUXを定義し、TARGET_LINUX || TARGET_ANDROIDの重複チェックを簡潔化する一方、Linux固有の機能(NUMA syscalls等)はAndroidから明示的に除外し、既存の動作を保持します。

// 変更前
#if defined(TARGET_LINUX) || defined(TARGET_ANDROID)

// 変更後
#if defined(TARGET_LINUX)
// Android固有の除外は保持
#if defined(TARGET_LINUX) && !defined(TARGET_ANDROID)

変更内容

  • ビルド定義の統一

    • eng/native/configurecompiler.cmake: AndroidビルドがTARGET_LINUX定義を追加で出力
    • src/mono/CMakeLists.txt: AndroidターゲットでTARGET_LINUXを設定
  • 条件分岐の整理

    • System.Native、CoreCLR minipal/pal/gc、NativeAOT PALなど複数の場所でTARGET_LINUX || TARGET_ANDROIDをTARGET_LINUXに統一
    • 相対する条件とコメントも整合性を持たせて更新
  • Android固有の除外を明示化

    • src/native/corehost/corehost.cpp: 静的createdump初期化でLinux限定条件に!TARGET_ANDROIDを追加
    • src/coreclr/gc/unix/numasupport.cppとsrc/coreclr/gc/unix/gcenv.unix.cpp: NUMA syscall呼び出しをLinux専用に制限

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

この変更はマネージド層とネイティブ層の定義を整合させるための内部実装の改善です。公開APIへの影響はなく、互換性に関わる破壊的変更もありません。AndroidプラットフォームにおけるLinux固有機能(cgroup、NUMA等)の既存動作は維持されます。


#128778 JIT: don't kill FP/SIMD/mask regs across x64 write barriers

  • 作成者: @EgorBo
  • 作成日時: 2026年05月29日 16:56:57(UTC)
  • マージ日時: 2026年06月02日 21:01:22(UTC)
  • ラベル: area-CodeGen-coreclr

概要

x64 JITのwrite barrier(書き込みバリア)ヘルパー関数において、浮動小数点レジスタ、SIMDレジスタ、マスクレジスタをキルセットから除外し、これらのレジスタがCORINFO_HELP_ASSIGN_REFおよびCORINFO_HELP_CHECKED_ASSIGN_REF呼び出しをまたいで生存可能にするパフォーマンス最適化です。ドキュメント化されたヘルパーABIに一致させ、不要なレジスタスピルを削減します。

変更内容

  • src/coreclr/jit/targetamd64.h: x64 write-barrierのトラッシュマスクとGC-トラッシュマスクを、カリー側トラッシュレジスタ(integer only)に限定変更。FP/SIMD/マスクレジスタの生存性を確保。RCX/RDI(dst)、RDX/RSI(src)、R10/R11(Windowsでのdebug/config依存経路)はinteger registers(RBX)として保守的に扱う。

パフォーマンスへの影響

スピル削減による改善が期待される。FP/SIMD/マスクレジスタがwrite barrier呼び出しをまたいで生存可能になることで、レジスタ圧力が軽減され、コード生成の効率が向上する可能性があります。具体的なベンチマーク数値は提供されていません。

関連Issue

なし

その他

  • 意図的にdst(RCX/RDI)をキルセットから除外しなかった理由:asmヘルパーがdstを変更する(shr rcx, 0Bh)ため、保持にはすべての約20個のasmバリアントの書き換えが必要。
  • ARMv8では既にdstレジスタを変更せず保持しており、x64でも同様の実装は技術的には可能だが、現在のアプローチでは保守的な設計を採用。
  • APX(Advanced Performance eXtensions)への拡張の可能性を言及。

#128770 Fix incorrect CoercedConstantValue usage in IsVNIntegralConstant

  • 作成者: @Copilot
  • 作成日時: 2026年05月29日 14:05:23(UTC)
  • マージ日時: 2026年06月02日 23:35:03(UTC)
  • ラベル: area-CodeGen-coreclr

概要

32ビットターゲットでCoercedConstantValue<ssize_t>がTYP_LONG値を切り詰める問題を修正します。IsVNIntegralConstant関数が定数をint64_tとして読み込むことで、FitsIn<T>チェック前に完全な64ビット値を保持し、任意のTYP_LONG定数が誤ってより小さい整数型に適合すると報告されるのを防ぎます。

// 修正前
ssize_t val = CoercedConstantValue<ssize_t>(vn);

// 修正後
int64_t val = CoercedConstantValue<int64_t>(vn);

変更内容

  • src/coreclr/jit/valuenum.h: IsVNIntegralConstant内で定数をssize_tではなくint64_tとして読み込みに変更。TYP_INT定数はint64_tに符号拡張され、TYP_LONG定数は切り詰めなしで保持され、すべてのアーキテクチャでFitsIn<T>が真の値を評価するようになります。

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

JITのValue Number最適化における定数値の型チェック精度の改善です。内部実装(JITコンパイラ)の修正であり、公開APIへの影響はありません。32ビット・64ビットアーキテクチャ間での動作の一貫性が向上します。


#128750 Share SubReadStream between System.IO.Compression and System.Formats.Tar

  • 作成者: @rzikm
  • 作成日時: 2026年05月29日 10:28:35(UTC)
  • マージ日時: 2026年06月02日 00:15:23(UTC)
  • ラベル: area-System.Formats.Tar

概要

System.IO.Compression(ZipArchive)とSystem.Formats.Tarに存在していた重複したSubReadStream実装を、src/libraries/Common配下の共有クラスに統合します。TarのSeekableSubReadStreamサブクラスは廃止し、seekability判定をsuperStream.CanSeekでインライン処理するよう変更します。

変更内容

  • 共有実装の追加: src/libraries/Common/src/System/IO/SubReadStream.csに単一の共有クラスを追加(seekable/unseekableの両対応)
  • 重複実装の削除: TarのSubReadStream.cs、SeekableSubReadStream.cs、およびZipのZipCustomStreams.cs内のSubReadStreamクラスを削除
  • プロジェクト設定の更新: 両csprojで$(CommonPath)System\IO\SubReadStream.csをコンパイル対象に
  • 型チェックの統一: TarHeader.Read.csとTarReader.csの二重型チェック(is SubReadStream / is SeekableSubReadStream)を単一のis SubReadStreamチェック+archiveStream.CanSeek分岐に統合
  • リソース文字列の追加: System.IO.CompressionのStrings.resxにIO_NotSupported_Un{readable,seekable,writable}Streamエントリを追加

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

動作上の変更点(ユーザー非表示):

  • コンストラクタが負数/オーバーフロー時にInvalidDataExceptionではなくArgumentOutOfRangeExceptionをスロー
  • ObjectDisposedExceptionが標準形式ObjectDisposedException.ThrowIf()を使用
  • ZipのNotSupportedExceptionメッセージがSR.IO_NotSupported_*標準文字列を使用
  • Flush()がno-opとなる(read-onlyストリームの慣例に合致)

テスト結果: 両ライブラリテストスイートがWindows上で完全パス(Tar: 6569/6569、Compression: 1962/1962)

コード削減: 9ファイルで+323/-545(純減)


#128736 crossgen2: Extract funclets in WasmObjectWriter

概要

WasmObjectWriterにfunclet抽出機能を追加し、コンパイル済みメソッドに付属するfuncletを個別のWasm関数として処理できるようにしました。新しいINodeWithFuncletsインターフェースを導入し、ReadyToRunおよびNativeAOTの双方でEHInfoとFrameInfoフィールドに汎用的にアクセス可能にしています。funcletはオブジェクトファイル内に連続的にレイアウトされ、Wasmテーブルに連続して追加されるため、funclet iのインデックスはメソッドMのテーブルインデックス + iで算出できます。

変更内容

  • INodeWithFunclets.cs: EHInfoとFrameInfoメタデータを公開する新しいインターフェースを導入
  • FuncletKind.cs: funcletの種類を定義(新規追加)
  • WasmObjectWriter.cs: funclet検出、シグネチャ登録、シンボル/テーブルインデックス処理ロジックを追加
  • Relocation.cs: Wasmテーブルインデックスリロケーションの加数読み取りに対応
  • MethodCodeNode.cs (NativeAOT): NativeAOTのメソッドコードノードをfunclet対応にマーク
  • MethodWithGCInfo.cs (ReadyToRun): ReadyToRunのメソッドノードをfunclet対応にマーク
  • emitwasm.cpp: リロケーション記録済みのfuncletリロケーション加数が上書きされないよう修正
  • プロジェクトファイル: NativeAOTおよびReadyToRunコンパイラプロジェクトに新しいインターフェースをリンク

パフォーマンスへの影響

影響なし

関連Issue

#128222、#127773

その他

このPRはGitHub Copilotの支援により作成されています。Wasm例外処理(EH)機能の実装に必要な基盤改善であり、funcletの内部実装に関連する変更です。


#128731 Fix for 127141 - Remove unneeded spilling around profiler hooks

概要

ARM64でのプロファイラーフック(PROF_HOOK)周辺での不要なスピリング(レジスタ退避)を削除する修正です。

ARM64ではq8-q15の下位64ビット(d8-d15)のみがカリー保存レジスタですが、LSRA(Linear Scan Register Allocator)は現在、プロファイラーフック周辺のすべての上位半分保存参照について、上位半分をd8-d15にスピリングしています。

本修正では、PROF_HOOKはq0-q7を破壊しないため、これらのレジスタの上位半分はスピリングが不要であることを明記し、不要なスピリングを排除します。

変更内容

  • src/coreclr/jit/lsra.cpp: PROF_HOOK周辺でのUpperVectorSave処理を修正。q0-q7に対して上位半分スピリングをスキップするロジックを追加(+37行)
  • src/coreclr/jit/lsra.h: 新しいメソッドまたはフラグを定義(+2行)

パフォーマンスへの影響

改善: プロファイラーフック周辺での不要なスピリング削除により、レジスタ割り当てがより効率化され、メモリアクセスとコード生成の削減が期待されます。

関連Issue

#127141

その他

  • 作成者は再現可能なテストケースを作成できませんでしたが、ARM64のABIドキュメントとプロファイラーフックのアセンブリスタブを確認して修正の正確性を検証しています
  • この変更は内部実装(JIT レジスタアロケーター)の最適化であり、公開APIへの影響はありません

#128716 [cdac] Generalize LayoutPair to LayoutSet and move IData.md in-tree

概要

cdac(共通診断アドレスコンバーター)ジェネレータの構造をリファクタリングするフォローアップPR。LayoutPairを汎用的なLayoutSetに一般化し、複数のレイアウトソースに対応できるように拡張。同時に実装ガイド文書IData.mdをツリー内に移動。

変更内容

  • LayoutSetSource.cs(新規): LayoutPairSource.csを置き換え。TypeInfo?[]配列で複数のレイアウトソースを管理。Select/TrySelect/InstanceSizeメソッドは全スロットを反復処理
  • LayoutPairSource.cs(削除): 固定的なnative/managed フィールド構造から汎用配列ベースへの移行に伴い削除
  • IData.md(移動・更新): src/native/managed/cdac/配下に移動。ドキュメント内のLayoutPair → LayoutSet参照を更新
  • 参照箇所の更新: CdacGenerator.cs、Emitter.cs、CdacAttributes.cs、ManagedTypeSource_1.csでLayoutPair → LayoutSetの参照更新

パフォーマンスへの影響

影響なし

関連Issue

#128356(このPRのフォローアップ元)

その他

Copilotレビューで指摘:LayoutSet.Resolveの実装とドキュメント記述に齟齬がある。現在の実装は空のセット/未解決のマネージドレイアウトを返すが、ドキュメントではレイアウトソースが見つからない場合の即座の例外を示している。また、ファイル移動後のManagedTypeSource.mdへの相対リンクが破損している可能性がある。


#128678 Ensure Log2 can actually be imported as intrinsic

概要

NI_PRIMITIVE_Log2 プリミティブ・インストリンシックの JIT インポーターを修正し、符号付き/符号なし入力の判定を正確に行うようにしました。これまでは非正確な型チェックにより符号なし入力に対してコードが実行されていませんでしたが、正確な型 (JitType2PreciseVarType) を使用することで、符号なし引数の展開を有効化し、符号付き引数に対しても条件付き例外スロー パスを追加します。

Log2 の展開は LeadingZeroCount(value | 1) を用いて 0 -> 0 の契約を満たします。

変更内容

  • importercalls.cpp: Log2 インストリンシックの処理ロジックを拡張(+88/-17行)。符号付き/符号なし入力の正確な判定、負の符号付き入力に対する条件付き throw パス、LeadingZeroCount による展開実装。
  • compiler.h: コンパイラ関連の定義を更新(+2/-1行)。
  • gentree.cpp: 汎用ツリー操作コードを修正(+2/-1行)。
  • valuenum.cpp: 値番号付けロジックを追加(+4行)。
  • assertionprop.cpp: 1行削除(-1行)。
  • Int32Tests.GenericMath.cs: Log2 関連のテストを追加(+6/-1行)。

パフォーマンスへの影響

影響なし(機能修正で、新しいコード パスを有効化するものであり、既存パスの最適化ではありません)。

関連Issue

#128678

その他

この変更は JIT コンパイル時の内部実装(インストリンシック展開)の修正であり、公開 API には影響しません。符号なし整数に対する Log2 呼び出しが正しく インストリンシック化されるようになります。


#128671 [release/10.0] Add LOCKREADIFFAILRET to unlocked MDInternalRW read methods

概要

メタデータテーブルの読み取り操作中にロックが適切に取得されていない問題を修正します。プロファイラーのemit操作などによってテーブルが拡張される際に、ロック外での並行読み取りが無効なポインタを参照し、segfaultまたはMissingMethodExceptionが発生していました。本修正により、LOCKREADIFFAILRET属性を追加して、必要な読み取り操作をロック保護下で実行するようにします。

変更内容

  • src/coreclr/md/enc/mdinternalrw.cpp: MDInternalRWのロック保護されていない読み取りメソッドにLOCKREADIFFAILRET属性を追加(+91/-33)

パフォーマンスへの影響

影響なし(ロック追加による若干のオーバーヘッドが想定されますが、正確な測定値は提供されていません。ただし、セグメンテーション違反やMissingMethodExceptionの発生を防止するため、必要な変更です)

関連Issue

#127957 #127958

その他

  • release/10.0ブランチへのバックポート対応
  • DataDogがCI環境で複数回のテストで本問題を検出しており、顧客報告も存在
  • 修正リスク評価:低
  • テスト検証済み:@andrewlock、@kevingosse により既存の問題に対して検証完了

#128656 Add async validation support for System.ComponentModel.DataAnnotations

概要

System.ComponentModel.DataAnnotationsに非同期検証機能を追加するPR。新しいAsyncValidationAttribute抽象基底クラス、IAsyncValidatableObjectインターフェース、および8つの非同期Validatorメソッド(TryValidateObjectAsync、ValidatePropertyAsyncなど)を実装し、データベースアクセスやAPI呼び出しを伴う検証シナリオに対応します。

変更内容

  • AsyncValidationAttribute.cs (新規): ValidationAttributeを継承する抽象基底クラス。IsValidは抽象メソッドとして強制、IsValidAsyncとGetValidationResultAsyncで非同期検証を実装
  • IAsyncValidatableObject.cs (新規): IValidatableObjectを拡張するインターフェース。ValidateAsyncメソッドでIAsyncEnumerable<ValidationResult>を返すオブジェクトレベルの非同期検証をサポート
  • Validator.cs: 8つの非同期メソッドを追加(TryValidateObjectAsync2オーバーロード、TryValidatePropertyAsync、TryValidateValueAsync、ValidateObjectAsync2オーバーロード、ValidatePropertyAsync、ValidateValueAsync)。すべてTask/Task<bool>を返却
  • ValidationAttribute.cs: 非同期検証対応のための既存メソッド修正
  • ValidationContext.cs: 並行非同期検証下でのItemsプロパティのスレッドセーフティに関するドキュメント追加
  • ref assembly: 公開API表面を更新
  • テスト: 1292行のテストを追加(async/sync属性混在、breakOnFirstErrorの並列動作、キャンセレーション伝播、IAsyncValidatableObject、クラスレベルの非同期属性、エラーメッセージ書式化に対応)

パフォーマンスへの影響

プロパティ検証と非同期属性検証はTask.WhenAnyを用いた並列実行で処理。breakOnFirstError時は連結CancellationTokenSourceで協調的なキャンセレーションを実現し、不要な検証の継続を防止します。同期属性を先に実行してエラーがあれば早期終了し、その後に非同期属性を並列実行する2段階方式を採用しています。

関連Issue

#128096

その他

API仕様上の決定により:

  • ValueTaskではなくTask/Task<T>を返却型として採用
  • IsValidはabstract overrideで必須実装
  • IAsyncValidatableObjectにはデフォルトインターフェースメソッドを設けない(実装クラスがValidateとValidateAsyncの両方を提供)

非同期検証パイプラインは既存の同期パイプラインと同じ3段階構造を踏襲:プロパティ検証 → 型属性 → IAsyncValidatableObject/IValidatableObject


#128649 Fix format pre-commit hook

概要

Pre-commit hookのフォーマット処理における2つの問題を修正しました。Native formatがファイルが見つからないエラーを発生させ、Managed formatが静かに失敗して実際のフォーマットを実行していない問題に対応しています。

変更内容

  • eng/formatting/format.sh: NativeおよびManaged formatのエラーハンドリングを改善(3行追加、2行削除)
  • docs/coding-guidelines/code-formatting-tools.md: ドキュメントを更新(3行追加、1行削除)

パフォーマンスへの影響

影響なし

関連Issue

#128649

その他

なし


#128615 [cDAC] Remove GetObjectContents from DAC/DBI

  • 作成者: @barosiak
  • 作成日時: 2026年05月27日 00:25:24(UTC)
  • マージ日時: 2026年06月02日 17:38:18(UTC)
  • ラベル: area-Diagnostics-cdac

概要

DAC/DBI インターフェースから GetObjectContents メソッドを削除するリファクタリング。ネイティブ実装は divalue.cpp での呼び出しを直接的な VmPtrToCookie キャストに置き換えることで冗長化した機能を廃止します。

変更内容

  • dacdbiimpl.cpp/h から GetObjectContents のネイティブ実装を削除
  • IDacDbiInterface、dacdbi.idl からメソッドシグネチャと関連コメントを削除
  • divalue.cpp での呼び出しを VmPtrToCookie キャストに直接置き換え(5行→1行)
  • cDAC マネージド DacDbi ラッパー(IDacDbiInterface.cs, DacDbiImpl.cs)から削除

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

Copilot のレビューコメント概要には cDAC オブジェクトコントラクトへの GetObjectSize API 追加とそれを用いた新しい GetObjectContents 実装が記載されていますが、このPRの作成者による説明とは異なり、レビューコメントは提案内容と思われます。本PRは既存の GetObjectContents 削除に焦点を当てた変更です。


#128606 Reapply "A few fixes in the threadpool semaphore. Unify Windows/Unix implementation of LIFO policy." (#125193)

  • 作成者: @VSadov
  • 作成日時: 2026年05月26日 20:44:28(UTC)
  • マージ日時: 2026年06月02日 15:28:29(UTC)
  • ラベル: area-System.Threading

概要

スレッドプール管理のセマフォ実装を統一し、Windows/Unix間の動作差異を解消するパッチの再適用です。前回(#125193)の変更は NuGet restore ベンチマーク回帰により revert されましたが、本PRではその根本原因(WaitOnAddress のスピン時間と優先度ブーストによる Cold スレッドの早期起動、さらには不要な作業キュースキャン)に対する緩和策を導入しています。

変更内容

コア実装の統一化:

  • LowLevelLifoSemaphore を新たに futex ベース(LowLevelThreadBlocker + カウンティング)の統一実装に置き換え、従来のプラットフォーム固有実装(.Windows.cs、.Unix.cs)を削除
  • LowLevelThreadBlocker を新規追加:Linux futex/Windows WaitOnAddress をラッピングするローレベル block/wake プリミティブ
  • LowLevelFutex.Windows.cs、LowLevelFutex.Unix.cs を新規追加し、Windows WaitOnAddress と Unix futex システムコールをマッピング

Windows 向け回帰対策:

  • SetThreadPriorityBoost により block 前後でスレッド優先度ブースト抑制を実施し、wakeup 時のプリセンプション回避
  • Block された時間が短すぎる場合(≈スピン検出)にクールダウン時間を強制し、Cold スレッドの過度な起動を抑止
  • LIFO one-by-one リリース方針により、最も recently blocked なスレッドへのクールダウンが他のブロック中スレッドの確実なブロックをもたらす

Worker dispatch の改善:

  • DispatchResult を導入し dispatch 結果をより細粒度に追跡
  • リリーサースレッド(active threads)のコードパスを非ブロッキング化
  • 作業キューの完全に空のスキャン(spurious scans)を検出した場合、該当スレッドを無条件にスリープ状態へ移行(fruitless activity の最小化)
  • wakeup ポリシーを真の one-by-one リリースへ厳密化:HillClimbing/CooperativeBlocking による外部の active count 変更時にも複数 thread 起動を防止

インターフェース層:

  • LowLevelLock を LowLevelThreadBlocker ベースへ refactor
  • Backoff.cs の指数バックオフを spin count 返却方式へ変更
  • System.Native futex export の追加(pal_threading.c/h)と LibraryImport declarations
  • NativeAOT 向け Synchronization.lib link 設定追加

パフォーマンスへの影響

前回の変更により NuGet restore ベンチマークの回帰が報告されましたが、本 PR は以下の緩和策により改善を図っています:

  • スピン検出に基づくクールダウン導入により、Cold スレッドの無駄な起動を削減
  • リリーサースレッドの非ブロッキング化により contention 低減
  • Spurious スキャン検出時の即座スリープによる CPU 利用率改善

ただし、具体的なベンチマーク数値は本 PR に記載されていません。

関連Issue

#125193


#128599 Add IsClosedTypeAttribute

  • 作成者: @Copilot
  • 作成日時: 2026年05月26日 17:27:47(UTC)
  • マージ日時: 2026年06月02日 05:39:16(UTC)
  • ラベル: area-System.Runtime

概要

C#コンパイラがclosed型宣言に付与するIsClosedTypeAttribute属性を公開する変更です。ユーザーが直接記述することを意図していないため、[EditorBrowsable(Never)]でマークされています。

namespace System.Runtime.CompilerServices
{
    [EditorBrowsable(EditorBrowsableState.Never)]
    [AttributeUsage(AttributeTargets.Class, Inherited = false)]
    public sealed class IsClosedTypeAttribute : Attribute
    {
        public IsClosedTypeAttribute() { }
    }
}

変更内容

  • 新規型: System.Runtime.CompilerServices.IsClosedTypeAttributeをSystem.Private.CoreLibに追加。コンパイラ専用属性の規約に従い[EditorBrowsable(Never)]を指定
  • プロジェクト: System.Private.CoreLib.Shared.projitemsに新規ファイルを含める
  • 参照アセンブリ: System.Runtime.csに対応する宣言を追加
  • テスト: AttributesTests.csにRequiresLocationAttributeの近くにコンストラクタの煙テストを追加
  • 互換性修正: AttributeUsageからAllowMultiple = falseを削除し、ApiCompat CP0015エラー(ref/lib属性引数の不一致)を解決

AttributeTargetsは意図的にClassのみに限定され、インターフェース/列挙型への拡張は将来の設計で検討されます。

パフォーマンスへの影響

影響なし

関連Issue

#128161

その他

なし


#128553 Add NativeAOT aggregate executable shims with preview-feature gating

  • 作成者: @Copilot
  • 作成日時: 2026年05月25日 11:51:16(UTC)
  • マージ日時: 2026年06月02日 12:56:51(UTC)
  • ラベル: area-NativeAOT-coreclr

概要

NativeAOT共有ライブラリが複数の実行可能エントリポイントを集約し、プラットフォーム別(Windows/Linux/macOS)の小型シムを生成する機能を追加します。IncludeInAggregateExecutable はEnablePreviewFeatures=trueでのみ有効になります。

変更内容

ILCompilerツール側:

  • --aggregateexe:assembly=exportSymbolオプションを追加(ILCompilerRootCommand.cs、Program.cs)
  • アセンブリごとのスタートアップスタブを異なるエクスポート名で複数ルート化
  • スタートアップスタブソート処理を決定的に(StartupCodeMainMethod.Sorting.cs)
  • エントリポイント名をルートされたスタブごとにカスタマイズ可能に(MainMethodRootProvider.cs)

MSBuildターゲット側:

  • 集約実行可能ファイルの入力をマークされたProjectReferenceから計算(Microsoft.NETCore.Native.targets)
  • Windows用シムコンパイル/リンクターゲットを追加(Microsoft.NETCore.Native.Windows.targets)
  • Unix用シム生成とrpath設定でのリンク(Microsoft.NETCore.Native.Unix.targets)
  • シムとシンボルをNativeCompileパイプラインで公開(Microsoft.NETCore.Native.Publish.targets)
  • プレビュー機能ゲーティング:EnablePreviewFeatures=false時に明示的なビルドエラー発行

テストプロジェクト:

  • 2つの実行可能ファイル(HelloExe、ValidatorExe)を単一共有ライブラリに集約するテストスイート

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

破壊的変更ではありません。プレビュー機能としてゲーティングされており、本機能を使用する場合は明示的にEnablePreviewFeatures=trueの設定が必須です。


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

概要

dotnet/dotnetのVMR(Virtual MonoRepo)から自動的にソースコードを同期するcodeflow更新です。主にビルドツールチェーンと開発時依存関係の更新が含まれています。このPRは機械的な定期同期であり、runtime固有の機能変更は含まれていません。

変更内容

  • eng/Version.Details.xml: Microsoft.CodeAnalysis関連パッケージ、NuGet.Framework関連パッケージ、build task関連パッケージなど複数の依存関係をバージョン更新
    • Microsoft.CodeAnalysis: 5.0.0-2.26270.134 → 5.0.0-2.26274.103
    • NuGet.Frameworks/Packaging/ProjectModel/Versioning: 7.0.3-rc.27134 → 7.0.3-rc.27503
    • Microsoft.DotNet.Arcade.Sdk等build関連パッケージ: 10.0.0-beta.26270.134 → 10.0.0-beta.26274.103
    • その他System.Reflection.Metadata、System.Text.Json等を同じくらいの頻度で更新
  • global.json: .NET SDK関連のバージョン情報を更新
  • NuGet.config: フィード設定を微調整
  • eng/common配下のyamlテンプレート: CI/CDパイプライン定義を同期更新

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • このPRはdotnet-maestroボットによる自動同期です
  • VMRの55a4d49b172c5e4bbd64de30e282287f72c9bdd6コミット(2026年5月24日)に対応
  • release/10.0.1xxブランチからの同期
  • 関連する複数のリポジトリ(arcade、aspnetcore、efcore、runtime、sdk、templating、windowsdesktop)の変更が同時に反映されます

#128513 JIT: add post-inline cleanup for no-return calls

概要

インライン化後に実行される新しいJITフェーズを追加します。各基本ブロック内の最初のno-return呼び出し(戻らない呼び出し)の後にある不到達ステートメントと制御フローエッジを削除し、ブロックをBBJ_THROWに変換します。これにより、resolve-GDVsフェーズおよび後続のフェーズで、より効果的なクリーンアップが可能になります。

変更内容

  • fginline.cpp: Compiler::fgPostInlineNoReturnCleanup()メソッドを実装。インライン化後のブロックをスキャンし、最初のno-return呼び出しの後のステートメントを削除し、影響を受けたブロックをBBJ_THROWに変換します。
  • compphases.h: 新しいフェーズ識別子PHASE_POST_INLINE_NORETURNを登録(パフォーマンス追跡用)。
  • compiler.h: fgPostInlineNoReturnCleanup()メソッドをCompilerクラスに宣言。
  • compiler.cpp: PHASE_MORPH_INLINEの後、PHASE_RESOLVE_GDVSの前に新フェーズを呼び出すようにコンパイルフローに統合(最適化有効時)。

パフォーマンスへの影響

不到達コードの早期削除により、後続のJITフェーズ(resolve-GDVsなど)がより効率的に動作する可能性があります。ベンチマーク結果は提供されていません。

関連Issue

なし

その他

  • 新フェーズは最適化が有効な場合(opts.OptimizationEnabled())にのみ実行されます。
  • この変更はJITコンパイラの内部実装であり、公開APIには影響しません。

#128508 Add ObjectiveCMarshal.GetOrCreateReferenceTrackingMemory API

概要

Objective-C相互運用性において、ObjectiveCMarshal.GetOrCreateReferenceTrackingMemory(object)という新しい公開APIを追加しました。このAPIは、GCHandleを作成することなくオブジェクトのタグ付きメモリスパンを返すもので、CreateReferenceTrackingHandleよりも効率的です。

変更内容

  • 公開API追加: System.Runtime.InteropServices.ObjectiveC.ObjectiveCMarshal.GetOrCreateReferenceTrackingMemory(object)を追加(XML文書化完備)
  • CoreCLR: ObjCMarshal_GetOrCreateTaggedMemory QCallと共有ヘルパーを実装
  • NativeAOT: タグ付きメモリ割り当てロジックをハンドル作成パスで再利用するようにリファクタリング
  • Mono: NotImplementedExceptionをスローするスタブを追加
  • Ref assembly: 参照アセンブリを更新
  • テスト: ObjectiveCMarshalAPIに無効な引数、事前初期化動作、メモリアイデンティティ/ゼロ初期化セマンティクスのテストを追加

パフォーマンスへの影響

GCHandleを作成しない分、参照追跡ハンドルが不要な場合のメモリ効率とパフォーマンスが向上します。従来のCreateReferenceTrackingHandleと比べ、ハンドルの作成・管理のオーバーヘッドが削減されます。

関連Issue

#128476

その他

  • このAPIはiOS/macOS向けのInterop処理を最適化するもので、特にタグ付きメモリが必要な場合の効率的な代替手段を提供します。
  • NativeAOT対応により、全てのランタイム(CoreCLR、NativeAOT、Mono)に実装されます。

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

概要

dotnet/icu と dotnet/runtime-assets の依存関係を自動更新するPull Requestです。

  • runtime-assets: 11.0.0-beta.26261.1 → 11.0.0-beta.26276.1
  • ICU Transport: 11.0.0-alpha.1.26263.1 → 11.0.0-alpha.1.26281.1

変更内容

  • eng/Version.Details.props: テストデータ、ランタイムデータ関連のアセット、ICU関連ライブラリの バージョン情報を更新
    • Microsoft.DotNet.CilStrip.Sources、System.Private.Runtime.UnicodeData、System.Runtime.TimeZoneData、Microsoft.NETCore.Runtime.ICU.Transport など16個のパッケージバージョンを更新
  • eng/Version.Details.xml: Version.Details.props の変更に対応するメタデータを更新

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • Maestro[bot]による自動化された依存関係更新(Darc Subscription)
  • 主にテストデータアセット、ランタイム用ユニコードデータ、タイムゾーンデータ、ICU(国際化コンポーネント)ライブラリの更新
  • レビュワー: svick

#128408 [clr-ios] Clear stale Apple mobile CoreCLR test exclusions

概要

Apple モバイル CoreCLR テスト機能の改善を目的とした、stale なテスト除外・スキップ設定の削除。runtime-extra-platforms ビルド 1429699 の結果に基づき、iOS/tvOS/macCatalyst シミュレーターで実行可能になったテストプロジェクト・テストケースの除外条件を削除し、テストカバレッジを拡大する。また、深い再帰呼び出しを行う DataContractSerializer テストを、明示的に 16MB の大きなスタックを持つワーカースレッド上で実行するよう調整。

変更内容

  • src/libraries/tests.proj: シミュレーター限定の Apple モバイル CoreCLR プロジェクト除外設定を削除
  • 複数のテストファイル (7ファイル): 以下のテスト群から stale な [ActiveIssue] スキップ属性を削除
    • DiagnosticMethodInfoTests、CharReaderTests、XmlSerializerTests、XslCompiledTransform、XsltApiV2、InvokeWithRefLikeArgs 他
  • src/libraries/System.Runtime.Serialization.Xml/tests/DataContractSerializer.cs: DCS_DeeplyLinkedData テストを 16MB スタックのワーカースレッドで実行し、スタックオーバーフロー回避。呼び出し側スレッドで例外を再スロー

パフォーマンスへの影響

影響なし(機能的な動作変更なし、テストカバレッジ拡大のみ)

関連Issue

その他

以下のテストプロジェクトが iossim / tvossim / maccatalyst CoreCLR 上で実行可能になった:

  • System.Reflection.InvokeEmit.Tests
  • System.Reflection.InvokeInterpreted.Tests
  • System.Memory.Tests

DataContractSerializer の動的メソッド再帰深度自体は変更されていない(iOS デフォルトの ~512 KB メインスレッドスタック枯渇の回避が目的)。


#128383 Make runtimeconfig.dev.json configProperties take precedence over runtimeconfig.json

  • 作成者: @Copilot
  • 作成日時: 2026年05月19日 19:01:56(UTC)
  • マージ日時: 2026年06月02日 23:50:53(UTC)
  • ラベル: area-Host

概要

.runtimeconfig.dev.json で指定された configProperties が .runtimeconfig.json の同じプロパティ値で上書きされる問題を修正しました。今後は、dev設定が本設定より優先されるようになります。これにより、開発環境での設定上書きが機能するようになります。

変更内容

  • src/native/corehost/runtime_config.cpp: ホストランタイム設定パース時に、configProperties のキーが既に存在する場合はスキップする「先着優先」ロジックを実装。.runtimeconfig.dev.json を先に解析することで、dev設定が優先されます。
  • src/installer/tests/HostActivation.Tests/RuntimeProperties.cs: .runtimeconfig.dev.json が .runtimeconfig.json のプロパティをオーバーライドすることを検証するテストを更新。

パフォーマンスへの影響

プロパティの追加時にハッシュテーブルの存在確認が追加されるため、わずかなオーバーヘッドが発生する可能性があります。ただし、実際の影響は最小限と考えられます。

関連Issue

なし

その他

破壊的変更: 技術的には破壊的変更ですが、SDK は .NET 6 以降デフォルトで .runtimeconfig.dev.json の出力を無効化しており、かつこの機能は configProperties のために使用されたことがないため、実装上の影響は極めて低いとされています。


#128366 Revert MemoryStream breaking change

  • 作成者: @alinpahontu2912
  • 作成日時: 2026年05月19日 12:51:04(UTC)
  • マージ日時: 2026年06月02日 15:14:06(UTC)
  • ラベル: area-System.IO

概要

.NET 11で導入されたMemoryStreamの破壊的変更を戻すPRです。最大容量を超えた場合にArgumentOutOfRangeExceptionではなくOutOfMemoryExceptionを発生させるようにします。これにより、容量超過時の例外型が配列割り当て失敗時の標準的な例外と統一されます。

変更内容

  • MemoryStream.cs: コンストラクタの上限値チェック(MemStreamMaxLength)を削除し、超過リクエストが配列割り当てパスで失敗するように変更。SetLength(long)メソッドで最大容量超過時にOutOfMemoryExceptionをスロー。
  • MemoryStream.ConstructorTests.cs: 無効な容量のコンストラクタテストを更新し、サポートされていないプラットフォームでint.MaxValueに対してOutOfMemoryExceptionを期待するように変更。
  • MemoryStreamTests.cs: 容量境界テストの期待値をOutOfMemoryExceptionに更新(大規模割り当てのためCI時にはスキップ)。

パフォーマンスへの影響

影響なし

関連Issue

#123440、#123709(ベース議論)

その他

この変更は公開API(MemoryStreamコンストラクタとSetLengthメソッド)の動作を変更する破壊的変更の戻しです。例外型の変更により、既存のArgumentOutOfRangeExceptionキャッチブロックが機能しなくなる可能性があります。


#128346 Bump ws from 8.17.1 to 8.20.1 in /src/libraries/System.Net.WebSockets.Client/tests

概要

System.Net.WebSockets.Client テストスイートの依存パッケージ ws を 8.17.1 から 8.20.1 にアップデートします。このアップデートに含まれるセキュリティ修正により、websocket.close() メソッドで TypedArray を reason 引数として渡した場合の未初期化メモリ開示の問題が解決されます。

変更内容

  • src/libraries/System.Net.WebSockets.Client/tests/package.json: ws 依存パッケージを 8.17.1 → 8.20.1 に更新
  • src/libraries/System.Net.WebSockets.Client/tests/package-lock.json: ロックファイルを同期更新

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

セキュリティについて: このアップデートに含まれる主な変更は以下の通りです。

  • 8.20.1: websocket.close() で TypedArray(例:Float32Array)を reason 引数として使用した場合、未初期化メモリが遠隔ピアに開示される脆弱性を修正
  • 8.20.0: PerMessageDeflate クラスおよび WebSocket ヘッダー関連ユーティリティのエクスポート追加
  • 8.19.0: closeTimeout オプション追加、Node.js コア側の破壊的変更への対応

本変更はテストコードの依存パッケージ更新のみで、System.Net.WebSockets.Client の実装自体には影響を与えません。


#128343 Bump ws from 8.17.1 to 8.20.1 in /src/libraries/System.Net.Http/tests/FunctionalTests

概要

System.Net.Http機能テスト用のNode.jsパッケージ依存関係wsを8.17.1から8.20.1にアップデートします。このアップデートにはセキュリティ修正が含まれています。

変更内容

  • package.json: ws依存関係を8.17.1から8.20.1に更新
  • package-lock.json: ロックファイルを同期更新

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

セキュリティ修正を含むアップデート

  • v8.20.1: websocket.close()メソッドで初期化されていないメモリ開示の脆弱性を修正。TypedArray(例:Float32Array)をreason引数として渡した場合、未初期化のメモリがリモートピアに漏洩していた問題が解決されました。
  • v8.20.0: PerMessageDeflateクラスおよびSec-WebSocket-Extensions/Sec-WebSocket-Protocolヘッダ用ユーティリティのエクスポート機能を追加
  • v8.19.0: closeTimeoutオプションを追加、Node.js コア内の破壊的変更に対応

このアップデートは機能テストの依存関係に限定され、ランタイムコードへの直接的な影響はありません。


#128312 [release/9.0-staging] Update dependencies from dotnet/xharness

概要

dotnet/xharnessの依存関係を更新するPull Requestです。XHarness関連の3つのNuGetパッケージをプレリリース版11.0.0-prerelease.26230.4から11.0.0-prerelease.26279.1にアップデートしています。

変更内容

  • .config/dotnet-tools.json: dotnet-toolsの設定ファイルを更新
  • eng/Version.Details.xml: 依存関係の詳細バージョン情報を更新
    • Microsoft.DotNet.XHarness.CLI
    • Microsoft.DotNet.XHarness.TestRunners.Common
    • Microsoft.DotNet.XHarness.TestRunners.Xunit
  • eng/Versions.props: バージョン定義ファイルを更新

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

このはAutomated Dependencyアップデートで、maestroの自動更新メカニズムにより実行されています。


#128147 Arm64: [PAC-RET] VM and coreclr support

概要

ARM64プロセッサ上のPointer Authentication Code (PAC-RET) セキュリティ機能に対するVM・CoreCLRのサポート実装。PACはリターンアドレスの改ざん検出によるセキュリティ強化メカニズムで、スタックウォーク、例外処理、スレッド一時停止などの実行時の重要な領域でPACシグネチャ検証と処理に対応する。デフォルトは無効化されており、別のPR #125436で完全な実装が進行中。

変更内容

  • ARM64アセンブリ層(asmhelpers.S/asm): PACシグネチャ検証用のマクロ・ヘルパー関数追加、リターンアドレス認証ロジック実装
  • スタックウォーク(stackwalk.cpp): PAC対応フレームデータ解析、認証済みリターンアドレス処理
  • 例外処理(eetwain.cpp): PACを考慮した例外時のスタックフレーム検出
  • スレッド管理(threadsuspend.cpp): スレッド一時停止時のPACシグネチャ検証、threads.h構造体拡張
  • アンワインダー(unwinder.cpp): ARM64向けスタックアンワインド時のPAC検証ロジック
  • フレーム定義(frames.h): PACサポート用フレーム構造体の拡張
  • ビルド設定(CMakeLists.txt、clrnt.h、regdisp.h): PAC関連コンパイラフラグ・マクロ追加

パフォーマンスへの影響

デフォルト無効化により、通常ビルド時のパフォーマンスへの悪影響なし。PAC有効時のオーバーヘッド詳細は提供情報なし。

関連Issue

#125436(PAC全体実装のマスターPR)

その他

本PRは実装の段階的レビュー簡素化のため、#125436から分離したサブセット。CI検証はPAC無効状態で実施されるため、完全な正確性確認は#125436のCI結果を参照推奨。


#128024 Update container image digests

概要

dotnet/runtimeリポジトリで使用されるコンテナイメージ(mcr.microsoft.com/dotnet-buildtools/prereqs)のダイジェストを自動更新するPRです。42個のコンテナイメージダイジェストが新しいバージョンに更新されています。これは依存関係自動更新ボット(.NET Renovate Bot)により自動生成されました。

変更内容

  • eng/pipelines/common/templates/pipeline-with-resources.yml: 25行の変更(ダイジェスト更新)
  • eng/pipelines/coreclr/templates/helix-queues-setup.yml: 10行の変更(ダイジェスト更新)
  • eng/pipelines/installer/helix-queues-setup.yml: 4行の変更(ダイジェスト更新)
  • eng/pipelines/libraries/helix-queues-setup.yml: 23行の変更(ダイジェスト更新)

すべてmcr.microsoft.com/dotnet-buildtools/prereqsコンテナイメージのダイジェスト値の更新です(ビルド・テスト用インフラストラクチャ)。

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

このPRはdotnet-renovate-botによる自動依存関係更新です。ビルド・テスト基盤となるコンテナイメージの更新であり、ランタイム機能やAPIに直接的な影響はありません。


#127133 [main] Update dependencies from dotnet/xharness

概要

dotnet/xharnessの依存関係を更新するプルリクエストです。Microsoft.DotNet.XHarness.CLI、Microsoft.DotNet.XHarness.TestRunners.Common、Microsoft.DotNet.XHarness.TestRunners.Xunitを11.0.0-prerelease.26204.1から11.0.0-prerelease.26279.1にアップデートします。

変更内容

  • .config/dotnet-tools.json: dotnetツール設定の更新
  • eng/Version.Details.props: バージョン詳細プロパティの更新
  • eng/Version.Details.xml: バージョン詳細XMLメタデータの更新(Maestroの自動依存関係更新機構による)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

このプルリクエストはMaestro(dotnet-maestro[bot])による自動依存関係更新です。xharnessのコミット2cee83bf4841d72c9734a343f3003aeabdd46edfの変更が含まれています。


#127079 JIT: Fix CEA cloning when enumerator local is reassigned from an untracked source

  • 作成者: @EgorBo
  • 作成日時: 2026年04月17日 12:17:06(UTC)
  • マージ日時: 2026年06月02日 17:02:17(UTC)
  • ラベル: area-CodeGen-coreclr

概要

JIT条件付き脱出分析(CEA)におけるGDV保護下のenumerator割り当てクローン化時の誤컴파일を修正します。CheckForGuardedAllocationOrCopyが仮想呼び出しなど認識されないソースからのストアを記録していなかったため、複数のdef を持つenumerator localでも不正なクローン化が行われていました。修正により、未追跡ソースからのストアをappearanceとして記録し、複数のdefが存在する場合はクローン化を回避します。

変更内容

  • src/coreclr/jit/objectalloc.cpp:ObjectAllocator::CheckForGuardedAllocationOrCopyを拡張し、GT_ALLOCOBJ/GT_LCL_VAR/GT_BOX以外のソース(仮想呼び出しなど)からのストアをappearanceとして記録。これによりCheckCanCloneが複数のdefを検出し、不正なクローン化を防止します。
  • src/tests/JIT/Regression/JitBlue/Runtime_127075/Runtime_127075.cs:Tiered Compilation + PGO環境で[.. head, .. tail]スタイルのコレクション式を使用した回帰テスト(51行追加)。
  • src/tests/JIT/Regression/JitBlue/Runtime_127075/Runtime_127075.csproj:Tiered Compilation + Tiered PGO設定でテスト実行を構成(16行追加)。

パフォーマンスへの影響

影響なし。本修正は不正なクローン化を防止する正確性の改善であり、パフォーマンスへの悪影響はありません。

関連Issue

#127075

その他

問題は[.. head, .. tail]スタイルのコレクション式がTier1+PGO下で間違った結果を生成していたもので、enumeratorローカルが複数の異なるソースから割り当てられる場合に顕在化していました。


#126769 Fix XmlSerializer consuming sibling elements when deserializing empty XmlElement member

  • 作成者: @Copilot
  • 作成日時: 2026年04月10日 21:40:07(UTC)
  • マージ日時: 2026年06月02日 22:20:30(UTC)
  • ラベル: area-Serialization

概要

XmlSerializerが空のXmlElementメンバーを逆シリアル化する際に、後続の兄弟要素を誤って消費してしまうバグを修正しました。<Description/>のような自己閉じタグの後の要素が、次のメンバーではなくXmlElementのコンテンツとして読み込まれていました。

public class Root {
    public XmlElement Description { get; set; }
    public string Name { get; set; }
}

// 修正前: Description = <Name>Test</Name>, Name = null
// 修正後: Description = null, Name = "Test"
var obj = serializer.Deserialize(new StringReader(
    @"<Root><Description/><Name>Test</Name></Root>"));

変更内容

  • XmlSerializationReader.ReadXmlNode: 空要素チェックを追加。ReadStartElement()を呼び出す前にIsEmptyElementをチェックし、空要素の場合はSkip()してnullを返すように修正(既存のReadNull()と同じパターン)
  • テスト追加: XmlSerializerTests.RuntimeOnly.csに回帰テストXml_XmlElementMember_EmptyElement_SiblingNotConsumedを追加。空要素、スペース付き、コンパクト形式など複数のケースに対応
  • テスト型追加: SerializationTypes.RuntimeOnly.csにTypeWithXmlElementMemberAndSiblingを追加

パフォーマンスへの影響

影響なし

関連Issue

#126769

その他

  • 変更はXmlSerializerの逆シリアル化ロジック(内部実装)に限定
  • 互換性への影響なし(バグ修正のため、修正後が正しい動作)
  • LocalAppContextSwitches.csへの追加があるため、互換性スイッチの追加の可能性あり

#126630 Enhance type and nullability handling for collection items in schema import

概要

XSD スキーマからコード生成する際に、コレクション項目のNullability情報をスキーマ定義から正確に抽出・キャッシュし、コード生成時に活用することで、より正確なNullability処理を実現するもの。スキーマインポート時に ContractCodeDomInfo.CollectionItemIsNullable にNullability情報を格納し、コード生成パイプラインで従来のヒューリスティクスの代わりにこれを参照する。

変更内容

  • XsdDataContractImporter.cs: スキーマ定義を検査してコレクション項目のNullability情報をキャッシュする CacheCollectionItemNullability メソッドを追加
  • ContractCodeDomInfo.cs: Nullability情報を格納する CollectionItemIsNullable プロパティを新規追加(内部API)
  • CodeExporter.cs: キャッシュされたNullability情報を優先的に使用するように変更し、ヘルパーメソッドを IsCollectionItemNullable にリネーム
  • SchemaImportHelper.cs: IsItemTypeNullable を IsCollectionItemNullable にリネームし、XML標準以外の命名やフォールバック処理を改善
  • ClassDataContract.cs: スキーマインポート時のプレースホルダー型に対する不要な初期化をスキップ
  • RoundTripTest.cs: コレクション項目Nullability のコード生成を検証し、レガシーなリダイレクション型が生成されないことを確認するテストを追加

パフォーマンスへの影響

スキーマインポート時に不要な初期化処理をスキップするため、スキーマ定義型の処理効率が向上。メモリ・実行速度への有意な改善数値は提供されていない。

関連Issue

#98240

その他

  • 変更は内部API(System.Runtime.Serialization.Schema および System.Private.DataContractSerialization)に限定され、公開APIの変更なし
  • スキーマインポート時のNullability検出精度向上により、生成コードの正確性が向上

#118571 System.Runtime.Serialization.Xml: throw SerializationException on malformed prefix

  • 作成者: @imcarolwang
  • 作成日時: 2025年08月11日 09:14:46(UTC)
  • マージ日時: 2026年06月02日 19:34:17(UTC)
  • ラベル: area-Serialization

概要

XML解析時に不完全なプリフィックス要素(例:<s:)を処理する際、ReadObjectがArgumentExceptionをスローしていた動作を修正します。これをSerializationExceptionでラップするようにして、シリアライザーのコントラクトに統一しました。

変更内容

  • XmlUTF8TextReader.cs: ArgumentExceptionをSerializationExceptionでラップする処理を追加(5行追加)
  • DataContractSerializer.cs: 不正なプリフィックスを持つXML要素の解析時にSerializationExceptionがスローされることを検証する回帰テストDCS_ReadObject_MalformedPrefix_EmptyLocalName_ThrowsSerializationExceptionを追加(22行追加)

パフォーマンスへの影響

影響なし

関連Issue

#1409

その他

この変更は例外処理の一貫性を改善するもので、System.Runtime.Serialization.Xmlライブラリの内部実装に関連します。呼び出し元はArgumentExceptionではなくSerializationExceptionをキャッチする必要があります。


目次