Pull Request on 2026年06月17日

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

注意点

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


目次

  1. #129519 JIT: don't narrow relocatable handle constants in optNarrowTree
  2. #129509 Add bool silent parameter to Process.Run and Process.RunAsync fileName overloads
  3. #129477 Implement support for loading multiple providers into a single context
  4. #129476 Ignore AppDomain address parameters in ISOSDacInterface
  5. #129472 JIT: boost loop inversion cost limit for some loops
  6. #129456 [cdac] Implement IGCInfo for x86; consolidate decoder under GCInfo contract
  7. #129446 Fix OSSL_STORE_INFO leak
  8. #129444 Reject SAFEARRAY to IntPtr[] marshalling with mismatched native element size
  9. #129414 Fix W3CPropagatorcompliance against W3C Trace Context Level 2
  10. #129404 Move remarks back from conceptual docs repo (CustomReflectionContext)
  11. #129397 JIT: unpin locals whose value is provably non-movable
  12. #129389 [interp] Send CreateThread debugger event from the interpreter
  13. #129382 Add UsePureLLVMToolchain for compiler-rt+lld combo
  14. #129374 Add missing fast path for DateTime format "G"
  15. #129361 JIT: extend OptimizeConstCompare to remove TYP_BYTE casts
  16. #129354 Use SSA-based TryGetRange to fold conditions
  17. #129320 Move DSA tests into System.Security.Cryptography
  18. #129256 Fix OOM message in Native AOT
  19. #129208 [release/9.0-staging] Update dependencies from dotnet/runtime-assets
  20. #129172 Add doc comment on AsyncValidationAttribute to not make threading assumptions
  21. #129127 Clarify JIT-EE method placement in add-new-jit-ee-api skill
  22. #129049 Make scheduled outerloop builds succeed when only Helix tests fail
  23. #128970 Fix ARM32 JIT errors with native int-div
  24. #128962 Fix for 127747
  25. #128869 Add support for properties in COM source generator
  26. #127763 Fix segfault in GC standalone large pages emulation mode (segments path)

#129519 JIT: don't narrow relocatable handle constants in optNarrowTree

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

概要

JIT の optNarrowTree で再配置可能なハンドル定数をナロー化しないように修正するPR。ARM64 NativeAOT で、ポインタサイズのアドレスとして具体化する必要がある値に対して、バックエンドが32ビット命令形式を選択するのを防止します。

変更内容

  • src/coreclr/jit/optimizer.cpp: Compiler::optNarrowTree の GT_CNS_INT 処理において、ImmedValNeedsReloc(this) が true の場合に早期リターンを追加し、再配置可能な icon-handle 定数のナロー化を禁止

パフォーマンスへの影響

影響なし。この変更は不正なコード生成を防ぐためのもので、パフォーマンスに直接的な影響を与えません。

関連Issue

#129504

その他

  • このPRはGitHub Copilotの支援を受けて生成されました
  • 変更は最小限(+6行)で、JIT ランタイムのコンパイラ最適化ロジック内部への修正です

#129509 Add bool silent parameter to Process.Run and Process.RunAsync fileName overloads

概要

Process.Run() と Process.RunAsync() の fileName オーバーロードに bool silent = false パラメータを追加し、プロセスの標準入出力をnullデバイスにリダイレクトできるようにしました。これにより、ストリーム処理に伴うデッドロックのリスクなしに、コンソール出力を簡潔に抑制できます。

// 使用例
Process.Run("dotnet", ["restore"], silent: true);

変更内容

  • Process.Scenarios.cs — Run(string, ...) と RunAsync(string, ...) に bool silent = false パラメータを追加。true の場合、nullデバイスハンドルを開いて標準入出力の3つすべてにアサインし、プロセス終了後に破棄します。パラメータのXML ドキュメント追加。
  • System.Diagnostics.Process.cs (ref) — 参照アセンブリの署名を更新。
  • RunTests.cs — silent パラメータの組み合わせテストを拡張。silent: true でプロセスの出力が正しく破棄されることを検証するテストを追加。

パフォーマンスへの影響

影響なし

関連Issue

#128453

その他

このPRは .NET 11 プレビュー段階での破壊的変更です(当該メソッドはプレビューで新規追加)。nullハンドル管理はメソッド内で自動的に処理されるため、呼び出し側の負担が軽減されます。


#129477 Implement support for loading multiple providers into a single context

  • 作成者: @vcsjones
  • 作成日時: 2026年06月16日 20:31:33(UTC)
  • マージ日時: 2026年06月17日 12:31:20(UTC)
  • ラベル: area-System.Security

概要

OpenSSL 3プロバイダーの複数ロード機能に対応する変更です。単一のOSSL_LIB_CTXに複数のOpenSSLプロバイダーをロード可能にし、新しいマネージド公開APIを追加します。SafeEvpPKeyHandle.OpenKeyFromProviderにIEnumerable<string>型のプロバイダー名リストと、オプションのOpenSSL property queryパラメーターを受け付けるオーバーロードが導入されます。

SafeEvpPKeyHandle.OpenKeyFromProvider(
    IEnumerable<string> providerNames, 
    string keyUri, 
    string? propertyQuery = null)

