Pull Request on 2026年06月25日

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

注意点

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


目次

  1. #129843 [mono] Fix lock-free mempool chunk under-allocation by 8 bytes
  2. #129839 Fix blob type in CopyWithPrivateKey for ML-DSA
  3. #129838 [wasm] Enable Vector128 fast paths on Wasm via PackedSimd: hex/Guid, UTF-8, SearchValues, Teddy, Adler32/XXH3
  4. #129837 Use assembly simple name in ReadyToRun log when path is empty
  5. #129831 Pass correct search path to DllImportResolver for default flags on Mono
  6. #129830 Use indirect field access for types spanning multiple inexact compilation units
  7. #129829 Fix R2R GC ref map mismatch for unboxing stubs
  8. #129824 Update Alpine infra images to 3.24
  9. #129818 Root DotNetRuntimeContractDescriptor export against linker GC in NativeAOT
  10. #129816 JIT/wasm: bail R2R for calls passing 16-byte SIMD by value
  11. #129815 [wasm R2R] Align 8-byte stack locals and keep frames 16-aligned
  12. #129814 Fix windows-arm64 timeout floor to use numeric comparison
  13. #129811 [release/11.0-preview6] Add Stream wrappers for memory and text-based types
  14. #129809 Use span.Min/Max helpers to speed up SearchValues.Create
  15. #129799 Streamline --arch arg with --os
  16. #129789 [S390X] fix utf8->utf16 conversion test case failures
  17. #129781 Use SearchValues to scan for characters to escape with default Json options
  18. #129779 Use Process.RunAndCaptureText in src/tests child-process helpers
  19. #129768 Add ZstandardDecompressionOptions for symmetric decoder configuration
  20. #129767 Add "load instructions" step to code-review skill
  21. #129747 Check for ComInterop case for async variants in crossgen2
  22. #129671 Delete debugger regdisplay
  23. #129643 JIT: Fix "Inconsistent profile data" during Head and tail merge (Tier1-OSR)
  24. #129578 Added EmptyServiceProvider
  25. #129565 Remove SafeEcKeyHandle
  26. #129552 Consolidate EC tests into S.S.C.
  27. #129533 JIT: fix opt-repeat divide-by-zero miscompile (#129386)
  28. #129345 Implement DacDbi cDAC APIs CreateRefWalk, DeleteRefWalk, WalkRefs
  29. #129299 Upgrade Emscripten to 5.0.6 & LLVM to 23
  30. #128652 [R2R] Expand discovery of non-generic virtual methods on generic types
  31. #128412 Fix PGO instrumentation for libcoreclr.so static libraries

#129843 [mono] Fix lock-free mempool chunk under-allocation by 8 bytes

  • 作成者: @pavelsavara
  • 作成日時: 2026年06月25日 10:31:13(UTC)
  • マージ日時: 2026年06月25日 23:47:13(UTC)
  • ラベル: area-VM-meta-mono

概要

Monoランタイムのlock_free_mempool_chunk_new関数におけるメモリアロケーション不足バグを修正しました。チャンク内のメモリポインタを16バイト境界にアライン調整する際、サイジングループが実際の利用可能サイズより8バイト少なく計算していたため、特定のページ境界サイズ(例:4KBページで4072バイト)でアサーションエラーが発生し、ランタイムがSIGABRTで中止していました。

修正内容:

// 変更前
while (size - sizeof (LockFreeMempoolChunk) < GINT_TO_UINT(len))

// 変更後
while (size - ALIGN_TO (sizeof (LockFreeMempoolChunk), 16) < GINT_TO_UINT(len))

変更内容

  • src/mono/mono/metadata/memory-manager.c: チャンク内メモリポインタのアライメント後の実際の利用可能サイズを正確に反映するよう、サイジングループの計算を修正(16バイト境界でアライン調整されたsizeof(LockFreeMempoolChunk)を使用)

パフォーマンスへの影響

影響なし(アロケーションの安全性を確保するための修正で、パフォーマンス特性は変わらない)

関連Issue

なし

その他

  • 影響範囲: Monoランタイムの非同期AOT(Ahead-of-Time)アンワインド/例外情報デコードパス。EventPipe SampleProfilerがスタックウォークを行う際にのみ発生
  • 検出経緯: CI環境のMono LLVM完全AOT(x64)テストで、tracing/eventpipe/providervalidationおよびrundownvalidationテスト中に散発的なSIGABRTとして検出されていた
  • 根本原因: 既存コード(数年前から存在)の問題で、最近の変更は関連していない
  • 検証済み: 決定論的な再現、実際のMonoランタイムでのアサーション再現、修正後の動作確認(境界をまたぐアロケーションを含む)すべてで検証完了

#129839 Fix blob type in CopyWithPrivateKey for ML-DSA

概要

ML-DSAキーのシード値を持つ場合、BCryptからシードblobとしてエクスポートされるが、NCryptへのインポート時に誤ってプライベートキーblobフォーマットで指定していた問題を修正。最近のWindowsインサイダービルドでテストが失敗していたため、エクスポートとインポートのblobタイプを一致させるように修正。

変更内容

  • MLDsaImplementation.CreateCng.cs: CreateEphemeralCng()メソッド内で、_hasSeedが真の場合にシードblobフォーマット(CngKeyBlobFormat.EccFullPrivateBlobなど適切なシードフォーマット)を使用するように修正。BCryptでエクスポートされるblobタイプとCngでのインポート時のフォーマット指定を一致させた。

パフォーマンスへの影響

影響なし

関連Issue

#129839

その他

  • 最近のWindows Insiderビルドにおいて、Windows内部でblobタイプの検証が厳格になった可能性がある。以前のビルドではmagic numberのみを参照していたが、現在は明示的に指定されたblobタイプの検証が行われるようになった。
  • 修正対象は内部実装(System.Security.Cryptographyライブラリの非公開メソッド)であり、破壊的変更ではない。

#129838 [wasm] Enable Vector128 fast paths on Wasm via PackedSimd: hex/Guid, UTF-8, SearchValues, Teddy, Adler32/XXH3

  • 作成者: @lewing
  • 作成日時: 2026年06月25日 04:54:53(UTC)
  • マージ日時: 2026年06月25日 20:16:26(UTC)
  • ラベル: area-System.Numerics

概要

WebAssembly(Wasm)上でPackedSimdをサポートすることにより、既存のVector128ベースの高速パスをブラウザ環境で有効化します。16進数/Guid形式化、UTF-8検証・変換、Teddy文字列検索、Adler32/XXH3ハッシング計算などの複数のSIMD最適化パスをWasm環境で利用可能にしました。PackedSimd.IsSupportedチェックを既存のSse2/AdvSimdチェックと並列して追加し、Mono AOT互換性の問題(コンパイル時定数が必要なPackedSimd.Shuffle)を回避するためPackedSimd.SwizzleとORの組み合わせで実装しています。

