Pull Request on 2026年08月04日

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

注意点

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


目次

  1. #131825 Add cordbdi_universal static library with MSCORDBI_LINKS_PRIVATE_PAL defined
  2. #131808 Fix incorrect checks for CreateThread failure
  3. #131807 Change VOLATILE_MEMORY_BARRIER for x64 Unix
  4. #131791 Avoid unbounded MemoryStream allocation when copying tar entry data
  5. #131787 [mobile] Restore iOS device legs in runtime.yml
  6. #131781 [release/10.0] JIT: fix bit-test switch lowering when the bit table is inverted
  7. #131775 Don't suggest GPT-5.3-codex for code review skill
  8. #131769 Restore stress guards on process-isolated IL tests
  9. #131762 JIT: bail out of CEA cloning if alloc block has multiple successors
  10. #131759 Accept moving write buffers for socket-bound TLS sessions
  11. #131758 Fix SslAuthenticationOptions incorrectly disposing unowned IntermediateCertificates
  12. #131757 [release/10.0] Fix flaky MalformedPacketsDuringHandshake test
  13. #131755 Disable TLS resume in SslStreamServer_RejectsClientCert_ClientObservesAlert
  14. #131754 JIT: Avoid unnecessary argument spills in indirect call transformer
  15. #131751 Fix IsSupported unit test for Android's X25519 implementation
  16. #131749 JIT: Handle op1 struct-values in commas in physical promotion
  17. #131739 [Mono]: Fix InvalidCastException for enum nested in a generic type on Mono
  18. #131736 JIT: fix bit-test switch lowering when the bit table is inverted
  19. #131733 Compile ref-assemblies with updated-memory-safety-rules
  20. #131728 Fix MemoryCache concurrency tests
  21. #131690 [cDAC] Implement IXCLRDataValue APIs
  22. #131688 JIT: elide redundant wasm Virtual IP updates
  23. #131683 Remove ClassSupportsIClassX which always returns true
  24. #131681 Fix profiler ReJIT of Runtime Async method bodies
  25. #131672 Fix Tar cleanup one-liners
  26. #131668 Wasm: stop R2R stack walk at reverse-pinvoke frames
  27. #131634 Fix mono handling of SwiftError
  28. #131623 Add JsonPolymorphicAttribute.InferClosedTypePolymorphism
  29. #131593 Add getter-only configuration binding parity tests
  30. #131588 Enforce required Negotiate mutual authentication
  31. #131578 Exclude reverse P/Invoke stubs from profiler code-transition callbacks.
  32. #131569 [main] Source code updates from dotnet/dotnet
  33. #131554 Restore symbol-free decoding for CORINFO_HELP_NEW helpers
  34. #131516 [main] Update dependencies from dotnet/runtime-assets
  35. #131491 Fix BigInteger to double conversion rounding on s390x
  36. #131133 Fix AV in ICorProfilerInfo2::GetClassLayout for Runtime Async continuation types
  37. #131110 Enable out-of-process tests for CoreCLR browser WASM
  38. #130640 Add ILLink coverage for unused virtual method annotations
  39. #130530 Reuse typical instantiation DispatchMap for generic instantiations
  40. #130481 Recognize bit-manipulation idioms and emit bzhi/bts/btc/btr/bt on xarch
  41. #129968 Add FreeBSD/powerpc64le (ppc64le) PAL and platform support
  42. #129690 Enable Helix Job Monitor for the runtime pipeline
  43. #129688 arm64: Optimize ARM64 compare mask ExtractMostSignificantBits consumers

#131825 Add cordbdi_universal static library with MSCORDBI_LINKS_PRIVATE_PAL defined

概要

MSCORDBI_LINKS_PRIVATE_PAL マクロ定義が最終的な mscordbi_universal ターゲットのみに適用されていため、プリコンパイル済みの cordbdi 静的ライブラリ内の cordb.cpp に到達していなかった問題に対応。Unix固有の cordbdi_universal 静的ライブラリを定義を有効にして新規ビルド・リンクし、CoreCLRCreateCordbObject3 が正しくプライベートPAL初期化パスを実行するように修正。既存の cordbdi はDACを通じてPALが必要なため変更なし。

変更内容

  • src/coreclr/debug/di/CMakeLists.txt: Unix環境向けの cordbdi_universal 静的ライブラリターゲットを新規追加し、MSCORDBI_LINKS_PRIVATE_PAL を定義(+8行)
  • src/coreclr/dlls/mscordbi_universal/CMakeLists.txt: Unix環境での cordbdi_universal 静的ライブラリへの依存関係を追加(+2/-1行)

パフォーマンスへの影響

影響なし

関連Issue

#131458

その他

内部実装の変更。デバッガインフラストラクチャ(cordbdi)のコンパイル時マクロ定義の適用順序を修正する追従対応。


#131808 Fix incorrect checks for CreateThread failure

  • 作成者: @janvorli
  • 作成日時: 2026年08月04日 14:17:02(UTC)
  • マージ日時: 2026年08月04日 22:57:38(UTC)
  • ラベル: area-VM-coreclr

概要

Windows APIのCreateThreadの失敗判定が複数箇所で誤っていた問題を修正しました。CreateThreadは失敗時にINVALID_HANDLE_VALUEではなくNULLを返すという仕様に合わせて、CoreCLR VMおよびPALテストコードの失敗判定を正しく修正しています。この誤りはメモリ制限環境でのテスト実行時に発見されました。

変更内容

  • src/coreclr/vm/gcenv.ee.cpp: ユーティリティスレッド作成失敗の判定をINVALID_HANDLE_VALUEからNULLに修正
  • src/coreclr/vm/excep.cpp: スタックオーバーフロー時のcreatedumpヘルパースレッド有効性判定をNULLに修正
  • src/coreclr/vm/eepolicy.cpp: スタックオーバーフロー時のトレーサーヘルパースレッド有効性判定をNULLに修正
  • src/coreclr/vm/threads.cpp: スレッド関連の失敗判定を修正
  • PALテストコード (CreateThread/test1、ExitThread/test1、ResumeThread/test1): CreateThreadの戻り値チェックをNULLに修正

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

本修正はランタイム内部実装(CoreCLR VM)の正確性向上に関するもので、公開APIには影響しません。Windows API仕様への準拠を改善し、メモリ制約環境でのスレッド作成失敗時の適切な処理を実現しています。


#131807 Change VOLATILE_MEMORY_BARRIER for x64 Unix

  • 作成者: @janvorli
  • 作成日時: 2026年08月04日 14:03:38(UTC)
  • マージ日時: 2026年08月04日 22:57:25(UTC)
  • ラベル: area-VM-coreclr

概要

x64 Unix環境において、VOLATILE_MEMORY_BARRIERマクロの実装を変更しました。従来の asm volatile ("" : : : "memory") から __atomic_signal_fence(__ATOMIC_SEQ_CST) に置き換えることで、HndWriteBarrier周辺でclangが生成していた不要なダミージャンプ命令を排除します。この変更はコンパイラバリアのみであり、副作用を回避しています。

変更内容

  • src/coreclr/inc/volatile.h: GCC/Clang環境のVOLATILE_MEMORY_BARRIERマクロをasm volatileから__atomic_signal_fenceに変更
  • src/coreclr/gc/env/volatile.h: GC環境での同様のマクロ定義を同期更新

パフォーマンスへの影響

コード生成の最適化により、HndWriteBarrier周辺のコード品質が改善されます。従来実装で生成されていた不要なダミージャンプ命令が削除されることで、わずかなコード体積削減が期待できます。

関連Issue

#130698

その他

なし


#131791 Avoid unbounded MemoryStream allocation when copying tar entry data

概要

System.Formats.Tarライブラリにおいて、copyData: true時にTarHeader.GetDataStreamCoreAsyncがtar headerの_sizeフィールドを検証せずにMemoryStreamを割り当てていた問題を修正しました。攻撃者が意図的に巨大なサイズを指定したmalformed tar entryを作成することで、OutOfMemoryExceptionを引き起こす可能性がありました。本修正により、seekableなストリームの場合、実際に利用可能なバイト数(archiveStream.Length - archiveStream.Position)と宣言されたサイズを比較し、超過時にはInvalidDataExceptionを即座にスローするようになります。

変更内容

  • TarHeader.Read.cs: seekableストリームの場合、メモリ割り当て前に宣言されたサイズが残りバイト数を超えないかを検証するロジックを追加。超過時はInvalidDataExceptionをスロー。
  • Strings.resx: 新しい例外メッセージリソース文字列TarSizeFieldExceedsStreamLengthを追加。
  • TarReader.GetNextEntry.Tests.cs: 実装データなしで異常に大きなサイズを宣言するtar headerに対し、GetNextEntry(copyData: true)がInvalidDataExceptionをスローすることを検証するリグレッションテストを追加。

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

本修正は公開API(TarReader.GetNextEntry)の動作を変更するもので、不正なtar archiveに対して以前は(メモリが尽きるまで)処理を続行していたのに対し、今後は例外をスローして即座に失敗するようになります。セキュリティ向上のための重要な修正です。


#131787 [mobile] Restore iOS device legs in runtime.yml

概要

iOS CI/CDパイプラインをiOSシミュレータ(iossimulator_arm64)から物理デバイス(ios_arm64)に戻すための変更。NativeAOTおよびCoresCLRのライブラリテストジョブの実行環境を物理デバイスに復帰させ、一時的な回避策に関するコメントを削除します。