変更内容

  • pal_evp_pkey.h/c: ネイティブAPI契約を更新し、複数プロバイダー名とproperty queryをサポート。ネイティブ側で複数プロバイダーを一つのライブラリコンテキストにロードし、部分的な失敗時のアンロード処理を実装。
  • Interop.EvpPkey.cs: P/Invoke署名とマネージド相互運用ラッパーを更新。
  • SafeEvpPKeyHandle.OpenSsl.cs: 新しい公開オーバーロードを追加。引数検証、プロバイダーセットキャッシング、更新済みinteropへの配線を実装。
  • OpenSsl.NotSupported.cs: 非サポートプラットフォーム向けのオーバーロードスタブを追加。
  • System.Security.Cryptography.cs(参照アセンブリ): 新しい公開API表面を追加。
  • Strings.resx: 空のコレクション検証用リソース文字列を追加。
  • OpenSslNamedKeysTests.manual.cs: 新しいオーバーロードと property query動作のマニュアルテストを追加/調整(引数検証シナリオを含む)。

パフォーマンスへの影響

影響なし

関連Issue

#113118

その他

  • 本変更は公開APIの追加であり、既存の互換性への影響はありません。
  • OpenSSL 3固有の機能であり、Linuxなどの非Windows UNIXプラットフォームに限定されます。
  • マニュアルテストの拡張により、新しいオーバーロードの引数検証とproperty queryシナリオがカバーされています。

#129476 Ignore AppDomain address parameters in ISOSDacInterface

概要

CoreCLRが単一AppDomainモデルに統一されたため、ISOSDacInterfaceのAppDomain関連メソッドが呼び出し元から渡されるAppDomainアドレスパラメータを無視し、代わりに現在のAppDomainを直接取得するように更新されました。これは.NET Framework時代の遺産的パラメータを削除する変更です。

変更内容

  • DAC (request.cpp): GetAppDomainData、GetAssemblyList、GetAppDomainNameがAppDomain::GetCurrentDomain()を使用するように変更
  • cDAC (SOSDacImpl.cs): 同じ3メソッドがILoader.GetAppDomain()を使用するように変更
  • すべてのメソッドでaddr == 0の事前条件チェックを削除(addrパラメータが不要になったため)

パフォーマンスへの影響

影響なし

関連Issue

#129260

その他

  • cDAC単体テストの全テスト実行: 2509パス、0失敗
  • runtime-diagnosticsビルド実行成功
  • GitHub Copilot支援のもと作成されたPR

#129472 JIT: boost loop inversion cost limit for some loops

概要

CoreCLR JITのループ反転(loop inversion)コスト制限を調整し、ループクローニングから利益を得られるループでのループ反転を促進します。特に、IV(帰納変数)のインクリメントが条件ブロックではなくバックエッジソースブロックにある場合を認識し、コスト制限を引き上げることで、反転を可能にし、その後のループクローニングなどの最適化を有効にします。

変更内容

  • src/coreclr/jit/optimizer.cpp: ループクローニングから利益を得られるかどうかの判定ロジックをサイズ制限の外で追跡し、後続の反転コスト決定ロジックで再利用可能に
  • IV インクリメントがバックエッジソースブロックに存在する「Split IV test + increment」パターンの検出を追加
  • このパターンが検出された場合、許容される複製コスト(duplication cost)を引き上げてループ反転をより容易に実行
  • DEBUGビルド時の詳細な診断出力を拡張して新しい評価シグナルを報告

パフォーマンスへの影響

ループ反転とループクローニングの最適化がより多くのケースで有効になることにより、コンパイル後のコードパフォーマンスの向上が期待されます。ただし、具体的なベンチマーク結果は提供されていません。

関連Issue

#119693

その他

内部実装(JITコンパイラの最適化ヒューリスティクス)の変更であり、公開APIへの影響はありません。


#129456 [cdac] Implement IGCInfo for x86; consolidate decoder under GCInfo contract

概要

Windows x86でSOS(デバッガ拡張)が!clruやILスタブMethodDescに対してGetCodeHeaderDataを実行した際にUnable to get codeHeader informationエラーが発生する問題を修正しました。x86のGC情報デコーダを既存のStackWalkコンテキストからGCInfoコントラクト下に移動・統合し、x86向けのIGCInfo実装(GCInfoX86_1)を新規実装・登録することで、複数のSOS機能(!clru、GetCodeHeaderData、GetMethodRegionInfo)が正常に機能するようになります。