変更内容

  • Vector128.cs: UnpackLow/UnpackHighにPackedSimd実装を追加(PackedSimd.Swizzle + OR で構成)
  • HexConverter.cs: 16進数エンコーディング系メソッドの条件分岐をPackedSimd.IsSupported対応に拡張
  • Guid.cs: Guid形式化のVector128高速パスゲートをPackedSimd対応に拡張
  • Utf8Utility.Validation.cs: GetPointerToFirstInvalidCharにASCIIスキャン用PackedSimdパスを追加(LoadUnsafe + ExtractMostSignificantBits活用)
  • Utf8Utility.Transcoding.cs: UTF-8変換時の8文字・4文字ループにPackedSimd.ConvertNarrowingSaturateUnsignedベースの実装を追加
  • TeddyHelper.cs: Teddy多文字列検索のPackedSimdベース実装を追加(ロード、ニブル抽出、シャッフル、右シフト操作等)
  • StringSearchValues.cs/AsciiStringSearchValuesTeddyBase.cs: Teddy検索の初期化・実行ゲートに[CompExactlyDependsOn]属性を追加
  • ProbabilisticMap.cs: SearchValues<char>のビットマップレイアウト選択とContainsMask16CharsにPackedSimd分岐を追加
  • Adler32.cs/XxHashShared.cs: PackedSimd.AddPairwiseWideningとMultiplyWideningLower/Upperを活用し、3~5操作/反復を1操作に削減

パフォーマンスへの影響

Adler32/XXH3での改善が顕著:ペアワイズ加算と乗算ワイド化により、反復あたりの操作数を3~5から1に削減。その他のSIMD最適化パス(Guid形式化、UTF-8検証、Teddy検索)も、Wasm環境での従来の非ベクトル化処理からSIMD活用に転換することで速度向上を期待。

テスト実施時点ではWasm環境での具体的なベンチマーク数値は記載されていませんが、エンドツーエンドテスト(browser-wasm V8 v15)で全テストスイート合格を確認。

関連Issue

なし

その他

  • AOT互換性: Mono AOT環境ではVector128.Create(...)をコンパイル時定数として折り畳めずPackedSimd.ShuffleがPlatformNotSupportedExceptionを発生。

#129837 Use assembly simple name in ReadyToRun log when path is empty

概要

ReadyToRun ログで、ファイルパスが空の場合(WASM環境のメモリ上/Webcilアセンブリなど)にアセンブリ名が記録されていない問題を修正しました。PEAssembly::GetPath()が空の場合はPEAssembly::GetSimpleName()にフォールバックしてモジュール識別情報をログに含めるようにします。

変更内容

  • src/coreclr/vm/readytoruninfo.cpp: ログ出力時にパスが空の場合、シンプル名(アセンブリ名)をフォールバック値として使用するロジックを追加(+5/-1)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

この変更はWASMやメモリ上のアセンブリなど、ファイルシステムパスを持たない環境での診断機能(ReadyToRun ログ出力)の改善です。ランタイムの内部実装変更であり、公開APIの変更はありません。


#129831 Pass correct search path to DllImportResolver for default flags on Mono

  • 作成者: @elinor-fung
  • 作成日時: 2026年06月25日 00:41:43(UTC)
  • マージ日時: 2026年06月25日 17:40:43(UTC)
  • ラベル: area-Interop-mono

概要

MonoのDllImportResolverが正しいsearchPath値を受け取るよう修正します。ユーザーがDefaultDllImportSearchPaths属性を指定していない場合、Monoの内部デフォルト(AssemblyDirectory)ではなくnullが渡されるようになります。これにより、Monoの動作がCoreCLR/NativeAOTおよびDllImportResolverの公開契約に準拠します。

変更内容

  • src/mono/mono/metadata/native-library.c: リゾルバーにnullを渡すべきかどうかを判定する際、flags != 0ではなくuser_specified_flagsを使用するよう修正。これにより、ユーザーが明示的に属性を指定した場合のみsearchPathがnull以外となります。
  • src/tests/Interop/DllImportSearchPaths/DllImportSearchPathsTest.cs: リゾルバーが観測するsearchPathがDefaultDllImportSearchPaths属性の値(または属性が無い場合はnull)と一致することを検証するテストを追加。

パフォーマンスへの影響

影響なし

関連Issue

#129798、#114756

その他

  • この修正はバージョン10へのバックポートが予定されています。
  • DllImportResolverの仕様では、searchPathパラメータは属性値、または属性が存在しない場合はnullであるべきです。修正前、NativeLibrary.Loadにこの誤った値を転送するリゾルバーは、デフォルト検索(dlopen/LoadLibrary)を実行しなくなっていました。

#129830 Use indirect field access for types spanning multiple inexact compilation units

  • 作成者: @jtschuster
  • 作成日時: 2026年06月25日 00:20:26(UTC)
  • マージ日時: 2026年06月25日 22:02:01(UTC)
  • ラベル: area-ReadyToRun

概要

crossgen2 R2R コンパイルで、複数の inexact compilation units(バージョン番号は固定されるが composite image への組み込み方が実行時に決まるアセンブリ)にまたがる参照型のフィールドレイアウトがコンパイル時と実行時で異なることによる Verify_FieldOffset failfast を修正します。EncodeFieldBaseOffset でこのケースを検出し、baked offset の代わりに間接的な実行時解決フィールドオフセット (ENCODE_FIELD_OFFSET) にルーティングします。

変更内容

  • src/coreclr/tools/aot/ILCompiler.ReadyToRun/JitInterface/CorInfoImpl.ReadyToRun.cs
    • EncodeFieldBaseOffset メソッドに新しい条件分岐を追加(19行追加)
    • TypeLayoutCompilationUnits(pMT).HasMultipleInexactCompilationUnits が true の場合、SymbolNodeFactory.FieldOffset 経由の間接フィールドオフセット (ENCODE_FIELD_OFFSET) を使用
    • この条件判定を既存の IsInheritanceChainLayoutFixedInCurrentVersionBubble チェックの前に配置し、不正な baked offset の使用を防止

パフォーマンスへの影響

影響なし。間接フィールドアクセスへのルーティングは、レイアウト検証の失敗または実行時の不正なメモリアクセスを防ぎ、正確性を優先させるための修正です。

関連Issue

#128968

その他

  • crossgen2-composite Large Version Bubble (LVB) R2R テストで検出された問題
  • --verify-type-and-field-layout フラグでコンパイルされた際に発生
  • UnixConsoleStream._useReadLine (System.Console + corelib) と XmlJsonReader._complexTextMode (System.Private.DataContractSerialization + System.Private.Xml + corelib) で実証
  • binarytrees-6 と JsonBenchmarks での end-to-end 検証により修正を確認

#129829 Fix R2R GC ref map mismatch for unboxing stubs

  • 作成者: @jtschuster
  • 作成日時: 2026年06月25日 00:12:57(UTC)
  • マージ日時: 2026年06月25日 21:30:22(UTC)
  • ラベル: area-ReadyToRun

概要

ReadyToRun(R2R)イメージにおいて、アンボックス化スタブのメソッド参照が不正なコンパクトトークン形式にエンコードされ、GCリファレンスマップの不整合を引き起こしていた問題を修正しました。特にLarge Version Bubbleでコンパイルされたイメージにおいて、box int; tail.callvirt System.Object::ToString()のようなコードがチェックビルドでアサート失敗していました。