変更内容

  • eng/pipelines/runtime.yml: NativeAOTおよびCoresCLR libraries-testジョブのiOS実行環境をiossimulator_arm64からios_arm64に変更
  • 一時的なシミュレータ回避策に関するコメントを削除
  • セクションヘッダーを「iOS devices」に更新

パフォーマンスへの影響

影響なし(CI/CDパイプラインの実行環境変更のため、ランタイムパフォーマンスへの直接的な影響なし)

関連Issue

#123796

その他

なし


#131781 [release/10.0] JIT: fix bit-test switch lowering when the bit table is inverted

概要

JIT の TryLowerSwitchToBitTest 関数における x64/xarch での miscompile を修正します。64ビット bit テーブルを 32ビット immediate に収めるため invert する際に、エッジスワップの位置が不正で、条件付きブランチが誤った successor にワイヤされていた問題を解決します。特に 64 ケースの switch で発生し、async state-machine dispatch(61 awaits/yields の async IAsyncEnumerable<T> など)で容易に再現される問題です。

修正前は iterator body が何百万回も再入され、frameless NullReferenceException が発生していました。

変更内容

  • src/coreclr/jit/lower.cpp: TryLowerSwitchToBitTest 内で bit テーブル inversion 時の処理を修正。ブロック参照の変更ではなく、case0Edge/case1Edge を直接スワップし、その後に bbCase0/bbCase1 を導出するよう順序を改善(-8/+8)
  • src/tests/JIT/Regression/JitBlue/Runtime_131716/Runtime_131716.cs: 回帰テスト追加。inverted(64ケース)と non-inverted 両方の bit テーブル形状をカバー(+186)
  • src/tests/JIT/Regression/JitBlue/Runtime_131716/Runtime_131716.csproj: テスト用プロジェクトファイル追加(+9)

パフォーマンスへの影響

影響なし(バグ修正であり、パフォーマンス改善ではない)。SPMI テスト(~660K contexts)で asm diffs なし。

関連Issue

#131736、#131716

その他

  • リグレッション: .NET 10 の #116933 で導入。従来の fgRemoveAllRefPreds/fgAddRefPred ペア(edge を再導出)から、in-place dup-count 調整への変更時に、エッジスワップの処理が漏れていた
  • リスク評価: Low
  • 影響範囲: JIT コンパイラ(内部実装)。公開 API への影響なし

#131775 Don't suggest GPT-5.3-codex for code review skill

  • 作成者: @jtschuster
  • 作成日時: 2026年08月03日 21:31:14(UTC)
  • マージ日時: 2026年08月04日 16:26:57(UTC)
  • ラベル: area-skills

概要

dotnet/runtimeのcode-reviewスキル設定において、古いGPTコデックスバージョン(GPT-5.3-codex)への推奨指定を削除するドキュメント更新です。デフォルト動作がすでに5.6を優先するため、明示的な推奨は不要と判断されました。

変更内容

  • .github/skills/code-review/SKILL.md: GPT-5.3-codefxの推奨指定を削除(+1行/-1行)
    • gpt-5.4のブロック指定は信頼性/タイムアウト問題のため保持
    • 一般的な「codex + 最新バージョン優先」ルールは維持

パフォーマンスへの影響

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

関連Issue

なし

その他

なし


#131769 Restore stress guards on process-isolated IL tests

  • 作成者: @EgorBo
  • 作成日時: 2026年08月03日 20:35:05(UTC)
  • マージ日時: 2026年08月04日 01:15:36(UTC)
  • ラベル: area-CodeGen-coreclr

概要

プロセス分離で実行されるILテストに対して、[SkipOnCoreClr]属性では適切に機能しなかったJIT最適化とGCストレス保護を復元するための修正です。PR #126108でMSBuildプロパティから属性への移行が行われましたが、<RequiresProcessIsolation>を持つILテストではこの保護が無視されていました。該当する2つのテストに<JitOptimizationSensitive>と<GCStressIncompatible>のMSBuildプロパティを復元し、属性との併用により保護を確保しています。

変更内容

  • arrres_il_r.ilproj: <JitOptimizationSensitive>プロパティを追加。tier-0/minopts/JIT stress環境でのテストスキップを実装。
  • b143840.ilproj: <GCStressIncompatible>プロパティを追加。GCストレス環境でのテストスキップを実装。
  • 両ファイルに、プロセス分離の継続によりプロパティが必須である旨のコメント追加。

パフォーマンスへの影響

影響なし。(本変更はテスト実行時の保護メカニズムの復元であり、ランタイムパフォーマンスに影響しません)

関連Issue

#131447、#126108

その他

根本原因:プロセス分離+IL テストの組み合わせでは、ジェネレータが属性ベースのスキップガードを生成せず、MSBuildプロパティのみが有効でした。arrres_il_rの場合、unoptimized codegen下でTest オブジェクトがスタックスロットに留まり、ファイナライズされない状況が発生していました。全16個のILテストをレビューした結果、この問題は当該2テストのみに該当することを確認済みです。


#131762 JIT: bail out of CEA cloning if alloc block has multiple successors

概要

JIT の Conditional Escape Analysis (CEA) クローニング時に、アロケーションブロックが複数の後続ブロックを持つ場合にベイルアウトするガードを追加しました。Tiered PGO 最適化時にアロケーションブロックが定義ブロックと融合し、クローニング処理が正しく動作しないケースに対応します。Issue #131713 で報告されたオブジェクトスタックアロケーションの失敗を修正します。

変更内容

  • src/coreclr/jit/objectalloc.cpp: ObjectAllocator::CheckCanClone にガードを追加し、アロケーションブロックが単一のリダイレクト可能な後続エッジを持つ場合にのみクローニングを実行するよう制限
  • src/tests/JIT/opt/ObjectStackAllocation/Runtime_131713.cs: Tiered Compilation + Tiered PGO 環境で XmlSerializer.Serialize を繰り返し実行する回帰テストを追加
  • src/tests/JIT/opt/ObjectStackAllocation/Runtime_131713.csproj: TieredCompilation/TieredPGO を有効化する環境変数設定を含むテストプロジェクト設定を追加

パフォーマンスへの影響

影響なし。本変更は不正なクローニングを防止するセーフガードのため、むしろメモリ安全性と正確性を向上させます。

関連Issue

#131713

その他

  • 変更対象は JIT の内部実装(ランタイムコンパイラ)です
  • GDV(Guarded Devirtualization)最適化が先行して実行される場合の、CEA クローニングの副作用に対する防御的な修正です
  • 公開 API への影響なし

#131759 Accept moving write buffers for socket-bound TLS sessions

  • 作成者: @rzikm
  • 作成日時: 2026年08月03日 17:21:57(UTC)
  • マージ日時: 2026年08月04日 11:01:00(UTC)
  • ラベル: area-System.Net.Security

概要

ソケットバウンドの TlsSocketSession で、GC によるバッファ再配置時に write 再試行が失敗する問題を修正します。OpenSSL の SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER モードを fd-バウンドの SSL オブジェクトで有効化し、SSL_write の再試行時にメモリアドレス変更に対応できるようにします。

// 修正前の問題シナリオ:
// 1. SSL_write が WANT_WRITE (DestinationTooSmall) を返す
// 2. GC がバッファを再配置
// 3. 再試行時に "bad write retry" エラーで失敗

// 修正後:
// SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER を有効化することで
// アドレス比較をスキップし、再試行に成功

変更内容

  • pal_ssl.h/pal_ssl.c/entrypoints.c: CryptoNative_SslSetAcceptMovingWriteBuffer 新規シムを追加し、OpenSSL の SSL_set_mode 経由で SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER フラグを設定
  • Interop.Ssl.cs: LibraryImport で新しいネイティブ関数をインポートし、SafeSslHandle.Create 内で fd-バウンド セッション (useFd=true) のみ呼び出し
  • TlsSessionTests.cs: socket send バッファを満杯にして WANT_WRITE を誘発し、異なるアドレスのバッファでの再試行(クローン済みバッファおよび強制 GC 後の同一配列)が成功することを検証する新規テスト

パフォーマンスへの影響

影響なし。本修正は OpenSSL のアドレス検証をスキップするのみで、保留中レコードはフラッシュされ、再試行バッファの内容が再読み込みされることはありません。

関連Issue

#131759

その他

  • SslStream の BIO パスは変更なし(BIO はオンデマンド拡張され WANT_WRITE を報告しない)
  • ローカル Linux/x64 での検証: 修正なしでは両テストケースで "bad write retry" エラー、修正適用で両ケース合格
  • TlsSessionTests: 47/47 パス、System.Net.Security.Tests: 5034 パス、0 失敗、8 スキップ

#131758 Fix SslAuthenticationOptions incorrectly disposing unowned IntermediateCertificates

概要

SslAuthenticationOptions.UpdateOptionsメソッドのバグを修正しました。呼び出し元が提供したServerCertificateContextで以前の自己所有コンテキストを置き換える際に、OwnsCertificateContextフラグをfalseにリセットしていなかったため、後続のDispose()呼び出しで呼び出し元のコンテキストが誤って破棄され、中間証明書が削除されるという問題がありました。