変更内容

  • ファイル移動: Contracts/StackWalk/Context/X86/GCInfoDecoding/*をContracts/GCInfo/X86/*に移動し、名前空間をStackWalkHelpers.X86からGCInfoHelpers.X86に変更(6ファイル)
  • クラス名変更: 移動後のGCInfoクラスをX86GCInfoにリネーム(名前衝突を回避)
  • 新規IGCInfo実装: GCInfoX86_1を実装し、CoreCLRContracts.csでRuntimeInfoArchitecture.X86に登録
  • IGCInfoDecoder実装: X86GCInfoでGetCodeLength、GetStackBaseRegister、GetSizeOfStackParameterAreaを実装;GetInterruptibleRangesとEnumerateLiveSlotsはNotSupportedExceptionをスロー
  • ExecutionManager統合: ExecutionManagerCore.GetStackParameterSizeをIGCInfo.GetSizeOfStackParameterAreaに委譲(単一の情報源化)
  • 回帰テスト追加: StackWalkDumpTests.csにVarargPInvoke_GetCodeHeaderDataForILStub_ReturnsMethodSizeテストを追加(IL スタブが正常にメソッドサイズを返すことを検証)
  • ドキュメント更新: GCInfo/StackWalk設計ドキュメントを更新し、x86部分サポート状況と統合戦略を記載

パフォーマンスへの影響

影響なし

関連Issue

dotnet/diagnostics#5874 — cDAC が .NET 11 のデフォルト動作として有効化された際にトリガーされた

その他

  • アーキテクチャ別対応状況: x64/Arm64/Arm/LoongArch64/RiscV64は既にIGCInfo実装があったが、x86のみ欠落していた点が根本原因
  • 今後の拡張予定: GetInterruptibleRangesとEnumerateLiveSlotsはx86では未実装(将来の課題)。これらが必要な!gcroot、!clrstack -l、!peなど追加のSOS機能は引き続き利用不可
  • 互換性: 既存の2509個のcDAC単体テストは合格;GitHub Copilot支援で作成
  • 検証: SOSMethodTests.VarargPInvokeInteropMDをx86 .NET 11prev6 cDACで検証済み(修正前は失敗、修正後は4/4合格)

#129446 Fix OSSL_STORE_INFO leak

  • 作成者: @vcsjones
  • 作成日時: 2026年06月15日 22:57:52(UTC)
  • マージ日時: 2026年06月17日 00:54:03(UTC)
  • ラベル: area-System.Security

概要

OpenSSL 3のプロバイダーベースの鍵読み込みパスにおいて、OSSL_STORE_INFO_PKEY型の秘密鍵エントリ処理時にOSSL_STORE_INFOメモリが解放されていなかったメモリリークを修正しました。CryptoNative_LoadKeyFromProvider関数でOSSL_STORE_INFO_get1_PKEY()で秘密鍵を抽出した後、OSSL_STORE_INFOを明示的に解放することで対応しています。

変更内容

  • src/native/libs/System.Security.Cryptography.Native/pal_evp_pkey.c: OSSL_STORE_INFO_PKEYパスでのブレーク処理時にOSSL_STORE_INFO構造体を解放するコードを追加。ストアエントリの漏洩を防止します。

パフォーマンスへの影響

メモリリーク修正による改善。秘密鍵の読み込み処理で不要なメモリ保持がなくなり、長時間実行時のメモリ使用量が改善されます。

関連Issue

#129446

その他

  • 影響範囲: System.Security.Cryptography(暗号化API)の内部実装
  • OpenSSL 3 プロバイダー統合の品質改善
  • 互換性への影響: なし

#129444 Reject SAFEARRAY to IntPtr[] marshalling with mismatched native element size

概要

SAFEARRAY を IntPtr/UIntPtr 配列としてマーシャリングする際、ネイティブ要素サイズがポインタサイズより小さい場合にバッファオーバーランが発生する可能性がある問題を修正。要素サイズの不一致を検出して SafeArrayTypeMismatchException をスローするガードを追加しました。

変更内容

  • src/coreclr/vm/olevariant.cpp: GetInstantiatedSafeArrayMethod に要素サイズの不一致チェックを追加。IntPtr/UIntPtr 型でネイティブ VARTYPE の要素サイズがポインタサイズと異なる場合(例:VT_I4 = 4バイト)、コンテンツコピーの前に SafeArrayTypeMismatchException をスロー
  • src/tests/Interop/ArrayMarshalling/SafeArray/SafeArrayTest.cs: 64ビット専用の回帰テストを追加。[MarshalAs(SafeArraySubType = VT_I4)] を IntPtr[,] に適用した場合、双方向マーシャリングで例外がスローされることを検証

パフォーマンスへの影響

影響なし。本変更はマーシャリング前の検証追加のため、パフォーマンスへの影響はありません。

関連Issue

#129444

その他

  • ランタイム(CoreCLR)の COM 相互運用機能における内部実装の修正です
  • 64ビット環境専用の修正・テストとなっています
  • 破壊的変更:型安全性を高めるため、従来は予期しない動作をしていた SAFEARRAY マーシャリングが明示的に例外をスロー

#129414 Fix W3CPropagatorcompliance against W3C Trace Context Level 2

概要

W3C Trace Context Level 2仕様への準拠性を改善するため、W3CPropagatorのtracestateとtraceparentヘッダ処理を更新しました。仕様に従った厳密な検証、正規化、およびフューチャーバージョン対応を実装しています。

変更内容

  • W3CPropagator.cs: tracestateの検証と正規化ロジックを拡張。仕様に基づくOWS(Optional White Space)処理、エントリ数制限、キー/値の制約を適用。traceparentが無効な場合はtracestateを破棄し、フューチャーバージョンの拡張フィールドはコア長にトリミング。
  • W3CPropagatorTests.cs: tracestateのホワイトスペース処理、キーの妥当性ルール、無効なメンバー動作、traceparentの無効化/拡張フィールドのトリミング動作など、エッジケースのテストカバレッジを大幅に拡充。

パフォーマンスへの影響

影響なし

関連Issue

#129413

その他

  • 本変更は公開API(W3CPropagatorクラス)の内部実装改善であり、互換性への影響はありません。
  • W3C公式テストスイートとの完全な準拠を目指していますが、キー名の扱い(W3C trace-context PR #583)に関する問題など、仕様側での対応が必要な点が存在しています。
  • コミット単位での段階的レビューを想定した粒度での実装がなされています。

#129404 Move remarks back from conceptual docs repo (CustomReflectionContext)

概要

System.Reflection.Context.CustomReflectionContextのAPI補足説明をdotnet/docsリポジトリから本体に移動し、XML doc comments内にマークダウン形式の<remarks>と<example>を直接埋め込みます。例はテストプロジェクトのスニペットから参照され、ビルド時に検証されます。

変更内容

  • CustomReflectionContext.cs: 外部ドキュメントリンクを削除し、<remarks>タグにマークダウン形式の説明を追加。<example>タグでテストファイルのコードスニペットを参照
  • CustomReflectionContext.Examples.cs(新規): ドキュメント用のコード例をスニペット形式で定義
  • System.Reflection.Context.Tests.csproj: CustomReflectionContext.Examples.csをテスト構成に含め、ビルド時にスニペット検証を実施
  • adding-api-guidelines.md: <example>と<code source=... region=... />の使用方法についてドキュメント更新

パフォーマンスへの影響

影響なし

関連Issue

dotnet/dotnet-api-docs#12613

その他

この変更はAPI説明の単一の信頼できるソース(Source of Truth)をAPIの実装コードに一元化する取り組みの一部です。ドキュメント例がテストプロジェクトに含まれることで、例のコンパイル検証が可能になり、APIの進化に伴う陳腐化を防ぐことができます。


#129397 JIT: unpin locals whose value is provably non-movable

概要

JITコンパイラで、値がGC移動不可であることが証明できるピン留めされたローカル変数を自動的にピン留め解除するデータフロー解析パスを追加しました。特にstackallocで確保されたメモリへのポインタをピン留めするケース(例:fixed (T* p = stackalloc T[N]))に対応し、冗長なピン/アンピン操作をDead Code Eliminationで削除できるようにしています。

変更内容

  • lclmorph.cpp: ローカル変数のモーフィング後に実行される新しいデータフロー解析パスを実装。非ピン留めローカル変数の値がno-gc値(定数、LCL_ADDR、frozen handleなど)に限定されるかを追跡し、ピン留め可能な場合は解除
  • compiler.cpp/compiler.h: 新しい解析パスをコンパイル処理フローに統合
  • compphases.h: コンパイルフェーズリストに新しいパスを追加
  • gentree.h: IsNotGcDef判定にGT_LCLHEAPを追加し、stackallocで確保されたメモリをno-gc値として認識

パフォーマンスへの影響

冗長なピン/アンピン操作を削除することで、メモリバリア命令の削減とコード最適化の向上が期待できます。データフロー解析自体の追加オーバーヘッドは最小限。ベンチマーク結果の記載なし。

関連Issue

#129110、#127691

その他

本PRは既存PR #129110の再実装版であり、stackalloc関連のケースを追加で対応することで修正範囲を拡張しています。


#129389 [interp] Send CreateThread debugger event from the interpreter

概要

インタープリタ下で実行されるマネージコード(デバッグ中)がCreateThreadデバッガイベントを送信していなかった問題を修正します。インタープリタが実行するスレッドの初回マネージコード実行時にCreateThreadイベントを直接通知することで、デバッガがICorDebugThreadを確立でき、ローカル変数の表示が可能になります。新しいTSNC_DebuggerThreadStartSentフラグにより、スレッドごとに最大1回のイベント送信に限定します。

変更内容

  • debugger.cpp/h: Debugger::SendCreateThreadAtInterpreterEntryを実装し、インタープリタ起動時のCreateThreadイベント送信を管理。ThreadStarted()をTSNC_DebuggerThreadStartSentフラグで冪等化
  • threads.cpp: TSNC_DebuggerThreadStartSentスレッド状態ビットを追加
  • dbginterface.h: デバッガインターフェースにSendCreateThreadAtInterpreterEntryを追加

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

潜在的な問題指摘:

  1. Copilotレビューで、デバッガのdetach/reattach時にTSNC_DebuggerThreadStartSentフラグがリセットされない可能性が指摘されています。Detach後の再attach時に既存スレッドのCreateThreadが再送信されない可能性がある
  2. interpexec.cpp内で、CORDebuggerAttached()フラグの確認のみでg_pDebugInterfaceの null-check が不足している可能性が報告されています。Retail ビルドでは assertion が削除されるため null dereference の危険がある点に注意

#129382 Add UsePureLLVMToolchain for compiler-rt+lld combo

概要

Alpine Linuxなどの環境で、GNU toolchainの依存性を排除した純粋なLLVM toolchain(clang + lld + compiler-rt)を使用してNativeAOT バイナリをビルドするための新しいプロパティ UsePureLLVMToolchain を追加しました。この変更により、webapiaot テンプレートで22,592バイトのバイナリサイズ削減が実現します。

使用例:

dotnet publish -p UsePureLLVMToolchain=true

変更内容

  • src/coreclr/nativeaot/BuildIntegration/Microsoft.NETCore.Native.Unix.targets: NativeAOT用Unixターゲットファイルに、UsePureLLVMToolchain プロパティの処理を追加(+5行)

パフォーマンスへの影響

バイナリサイズが削減されます:

  • webapiaot テンプレートで 22,592バイトの削減

実行速度・メモリオーバーヘッドへの影響については記載なし。

関連Issue

なし

その他

  • この変更は NativeAOT/AOT コンパイルのビルドシステムに対する内部実装の改善
  • Alpine Linux を含む軽量Linux環境での NativeAOT 利用シーンに対応
  • GNU toolchain への依存を減らすことで、コンテナイメージサイズやデプロイメント環境の簡素化に貢献

#129374 Add missing fast path for DateTime format "G"

概要

DateTime.ToString("G", CultureInfo.InvariantCulture)に対するfast pathを追加しました。既存の"o"、"r"、"s"、"u"形式のfast pathと同様に、TryFormatInvariantGを直接利用することで、null/empty形式と同一の高速化パスを提供します。fast pathはoffset.Ticks == NullOffset && ReferenceEquals(dtfi, DateTimeFormatInfo.InvariantInfo)で保護されており、DateTimeOffsetや独自のDateTimeFormatInfoは既存の処理を利用します。

変更内容

  • src/libraries/System.Private.CoreLib/src/System/Globalization/DateTimeFormat.cs
    • DateTimeFormat.Formatメソッドに"G"フォーマットのswitch caseを追加
    • DateTimeFormat.TryFormat<TChar>メソッドに"G"フォーマットのfast pathを追加
    • 両メソッドとも、InvariantCulture + DateTime(NullOffset)の場合のみTryFormatInvariantGへ直接分岐

パフォーマンスへの影響

5.5倍の高速化達成

ベンチマーク結果(i9-14900K、P-core pinned、5回×15回×16384実行):

テスト項目 基準値(ns) 改善後(ns) 改善率
DateTime.ToString("G", InvariantCulture) 41.58 7.54 5.51倍
  • メモリ割り当て(Allocation):変更なし
  • その他19ケースのPerf_DateTime.ToString*:変更なし

関連Issue

#129374

その他

  • 出力フォーマット("MM/dd/yyyy HH:mm:ss"、19文字)は低速パスと完全に同一
  • 既存のDateTime/DateTimeOffsetフォーマットテストはすべてパス
  • 正確性検証:10個のDateTime(MinValue、MaxValue、年1、年9999、2000年2月29日、すべてのDateTimeKind)×5言語×16フォーマット×{ToString、TryFormat}+DateTimeOffset同等物で1040個の出力を比較、すべてバイト同一
  • TryFormat(小さいdestination)、複合フォーマット($"{dt:G}")、複製DTFI、カスタマイズされたLongTimePatternを持つDTFIはすべて基準と同一動作

#129361 JIT: extend OptimizeConstCompare to remove TYP_BYTE casts

概要

xarch JIT の OptimizeConstCompare を拡張し、TYP_BYTE キャストを除去する最適化を実装しました。符号付きバイト比較で不要な符号拡張を回避し、(sbyte)x < -64 などが movsx 命令を使わずにバイトサイズ比較で実行されるようになります。x < 0 / x >= 0 の特殊なコード生成ケースの正確性を保つため、const == 0 かつ GT_LT/GT_GE の場合は最適化をスキップします。

変更内容

  • src/coreclr/jit/lower.cpp: OptimizeConstCompare に TYP_BYTE キャスト除去ロジックを追加。INT8 範囲の定数かつ (const != 0 || operator != LT/GE) の条件下でバイトサイズ比較を生成
  • src/tests/JIT/Regression/JitBlue/Runtime_10337/Runtime_10337.cs: 符号付きバイト定数比較パターンの回帰テスト追加(メモリロード、トランケーション含む)
  • src/tests/JIT/Regression/Regression_ro_2.csproj: 上記テストをプロジェクトに統合

パフォーマンスへの影響

符号拡張命令(movsx)の削減により、バイト比較が軽量化されます。例:cmp cl, 0xC0; setl で直接比較(従来は movsx rax, cl; cmp eax, -64; setl のレジスタ拡張が必要)。メモリ フットプリントと命令レイテンシーが改善される見込み。

関連Issue

#10337

その他

  • xarch(x86/x64)プラットフォームのみの変更(xarch-gated)
  • 内部 JIT ロウアリング実装の改善で、公開 API への影響なし
  • 破壊的変更なし

#129354 Use SSA-based TryGetRange to fold conditions

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

概要

JIT コンパイラの範囲チェック最適化を改善するPRです。SSA ベースの TryGetRange メソッドをグローバルアサーション伝播時の条件折り畳みに活用し、Span.Slice チェックなどのより多くのケースを最適化できるようにしました。バイナリサイズは約 1.2MB 削減されています。

変更内容

  • src/coreclr/jit/assertionprop.cpp: アサーション伝播ロジックに SSA ベースの範囲計算を統合し、relops の折り畳み時に TryGetRange を呼び出すように変更
  • src/coreclr/jit/compiler.h: TryGetRange メソッドのシグネチャを更新(アクセシビリティ・パラメータ調整)
  • src/coreclr/jit/rangecheck.cpp: 範囲チェックロジックを拡張し、VN ベースのアサーション情報と SSA 情報を組み合わせた範囲計算をサポート
  • src/coreclr/jit/rangecheck.h: TryGetRange 関連の関数シグネチャを追加・変更

パフォーマンスへの影響

  • バイナリサイズ: 約 -1.2MB (linux-x64)
  • コンパイル時間: 平均 0.3~0.4% の増加
  • 最適化により条件式の折り畳みが増加するため、コンパイル時間の小幅な増加は許容範囲内と評価

関連Issue

なし

その他

  • 現在、TryGetRange の呼び出し時に preferred bound をまだ設定していないため、著者は今後これを別途検証予定
  • RangeCheck 内のさらなる性能向上の余地があると著者は指摘しており、段階的な改善を計画中

#129320 Move DSA tests into System.Security.Cryptography

概要

DSAテストスイートを統合し、すべてのDSAテストロジックをSystem.Security.Cryptography.Testsに集約するリファクタリング。従来のSystem.Security.Cryptography.OpenSsl.Tests、System.Security.Cryptography.Csp.Tests、System.Security.Cryptography.Cng.Testsで重複していたテストを排除し、プロバイダー別の派生テストクラスで異なるDSAファクトリ(Default/CNG/CSP/OpenSSL)をテストする構造に変更。

変更内容

  • テストフレームワーク刷新: 静的なDSAFactory/IDSAProviderパターンをインスタンスベースのDSAProvider抽象化に置き換え、既存のDSAテストクラスをabstract化して仮想プロパティでプロバイダーを注入
  • 共有テスト移動: System.Security.Cryptography.Tests配下にDSATestRegistration.*.cs(Default/CNG/CSP/OpenSSL用)を新規追加し、プラットフォーム固有の条件付きコンパイルで統合
  • 従来テストプロジェクトの削減: OpenSsl/Csp/Cng各テストプロジェクトからDSA関連テストソースを削除(csproj編集)
  • ファイル削除: DSAFactory.cs(38行)、DSACngTests.cs(80行)、DSACryptoServiceProviderProvider.cs(25行)など不要なファイルを廃止
  • テスト駆動の改良: DSAImportExport.cs、DSAKeyGeneration.cs、DSASignVerify.cs等で実行時ゲーティングに切り替え、従来の条件付き属性から改善

パフォーマンスへの影響

影響なし

関連Issue

#66338

その他

  • Copilotによる指摘事項: DSACngProvider.Windows.csのSupportsFips186_3がハードコードtrueだが、実際のDSACngはWindows版によって2048ビット対応が異なるため、テストスキップ判定にズレが生じる可能性がある。Windows 8以降のバージョンチェックを追加すべき。
  • このリファクタリングはDSAに限定されており、EC・RSAについては後続PR予定
  • 内部テストフレームワークの変更で公開APIへの影響なし

#129256 Fix OOM message in Native AOT

概要

Native AOT環境でOutOfMemoryException発生時に、Exception.ToString()が失敗してもメモリ割り当てなしで確実なOOMメッセージをstderrに出力できるようにしました。OOM時にメモリ割り当てができない状況下で、信頼性の高い診断情報を提供します。

変更内容

  • src/coreclr/nativeaot/System.Private.CoreLib/src/System/RuntimeExceptionHelpers.cs
    • RuntimeExceptionHelpers.FailFastメソッドにおいて、exception.ToString()が例外をスローする場合、OutOfMemoryExceptionを特別処理して文字列リテラル"Out of memory."を出力するよう修正
    • 関連コメントを更新してフォールバック動作をより明確に記述

パフォーマンスへの影響

影響なし

関連Issue

#129209

その他

  • 内部実装(Native AOT runtime)の変更
  • OOM診断テスト(baseservices/exceptions/OutOfMemoryException)の期待値をクリアするための修正
  • メモリ割り当てなしで実行される文字列リテラルの使用により、OOM状況下での堅牢性を向上

#129208 [release/9.0-staging] Update dependencies from dotnet/runtime-assets

概要

dotnet/runtime-assetsリポジトリから複数のテストデータとランタイムアセットの依存関係を更新するPull Requestです。バージョン9.0.0-beta.26302.4から9.0.0-beta.26309.6へのアップデートが含まれています。

変更内容

  • eng/Version.Details.xml: 依存関係メタデータの更新(28行追加/削除)
  • eng/Versions.props: バージョン情報の更新(14行追加/削除)

更新された依存関係パッケージ(14個):

  • Microsoft.DotNet.CilStrip.Sources
  • 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

なし

その他

このPullRequestは自動化ツール(dotnet-maestro[bot])により作成されたルーチン的な依存関係更新です。release/9.0-stagingブランチを対象としており、2026年6月9日のビルドに基づいています。


#129172 Add doc comment on AsyncValidationAttribute to not make threading assumptions

概要

AsyncValidationAttributeのXMLドキュメントコメントに、属性実装者が非同期検証時に単一スレッド実行を前提としてはいけないという明示的な警告を追加しました。並列実行の可能性を明確にして、属性作成者が適切にスレッドセーフな実装を行うよう促します。

変更内容

  • System.ComponentModel.Annotations: AsyncValidationAttributeのドキュメントコメントに、スレッド安全性に関する注意事項を追加(並列呼び出しの可能性について)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

このPRはドキュメント変更のみであり、ランタイム動作への影響はありません。公開APIの仕様を文書レベルで明確化するものです。


#129127 Clarify JIT-EE method placement in add-new-jit-ee-api skill

  • 作成者: @Copilot
  • 作成日時: 2026年06月08日 13:13:57(UTC)
  • マージ日時: 2026年06月17日 15:11:56(UTC)
  • ラベル: area-CodeGen-coreclr

概要

JIT-EE (JIT-VM) インターフェースメソッドの追加に関するスキルドキュメントを更新し、新しいメソッド追加時の位置やソート順序に関する制限がないことを明確化しました。ドキュメントの各ステップで繰り返される「特定位置への追加」という指示を削除し、実装ステップセクションの最上部に単一のNOTEを追加することで、位置やソート順は任意であることを明記しています。

変更内容

  • .github/skills/add-new-jit-ee-api/SKILL.md: 実装ステップセクションの先頭に、新しいJIT-EEメソッドの位置やソート順序は重要でなく、「末尾に追加」や「類似シグネチャ近く」といった提案は単なる推奨デフォルトに過ぎないことを明記するNOTEを追加(+2/-0)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

このPRは実装的な変更ではなく、開発者向けドキュメント(スキル定義)の改善です。JIT-EEインターフェース追加時のコード設計上の柔軟性を明確にするもので、実際のランタイム動作には影響しません。


#129049 Make scheduled outerloop builds succeed when only Helix tests fail

概要

スケジュール実行時のouterloopパイプラインが、Helixテスト失敗により不必要に再キューされる問題を修正します。always: falseトリガーはAzDoが最後の成功実行以降の変更がある場合のみ新規実行をキューするため、Helixテスト失敗で毎回ビルド失敗状態となり、同一コミットが日々再キューされていました。本修正により、スケジュール実行時のHelixステップでFailOnWorkItemFailureとFailOnTestFailureを無効化し、テスト失敗時も完全成功状態(exit 0)でビルドを終了させます。テスト結果は引き続き可視であり、無駄なHelix作業の再キューを回避できます。

変更内容

  • eng/pipelines/libraries/helix.yml: failOnTestFailuresパラメータを追加(デフォルトtrueで既存動作を保持)し、Helix msbuild呼び出しの/p:FailOnWorkItemFailureと/p:FailOnTestFailureにワイアリング
  • eng/pipelines/libraries/outerloop.yml: スケジュール実行時(Build.Reason == 'Schedule')のみfailOnTestFailures: falseを3つのマトリックス構成(Release/Debug/NET48)に指定

パフォーマンスへの影響

影響なし(パイプライン/テスト実行の効率化が主目的で、実行速度の変更なし)

関連Issue

なし

その他

互換性への影響:

  • 新パラメータはデフォルトtrueのため、helix.ymlの他の呼び出し元への影響なし
  • PR/ローリング/手動実行のouterloopは既存通りHelix失敗で失敗継続
  • スケジュール実行のみ挙動変更
  • ビルド/コンパイルエラーは引き続きスケジュール実行を失敗させる

トレードオフ:スケジュール実行時にFailOnWorkItemFailure=false設定によりテスト失敗だけでなく、ワークアイテムのクラッシュ/タイムアウト/インフラ障害もマスクされますが、結果はHelix/テストレポートで可視であるため、日々の無駄なコミット再キュー防止の目的とのバランスで許容されています。


#128970 Fix ARM32 JIT errors with native int-div

概要

ARM32アーキテクチャでUSE_HELPERS_FOR_INT_DIVが無効化された場合、ネイティブARM除算命令を使用する際のJITコンパイルエラーを修正しました。また、欠落していたGT_UDIVケース(符号なし整数除算)を追加しています。

変更内容

  • codegenarm.cpp: ARM32ネイティブ除算命令の処理を追加・修正(35行追加)
  • codegenarmarch.cpp: ARM共通アーキテクチャ向けの除算処理を新規実装(36行追加)
  • lower.cpp: 除算操作の下位化ロジックを調整(12行追加/10行削除)
  • morph.cpp: AST変換時の除算処理を修正(3行追加/2行削除)
  • codegenarm64.cpp: 除算関連の処理を整理(1行追加/27行削除)
  • gentree.cpp: 除算ノードのハンドリングを修正(3行追加/1行削除)
  • codegen.h: 新規メソッド宣言を追加(1行追加)
  • emitarm.cpp: ARM発行処理の軽微な修正(1行追加/1行削除)

パフォーマンスへの影響

ARM32で除算時にヘルパー関数の呼び出しを回避し、ネイティブ除算命令を直接使用することで、除算操作のオーバーヘッドが削減されます。

関連Issue

#128970

その他

なし


#128962 Fix for 127747

概要

JIT最適化関数 fgOptimizeHWIntrinsic において、SIMD HWIntrinsic の ADD(NEG(a), b) => SUB(b, a) 変換時にオペランドの評価順序を安全に入れ替えられるかを確認する gtCanSwapOrder チェックが欠落していた問題を修正します。この欠落により、副作用を持つ式で不正な最適化が発生し、コンパイラアサーション失敗を引き起こしていました。

変更内容

  • src/coreclr/jit/morph.cpp: fgOptimizeHWIntrinsic 関数内で、SIMD Add 操作の最適化時に gtCanSwapOrder(op1, op2) チェックを追加。オペランド順序の入れ替えが安全でない場合は最適化をスキップするようにしました。
  • src/tests/JIT/Regression/JitBlue/Runtime_127747/Runtime_127747.cs: 回帰テストケース追加。COMMA式(副作用あり)を含む SIMD 操作で問題が再発しないことを検証します。
  • src/tests/JIT/Regression/JitBlue/Runtime_127747/Runtime_127747.csproj: テストプロジェクト設定ファイル。

パフォーマンスへの影響

影響なし。この修正は最適化の正確さを向上させるもので、不正な最適化を防止しています。

関連Issue

#127747

その他

修正は既存の fgOptimizeAddition 関数で実装されていた同一の安全性チェックを、fgOptimizeHWIntrinsic にも適用するもの。コンパイラ内部実装(JIT morph フェーズ)の修正であり、公開APIには影響しません。


#128869 Add support for properties in COM source generator

概要

COM Interface Generator に プロパティとインデクサーのサポート を追加します。[GeneratedComInterface] インターフェイスで C# プロパティを宣言でき、各アクセサーが vtable スロットにマッピングされます。これにより、生成される ABI が組み込み COM interop と一致し、より自然な C# インターフェイス設計が可能になります。プロパティ、インデクサー、デフォルト実装メンバー(DIM)のサポートも含まれます。

[GeneratedComInterface]
public partial interface IProperties
{
    int IntProperty { get; set; }  // getter: slot 3, setter: slot 4
    string StringProperty { get; set; }
}

[GeneratedComInterface]
public partial interface IIndexers
{
    int this[int i] { get; set; }  // indexer also mapped to vtable slots
}

変更内容

  • ComMethodInfo.cs : プロパティを get/set アクセサー メソッド ペアとして扱い、DIM メンバーのサポートを追加
  • ComInterfaceGenerator.cs : 生成された get/set ハーフを単一のプロパティ宣言にマージ;派生インターフェイス用のプロパティシャドウを生成(+447 行)
  • VirtualMethodPointerStubGenerator.cs : プロパティ形状の managed-to-native スタブを生成;プロパティアクセサー呼び出しロジックを追加
  • IncrementalMethodStubGenerationContext.cs : StubMemberKind 列挙と プロパティアクセサー名処理を導入;プロパティ対応 TemplateName を公開
  • GeneratorDiagnostics.cs : 非サポートのプロパティ形状(indexer/init など)、DIM マーシャリング属性に関する診断を追加
  • MarshalUsingAttribute : AttributeUsage を Property を含めるように拡張(ランタイムおよび ref アセンブリ)
  • デザインドキュメント : Properties.md(新規)、DefaultImplementedMembers.md(新規)、DerivedComInterfaces.md(更新)、Compatibility.md(更新)を追加
  • テスト資産 : IProperties.cs、IDerivedProperties.cs、IPropertyMarshalling.cs、IPropertyShadowing.cs など複数のテストインターフェイス、native shim(Properties.cs、DerivedProperties.cs)を追加
  • ユニット/統合テスト : Compiles.cs、CompileFails.cs、CodeSnippets.cs、IPropertiesTests.cs、IDerivedPropertiesTests.cs、IDimMembersTests.cs を追加/拡張
  • リソース : 多言語対応の新しい診断メッセージを Strings.resx および xlf ファイルに追加

パフォーマンスへの影響

影響なし

関連Issue

#96502、#122708

その他

  • 非サポート機能 : init キーワード付きアクセサー、既定で実装されたメンバー(DIM)への [MarshalUsing] 属性(DIM は vtable スロットを割り当てない)
  • 新機能 : プロパティは new 修飾子で明示的なシャドウイングをサポート;各アクセサーに `[Marshal

#127763 Fix segfault in GC standalone large pages emulation mode (segments path)

概要

GC standalone large pages emulation mode(セグメントパス)でのセグメンテーション違反(segfault)を修正しました。GCLargePages=2(エミュレーションモード)の際、メモリが予約されたままコミットされていなかったため、アクセス時にクラッシュが発生していました。virtual_alloc関数にint large_page_configパラメータを追加し、エミュレーションモードで正しくVirtualReserve + VirtualCommitを実行するように対応しました。

変更内容

  • src/coreclr/gc/init.cpp: virtual_alloc関数のシグネチャを変更し、bool use_large_pages_pパラメータからint large_page_configパラメータに変更(0=large pages なし、1=実 large pages、2=エミュレーション)。呼び出し側でlarge_page_configを一度計算してreserve_initial_memoryに渡すことで、静的フィールドlarge_pages_emulation_mode_pへのアクセスを排除しました。

パフォーマンスへの影響

影響なし

関連Issue

#127668

その他

  • テストはper-object-heap hard limits(GCHeapHardLimitSOH/LOH/POH)を使用するように更新されました。これはセグメントパスで large pages を使用する際、各セグメントが full hard limit にサイズ設定されるため必要な変更です。

目次