変更内容

  • MethodFixupSignature.cs: MethodEntryフィックアップの最適化ガードに&& !_method.Unboxing条件を追加し、アンボックス化スタブが完全なメソッドシグネチャエンコーディングパスにフォールスルーするよう修正
    • これによりREADYTORUN_METHOD_SIG_UnboxingStubフラグが確実に保存される
    • コンパイル側で正しいGC参照型(R)が生成され、ランタイム側での解釈と一貫性を保証

パフォーマンスへの影響

影響なし。通常の非アンボックス化ケースはコンパクトトークン形式の最適化を継続使用するため、サイズ・パフォーマンス低下なし。

関連Issue

#129778

その他

  • テストJIT/Regression/JitBlue/DevDiv_754566で検証済み(Large Version Bubble有効時のみ問題が顕在化)
  • R2RDumpによる確認で、修正後のイメージではアンボックス化スタブが[UNBOX] (METHOD_ENTRY)フラグ付きでエンコードされ、通常の呼び出しはコンパクト形式を維持していることを確認

#129824 Update Alpine infra images to 3.24

  • 作成者: @richlander
  • 作成日時: 2026年06月24日 22:26:20(UTC)
  • マージ日時: 2026年06月25日 17:53:27(UTC)
  • ラベル: area-Infrastructure

概要

AlpineベースのインフラストラクチャイメージをAlpine 3.23からAlpine 3.24へアップグレードするビルド・テストパイプラインの更新です。ビルドコンテナ、Helix(テスト基盤)のx64/arm32/arm64アーキテクチャ向けイメージ参照が一括更新されます。

変更内容

  • ビルドコンテナ: alpine-3.23-amd64 → alpine-3.24-amd64
  • Helixプラットフォーム(x64): Alpine.323/alpine-3.23-helix-amd64 → Alpine.324/alpine-3.24-helix-amd64
  • Helixプラットフォーム(arm32): Alpine.323/alpine-3.23-helix-arm32v7 → Alpine.324/alpine-3.24-helix-arm32v7
  • Helixプラットフォーム(arm64): Alpine.323/alpine-3.23-helix-arm64v8 → Alpine.324/alpine-3.24-helix-arm64v8

変更対象ファイルは5つのパイプライン定義ファイル:

  • eng/pipelines/common/templates/pipeline-with-resources.yml
  • eng/pipelines/coreclr/templates/helix-queues-setup.yml
  • eng/pipelines/helix-platforms.yml
  • eng/pipelines/installer/helix-queues-setup.yml
  • eng/pipelines/libraries/helix-queues-setup.yml

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • 検証済み:MCRレジストリに対して各タグのダイジェストを確認済み
  • Alpine 3.23はEOL 2027-11-01、Alpine 3.24はEOL 2028-06-01
  • linux-musl x64および arm64パスはデフォルトのruntimeパイプラインでカバーされるため、追加パイプラインは不要

#129818 Root DotNetRuntimeContractDescriptor export against linker GC in NativeAOT

概要

NativeAOT の Linux/ELF バイナリで、DotNetRuntimeContractDescriptor シンボルが linker の --gc-sections により削除されていた問題を修正します。このシンボルは cDAC(Compact Debugger Access Component)のコントラクトディスクリプタ検出に必要です。Windows では .def EXPORTS により適切にルート化されていましたが、Linux/ELF では version script のみでは不十分でした。

修正により、ELF プラットフォームで -Wl,-u,DotNetRuntimeContractDescriptor を linker オプションに追加し、シンボルを GC ルートとして強制的に保持します。

変更内容

  • src/coreclr/nativeaot/BuildIntegration/Microsoft.NETCore.Native.targets: LinkNative ターゲットに -Wl,-u,DotNetRuntimeContractDescriptor を追加
    • 適用条件: Windows/Apple/Browser 以外で DebuggerSupport != 'false' の場合
    • ELF プラットフォーム(Linux など)でシンボルを linker 死コード削除から保護

パフォーマンスへの影響

影響なし。本変更は linker がシンボルを保持するよう指示するのみで、実行時の動作やパフォーマンスに変化はありません。

関連Issue

なし

その他

  • CoreCLR の single-file apphost は既に同様の修正(src/native/corehost/apphost/static/CMakeLists.txt)を実装していたもの
  • 既存の --export-dynamic-symbol IlcArgs はシンボルのエクスポート可視性を制御し、本修正はシンボル保持を保証するため、両者は相補的
  • Windows と Apple は既に適切にルート化されているため除外
  • DebuggerSupport=false の場合はシンボルが除外されるため、既存の動作は変わらない

#129816 JIT/wasm: bail R2R for calls passing 16-byte SIMD by value

概要

WebAssembly上で、16バイトのSIMD型(Vector128/Vector<T>)を値で渡す呼び出しにおいて、署名ではv128が要求されるのに対し、コード生成はi32(参照へのポインタ)を生成するため、WebAssemblyモジュール検証が失敗する問題を修正しました。該当メソッドをR2R非対応としてマークすることで、インタプリタにフォールバックさせ、モジュール検証の失敗を防ぎます。これによりSystem.Private.CoreLib.wasmの無効関数が59個から0個に削減されます。

変更内容

  • src/coreclr/jit/codegenwasm.cpp (+7行)
    • CodeGen::genCallInstructionで呼び出し署名を構築する際に、WasmValueType::V128引数を検出
    • SIMD16を値で渡す引数がある場合、NYI_WASM_SIMD("SIMD16 call argument")を呼び出してR2R compilation をベイル(既存の「SIMD16 local load」ベイルと一貫性あり)

パフォーマンスへの影響

影響なし。この変更は無効なWebAssemblyモジュール生成を防ぐもので、該当メソッドはインタプリタにフォールバックします。SIMD16を値で渡す呼び出しのABI実装までの一時的な対応です。

関連Issue

なし

その他

WebAssemblyのcall_indirect検証失敗エラー(call_indirect[N] expected type v128, found local.get of type i32)を根本的に解決するには、SIMD-by-value呼び出しABIの実装が必要です。


#129815 [wasm R2R] Align 8-byte stack locals and keep frames 16-aligned

概要

WebAssembly R2R (ReadyToRun) 構成において、64ビットJSInterop値(long/BigInt、double、DateTime、Int52)がマネージド↔JS境界で破損する問題を修正します。根本原因は8バイトスタック局所変数が4バイトアライメントのままで、フレームサイズのアライメント漂流により、JSのHEAP64/HEAPF64型付き配列ビューが要求する8バイトアライメント要件を満たしていなかったことです。

変更内容

  • src/coreclr/jit/lclvars.cpp
    • lvaAllocLocalAndSetVirtualOffsetでTARGET_WASMに対して既存の8バイト局所変数アライメントロジックを有効化
    • lvaAlignFrameでTARGET_WASMのフレームサイズをSTACK_ALIGNまでラウンドアップして、ネストされた呼び出し全体でアライメントの漂流を防止

パフォーマンスへの影響

影響なし。この変更は正確性の修正であり、パフォーマンス上の回帰は想定されていません。フレームサイズのパディング追加は限定的です。