変更内容

  • SslAuthenticationOptions.cs — UpdateOptionsメソッドのServerCertificateContext != null分岐:

    • 以前所有していたコンテキストをリリースしてリソースリークを防止
    • OwnsCertificateContextをfalseに設定し、Dispose()が呼び出し元のコンテキストに影響しないようにする
  • SslAuthenticationOptionsTests.cs — 回帰テストを追加(ECDsa P-256証明書使用):

    • 2回のUpdateOptions呼び出し(通常証明書→呼び出し元コンテキスト)をシミュレート
    • OwnsCertificateContext == falseであることと正しいコンテキストが設定されていることを検証
    • 以前所有していたコンテキストの中間証明書が破棄されたことを確認(Handle == IntPtr.Zero)
    • Dispose()後も呼び出し元の中間証明書が残存していることをExport()で検証

パフォーマンスへの影響

影響なし

関連Issue

#131748

その他

互換性への影響: この修正は既存の誤った動作を修正するもので、以前は問題のあったDispose()時の呼び出し元コンテキストの破棄動作が改善されます。

注記: レビューコメントでテストの強化が提案されており、テスト内でcallerContext.ReleaseResources()を最終的に呼び出してネイティブハンドルを確実に解放することが推奨されています。


#131757 [release/10.0] Fix flaky MalformedPacketsDuringHandshake test

概要