関連Issue

#129802

その他

  • 修正検証済み:wasm cross-JITのクリーンビルド、crossgen2-wasmのJitDump出力でアライメント確認、インタプリタでのJSImport BigInt/doubleエコーテスト合格
  • 本PR生成はGitHub Copilotの支援を受け、投稿前にレビュー済み
  • 統合テストは既存のSystem.Runtime.InteropServices.JavaScript.UnitTestsスイートのcoreclr-wasm-R2Rレーンでカバー予定

#129814 Fix windows-arm64 timeout floor to use numeric comparison

概要

Azure DevOps パイプラインテンプレート global-build-job.yml の windows-arm64 タイムアウト判定ロジックを修正しました。timeoutInMinutes パラメータが文字列型として宣言されているため、gt(parameters.timeoutInMinutes, 75) は字句順比較(lexicographic compare)を行い、'360' < '75' という結果になってしまっていました。これにより、75分以上の明示的なタイムアウト値が正しく反映されず、ビルドが予期せずタイムアウトしていました。比較演算子の被演算数を入れ替えることで、数値比較に修正しました。

変更内容

  • eng/pipelines/common/global-build-job.yml: タイムアウト判定の条件式を gt(parameters.timeoutInMinutes, 75) から lt(75, parameters.timeoutInMinutes) に変更。左被演算数を数値リテラルにすることで、ADO が右被演算数を数値に変換し、正確な数値比較が実行されるようになりました。

パフォーマンスへの影響

直接的なパフォーマンス改善ではなく、タイムアウト値の設定が正しく機能するようになったため、不要なビルド失敗の削減につながります。75分以上のタイムアウト値を指定した場合、その値が正しく適用されるようになりました。

関連Issue

#129814

その他

runtime-coreclr libraries-jitstressregs の windows-arm64 ビルドが 75 分でタイムアウトしていた問題(ビルド #1474264)を解決します。パラメータ宣言自体は変更されていません。


#129811 [release/11.0-preview6] Add Stream wrappers for memory and text-based types

概要

.NET 11.0-preview6向けのバックポート。メモリおよびテキストベースの型に対する4つの新しい公開Stream Wrapperの統合を完了するPR。 StringStream、ReadOnlyMemoryStream、WritableMemoryStream、ReadOnlySequenceStreamを新規追加し、#82801に対応します。

変更内容

  • 新規Stream実装クラス

    • StringStream.cs:文字列/ReadOnlyMemory<char>をStreamとして提供(303行)
    • ReadOnlyMemoryStream.cs:ReadOnlyMemory<byte>の読み取り専用Streamラッパー(195行)
    • WritableMemoryStream.cs:書き込み可能なメモリStreamラッパー(285行)
    • ReadOnlySequenceStream.cs:ReadOnlySequence<byte>の読み取り専用Streamラッパー(277行)
  • API参照の拡張

    • System.Runtime.cs:新規Streamクラスの公開API定義(+65行)
    • System.Memory.cs:ReadOnlySequenceStreamの参照定義(+28行)
  • 包括的なテスト追加

    • StringStream:準拠テスト(131行)、String/Memory対応テスト(237行)
    • ReadOnlyMemoryStream:準拠テスト(28行)、単体テスト(50行)
    • WritableMemoryStream:準拠テスト(36行)、単体テスト(114行)
    • ReadOnlySequenceStream:準拠テスト(80行)、ネイティブメモリ対応テスト
  • 関連クラスの軽微な修正

    • MemoryStream.cs:実装の調整(8行変更)
    • JsonXmlDataContract.cs:互換性対応(3行変更)
    • リソース文字列の追加(9行)

パフォーマンスへの影響

影響なし

関連Issue

#82801、#126669

その他

このPRはrelease/11.0-preview6ブランチへのバックポートであり、元のPR #126669を参照してください。新規Streamクラスは公開APIとして追加され、System.PrivateCoreLibに統合されます。


#129809 Use span.Min/Max helpers to speed up SearchValues.Create

  • 作成者: @MihaZupan
  • 作成日時: 2026年06月24日 17:00:01(UTC)
  • マージ日時: 2026年06月25日 02:04:28(UTC)
  • ラベル: area-System.Memory

概要

SearchValues.Createの範囲検出処理で手動のmin/maxループをReadOnlySpan<T>.Min()/.Max()ヘルパーに置き換え、コードの簡潔化とパフォーマンス向上を目指すもの。IMinMaxValue<T>制約の削除により、より多くの型に対応可能になります。

変更内容

  • SearchValues.cs: TryGetSingleRange<T>メソッドでminInclusive/maxInclusiveの計算をspan Min()/Max()で実装し、IMinMaxValue<T>ジェネリック制約を削除
  • BDD.cs: デバッグ専用シリアライザのSerializeToBytesメソッドでspan Min()/Max()を使用してmin/max計算を実装

パフォーマンスへの影響

span Min()/Max()ヘルパーは最適化された実装を使用しているため、手動ループより効率的。特にSearchValues.Createの範囲検出時に改善が期待される。具体的なベンチマーク結果の記載はなし。

関連Issue

なし

その他

  • 変更はライブラリ層の内部実装(公開APIの変更なし)
  • IMinMaxValue<T>制約の削除により、より広範な型に対応可能に
  • BDD.csの変更はデバッグ専用コードのため、ランタイムパフォーマンスへの直接的な影響はなし

#129799 Streamline --arch arg with --os

概要

ビルドスクリプトの --arch 引数の指定方法を統一・簡素化する変更です。従来の --$arch フォーマットに加えて、より直感的な --arch $arch フォーマットをサポートすることで、開発ワークフローの柔軟性を向上させます。既存のワークフローを破壊しないよう、両方のフォーマットをサポートしています。

変更内容

  • eng/native/build-commons.sh: --arch 引数の解析ロジックを追加(11行追加)
  • ドキュメント更新: README.md、cross-building.md、ios.md、testing関連ドキュメントで --os/--arch の記述を統一
  • ビルドスクリプト更新:
    • src/tests/build.cmd、src/coreclr/build-runtime.cmd、src/native/libs/build-native.cmd に --arch オプションサポートを追加
    • CI/CDパイプライン定義ファイル(YAML)を複数更新し、パイプライン内での引数フォーマットを統一

パフォーマンスへの影響

影響なし

関連Issue

#129799

その他

  • シェルスクリプト(build.sh)と Windows バッチスクリプト(build.cmd)の両方が更新されており、クロスプラットフォーム対応です
  • 変更は主にビルドシステム・テストインフラストラクチャに関するもので、ランタイムやコンパイラの動作には影響しません

#129789 [S390X] fix utf8->utf16 conversion test case failures

概要

S390Xアーキテクチャ上のUTF-8からUTF-16への変換テストケースの失敗を修正します。前のPull Request(#128577)で導入された修正により、一部のテストケースが失敗するようになったため、その対応を行っています。

変更内容

  • src/native/minipal/utf8.c: UTF-8/UTF-16変換ロジックの調整(6行追加、9行削除)
  • src/coreclr/pal/tests/palsuite/locale_info/MultiByteToWideChar/test4/test4.cpp: テストケース追加(17行追加)
  • src/coreclr/pal/tests/palsuite/locale_info/WideCharToMultiByte/test5/test5.cpp: テストケース追加(21行追加)

内部実装(minipal/utf8.c)のマルチバイト文字変換処理とそれに対応するテストの強化です。

パフォーマンスへの影響

影響なし(テスト追加・バグ修正のみ)

関連Issue

#128577

その他

S390X(IBM POWER Systems向けアーキテクチャ)固有の文字エンコード変換処理に関する修正です。


#129781 Use SearchValues to scan for characters to escape with default Json options

概要

System.Text.Jsonのデフォルトエンコーディング時における文字エスケープ処理の最適化。カスタムJavaScriptEncoderが指定されていない場合、SearchValues<T>とIndexOfAnyExceptを使用して、エスケープが必要な文字の検索において間接参照を削減し、パフォーマンスを向上させます。

変更内容

  • JsonWriterHelper.Escaping.cs: SearchValues<byte>とSearchValues<char>インスタンスを導入し、AllowListで許可されたASCII文字セットを表現。encoder is nullの場合(NET builds)、IndexOfAnyExcept(...)を使用してエスケープが必要な最初の文字/バイトを検索。
  • JsonWriterHelper.cs: エスケープ検索ロジックの呼び出し部分を修正。カスタムエンコーダー非使用時の新しい最適化パスを活用。

パフォーマンスへの影響

改善あり。SearchValues<T>とIndexOfAnyExceptの活用により、デフォルトエンコーディングシナリオでのエスケープ検索処理を高速化。参照リンク内のベンチマーク結果にて具体的な改善値が報告されています。

関連Issue

#129781(Pull Request本体)

その他

  • 変更はNET条件付きコンパイル(#if NET)の下で実装されており、.NET Standard等の古いターゲットフレームワークへの影響はなし。
  • カスタムJavaScriptEncoderが指定される場合は従来のFindFirstCharacterToEncode*メソッドへのフォールバック動作が維持される。

#129779 Use Process.RunAndCaptureText in src/tests child-process helpers

概要

.NET 11の新しいProcess.RunAndCaptureText APIをsrc/tests内の子プロセス実行パターン(stdin不要、ライブプロセス制御不要)に統一する。従来のProcess.Start + 非同期ストリーム読み込み / イベントハンドラーのパターンを置き換え、コード簡潔化と保守性向上を実現。

変更内容

13ファイルでProcess.RunAndCaptureText()/ProcessTextOutputへの移行:

  • テスト基盤: CoreCLRTestLibrary、XUnitLogChecker、ProfilerTestRunner
  • 例外テスト: unhandledTester、stackoverflowtester
  • GCテスト: RFLogging、ReliabilityFramework、memcheck
  • Loaderテスト: PlatformNativeR2R、BinderTracingTest
  • NativeAOT: ValidatorExe、DwarfDump
  • トレーシング: UserEventsRequirements

主な変更:WaitForExit() + ReadToEndAsync()パターンをRunAndCaptureText(...)に統一し、戻り値のProcessTextOutput.StandardOutput/.StandardErrorとExitStatus.ExitCodeを使用。タイムアウト処理もRunAndCaptureText(..., timeout)で一元化。

stdin書き込み、ライブプロセス連携(PID/シグナル/EventPipe)、sudo/root権限が必要なケースは意図的に未変更。

パフォーマンスへの影響

影響なし。APIの統一化による改善(例:タイムアウト処理の簡潔化)が期待されるが、ベンチマーク結果は提供されていない。

関連Issue

なし

その他

このPRは13ファイル全て変更済みでコードレビュー完了(計6~3件のCopilotコメント生成)。破壊的変更なく、テストインフラの内部実装整備に該当。


#129768 Add ZstandardDecompressionOptions for symmetric decoder configuration

概要

System.IO.Compression.Zstandard に新しい ZstandardDecompressionOptions クラスと対応するコンストラクタを追加し、デコーダーとストリームの設定をオプションオブジェクト経由で実施できるようにしました。これにより、ASP.NET Core ミドルウェアなどの呼び出し元がデコーダーのライフタイムをストリームに紐付けて管理できます。

// 新しいオプションベースのストリーム作成方法
var decompressStream = new ZstandardStream(stream, new ZstandardDecompressionOptions
{
    Dictionary = dictionary,
    MaxWindowLog = 24,
}, leaveOpen: true);

変更内容

  • ZstandardDecompressionOptions — 新しい公開クラス。MaxWindowLog (int) と Dictionary (ZstandardDictionary?) プロパティを含み、圧縮オプションと対称的
  • ZstandardDecoder(ZstandardDecompressionOptions) — オプションからウィンドウログと辞書を適用する新しいコンストラクタ
  • ZstandardStream(Stream, ZstandardDecompressionOptions, bool) — ストリームがデコーダーを作成・所有する新しいコンストラクタ(ストリーム破棄時にデコーダーも破棄;既存のデコーダー受け入れオーバーロードはリセットのみで破棄しない)
  • Platform-not-supported スタブをブラウザ/wasi プラットフォーム向けに追加
  • 参照アセンブリを更新

パフォーマンスへの影響

影響なし

関連Issue

#128456

その他

  • テストカバレッジ:351個の Zstandard テストが全て成功
  • 新しいテスト追加:ZstandardDecompressionOptionsTests(プロパティ範囲検証、デフォルト値)、デコーダーコンストラクタテスト(null引数、デフォルト、ウィンドウログ、辞書ラウンドトリップ)、ストリームコンストラクタテスト(null チェック、基本的なデコンプレッション、所有権/破棄処理、辞書ラウンドトリップ)
  • 破壊的変更なし;新しい公開 API の追加のみ

#129767 Add "load instructions" step to code-review skill

  • 作成者: @rcj1
  • 作成日時: 2026年06月23日 20:22:37(UTC)
  • マージ日時: 2026年06月25日 20:44:45(UTC)
  • ラベル: area-skills

概要

コードレビュースキルのワークフロードキュメントを更新し、分析開始前に.github/instructionsからリポジトリ固有の指示を明示的に読み込むステップを追加しました。これにより、Copilotのコードレビューボットがカスタム指示を確実に取得できるようになります。

変更内容

  • .github/skills/code-review/SKILL.md: 「Step 0: Load Relevant Instructions」という新しいステップを追加し、フロントマターに基づいて適用可能な.github/instructionsガイダンスを読み込むよう指示。その後のレビュープロセスステップを番号付け直し。

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

このPRはドキュメント変更のみで、ランタイムコードへの影響はありません。コードレビュー自動化ボットの動作を改善するための設定・ドキュメント更新となります。


#129747 Check for ComInterop case for async variants in crossgen2

概要

crossgen2のJITインターフェースにおいて、COM interop関連のメソッドに対して非同期変種(async variant)の呼び出しが生成されるのを防ぐためのチェックを追加しました。VM側で実装されていたチェックをcrossgen2側にも適用し、呼び出し可能なランタイム非同期エントリポイントが存在しない場合に非同期変種の解決を避けるようにします。

変更内容

  • src/coreclr/tools/Common/JitInterface/CorInfoImpl.cs
    • 非同期変種が使用可能か判断する共有チェック HasCallableAsyncVariant を導入
    • getAsyncOtherVariant で非同期変種選択時に共有チェックを使用
    • CORINFO_TOKENKIND_Await トークン解決時に共有チェックを適用し、条件を満たさない場合はnullを返してフォールバック解決を強制

パフォーマンスへの影響

影響なし

関連Issue

#129739

その他

このPRは、COM interop関連のメソッドに対してcrossgen2で非同期変種の解決がクラッシュ/アサート失敗するシナリオに対処しています。VM側の既存チェックとの整合性を取ることで、コンパイラの内部実装の安定性が向上します。


#129671 Delete debugger regdisplay

  • 作成者: @rcj1
  • 作成日時: 2026年06月21日 17:01:00(UTC)
  • マージ日時: 2026年06月25日 13:37:05(UTC)
  • ラベル: area-Diagnostics-coreclr

概要

DebuggerREGDISPLAY構造体とそれに関連する内部APIをDacDbi API表面から削除し、デバッガーの右側(debugger right-side)のレジスタ/スタックウォーク処理をDT_CONTEXTで直接操作するよう移行するリファクタリングです。これはより大規模なプラットフォーム固有レジスタリーダーの削除に向けた最初の段階です。

変更内容

API表面の変更:

  • 管理/ネイティブDacDbi APIからDebuggerREGDISPLAYを削除(Debugger_STRDataのrdフィールドとConvertContextToDebuggerRegDisplayメソッドを削除)
  • CORDbgGetSPの戻り値型をCORDB_ADDRESSに統一(全プラットフォーム版:AMD64、ARM、ARM64、i386、LoongArch64、RISCV64)

実装の移行:

  • CordbRegisterSet/CordbNativeFrameをDT_CONTEXTを直接保存・使用するよう再設計
  • プラットフォーム固有のREGDISPLAY変換ヘルパー(SetDebuggerREGDISPLAYFromREGDISPLAYなど)を全プラットフォームで削除
  • スタックウォーク処理(rsthread.cpp、rsstackwalk.cpp)をDT_CONTEXT直接操作に変更
  • プラットフォーム別レジスタ読み取り実装(各cordbregisterset.cpp)をDT_CONTEXTベースに統一

削除:

  • dbgipcevents.hからDebuggerREGDISPLAY構造体定義を削除
  • dacdbiinterface.hからConvertContextToDebuggerRegDisplay宣言を削除
  • デバッガー関連ヘルパー宣言・マクロをdebugger.hから削除

パフォーマンスへの影響

影響なし(内部実装の再構成で、APIの外部動作は変わらず)

関連Issue

#129671

その他

このPRはマルチステージリファクタリングの第一段階であり、将来的にプラットフォーム固有レジスタリーダーを完全に削除する準備となっています。変更により、デバッガーがDT_CONTEXT構造体で統一的にレジスタにアクセスできるようになり、将来のメンテナンス性向上につながります。


#129643 JIT: Fix "Inconsistent profile data" during Head and tail merge (Tier1-OSR)

概要

Tier1-OSR(Tier-1 On-Stack Replacement)での「Inconsistent profile data」エラーを修正します。Head and tail mergeの処理中にプロファイルデータの矛盾が生じていた問題に対応し、JITコンパイラのプロファイルデータ整合性を改善します。

変更内容

  • src/coreclr/jit/fgopt.cpp: Head and tail mergeロジックの修正(+32行/-34行)
    • プロファイルデータの矛盾を解決するための制御フロー最適化処理を改善

パフォーマンスへの影響

影響なし

関連Issue

#129401

その他

なし


#129578 Added EmptyServiceProvider

概要

EmptyServiceProviderという新しい公開API(シングルトン)をMicrosoft.Extensions.DependencyInjection.Abstractionsに追加しました。これは何もアプリケーションサービスを含まないIServiceProvider実装で、開発者が独自の空プロバイダー実装を定義する必要がなくなります。new ServiceCollection().BuildServiceProvider()の動作をできるだけ正確に模倣しており、ドロップイン代替として利用可能です。

namespace Microsoft.Extensions.DependencyInjection;

public sealed class EmptyServiceProvider : IKeyedServiceProvider, IServiceProviderIsKeyedService
{
    public static EmptyServiceProvider Instance { get; }
    // IServiceProvider、IKeyedServiceProvider、IServiceProviderIsKeyedService を実装
}

変更内容

  • EmptyServiceProvider の追加:IKeyedServiceProviderとIServiceProviderIsKeyedServiceを実装し、組み込みサービス(IServiceProvider、IServiceScopeFactory、IServiceProviderIsService、IServiceProviderIsKeyedService)を解決可能
  • スコープ対応:IServiceScopeFactory.CreateScope()は空プロバイダー自身を返すスコープを生成
  • ジェネリック列挙対応:IEnumerable<T>要求では空シーケンスを返し、KeyedService.AnyKeyや開いたジェネリック型の処理もリアルプロバイダーと同等
  • 内部リファクタリング:ServiceProvider.VerifyAotCompatibilityをIsDynamicCodeSupportedにリネーム(真偽値を反転)し、RuntimeFeature.IsDynamicCodeSupportedに合わせて命名規則を統一。関連する4つのファイル(CallSiteFactory.cs、CallSiteRuntimeResolver.cs、ExpressionResolverBuilder.cs、IEnumerableCallSite.cs)でこのフラグ使用を更新
  • テスト追加:EmptyServiceProviderTestsで、複数のサービス型とキー(AnyKey、開いたジェネリック、値型の列挙)の組み合わせマトリックスでリアルプロバイダーとの動作比較を実施。NativeAOT環境でも動作確認済み

パフォーマンスへの影響

影響なし

関連Issue

#120198

その他

  • EmptyServiceProviderのスコープ対応は private な入れ子型を使用して実装され、公開APIには露出されていません
  • NativeAOT環境でのIEnumerable<ValueType>要求時のInvalidOperationExceptionも、リアルプロバイダーと同等の動作に対応
  • このPull Requestはアシスタント(GitHub Copilot)の支援を受けて作成されました

#129565 Remove SafeEcKeyHandle

概要

SafeEcKeyHandleを削除し、EC_KEY操作をネイティブレイヤーで一元管理するリファクタリング。EC_KEY-backedのEVP_PKeyのパラメータエクスポートとECDsaOpenSsl/ECDiffieHellmanOpenSslのIntPtrコンストラクタで使用されていた最後の処理をネイティブコードに移行し、マネージド側のハンドル管理を簡素化します。

変更内容

  • SafeEcKeyHandleの削除: マネージドセーフハンドルクラスを完全に削除(SafeEcKeyHandle.Unix.cs)
  • マネージド側のEC_KEY操作の廃止:
    • Interop.EcKey.csとInterop.EcDsa.ImportExport.csの対応するP/Invoke定義を削除
    • ECOpenSsl.ImportExport.csのEC_KEY操作ロジックを削除/簡素化
  • ネイティブレイヤーへの移行:
    • pal_ecc_import_export.c/hでEC_KEYベースのパラメータエクスポート処理を実装
    • pal_evp_pkey_eckey.c/hでEVP_PKey-backed EC_KEY操作を強化
    • entrypoints.cで不要なエクスポート関数を削除
  • IntPtrコンストラクタの更新: ECDsaOpenSsl.csとECDiffieHellmanOpenSsl.csでIntPtr直接操作を削除

パフォーマンスへの影響

影響なし。マネージド・ネイティブ間の境界を変更しただけで、全体的なパフォーマンスには影響なし。

関連Issue

#129565

その他

  • 破壊的変更: SafeEcKeyHandleはpublicではなく内部実装のみのため、公開APIへの影響なし
  • IntPtrコンストラクタは廃止されず、内部実装の詳細がネイティブレイヤーに移行

#129552 Consolidate EC tests into S.S.C.

概要

楕円曲線(ECDSA/ECDH)の暗号テストをSystem.Security.Cryptography.OpenSsl.TestsおよびSystem.Security.Cryptography.Cng.TestsからSystem.Security.Cryptography.Testsに統合し、プロバイダー抽象化を導入してテストの重複を排除します。xUnitの静的メンバー制約を回避するため、条件付き属性の代わりにSkipTestExceptionを使用したランタイムスキップに切り替えます。

変更内容

  • プロバイダー抽象化の導入: ECDsaProviderおよびECDiffieHellmanProvider抽象基底クラスを追加し、Default/CNG/OpenSSLの具体的な実装を作成
  • テストクラスの再構築: 静的テストクラスをインスタンスベースに変更し、仮想化されたプロバイダーアクセッサーを追加
  • テスト登録クラス: 各プロバイダーごとに「テスト登録」リーフクラスをSystem.Security.Cryptography.Testsに追加
  • ランタイムスキップの実装: xUnit条件属性の代わりにConditionalFact/ConditionalTheory + SkipTestExceptionパターンを採用し、SkipTestException.ThrowUnless/ThrowWhenヘルパーを新規追加
  • MemberDataの置換: 静的メンバー参照が必要なケースではテスト内ループに変更
  • 不要なファイルの削除: ECDsaFactory.cs、ECDiffieHellmanFactory.cs、ECDsaStub.csなど従来の静的ファクトリ仲介クラスを削除
  • テストプロジェクトの調整: OpenSsl/CngテストプロジェクトからEC関連の配線を削除し、共通テストプロジェクトで統合

パフォーマンスへの影響

影響なし

関連Issue

#66338、#129320

その他

  • アーキテクチャの改善: テスト基盤の統合により、異なるプラットフォーム(Windows/Unix/Browser/Android)での実装の差異を一箇所で管理可能に
  • テストの内部実装: テスト対象の公開API(ECDsa.Create()、ECDiffieHellman.Create()など)は変更なし
  • スキップロジック: 従来の属性ベースの条件付けからランタイム条件付けへの移行で、より柔軟なテスト実行フロー制御を実現

#129533 JIT: fix opt-repeat divide-by-zero miscompile (#129386)

概要

JIT最適化リピート(JitOptRepeat/STRESS_OPT_REPEAT)時に、整数除算のGTF_DIV_MOD_NO_BY_ZEROフラグが流制御に依存した注釈として動作し、値番号処理やCSE/ループホイスティングが除算を支配的なチェック上に移動させて、誤ったDivideByZeroExceptionを発生させるミスコンパイルの修正。この除算をホイスティング不可にするためGTF_ORDER_SIDEEFFを追加し、流制御に依存した証明の場合のみピン留めする。

変更内容

  • src/coreclr/jit/assertionprop.cpp: optAssertionProp_ModDivでGTF_DIV_MOD_NO_BY_ZEROフラグ設定時にGTF_ORDER_SIDEEFF(GenTree::SetHasOrderingSideEffect)も付与し、ノードが移動不可になるようマーク
  • src/coreclr/jit/gentree.cpp: GT_DIV/GT_UDIV/GT_MOD/GT_UMODをGenTree::OperSupportsOrderingSideEffect()に追加
  • src/tests/JIT/Regression/JitBlue/Runtime_129386/: 新規リグレッションテスト(JitOptRepeat下で実行、修正前は終了コード101で失敗、修正後は100で成功)

パフォーマンスへの影響

影響なし。値ベースの除算(例:定数の0でない除数)は自由に移動可能のまま。流制御に依存した証明の除算のみホイスティング不可となるが、コード生成時の除算チェック省略は継続される。

関連Issue

#129386

その他

この修正は、値番号処理の複数回反復時にGTF_EXCEPTフラグが不正に消失する問題に対処。既存の境界チェックやnullチェックと同様の「証明済みで安全だが移動不可」メカニズムを一貫して適用。OperExceptions、コード生成、StackLevelSetterは変更なく相互矛盾なし。


#129345 Implement DacDbi cDAC APIs CreateRefWalk, DeleteRefWalk, WalkRefs

  • 作成者: @rcj1
  • 作成日時: 2026年06月12日 19:23:20(UTC)
  • マージ日時: 2026年06月25日 01:37:54(UTC)
  • ラベル: area-Diagnostics-cdac

概要

DacDbi参照ウォーク API(CreateRefWalk/DeleteRefWalk/WalkRefs)のcDAC管理実装を追加しました。ネイティブDacDbiインターフェース署名からwalkFQパラメーターを削除し、ダンプベースの検証テストを追加しています。#125728を解決します。

変更内容

  • DacDbi参照ウォーク実装(DacDbiImpl.cs):CreateRefWalk/DeleteRefWalk/WalkRefsを実装し、GCハンドルとスタック参照を列挙するRefWalkヘルパークラスを追加
  • ネイティブインターフェース更新:dacdbi.idl、dacdbiinterface.h、dacdbiimpl.h/cppでwalkFQパラメーターを削除し署名を統一
  • スタックウォーク拡張:IsInteriorPointerプロパティをStackReferenceDataに追加し、GC_CALL_INTERIORフラグに基づいて設定
  • キャッシング機構:LinearReadCacheを追加してGCスキャン中のメモリアクセス最適化
  • テスト追加:DacDbiRefWalkDumpTests.csでGCハンドルテーブルとスタック参照ウォークの検証テストを追加

パフォーマンスへの影響

LinearReadCache導入により、GC参照走査時のメモリアクセスパターンが最適化されます。ベンチマーク結果は提供されていません。

関連Issue

#125728

その他

  • ネイティブDacDbi実装でwalkFQパラメーター削除に伴い、マネージド・ネイティブ間でAPI署名を統一
  • StackReferenceDataへの新しい公開プロパティ追加について、api-approvedのプロセスが明確でない点が指摘されています
  • レビューコメントで複数のポテンシャルな問題が指摘されています:CreateRefWalkでのnullポインター検証、DeleteRefWalkでのGCHandle有効性チェック、WalkRefsでのバッファオーバーフロー防止、インデックス型の整合性(uint vs int)などについて修正が必要な可能性があります

#129299 Upgrade Emscripten to 5.0.6 & LLVM to 23

概要

Emscripten SDK を 3.1.56 から 5.0.6 へ、バンドル LLVM を 19 から 23 へアップグレードします。これに伴い、LLVM 23 への互換性対応、ネイティブビルドフラグの更新、WebAssembly スレッド処理の簡略化(独立した worker JS ファイルの廃止)、ファイルシステムのタイムスタンプ精度向上(ブラウザでのナノ秒対応)を実施します。

変更内容

ツールチェーン・バージョン更新

  • Emscripten: src/mono/browser/emscripten-version.txt, eng/native/tryrun.browser.cmake, eng/Versions.props で 3.1.56 → 5.0.6
  • Windows Python パッケージパス更新: src/mono/mono.proj
  • Arcade/Helix/SDK: global.json で複数バージョンを最新化
  • 関連パッケージバージョン: eng/Version.Details.xml/.props を刷新

ネイティブビルドフラグ

  • CoreCLR browser: eng/native/configureplatform.cmake に -sWASM_LEGACY_EXCEPTIONS=1 を追加、-lbulkmemory を削除
  • Mono バイエンド: exception handling ライブラリの動的選択(eh-wasm vs eh-js)に変更
  • wasm-opt: --enable-multivalue オプションを追加

Mono LLVM バックエンド(LLVM 23 対応)

  • mini-llvm-cpp.cpp/.h: LLVMContextRef を明示的にスレッド化、Intrinsic::getOrInsertDeclaration を LLVM API 2100 以上で使用
  • mini-llvm.c: 非推奨警告抑制、定数マスキング修正(負の int が上位ビットで保持されないよう)

ブラウザ JS ローダーの簡略化

  • 独立した dotnet.native.worker.mjs ファイルを廃止
  • src/mono/browser/runtime/loader/run.ts: メインモジュールを worker として再利用
  • jsModuleWorker リソースとビルド時のコピー処理を削除

ファイルシステムタイムスタンプ

  • System.Private.CoreLib: 特別なブラウザ/WASI ハンドリングを削除、新 Emscripten の futimens/utimensat をサポート
  • テスト: 時間解像度モデルをリファクタリング(秒/ミリ秒/ナノ秒単位)

テストアノテーション

  • 新ツールチェーンに対応する ActiveIssue マーカーを追加
  • Wasm.Build.Tests で dotnet.native.worker.mjs への参照を削除

パフォーマンスへの影響

影響なし

関連Issue

  • #129584 - EventPipeDiagnosticsTests
  • #129581 - Mono interop/COM/VARIANT marshalling
  • #129507 - iOS Half NaN/conversion
  • #129508 - nullable/localloc/GVM tests
  • [#129396](https://

#128652 [R2R] Expand discovery of non-generic virtual methods on generic types

  • 作成者: @BrzVlad
  • 作成日時: 2026年05月27日 15:47:59(UTC)
  • マージ日時: 2026年06月25日 18:22:29(UTC)
  • ラベル: area-crossgen2-coreclr

概要

ReadyToRun (R2R) コンパイラにおいて、ジェネリック型上の非ジェネリック仮想メソッドの依存性検出を拡張しました。従来のGVM(Generic Virtual Method)メカニズムではジェネリックメソッドのみを処理していましたが、本PR により、ジェネリック型インスタンス上の非ジェネリック仮想メソッドスロットも適切にコンパイル対象として検出・解決されるようになります。

変更内容

  • VirtualMethodUseNode.cs: 非GVM仮想スロットの使用を示す新しい依存性ノード(内部実装)を追加
  • InheritedVirtualMethodsNode.cs: 条件付き静的依存性を追加し、仮想スロットが使用されている場合に型ごとの実装をコンパイル対象に含める機構を実装
  • MethodFixupSignature.cs: VirtualEntry fixup時に非GVM仮想スロットを「使用中」として標識
  • TypeFixupSignature.cs: 仮想スロット/インターフェースが存在する場合に型検出を拡張し、InheritedVirtualMethodsNode をキューに追加
  • ReadyToRunCodegenNodeFactory.cs: VirtualMethodUseNode のノードキャッシュとファクトリメソッドを追加
  • テストケース: ジェネリック型上の仮想メソッドの複数シナリオをカバーするテスト(GVM.cs、NonGVM.cs)および検証ロジック(R2RResultChecker.cs)を追加

パフォーマンスへの影響

影響なし。依存性検出の精度向上により、実行時の仮想メソッド呼び出しの正確性が向上しますが、パフォーマンス上の改善または低下は報告されていません。

関連Issue

なし

その他

  • 内部API領域の変更(VirtualMethodUseNode は内部実装ノード)
  • テストで以下のパターンが正常にコンパイルされることを検証:
    • Test1Base<int>:Test1Method()
    • Test2C<int>:Test2Method()
    • ITest3WithDim<int>:ITest3Base.Test3Method()
    • Test4A<int>:ITest4<T>.Test4Method()
    • Test5B<int>:Test5Method()
    • Test6B<int>:Test6Method()
    • ITest7<int>:Test7Method()

#128412 Fix PGO instrumentation for libcoreclr.so static libraries

概要

非Windows環境でのLibcoreClr.soに対するPGO(Profile Guided Optimization)インストルメンテーションを修正しました。従来は直接コンパイルされた2つのソースファイル(mscoree.cpp、exports.cpp)にのみPGOフラグが適用されていましたが、実際のランタイムコードが存在する静的ライブラリ(cee_wks、utilcode、coreclrpalなど)にはインストルメンテーションが不足していました。本修正により、ディレクトリスコープでPGOコンパイルフラグを適用し、coreclrツリー内のすべてのC/C++ソースに対してインストルメンテーションが行われるようになります。

変更内容

  • src/coreclr/pgosupport.cmake: ディレクトリスコープのPGOコンパイルフラグ(-fprofile-instr-generate/-fprofile-instr-use)を追加。C/C++のみを対象とし、アセンブリファイルは除外。インストルメンテーションビルド時には、インストルメント済み静的ライブラリが共有ライブラリにリンクされるときのプロファイリングランタイムシンボル解決用のディレクトリスコープリンクオプションも追加。グローバルなcoreclr.profdataが存在する場合、PGO最適化フラグをcoreclrツリー全体に適用。

パフォーマンスへの影響

インストルメント済みlibcoreclr.soの比較:

  • 修正前: __llvm_prf_names、__llvm_prf_cnts、__llvm_prf_dataセクションが不在、推定プロファイル済み関数数:約30
  • 修正後: __llvm_prf_names(283 KB)、__llvm_prf_cnts(801 KB)、__llvm_prf_data(1,094 KB)、推定プロファイル済み関数数:約20,000

インストルメンテーションの適用範囲が大幅に拡大され、PGO最適化がより多くのコード領域に対して機能するようになります。

関連Issue

#124141

その他

Windows環境の影響なし(既にリンク時LTCG フラグでPGOを実装)。clrjitへの影響なし(すべてのJITソースが直接共有ライブラリにコンパイル)。dotnet-optimizationパイプラインの変更は不要(既存の*.profrawファイル収集・マージメカニズムで対応)。


目次