release/10.0ブランチのMalformedPacketsDuringHandshakeテストの不安定性を修正するバックポートです。テストをTLS 1.2の再交渉シナリオに固定し、オフラインCI環境での証明書チェーン検証による失敗を回避するよう改善しました。mainブランチで既にマージ済みの修正(#130756)と同一の変更です。

変更内容

  • SslStreamStreamToStreamTest.cs
    • テスト名をMalformedPacketsDuringHandshake_ThrowsAuthenticationExceptionからMalformedPacketsDuringRenegotiation_ThrowsAuthenticationExceptionに変更
    • クライアント・サーバー両側でSslProtocols.Tls12を強制指定し、TLS 1.3のポストハンドシェイク認証ではなくTLS 1.2の再交渉をテスト対象に
    • 両側でCertificateRevocationCheckMode = X509RevocationMode.NoCheckを設定し、オフラインCI環境での証明書チェーン構築・失効確認ルックアップによるPartialChainエラーを回避

パフォーマンスへの影響

影響なし

関連Issue

#130887 #130756(mainブランチの修正元PR)

その他

  • テストコードのみの変更であり、製品コードへの影響はなし
  • MSRC 115387の修正は既にブランチに含まれており、このPRはテストの不安定性の修正のみ
  • リスク評価:低(テストのみ、既にmainで検証済み)

#131755 Disable TLS resume in SslStreamServer_RejectsClientCert_ClientObservesAlert

  • 作成者: @rzikm
  • 作成日時: 2026年08月03日 16:18:15(UTC)
  • マージ日時: 2026年08月04日 11:55:02(UTC)
  • ラベル: area-System.Net.Security

概要

SslStreamServer_RejectsClientCert_ClientObservesAlert(protocol: Tls12) テストのCI flakiness(月間44回の失敗)を修正するため、TLSセッション再開を無効化して完全ハンドシェイクを強制するもの。セッション再開時は証明書交換がなくなるため、クライアント側の例外タイミングが変わる問題を解消しています。

変更内容

  • src/libraries/System.Net.Security/tests/FunctionalTests/TlsSessionTests.cs
    • SslStreamServer_RejectsClientCert_ClientObservesAlert テスト内で、サーバー側・クライアント側の両方の認証オプションに AllowTlsResume = false を設定
    • 完全ハンドシェイク強制による動作の安定化とその理由をコメントで記載

パフォーマンスへの影響

テストコードの変更のため、プロダクション実行時のパフォーマンスへの影響なし。テスト実行時はセッション再開が無効化されるため、若干の実行時間増加の可能性があるが、テスト信頼性向上を優先。

関連Issue

#131330

その他

  • 根本原因: OpenSSL/TLS 1.2では、省略ハンドシェイク(セッション再開)では証明書交換が発生せず、サーバー側のRemoteCertificateValidationCallback実行前にFinishedメッセージが送信される。このため、クライアント例外のタイミングが「ハンドシェイク中」から「最初の暗号化I/O時」に変わる標準的なプロトコル動作。
  • キャッシング機構: OpenSSLのSSL_CTXキャッシュが「証明書thumbprint+プロトコル+isClient」でキー化されるため、並列実行中の他テストがセッションキャッシュを汚染することで失敗が負荷・実行順序に依存する。
  • 検証済み: フル実行(5032テスト)での失敗再現、セッションキャッシュプライミング実験での根本原因確認、修正後16回以上の実行で再現なし。
  • 他の類似テスト: 領域内の17テストを監査し、他はランダム/不在のTargetHostやコールバック設計により同問題の影響を受けない。

#131754 JIT: Avoid unnecessary argument spills in indirect call transformer

概要

JITコンパイラの間接呼び出し変換ロジックを改善し、ガード付き変換で呼び出しを分割する際に、不変な引数(定数、GT_LCL_ADDR、GT_FTN_ADDR)を一時変数にスピルしないようにします。これにより、GT_LCL_ADDRなどの引数がGT_LCL_VAR一時変数に書き換えられるのを防ぎ、ダウンストリームの形状期待に合わせてアサート失敗を回避します。

変更内容

  • src/coreclr/jit/indirectcalltransformer.cpp: IndirectCallTransformer::Transformer::SplitCallメソッドで、使用がサイド効果なし/アドレス公開の場合のみスピルを行うように変更。不変な式(GenTree::IsInvariant()を満たす)についてはスピル処理をスキップ。

パフォーマンスへの影響

不必要な一時変数生成を削減することで、レジスタ圧力を軽減し、コード生成の効率を改善する可能性があります。具体的なベンチマーク数値は提供されていません。

関連Issue

#131665

その他

なし


#131751 Fix IsSupported unit test for Android's X25519 implementation

概要

Android上のX25519実装のユニットテストを修正します。Android API 33未満では、Conscryptが帯域外更新を通じてXDHサポートを提供する可能性があるため、IsSupported_AgreesWithPlatformテストが固定的なサポート期待値を主張しないように対応しました。

変更内容

  • src/libraries/Common/tests/System/Security/Cryptography/X25519DiffieHellmanImplementationTests.cs
    • Android API 33未満での早期リターンガードを追加し、これらのOS バージョンではサポート値がtrueまたはfalseのいずれでも受け入れられるようにしました
    • Android API 33以上ではサポートが報告されるという既存の期待値を維持しています

パフォーマンスへの影響

影響なし

関連Issue

#131633

その他

本変更はテストのみの修正であり、ランタイムやライブラリの実装に変更を加えるものではありません。Android上での暗号化ライブラリの動作には影響しませんが、テストの信頼性を向上させます。


#131749 JIT: Handle op1 struct-values in commas in physical promotion

概要

JIT の物理的昇格(Physical Promotion)において、コンマ式の op1(左オペランド)が構造体ローカル変数の場合、そのローカル変数は効果的なユーザーを持たないため処理をスキップするよう改善。また、インポーター(importer)で副作用のないオペランドに対する不要な gtUnusedValNode の生成を回避します。

変更内容

  • promotion.cpp: 物理的昇格時にコンマ式の op1 が構造体ローカル変数である場合、アサーションが発生していた問題を修正(+7/-2)
  • importer.cpp: インポーター内で副作用のないオペランドに対する不要な gtUnusedValNode の生成を削減(+7/-4)

パフォーマンスへの影響

影響なし(コンパイル時の不要な処理削減による軽微な改善の可能性はありますが、具体的なベンチマーク数値の記載なし)

関連Issue

#131664

その他

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


#131739 [Mono]: Fix InvalidCastException for enum nested in a generic type on Mono

  • 作成者: @lateralusX
  • 作成日時: 2026年08月03日 13:25:33(UTC)
  • マージ日時: 2026年08月04日 18:53:22(UTC)
  • ラベル: area-VM-meta-mono

概要

Mono ランタイムで、ジェネリック型にネストされたEnum(例:GenericClass<T>.NestedEnum)に対する InvalidCastException を修正しました。当該Enumはインフレート型で byval_arg->type が MONO_TYPE_GENERICINST になるため、従来の MONO_TYPE_VALUETYPE チェックのみでは認識されず、Array.Copy、Array.SetValue、Enum.GetValues<T>() が失敗していました。クラスフラグと mono_class_enum_basetype_internal を利用してEnum判定を拡張し、MONO_TYPE_GENERICINST にも対応しました。

変更内容

  • src/mono/mono/metadata/icall.c: array_set_value_impl 関数の列挙型検出ロジックを改善。クラスフラグ m_class_is_enumtype から直接Enum判定し、MONO_TYPE_VALUETYPE と MONO_TYPE_GENERICINST の両方に対応するよう拡張。
  • src/libraries/System.Runtime/tests/System.Runtime.Tests/System/ArrayTests.cs: 回帰テストを49行追加。コピー方向、プリミティブ型の拡張、Enum.GetValues<T>()、Array.SetValue などをカバーし、参照型・値型の両ジェネリック引数で検証。

パフォーマンスへの影響

影響なし

関連Issue

#116462

その他

なし


#131736 JIT: fix bit-test switch lowering when the bit table is inverted

  • 作成者: @EgorBo
  • 作成日時: 2026年08月03日 12:49:28(UTC)
  • マージ日時: 2026年08月04日 01:15:54(UTC)
  • ラベル: area-CodeGen-coreclr

概要

JITのビットテストスイッチ最適化において、ビットテーブルが反転される場合の制御フロー処理のバグを修正しました。反転時に分岐ターゲットのスワップが不完全だったため、条件分岐が誤ったブロックへ接続されていました。修正により、エッジを正しくスワップしてからブロックを再導出するように改善しました。

変更内容

  • src/coreclr/jit/lower.cpp: ビットテーブル反転時の制御フロー処理を修正

    • エッジのスワップと後続ブロック処理の順序を修正
    • case0Edge/case1EdgeとbbCase0/bbCase1の同期を確保
  • テスト追加: 64ケース分岐を含む回帰テストを新規追加

    • Runtime_131716.cs: ビットテスト最適化が正しく動作することを検証

パフォーマンスへの影響

SPMI検証により660K規模のコンテキスト(benchmarks.run、libraries.pmi、libraries.crossgen2)でアセンブリ差分なし。パフォーマンス低下なし。

関連Issue

#131716 回帰元: #116933

その他

このバグは64ビットテーブルエントリを持つスイッチのみに影響します。32ビット以下のテーブルではビットカウント以上の上位ビットがゼロのため、反転テーブルがUINT32_MAXを超過し反転が発生しないためです。

修正例(64ケース、インデックス1-3 → 111の場合):

  • 修正前: jae (ビット未設定時にジャンプ) で誤った制御フロー
  • 修正後: jb (ビット設定時にジャンプ) で正しい制御フロー

#131733 Compile ref-assemblies with updated-memory-safety-rules

概要

ref-assemblyプロジェクトでupdated-memory-safety-rulesコンパイラ機能を有効化し、承認されたAPI提案に基づいて複数のAPIをunsafe(caller-unsafe)として注釈付けします。メモリ安全性ルールに準拠したAPIサーフェスの更新が目的です。

変更内容

  • ref-assemblyプロジェクト設定: 複数のref-assemblyプロジェクト(System.Runtime、System.Runtime.InteropServices、System.Runtime.Intricsics、System.Numerics.Vectors、System.Security.Cryptographyなど)でupdated-memory-safety-rulesを有効化し、必要に応じてAllowUnsafeBlocksを有効化
  • API注釈の追加: 以下の承認されたAPI提案に基づいてメンバーにunsafe修飾子を追加:
    • GC、RuntimeHelpers、Unsafe、MemoryMarshal関連API(#126956、#127098、#128075)
    • ポインタベースおよびハンドルベースのInterop/CryptoAPI(#129750、#129751)
    • Vector操作API(CreateScalarUnsafe、LoadUnsafe、StoreUnsafeなど)
    • Marshal、COM関連API、暗号化・X509関連API
  • 部分的な実装: SafeHandleやArrayPool/MemoryPoolの全体的なマイグレーションは見送り

パフォーマンスへの影響

影響なし

関連Issue

#126956、#127098、#128075、#129750、#129751

その他

  • 本PR は ref-assembly(メタデータのみ)の変更のため、実装コードへの影響はありません
  • 公開APIの安全性コントラクト更新に該当し、呼び出し元がunsafeコンテキストを必要とすることを明示します
  • 完全な移行にはソースコード全体への大規模な変更とarcadeの genAPIツール修正が必要とされています

#131728 Fix MemoryCache concurrency tests

概要

MemoryCacheの3つの競合状態テスト(GetAndSet_AreThreadSafe_AndUpdatesNeverLeavesNullValues、OvercapacityPurge_AreThreadSafe、AddAndReplaceEntries_AreThreadSafe)を修正し、2022年以来無効化されていたテストを再度有効化します。

問題の根本原因は、非同期オーバーキャパシティコンパクション中に期待値がスナップショット化されてしまい、再試行ループで再評価されなかった点です。修正では、AssertEventuallyヘルパーメソッドを追加し、再試行時に毎回すべての値を再読み込みするようにしました。

変更内容

  • MemoryCacheSetAndRemoveTests.cs: 3つの無効化されたテストを再度有効化。期待値を定数化し、AssertCacheSizeの呼び出し方を修正(cache.Countを毎回評価するのではなく定数値を渡す)
  • CapacityTests.cs: 新しいAssertEventually(Action)ヘルパーメソッドを追加。このメソッドは再試行時にコールバック内のすべての値を再読み込みします。既存のAssertCacheSizeはこのヘルパーを使用するよう委譲し、期待値は定数である必要があることを警告するコメントを追加
  • CacheEntry.cs: 軽微な調整(+5/-3)

パフォーマンスへの影響

影響なし

関連Issue

#72890、#129897(前回のランディング)、#130152(リバート)、#130139(CI失敗)

その他

このPRは#129897の再ランディング版です。#129897は非同期コンパクション中のスナップショット問題により失敗し、リバートされていました。診断には、スナップショット化されたCountと毎回再評価するCountを比較するハーネステストが用いられ、前者は150ラウンド中8~30回失敗、後者は0回という結果で修正の有効性が実証されています。


#131690 [cDAC] Implement IXCLRDataValue APIs

  • 作成者: @rcj1
  • 作成日時: 2026年08月01日 01:46:52(UTC)
  • マージ日時: 2026年08月04日 17:03:15(UTC)
  • ラベル: area-Diagnostics-cdac

概要

cDAC(Compact DAC)の IXCLRDataValue インターフェースを拡張し、値の検査に関連する複数のAPIを実装します。配列データに関連して、IObject.GetArrayData コントラクトを修正し、配列の次元長と下限値を返すように変更しました。これにより、デバッガツールが配列構造をより詳細に検査できるようになります。

変更内容

  • IObject.GetArrayData コントラクト署名変更:既存の4つの out パラメータに加えて、out uint[] dimensionLengths と out int[] lowerBoundsValues を新規追加(破壊的変更)
  • ClrDataValue クラスの実装拡張:以下の IXCLRDataValue メンバーを E_NOTIMPL から実装に変更
    • GetType:値の型情報取得
    • GetAssociatedValue/GetAssociatedType:関連する値・型の取得
    • GetString/GetStringLength:文字列値の読取
    • GetArrayProperties/GetArrayElement:配列プロパティと要素アクセス
    • EnumField:フィールド列挙
  • ClrDataTypeInstance:ITypeHandle を保存してレガシー比較と型情報の供給をサポート
  • ClrDataFrame:メタデータシグネチャから ITypeHandle を解決して値の型付けを改善
  • SignatureTypeProvider:MethodDescHandle コンテキストからジェネリック型パラメータ解決を追加
  • Object_1.GetStringValue:stackalloc から byte[] ヒープ割り当てに変更(バッファサイズ上限制約の改善)
  • テスト追加:IXCLRDataValue の関連値、フィールド列挙、配列プロパティ・要素に対応したダンプテストを追加

パフォーマンスへの影響

懸念点:

  • GetArrayData にて dimensionLengths と lowerBoundsValues 配列を常に割り当てるため、呼び出しごとにヒープ割り当てが増加
  • GetStringValue が stackalloc から byte[] ヒープ割り当てに変更されたため、短い文字列の場合のパフォーマンスは低下する可能性
  • EnumField で nameBufLocal を呼び出し元の nameBufLen サイズで常に割り当てするため、大きなバッファ要求時にメモリ浪費の可能性

関連Issue

なし

その他

互換性に関する注意:

  • IObject.GetArrayData の署名変更は、外部コンシューマーまたは既存のコントラクト実装にとってソースレベルの破壊的変更です
  • Copilot の指摘では、null ポインタ検証の不足、バッファサイズの検証不足など、いくつかの潜在的な問題が指摘されています(特に GetArrayProperties と GetArrayElement で呼び出し元からの null ポインタがチェックされていない)
  • ドキュメント(docs/design/datacontracts/Object.md)で GetStringValue が stackalloc を使用していると記述されていますが、実装は byte[] に変更されており、ドキュメントと実

#131688 JIT: elide redundant wasm Virtual IP updates

概要

WebAssembly JITコンパイラにおいて、Virtual IP(仮想命令ポインタ)のフレームストア操作を最適化します。同一の例外処理(EH)領域内の連続ブロックでは冗長な更新が発生していたため、前向きデータフロー解析を実施して、必要な場合のみストアを発行するように改善。System.Private.CoreLibのWasm R2Rコードセクションを約1.76 MB削減(約9.7%削減)。

変更内容

  • src/coreclr/jit/fgwasm.cpp: Virtual IP管理ロジックを刷新
    • リージョン/ブロック走査時に、ブロックごとの必要Virtual IPとストア要否を記録
    • 前向きデータフロー解析(DataFlow::ForwardAnalysis)を実施して、各ブロックの入力パスで利用可能なVirtual IPを計算
    • availableIn != requiredVipの場合のみストアを発行
    • DataFlow::ForwardAnalysis後にDFS木を無効化し、後続のWASMフェーズが独自の走査データを再計算するよう強制

パフォーマンスへの影響

  • コード生成サイズ削減: System.Private.CoreLibのWasm R2Rコードセクションで約1.76 MB(約9.7%)削減
  • 冗長なメモリストア操作の削減により、実行時パフォーマンス向上の可能性あり
  • 改善はWASM R2R生成時に適用されるため、WASM環境でのコード効率が向上

関連Issue

なし

その他

この変更はWASMランタイム固有の内部最適化であり、公開APIへの影響はありません。JITコンパイラの最適化フェーズに関連する内部実装の改善です。


#131683 Remove ClassSupportsIClassX which always returns true

  • 作成者: @Copilot
  • 作成日時: 2026年07月31日 23:10:42(UTC)
  • マージ日時: 2026年08月04日 05:26:11(UTC)
  • ラベル: area-Interop-coreclr

概要

ClassSupportsIClassX関数は常にTRUEを返すスタブであり、全ての呼び出しサイトがデッドコードまたはノーオペレーションになっていました。この関数と関連するenum_SupportsIClassX列挙値を削除し、呼び出しサイトを簡潔に整理しました。COM相互運用性レイヤーの不要なコード削減を目的とした内部実装の整理です。

変更内容

  • src/coreclr/vm/class.cpp: enum_SupportsIClassX列挙値の定義を削除
  • src/coreclr/vm/comcallablewrapper.cpp: ClassSupportsIClassX()関数呼び出しの削除と関連ロジックの簡潔化(35行追加、89行削除)
  • src/coreclr/vm/comcallablewrapper.h: ClassSupportsIClassX関数宣言の削除
  • src/coreclr/vm/interoputil.cpp/h: 不要なサポート関数・定義の削除
  • src/coreclr/vm/stdinterfaces.cpp: インターフェース処理ロジックの調整

パフォーマンスへの影響

影響なし。削除された関数は常に真を返すスタブであり、実質的なロジック変化がない整理です。

関連Issue

#131683

その他

  • 変更対象は内部実装(COM相互運用性レイヤー)のみで、公開APIへの影響なし
  • レビュアーのCopilotによるコメントで、GetClassComMT()に対してインターフェーステンプレートへの誤った呼び出しを早期に検出するための明示的な契約前提条件を追加することが提案されています

#131681 Fix profiler ReJIT of Runtime Async method bodies

概要

ランタイムの非同期メソッドに対するプロファイラーのReJIT機能が機能していない問題を修正しました。非同期メソッドのmdMethodDefがTask返却用のサンク(thunk)に解決されるため、実際に実行される非同期バリアント(async variant)のネイティブコードが再発行されず、ReJITが効果を持たなかった問題を解決しています。修正後、プロファイラーが既にJITされた非同期メソッドをReJITして戻り値の文字列を書き換えると、正しく再コンパイルされた新しい値が返されるようになります。

変更内容

  • codeversion.cpp/h: CodeVersionManager::SetActiveILCodeVersions内で非同期サンクMethodDescを検出し、ネイティブコードのパブリッシュ前に非同期バリアントへリダイレクト処理を追加(MethodDesc::ResetCodeEntryPointForEnCの既存処理に相応)
  • methoditer.cpp/h: 非同期バリアント取得用のイテレーター機能を追加
  • rejitprofiler.cpp/h: 既にJITされた非同期メソッドのReJITテストケースを追加
  • rejit.cs/csproj: テスト用のC#テストケースを追加

パフォーマンスへの影響

影響なし

関連Issue

#128944

その他

  • 修正はGC_NOTRIGGER経路内の安全なno-create/no-GC lookupを使用
  • 非同期メソッドのReJITではRequestReJITWithInlinersがS_OKを返すようになり、GetReJITParametersとReJITCompilationStartedが実行メソッドに対して呼び出されるようになります
  • 通常の非同期以外のReJIT機能は影響を受けません

#131672 Fix Tar cleanup one-liners

概要

System.Formats.Tarライブラリにおける2つのバグ修正:

  1. TarEntry.Windows.csのExtractAsBlockDevice/ExtractAsCharacterDeviceメソッド内のDebug.Assert文が常に同じ型をアサートしていた不具合を修正
  2. TarHeader.Write.csのGetTotalDataBytesToWrite()メソッドの可視性をpublicからinternalに変更し、内部APIとして統一

変更内容

  • TarEntry.Windows.cs: ExtractAsBlockDeviceとExtractAsCharacterDeviceの各メソッドで、それぞれ異なる型(BlockDevice/CharacterDevice)をアサートすべきところを、同じ型をアサートしていたバグを修正(+2/-2行)
  • TarHeader.Write.cs: GetTotalDataBytesToWrite()メソッドのアクセス修飾子をpublicからinternalに変更し、内部sealed型のヘルパーメソッドとしての統一性を確保(+1/-1行)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

TarHeader.Writecsの変更は公開APIの縮小を含む破壊的変更となる可能性がありますが、GetTotalDataBytesToWrite()は内部的なヘルパーメソッドであり、公開APIとしての公式サポートがない実装の統一化と考えられます。


#131668 Wasm: stop R2R stack walk at reverse-pinvoke frames

概要

WASM環境におけるR2R(Ready2Run)スタックウォークがリバースP/Invoke境界を超えて管理対象外メモリを走査する問題を修正しています。リバースP/Invoke呼び出し(ネイティブコードから管理コードへの呼び出し)の境界で、スタックウォークを適切に終了させることで、ネイティブ呼び出し元のスタックポインタを管理対象フレームとして誤って解釈することを防ぎます。

変更内容

  • src/coreclr/vm/wasm/helpers.cpp: WasmUnwindStackFrameCore関数を拡張
    • リバースP/Invoke境界を検出時に、呼び出し元IPを未設定のままにする機能を追加
    • GC情報(DECODE_REVERSE_PINVOKE_VAR)を使用してリバースP/Invoke フレームを識別
    • ネイティブ境界でR2Rウォークを終了させるロジックを実装

パフォーマンスへの影響

影響なし

関連Issue

#131493(SPC R2R有効化に関連) #131668

その他

  • WASM環境での例外処理やスタック走査の信頼性向上に寄与する変更
  • リバースP/Invoke境界での予期しない動作を防ぐためのランタイム内部実装の修正

#131634 Fix mono handling of SwiftError

  • 作成者: @vcsjones
  • 作成日時: 2026年07月31日 10:06:56(UTC)
  • マージ日時: 2026年08月04日 15:42:08(UTC)
  • ラベル: area-Codegen-JIT-mono

概要

MonoランタイムのSwiftError呼び出し規約処理に関するバグを修正します。x64ではスタック溢れ時にSwiftErrorのスタック位置を誤認識し、ARM64では最初のスタック引数をレジスタ渡しと誤認識していました。修正内容は、SwiftErrorが元々レジスタで渡されたかをフラグで記録することで、スタックオフセット値からの推測ではなく明示的に位置を判定します。x64ではスタック渡しのSwiftErrorに対してフレームポインタ省略を無効化し、スタックスロットがアドレス指定可能に保ちます。

変更内容

  • src/mono/mono/mini/mini-amd64.c: SwiftError引数分類時にswift_error_in_regフラグを記録し、スタック溢れ時の誤認識を防止。スタック渡し時はフレームポインタ省略を無効化
  • src/mono/mono/mini/mini-amd64.h: swift_error_in_regフラグをArgInfoに追加
  • src/mono/mono/mini/mini-arm64.c: ARM64で同様にswift_error_in_regフラグを記録してオフセット値=0の曖昧性を解消
  • src/mono/mono/mini/mini-arm64.h: swift_error_in_regフラグをArgInfoに追加
  • テストファイル: Swift相互運用テストに新しい関数を追加(最初のスタックスロット配置シナリオおよび複数2語構造体+1語スカラー引数の混合register/stack渡しケース)

パフォーマンスへの影響

スタック渡しSwiftErrorに対するフレームポインタ省略の無効化により、特定のシナリオでコード生成が変わる可能性があります。詳細なパフォーマンス測定値は提供されていません。

関連Issue

#131630(このPRで検出されたケース) #103043(先行修正の不完全性を指摘)

その他

  • このPRは#103043のフォローアップです
  • 修正内容は内部ランタイム実装(Monoコンパイラバックエンド)の変更で、公開APIに対する互換性への影響はありません
  • 提供されたテストはmacOS x64で検証済みです

#131623 Add JsonPolymorphicAttribute.InferClosedTypePolymorphism

概要

JsonPolymorphicAttributeに新しいプロパティInferClosedTypePolymorphismを追加し、型レベルでの多態性推論を制御できるようにします。既存の全局的なJsonSerializerOptions.InferClosedTypePolymorphismと異なり、この属性プロパティは特定の型宣言のみに推論を適用でき、ライブラリが消費者に全局スイッチを強制することなく自身の階層に推論を採用できます。

[JsonPolymorphic(InferClosedTypePolymorphism = true)]
closed record Shape
{
    public record Circle(double Radius) : Shape;
    public record Square(double Length) : Shape;
}

変更内容

  • 公開API追加: JsonPolymorphicAttribute.InferClosedTypePolymorphismプロパティを追加(参照アセンブリ及び実装に対応)
  • リフレクション resolver: 型レベルのオーバーライド意味論を実装し、明示的な値が全局設定を上書き
  • ソースジェネレータ: 新しい診断コードSYSLIB1243(エラー)とSYSLIB1244(警告)を追加
    • SYSLIB1243: closedでない型にInferClosedTypePolymorphism = trueを設定した場合のエラー
    • SYSLIB1244: 型レベル推論オプトインと明示的な[JsonDerivedType]登録の組み合わせに関する警告
  • エラーメッセージ: ローカライズされた実行時エラーメッセージを複数言語で追加
  • テスト: リフレクション及びソースジェネレーション両方の動作テスト、ジェネレータ診断テストを追加

パフォーマンスへの影響

影響なし

関連Issue

#130809

その他

  • 属性プロパティはboolとして公開されていますが、内部的にはbool?でサポートされており、明示的な値が常に全局設定に優先します(InferClosedTypePolymorphism = falseによる型単位のオプトアウトを含む)
  • 明示的な[JsonDerivedType]登録は推論より優先されます
  • 既存の空の[JsonPolymorphic]宣言に対する「少なくとも1つの派生型を指定すべき」エラーは引き続き適用されます
  • 属性の未設定プロパティはフィールドに触れないため、参照アセンブリの変更は不要です
  • 包括的なテストカバレッジ: System.Text.Json.Tests(53,508テスト)、SourceGeneration関連テスト(11,777テスト以上)

#131593 Add getter-only configuration binding parity tests

概要

Configuration Bindingのgetter-only プロパティに対する共有リフレクション/ソースジェネレータのパリティテストを追加します。getter-only のネストされたオブジェクト、コレクション、抽象型プロパティを対象に、既存値が非null/nullの両シナリオで、既存インスタンスへのバインディングが機能し、nullプロパティが無視されることを検証します。

変更内容

  • ConfigurationBinderTests.TestClasses.cs: ClassWithGetterOnlyProperties テストモデル型を追加。getter-only なネストオブジェクト/コレクション/抽象型プロパティを含む。
  • ConfigurationBinderTests.cs: getter-only プロパティのバインディング動作を検証する[Fact]テスト2つを追加。既存インスタンス(非null)へのバインディングとnullプロパティの無視を確認。

パフォーマンスへの影響

影響なし(テストコード追加のみ)

関連Issue

#131045のレビューコメントで要求されたテスト

その他

このプルリクエストはGitHub Copilotで作成されました。テストの共有リフレクション/ソースジェネレータ間でのパリティ確保を目的としており、Configuration Bindingの既存の動作仕様に基づく機能追加です。


#131588 Enforce required Negotiate mutual authentication

  • 作成者: @wfurt
  • 作成日時: 2026年07月30日 13:49:37(UTC)
  • マージ日時: 2026年08月04日 12:59:13(UTC)
  • ラベル: area-System.Net.Security

概要

NegotiateAuthentication クラスに RequireMutualAuthentication が明示的に有効な場合の相互認証検証を実装しました。NTLM は一貫して相互認証されていないと報告されるようになり、Windows 上の SSPI が不正なコンテキストフラグを公開する場合にも対応します。NegotiateStream は保護されたセッションの相互認証要求は継続しますが、交渉結果を受け入れることで NTLM フォールバック互換性を維持します。

変更内容

  • NegotiateAuthentication.cs: RequireMutualAuthentication が有効な場合に、相互認証が実現したか否かを検証するロジックを追加(+16行)
  • NegotiateStream.cs: 相互認証の処理を調整し、NTLM フォールバック互換性を保つため交渉結果の受け入れ処理を改善(+3/-5行)
  • NegotiateAuthenticationTests.cs: NtlmMutualAuthentication および NtlmCorrectExchangeTest の新しいテストケースを追加(+27行)

パフォーマンスへの影響

影響なし

関連Issue

#131192、#131193

その他

本変更は公開API NegotiateAuthentication.RequireMutualAuthentication プロパティの動作を厳密化するものです。既存コードで相互認証検証に依存している場合、NTLM 認証での動作変更が発生する可能性があります。


#131578 Exclude reverse P/Invoke stubs from profiler code-transition callbacks.

概要

Reverse P/Invoke マーシャリングスタブから不要なプロファイラコード遷移コールバックを削除します。従来、これらのスタブは管理対象ターゲットへの呼び出しを ManagedToUnmanagedTransition/UnmanagedToManagedTransition でラップしていましたが、実際にはネイティブ境界を越えていないため、誤った方向の不要なコールバックペアを発出していました。本変更により、Reverse P/Invoke を既に適切に処理されていた Reverse COM/delegate スタブと一貫性を持たせます。

変更内容

  • src/coreclr/vm/dllimport.cpp: ILStubState::FinishEmit で SF_IsForwardStub フラグをチェックし、Forward スタブのみが遷移コールバックを発出するよう制御(+1/-2)
  • プロファイラ回帰テスト: IJW(C++/CLI)プロファイラテストを追加(新規8ファイル)
    • IjwProfileeDll.cpp: 管理対象→ネイティブ→ポインタ経由の管理対象シナリオを実装
    • ijwprofiler.h/.cpp: トランジション検証ロジックと CLSID 登録
    • ijw.csproj/.cs: テストハーネスとCMakeビルド構成

パフォーマンスへの影響

影響なし

関連Issue

#120151

その他

  • プロファイラ動作の変化: 従来、Reverse P/Invoke スタブが不正な方向の遷移コールバック(.NET 8/9/10では破損したポインタ、.NET 11ではNULL FunctionID)を発出していましたが、本変更後は発出されなくなります。ただし、フレーム境界での権威あるネイティブ↔管理遷移(JIT_ReversePInvokeEnter/Exit など)は変わらないため、プロファイラは依然として正しい方向と正確な FunctionID で実際の遷移を観測します。
  • テストの厳密性: 回帰テストは、ターゲット内で発生した不正なネストされたコード遷移がないことと、正確な FunctionID が報告されることを明示的に検証します。

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

概要

VMR(Virtual Monorepo)からのコードフロー更新PRです。dotnet/dotnetリポジトリのコミット813f634からの変更を取り込み、複数の依存パッケージをアップデートします。Microsoft.CodeAnalysisが5.10.0-1.26365.101から5.10.0-1.26379.102へ、NuGet関連パッケージが7.10.0-rc.36601から7.10.0-rc.38002へなどが更新されています。

変更内容

  • ビルド設定・バージョン管理: Directory.Build.props、global.json、eng/Version.Details.props/xmlなどで依存パッケージバージョンを更新
  • ビルドスクリプト: eng/build.ps1、eng/common/build.ps1/sh、eng/common/tools.ps1/shで環境構築ロジックを改善
  • コンパイラ・分析ツール関連: Microsoft.CodeAnalysis、Microsoft.CodeAnalysis.NetAnalyzers、Microsoft.DotNet.ApiCompat.Taskをアップデート
  • ランタイム・JITツール: linux-arm64、linux-musl-、osx-、win-*など複数プラットフォーム向けのMicrosoft.NETCore.Runtime.JIT.Tools、Mono.LLVM関連パッケージを更新
  • WebAssembly関連: runtime.*.Microsoft.NETCore.Runtime.Wasm.Node.Transportを複数プラットフォーム向けに更新
  • インストーラー関連: src/installer/pkg以下にMicrosoft.NETCore.App.Host.sfxprojなどを追加
  • StubHelpers: src/coreclr/System.Private.CoreLib/src/System/StubHelpers.csでマーシャリング関連コードの変更
  • クロスコンパイル: eng/common/cross/build-rootfs.sh、toolchain.cmakeで環境構築を改善

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • 本PRはMaestro自動化ツールによるコードフロー更新(Codeflow PR)
  • dotnet/arcade、dotnet/aspnetcore、dotnet/cecil、dotnet/diagnostics、dotnet/efcore、dotnet/fsharp、dotnet/msbuild、dotnet/nuget.client、dotnet/roslyn、dotnet/runtime、dotnet/sdk、dotnet/sourcelink、dotnet/winforms、dotnet/wpfなど複数リポジトリの変更を含む
  • 新規依存パッケージ: Microsoft.DotNet.Build.Tasks.FileCatalog 11.0.0-beta.26379.102を追加
  • 削除依存パッケージ: Microsoft.DotNet.Build.Tasks.Workloads 11.0.0-beta.26365.101を削除

#131554 Restore symbol-free decoding for CORINFO_HELP_NEW helpers

概要

#126281で削除されたCORINFO_HELP_NEW*JITヘルパーのシンボル解決機能を復元します。Visual Studioなどのツールがネイティブシンボルなしでこれらのメソッドを認識できるようにするための修正です。

変更内容

  • jitinterfacegen.cpp: ヘルパー初期化後に割り当てヘルパー(allocation helpers)を補助シンボルテーブル(auxiliary symbol table)に登録
  • jitinterface.h: MAX_AUXILIARY_SYMBOLSを17に拡張(10個の割り当てヘルパー + 6個のレジスタ書き込みバリア + JIT_WriteBarrier)
  • AuxiliarySymbols.md: 補助シンボルコントラクトのドキュメント更新
  • AuxiliarySymbolsDumpTests.cs: フルダンプテストケース追加、テーブルコンテンツとマネージドcDAC検索の検証を実装

パフォーマンスへの影響

影響なし

関連Issue

#126281

その他

留意事項: 複数のCopilot指摘事項があります:

  1. MAX_AUXILIARY_SYMBOLSの脆弱性: 現在の値は正確な現在値に設定されており、SetAuxiliarySymbolはデバッグアサーション(_ASSERTE)のみのため、将来の追加時にリテールビルドで境界外書き込みが発生する可能性があります。余裕を持った値(例:32)への変更を推奨します。

  2. テストの潜在的な脆弱性: AuxiliarySymbolsDumpTests.csのhelpersByAddress.TryAdd()は、複数のヘルパーが同じアドレスを共有する場合、重複を黙って破棄するため、すべてのヘルパー検証をカバーしていない可能性があります。

  3. FEATURE_64BIT_ALIGNMENT対応: ALIGN8ヘルパーバリアントは無条件に登録されていますが、TARGET_ARM/TARGET_WASMでのみFEATURE_64BIT_ALIGNMENTが定義されているため、x86/x64でのアドレス重複の可能性があります。


#131516 [main] Update dependencies from dotnet/runtime-assets

概要

dotnet/runtime-assetsリポジトリからの依存関係を更新するPull Request。16個のテストデータおよびランタイムアセットパッケージを11.0.0-beta.26370.1から11.0.0-beta.26403.1にバージョンアップしています。

変更内容

  • eng/Version.Details.props: バージョン情報の更新(+16/-16行)
  • eng/Version.Details.xml: 依存関係の詳細情報の更新(+32/-32行)

更新対象パッケージ:

  • Microsoft.DotNet.CilStrip.Sources
  • Microsoft.DotnetFuzzing.TestData
  • Microsoft.NET.HostModel.TestData
  • System.ComponentModel.TypeConverter.TestData
  • System.Data.Common.TestData
  • System.Drawing.Common.TestData
  • System.Formats.Tar.TestData
  • System.IO.Compression.TestData
  • System.IO.Packaging.TestData
  • System.Net.TestData
  • System.Private.Runtime.UnicodeData
  • System.Runtime.Numerics.TestData
  • System.Runtime.TimeZoneData
  • System.Security.Cryptography.X509Certificates.TestData
  • System.Text.RegularExpressions.TestData
  • System.Windows.Extensions.TestData

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

本PRは自動化された依存関係更新(dotnet-maestro[bot]による)であり、2026年8月3日のruntime-assetsビルド成果物に基づいています。


#131491 Fix BigInteger to double conversion rounding on s390x

概要

s390xアーキテクチャ上のMonoランタイムにおいて、BigIntegerをdoubleに変換する際のrounding modeの不具合を修正しました。CDLGBR命令のM3フィールドを6(+∞方向へのrounding)から4(round-to-nearest-even)に変更し、.NETの浮動小数点変換セマンティクスに合わせています。

変更内容

  • src/mono/mono/mini/mini-s390x.c: CDLGBR命令のM3フィールド値を6から4に修正(2行変更)

パフォーマンスへの影響

影響なし

関連Issue

#131491

その他

  • 対象プラットフォーム: s390x(IBM z/Systemなど)のみ
  • 影響範囲: Monoランタイムのコンパイラ内部実装(内部API)
  • 互換性: 不正なrounding結果を修正するため、既存の不正な変換結果に依存していたコードがあれば影響を受ける可能性があります

#131133 Fix AV in ICorProfilerInfo2::GetClassLayout for Runtime Async continuation types

概要

ICorProfilerInfo2::GetClassLayout()がRuntime Async Continuationの動的生成型(メタデータなし)に対して呼び出されるとアクセス違反でクラッシュする問題を修正しました。メタデータを持たない継続型の場合、FieldDesc::GetMemberDef()をnullポインタに対して呼び出していることが原因です。修正では、メタデータなし継続型の早期チェック を追加し、CORPROF_E_DATAINCOMPLETEを返すようにしました。

変更内容

  • src/coreclr/vm/proftoeeinterfaceimpl.cpp: ProfToEEInterfaceImpl::GetClassLayout()にtypeHandle.IsContinuationWithoutMetadata()のチェックを追加。メタデータのない継続型に対してCORPROF_E_DATAINCOMPLETEを返すようにしました。

パフォーマンスへの影響

影響なし

関連Issue

#120800、#120411

その他

  • このバグは、Runtime Async継続がライブ中にプロファイラーがヒープスナップショット(ForceGC+ヒープウォーク)を実行する際に発生するため、実際のプロファイリング処理で遭遇する可能性があります
  • テストカバレッジの追加(src/tests/profiler/配下でRuntime Async継続に対するGetClassLayout呼び出しをテスト)が予定されています

#131110 Enable out-of-process tests for CoreCLR browser WASM

概要

CoreCLR browser-WASMではforkと管理されたプロセス生成が利用できないため、プロセス分離が必要なテスト(RequiresProcessIsolation)が実行されていませんでした。このPRは、ホスト側のBashまたはBatchスクリプトで既存のテストラッパーを子シェルで実行し、その結果を統合ランナーに取り込むことで、管理コード側にNode固有のAPI追加なしにこれらのテストを有効化します。

実行モデルは3段階です:(1) 計画: 統合ランナーが実行対象アセンブリのパスを記録、(2) 実行: ホストが既存の.sh/.cmdラッパーを実行して出力・終了コード・パス/スキップ状態を記録、(3) 取込: 統合ランナーが計算済みの子結果をxUnitレポートにインポート。

変更内容

  • XUnitWrapperGenerator: プロセス分離テストの検出、計画モード(アセンブリパス出力)、結果インポート機能を追加
  • OutOfProcessTest.cs: 環境変数経由の計画/結果ファイルの読み書きと結果インポート
  • CLRTest.Execute.Bash/Batch.targets: ブラウザ向けのホスト側オーケストレーション(計画→実行→取込)を追加
  • CLRTest.CrossGen.targets: ReadyToRun資産のステージングと検証ロジック
  • テストプロジェクト(GC/Interop等): ブラウザWASM非対応機能(バックグラウンドGC、スレッド、子プロセスなど)のゲーティング・除外
  • featuremultithreading.props: テスト評価時にFeatureMultithreadingを利用可能に

パフォーマンスへの影響

影響なし。テスト実行フローの構造化変更のため、パフォーマンスはプロセス分離テストの追加実行により変わりますが、個別テストの性能には影響ありません。

関連Issue

  • #131767 - Composite ReadyToRan WebCIL レイアウト未サポート
  • #131766 - バックグラウンドGCメモリ情報テスト
  • #131355 - ロック順序失敗修正
  • #131321 - 回復可能なカバレッジ追跡(41テスト)
  • #123946 - ネイティブ再リンク関連
  • #131421 - Int128フィールドレイアウト修正

その他

  • 互換性: 公開APIの追加なし。内部テストインフラストラクチャのみの変更
  • 検証: Priority 0で3,970テスト中3,412パス/558スキップ/0失敗、Priority 0+1で14,726テスト中13,850パス/876スキップ/0失敗を記録
  • バージョニング: 結果ファイル形式はトークンでバージョン管理され、スキーマ

#130640 Add ILLink coverage for unused virtual method annotations

概要

ILLinkのトリマーが仮想メソッドのアノテーション不一致を検証する際に、実際に保持されている実装のみを対象とし、未使用コードからのIL2046/IL2092警告ノイズを回避するためのテストカバレッジを追加します。完全に未使用な実装、型のみの参照、警告が必要な使用実装、および未使用の兄弟実装を持つ使用インターフェースの4つのシナリオをカバーしています。

変更内容

  • UnusedVirtualMethodAnnotations.cs: 仮想/インターフェースアノテーション不一致の4つのテストシナリオを新規追加(完全未使用実装、型のみ参照、使用実装での警告、部分使用インターフェース)
  • UnusedVirtualMethodAnnotationsBase.cs: テストケースの依存関係定義を追加
  • ResultChecker.cs: テスト結果チェックロジックを拡張(31行追加、10行変更)
  • TrimmingTestLogger.cs: トリマーテストログ機能を追加(35行新規)
  • DataFlowTests.g.cs: 自動生成テストファイルを更新(Roslyn Analyzer対応)
  • ILTrimExpectedFailures.txt: 予想される失敗ケースを1件追加

パフォーマンスへの影響

影響なし(テストカバレッジの追加であり、ランタイム実装への変更ではない)

関連Issue

なし

その他

  • このPRはテスト専用の変更であり、ILLink内部実装(トリマー)の動作を検証するもので、公開APIへの影響はありません
  • ExpectedWarning属性を使用して、保持される実装に対するIL2046/IL2092警告を固定し、呼び出しサイトのIL2026を抑制しています
  • Roslyn Analyzerは未使用コードの到達可能性に関わらずアノテーション不一致を検証するため、アナライザーのみのIL2046/IL2092期待値設定が必要な設計になっています

#130530 Reuse typical instantiation DispatchMap for generic instantiations

  • 作成者: @davidwrighton
  • 作成日時: 2026年07月10日 22:14:11(UTC)
  • マージ日時: 2026年08月04日 09:15:52(UTC)
  • ラベル: area-VM-coreclr

概要

CoreCLRの型ローダーにおけるジェネリック型読み込みの2つの最適化を実装しています。

1. DispatchMapの再利用: 非典型的なジェネリック型インスタンス化(List<int>など)でのDispatchMap構築を最適化。典型的なインスタンス化で一度構築したDispatchMapを再利用することで、PlaceInterfaceMethodsの重複実行を削減します。

2. 仮想静的スロットテーブルのサイズ計算最適化: インターフェースメソッドのカウントループを削減。配列を単純にインターフェースのメソッド数で事前割り当てします。

変更内容

  • methodtablebuilder.cpp: PlaceInterfaceMethodsスキップ時に典型的なインスタンスのDispatchMapバイトをコピー。Debug/Checked ビルドでは検証を実施。CreateSlotTableの二重ループ処理を削減。
  • methodtablebuilder.h: インターフェースエントリ処理用のヘルパー関数追加(計5行)。
  • contractimpl.h: 関連型定義追加(計10行)。

パフォーマンスへの影響

改善あり(型読み込みバウンドなワークロード向け)

System.Reactive型読み込みマイクロベンチマークでの測定結果:

  • DispatchMap再利用のみ: −1.2%(252.15ms → 248.61ms)
  • 両変更合計: −1.4%(252.15ms → 248.62ms、−3.53ms)

標準偏差は約1.8msで、1.4%改善は明確なシグナル。WPF R2R起動では型読み込みが全体に占める割合が小さいため、改善効果は実行間のノイズ範囲内。

関連Issue

なし

その他

  • 非典型的なインスタンス化ではfNoSanityChecks=TRUEのためValidateInterfaceMethodConstraintsとVerifyVirtualMethodsImplementedは既にスキップされており、PlaceInterfaceMethodsのスキップは安全です。
  • Debug/Checkedビルドでの検証により、DispatchMapの典型化独立性不変式を保証(141回の実行で全てパス)。
  • Release/Checked clr.runtimeビルドは警告/エラーなしで成功。

#130481 Recognize bit-manipulation idioms and emit bzhi/bts/btc/btr/bt on xarch

概要

このPRはxarch JITコンパイラで一般的なビット操作イディオムを認識し、専用のx86命令(bzhi、bts、btr、btc、bt)を生成するように拡張します。これにより、コード生成がより効率的になり、アセンブリサイズが全体で3,874バイト削減されます。

変更内容

コンパイラ(内部実装):

  • lowerxarch.cpp、lower.cpp:ビット操作イディオムの認識と専用ノード(GT_BIT_SET、GT_BIT_CLEAR、GT_BIT_INVERT、GT_BITTEST_EQ、GT_BITTEST_NE)への変換
  • codegenxarch.cpp:これらのノードをx86命令に変換するコード生成
  • emitxarch.cpp、instrsxarch.h:bts/btr/btc命令の定義とエミッタ
  • lsraxarch.cpp:LSRA(ライブレンジ分析)で新しいノードを正しく処理
  • gtlist.h:xarch向けにGT_BIT_*ノードを有効化(riscv64と共有)
  • lower.cpp:比較最適化を拡張して((x >> y) & 1) == 0/!= 0をbt命令に変換

テスト:

  • SingleBit.cs/SingleBit.csproj:bts/btr/btcとbtのディスアセンブリ検証を追加
  • Bzhi.cs/Bzhi.csproj:bzhi命令の正確性テストを新規追加
  • CheckedBitOps.cs/CheckedBitOps.csproj:チェック付きビット操作テストを新規追加

認識されるイディオム:

  • x & ((1 << y) - 1) → bzhi(既存のZeroHighBits内在関数を再利用)
  • x | (1 << y) → bts(ビット設定)
  • x & ~(1 << y) → btr(ビットクリア)
  • x ^ (1 << y) → btc(ビット反転)
  • (x >> y) & 1 in == 0/!= 0 → bt(ビットテスト)

パフォーマンスへの影響

改善:

  • SPMI(Static Profile-Guided IL)による測定:全体で3,874バイト削減
  • PerfScore改善:-5.09%(coreclr_testsコレクション)
  • すべてのコレクションがサイズとPerfScoreの両面で改善

懸念:

  • メモリ宛先のRMW形式btsにおいて、メモリ含有度制約により6メソッドで1~2バイトの軽微な増加(ビットインデックスのマスキング要件により回避不可)

関連Issue

#81514
#81512

その他

bextr命令は意図的に未実装:

  • 定数制御のbextr((x >> c) & mask)は複数uopが必要であり、現在のshr/`sar

#129968 Add FreeBSD/powerpc64le (ppc64le) PAL and platform support

概要

FreeBSD/powerpc64le (ppc64le) プラットフォームでの CoreCLR + BCL のビルドと実行をサポートするための PAL(Platform Abstraction Layer)とプラットフォーム検出機能を追加します。PowerPC には RyuJIT バックエンドがないため、マネージドコードはインタープリタで実行されます。このPRは PAL とプラットフォームレイヤーのみで、コード生成器は含まれていません。

変更内容

  • src/coreclr/pal/src/include/pal/context.h: FreeBSD の PowerPC mcontext_t と ptrace struct reg のレジスタアクセッサを追加。MSR フィールドはスレッドローカル変数で管理
  • src/coreclr/pal/src/configure.cmake: ppc64le に対して BSD_REGS_STYLE を選択
  • eng/native/configureplatform.cmake, configurecompiler.cmake: FreeBSD 上の ppc64le 検出ロジックを追加(ppc64le と powerpc64le の両方に対応)
  • src/mono/CMakeLists.txt: powerpc64le を ppc64le に正規化

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • クロスビルド(amd64 → FreeBSD 14.3 ppc64le sysroot)と、ppc64le での完全なネイティブセルフホストビルドの両方で動作確認済み
  • dotnet --info の実行確認済み(RID: freebsd-ppc64le、インタープリタモード)
  • dotnet/arcade, dotnet/sdk, dotnet/fsharp のシスターPRに依存
  • .NET Foundation CLA に署名済み

#129690 Enable Helix Job Monitor for the runtime pipeline

概要

Helix Job Monitor機能をdotnet/runtimeのAzure DevOps パイプラインに統合するための変更です。useHelixMonitorパラメータをHelix関連のパイプラインテンプレート全体に追加し、runtimeパイプラインのテストレグで有効化し、Microsoft.DotNet.Helix.JobMonitor ツール依存関係を追加しています。

変更内容

  • eng/pipelines/runtime.yml: Build段階にHelixJobMonitorジョブを追加し、全テストレグでuseHelixMonitor: trueを有効化
  • パイプラインテンプレート群: useHelixMonitorパラメータを追加し、Helix送信パスに/p:EnableHelixJobMonitor=...MSBuildプロパティを渡すように更新
    • libraries/run-test-job.yml、libraries/helix.yml
    • common/templates/runtimes/send-to-helix-step.yml、run-test-job.yml、build-runtime-tests-and-send-to-helix.yml
    • common/templates/wasm-*.yml(複数ファイル)
    • installer/helix.yml、coreclr/nativeaot-post-build-steps.yml
  • 依存関係管理:
    • eng/Version.Details.xml、eng/Version.Details.props にMicrosoft.DotNet.Helix.JobMonitorを追加
    • .config/dotnet-tools.jsonにツールエントリを追加
  • その他: eng/common/core-templates/job/helix-job-monitor.yml、src/libraries/sendtohelix.proj、global.jsonを更新

パフォーマンスへの影響

影響なし(CI/CDパイプラインの監視機能拡張のみ)

関連Issue

dotnet/arcade#16731

その他

注意点:

  • Copilotのレビューコメントで複数の懸念が指摘されています:
    • 版バージョンスキュー: Version.Details.xmlで11.0.0-beta.26363.117、Version.Details.propsで11.0.0-beta.26330.2、dotnet-tools.jsonで11.0.0-beta.26373.5と異なるバージョンが使用されており、統一が必要
    • eng/pipelines/common/templates/browser-wasm-coreclr-build-tests.yml でuseHelixMonitorが硬くtrueにコーディングされており、パイプライン全体のenableHelixJobMonitorスイッチ設定と一貫性がない
    • HelixJobMonitorジョブが常に注入され、enableHelixJobMonitorが無効化された場合の動作が明確でない

#129688 arm64: Optimize ARM64 compare mask ExtractMostSignificantBits consumers

概要

ARM64におけるExtractMostSignificantBits操作の消費者を最適化するPull Request。比較マスク操作の生成コードを改善し、ARM64命令セットの効率的な利用を実現します。関連議論は#121981のディスカッションを参照。

変更内容

  • rationalize.cpp (+497行): ExtractMostSignificantBits消費者の最適化ロジックを大幅に追加。比較結果から最上位ビットを抽出する操作を効率化
  • compiler.h (+56行): コンパイラクラスに新しいメソッドやフィールドを追加(最適化関連の定義)
  • gentree.cpp/gentree.h: 汎用木構造ノードの定義を微調整
  • assertionprop.cpp (+68行): アサーション伝播で新しい最適化パターンを認識
  • valuenum.cpp (+9行): 値番号付けで最適化パターンの正規化を追加
  • lowerxarch.cpp、morph.cpp: 軽微な調整
  • テスト追加: ExtractMostSignificantBits.csに592行の包括的なテストケースを新規追加

パフォーマンスへの影響

ARM64コード生成の最適化により、比較マスク操作の実行効率が向上。具体的な改善率のベンチマーク結果は提供情報に記載されていません。

関連Issue

#121981

その他

  • JITコンパイラの内部実装を対象とした最適化で、公開APIへの影響なし
  • 新規テストにより回帰防止が確保されています
  • ARM64プラットフォーム固有の最適化であり、他のアーキテクチャへの影響なし

目次