Pull Request on 2026年04月29日

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

注意点

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


目次

  1. #127547 Revert "[android] Enable CoreCLR runtime pack production for android-arm (#127225)"
  2. #127540 [cDAC] Implement EnumerateAssembliesInAppDomain for cDAC
  3. #127534 X25519DiffieHellmanOpenSsl
  4. #127526 [QUIC] Do not allocate exception if it might not be used
  5. #127524 JIT: fix Vector{128,256}.ConvertToInt32 use-before-def in gtNewSimdCvtNode
  6. #127513 Don't get last write time of empty list of files
  7. #127478 Exclude DeadThreads test from GC stress compatible set
  8. #127471 [cDAC] Implement EnumTypeDefs, EnumMethods, GetExportedTypeProps, FindExportedTypeByName
  9. #127370 [browser][coreCLR] Support interpreter code resolution on portable entrypoint platforms
  10. #127369 Add missing custom attribute marking to ILTrim TokenBased nodes
  11. #127355 Fix sporadic AccessViolation in compressed single-file apps on Apple Silicon
  12. #127292 Add configurable EventPipe CPU sampling rate via DOTNET_EventPipeThreadSamplingRate
  13. #127267 Rename JitDasmWithAddress to JitDisasmWithAddress
  14. #127220 [wasm][coreclr] Update the ConvertToInteger tests active issue
  15. #127148 Replace PERFSCORE_MEMORY_* macros with PerfScoreMemoryAccessKind enum class
  16. #127060 [ios-clr] Enable StackTrace tests on Apple mobile
  17. #127058 [ios-clr] Enable ResourceAssemblyLoadContext fallback for Apple mobile CoreCLR
  18. #127033 [X64][APX] Fix a few bugs in APX implementation and improve the control knob design
  19. #126998 [release/10.0] [QUIC] Update MsQuic
  20. #126977 Port 126929 to 10.0
  21. #126953 [interp] Fix doubled interpreter frames in DAC/DBI stack walks
  22. #126905 Add Type.GetNullableUnderlyingType() virtual API
  23. #126649 Reinstate LINQ join convenience overloads and fix the build break
  24. #126607 Adjust breaking change workflow based on issues seen
  25. #126576 [clr-interp] Add initial CoreCLR interpreter func-eval support
  26. #126360 JIT: Fully share helper-based suspension tails
  27. #125180 JIT: Accelerate floating->long casts on x86

#127547 Revert "[android] Enable CoreCLR runtime pack production for android-arm (#127225)"

概要

PR #127225で有効化したandroid-arm向けのCoreCLRランタイムパック生成を無効化するリバート。android-armがCI環境でSystem.DateTime.get_Now()内でSIGSEGVクラッシュを発生させているため、根本原因の調査中に変更を取り消します。

変更内容

  • eng/Subsets.props: Android 32ビットアーキテクチャ(arm、x86)を対象外とするCoreCLRサポートゲーティングを復活
  • eng/pipelines/runtime.yml: CoreCLR Android シナリオからandroid_armを削除(Mono Android レーンは維持)
  • eng/pipelines/extra-platforms/runtime-extra-platforms-android.yml: CoreCLR Android 追加プラットフォームジョブからandroid_armを削除
  • eng/pipelines/coreclr/templates/helix-queues-setup.yml: android_arm向けのCoreCLR Helixキューマッピングを削除

パフォーマンスへの影響

影響なし(リバート変更のため)

関連Issue

#127225(リバート対象のPR)、#127500(android-armのSIGSEGVクラッシュ)

その他

Android ARM32(armeabi-v7a)のCoreCLRサポートは、根本的なクラッシュの原因が特定・修正されるまで再度無効化されます。


#127540 [cDAC] Implement EnumerateAssembliesInAppDomain for cDAC

  • 作成者: @Copilot
  • 作成日時: 2026年04月29日 00:33:09(UTC)
  • マージ日時: 2026年04月29日 20:13:35(UTC)
  • ラベル: area-Diagnostics-cdac

概要

cDAC(Component DAC)のEnumerateAssembliesInAppDomain機能をレガシー委譲スタブから管理実装に置き換えました。ILoaderコントラクトを使用してアセンブリ列挙ロジックを実装し、ネイティブC++実装(dacdbiimpl.cpp)と動作を統一します。

変更内容

  • IDacDbiInterface.cs: EnumerateAssembliesInAppDomainのコールバックパラメータをnintからdelegate* unmanaged<ulong, nint, void>に変更(型安全性向上)
  • DacDbiImpl.cs: 完全な管理実装
    • Null AppDomainで早期にS_OK を返す
    • ILoader.GetModuleHandlesでIncludeLoading | IncludeLoaded | IncludeExecutionフラグを指定して列挙
    • 各ModuleHandleをILoader.GetAssemblyでアセンブリポインタに解決
    • 各エントリに対してコールバック実行
    • DEBUG時の検証:レガシーDAC出力と照合
  • DacDbiImplTests.cs: 5つのユニットテスト追加(null AppDomain、nullコールバック、単一/複数/空のアセンブリ列挙をモック化したILoaderでテスト)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

このPRはDiagnosticsセッション時のアセンブリ列挙処理をマネージコードで実装することで、レガシーDAC への依存を減らし、cDACの完全性を向上させます。EnumerateThreadsと同じパターンで実装されており、一貫性があります。


#127534 X25519DiffieHellmanOpenSsl

概要

OpenSSL上で動作するX25519DiffieHellmanOpenSslの実装を追加します。既存のEVP_PKEYハンドルをラップし、ハンドルの検証と秘密鍵の有無を判定する機能を提供します。

変更内容

  • 新しい公開API: X25519DiffieHellmanOpenSslクラスをSystem.Security.Cryptographyに追加(OpenSSL環境とNotSupported環境で異なる実装)
  • ネイティブ実装: CryptoNative_X25519IsValidHandlePAL関数を追加し、EVP_PKEYハンドルのX25519妥当性検証と秘密鍵の有無を検出
  • マネージド相互運用: Unix環境向けのP/Invoke実装とラッパーを追加
  • テスト: Unix/OpenSSL環境向けのハンドルコンストラクタ・複製・相互運用テスト、および非Unix環境向けのPlatformNotSupportedExceptionテストを追加
  • リソース: 無効なX25519 EVP_PKEYハンドル用のエラー文字列を追加

パフォーマンスへの影響

影響なし

関連Issue

#126206

その他

  • OpenSSL環境とそれ以外で条件付きコンパイルにより異なる実装を提供
  • ネイティブレイヤー(C)とマネージドレイヤー(C#)の相互運用実装を含む
  • ref assemblyおよびプロジェクトファイルの更新により、ビルドと公開APIに新しい型を統合

#127526 [QUIC] Do not allocate exception if it might not be used

  • 作成者: @ManickaP
  • 作成日時: 2026年04月28日 18:59:41(UTC)
  • マージ日時: 2026年04月29日 08:22:53(UTC)
  • ラベル: area-System.Net.Quic

概要

QUIC ストリームのシャットダウンパスにおいて、不要な例外割り当てを削減するパフォーマンス最適化です。ストリーム開始タスクソース(_startedTcs)が既に完了している場合、OperationAborted 例外の作成をスキップして、不要なメモリ割り当てと例外処理のオーバーヘッドを回避します。HTTP/3 サーバーシナリオの高頻度シャットダウンイベントパスに対する最適化です。

変更内容

  • src/libraries/System.Net.Quic/src/System/Net/Quic/QuicStream.cs
    • _startedTcs.TrySetException(ThrowHelper.GetOperationAbortedException()) の呼び出しを _startedTcs.IsCompleted のチェックで保護
    • タスクソースが既に完了している場合、例外割り当てをスキップ
    • シャットダウン完了セマンティクスは保持しつつ、不要な例外生成を防止

パフォーマンスへの影響

改善あり - 画像による検証結果として、修正前に発生していた QuicException の割り当てが削減されました。HTTP/3 サーバーシナリオにおいて高頻度で発生するシャットダウンパスでの割り当て削減により、メモリ圧力とガベージコレクション負荷の軽減が期待できます。具体的な数値はPRに明記されていませんが、このような低レベルのホットパスの最適化は累積的なパフォーマンス向上に寄与します。

関連Issue

#127455

その他

なし


#127524 JIT: fix Vector{128,256}.ConvertToInt32 use-before-def in gtNewSimdCvtNode

  • 作成者: @EgorBo
  • 作成日時: 2026年04月28日 18:42:00(UTC)
  • マージ日時: 2026年04月29日 02:19:21(UTC)
  • ラベル: area-CodeGen-coreclr

概要

Compiler::gtNewSimdCvtNodeにおける非AVX-512経路で、Vector{128,256,512}.ConvertToInt32(Vector*<float>)が入力値に対して誤った結果を生成するuse-before-def バグを修正しました。具体的には、float.MinValue入力時に部分的なゼロが混在した結果ではなく、正しく飽和値-2147483648が返されるようになります。

変更内容

  • src/coreclr/jit/gentree.cpp: gtNewSimdCvtNode内のGT_AND_NOT操作における引数順序を修正
    • op1Clone1(IsNaN計算用)とop1(AND_NOT左オペランド)の使用対象を入れ替え
    • AND_NOT(a, b)がAND(a, NOT(b))に分解される際、左オペランドaが先に評価される仕様に対応
    • 修正前: AND_NOT(op1Clone1, mask1) → 修正後: AND_NOT(op1, mask1)で、COMMA内のSTOREが先に実行されるよう保証

パフォーマンスへの影響

影響なし

関連Issue

#127440

その他

  • 根本原因: fgMakeMultiUseで生成されたCOMMA式(STORE temp = orig, LCL_VAR temp)の評価順序の誤り。AND_NOTの左オペランドが右側のIsNaN計算より先に評価されるため、STORE前のテンポラリ値を読み込んでいた
  • 潜在期間: SIMD32/64定数伝播の改善(PR #127124/#127402)以前は、内部のIsNaN(op1)展開がアセンブリコード生成で十分にマテリアライズされていたため、バグが顕在化していなかった
  • 検証状況:
    • AVX-512無効時と有効時の両環境で正しい出力を確認
    • Vector512Tests.ConvertToInt32Test/ConvertToInt32NativeTestがDOTNET_EnableAVX512=0で合格
    • SuperPMI検証: 38,409コンテキスト、0失敗・0アサート
  • 補足: 関連PR #127499は当初impSpecialIntrinsicにAVX-512ゲートを追加していたが、その処理は非AVX-512環境ではすでに到達不可能なため、本PRが実質的な修正対象

#127513 Don't get last write time of empty list of files

概要

MSBuildが空のファイルリストに対してSystem.IO.File.GetLastWriteTime(...)を呼び出すのを防ぐ修正です。fresh test run(キャッシュが存在しない新規実行)時にIL-CG2 "done"ファイルがまだ存在しない場合に、テストビルドパイプラインの失敗を回避します。

変更内容

  • src/tests/Common/tests.targets: _StaleIlCg2DoneFileアイテムの計算を@(_IlCg2DoneFiles)が空でないことを確認する条件で保護(+1/-1行)

パフォーマンスへの影響

影響なし。不要なファイルシステムアクセスを削減するため、パフォーマンスが若干改善される可能性があります。

関連Issue

なし

その他

この変更はsrc/testsビルド/テストパイプラインの初期実行時の安定性向上を目的としています。R2Rキャッシュマーカーが存在しない状態での失敗を防ぎます。


#127478 Exclude DeadThreads test from GC stress compatible set

  • 作成者: @Copilot
  • 作成日時: 2026年04月27日 23:00:49(UTC)
  • マージ日時: 2026年04月29日 15:26:11(UTC)
  • ラベル: area-System.Threading

概要

DeadThreadsテストが高い頻度でスレッドを生成するため、GCストレス実行時に頻繁なGCによって実行が遅延し、OOMまたは過度なページングが発生する問題を解決するため、このテストをGCストレス互換テストセットから除外します。

変更内容

  • src/tests/baseservices/threading/DeadThreads/DeadThreads.csproj: <GCStressIncompatible>true</GCStressIncompatible>プロパティを追加し、DeadThreadsテストをGCStress3/GCStressC実行から除外する設定を施しました。

パフォーマンスへの影響

GCストレス実行時におけるメモリ不足(OOM)やページング過剰による性能低下の緩和に貢献します。

関連Issue

なし

その他

  • このPR説明はGitHub Copilotにより生成されています。
  • テスト除外の理由を説明するコメントが追加されています。

#127471 [cDAC] Implement EnumTypeDefs, EnumMethods, GetExportedTypeProps, FindExportedTypeByName

概要

cDAC(Compact Debugging Access Component)の MetaDataImportImpl に4つのメタデータ API を新規実装し、デバッガの no-fallback モード対応を実現しました。以下のメソッドを実装:

  • EnumTypeDefs / EnumMethods:型定義とメソッドの列挙
  • GetExportedTypeProps / FindExportedTypeByName:エクスポート型の検索と属性取得

すべての実装は既存パターン(HResult 返却、FillEnum インフラ、DEBUG 検証)に従い、legacy DAC との parity 検証も付与しました。

変更内容

  • MetaDataImportImpl.cs(+401/-46)

    • EnumTypeDefs:MetadataReader.TypeDefinitions 経由で全 TypeDef トークンを列挙
    • EnumMethods:TypeDefinition.GetMethods() で型のメソッドを列挙
    • GetExportedTypeProps:エクスポート型の名前(namespace.name)、実装トークン、TypeDef ID、フラグを返却
    • FindExportedTypeByName:完全修飾名でエクスポート型を検索、ネストされた型にも対応
    • 3 つの enum メソッドに DEBUG 検証ブロック追加(legacy DAC とトークンリスト比較)
    • 9 つの Get メソッドに文字列内容検証追加(長さだけでなく実内容を比較)
    • EcmaMetadataUtils.GetRowId を public 化し、RID マスク抽出用の GetRID() ヘルパー追加
  • MetaDataImportImplTests.cs(+228/-4)

    • エクスポート型エントリを追加したテストメタデータビルダー
    • 列挙、ページネーション、メソッド列挙、空リスト、エクスポート型クエリ、ネスト型検索、切り詰め、not-found ケースをカバーする 11 の単体テスト追加
  • MetaDataImportDumpTests.cs(+80/-0)

    • EnumTypeDefs_MatchesMetadataReader:cDAC の TypeDef 列挙と MetadataReader 検証
    • EnumMethods_MatchesMetadataReader:メソッド列挙と MetadataReader 検証

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • ビルド成功(0 エラー、0 警告)、1856 unit テスト + 5 dump テスト 全パス
  • 文字列切り詰め時は CLDB_S_TRUNCATION、レコード未検出時は CLDB_E_RECORD_NOTFOUND を返却
  • すべての enum メソッドの DEBUG 検証ブロックは try/catch の後(SOSDacImpl パターン)に配置
  • AI/Copilot 生成 PR

#127370 [browser][coreCLR] Support interpreter code resolution on portable entrypoint platforms

概要

WASM などのポータブルエントリポイント(FEATURE_PORTABLE_ENTRYPOINTS)を使用するプラットフォームで、インタープリタコード解決を有効にする変更です。従来の InterpreterPrecode メカニズムに依存していた EventPipe/ETW の IP-to-メソッド解決が WASM で機能しないため、ポータブルエントリポイント経由で解釈メソッドのバイトコードアドレスを解決できるよう汎化しました。これにより、WASM 上のサンプリングプロファイラが管理メソッドに対してサンプルを正確に帰属させられるようになります。

変更内容

  • precode.cpp/h: 関数 GetInterpreterCodeFromInterpreterPrecodeIfPresent(TADDR) を GetInterpreterCodeFromEntryPointIfPresent(TADDR, MethodDesc*) に名前変更・シグネチャ変更。新しい pMethodDesc パラメータ(デフォルト NULL)により、ポータブルエントリポイント上で MethodDesc::GetInterpreterCode() を通じた解決が可能に。FEATURE_PORTABLE_ENTRYPOINTS 定義時に InterpByteCodeStart ポインタを MethodDesc から直接取得。

  • prestub.cpp: JitCompileCodeLockedEventWrapper に FEATURE_PORTABLE_ENTRYPOINTS 分岐を追加。ETW メソッド-JIT イベントで InterpByteCodeStart を抽出する際に PortableEntryPoint::GetInterpreterData(pCode) を使用。

  • eventtrace.cpp: MethodAndStartAddressToEECodeInfoPointer にポータブルエントリポイント向けインタープリタ fallback を追加。明示的な開始アドレスが指定されない場合、MethodDesc::GetInterpreterCode() で InterpByteCodeStart を解決。

  • DAC/デバッガー関連: daccess.cpp、dacdbiimpl.cpp、request.cpp、functioninfo.cpp で呼び出し側を更新し、利用可能な場合は新しい MethodDesc* パラメータを渡す。method.hpp の GetCodeForInterpreterOrJitted も更新。

パフォーマンスへの影響

影響なし。プロファイリング機能の修正であり、実行時パフォーマンスへの直接的な影響は期待されません。

関連Issue

#126324 から分割。

その他

本変更は内部実装(DAC、ETW、デバッガーコード)の修正です。破壊的変更なし。WASM プラットフォーム(ブラウザ上での CoreCLR)の EventPipe/サンプリングプロファイラ機能の復旧が主目的。


#127369 Add missing custom attribute marking to ILTrim TokenBased nodes

  • 作成者: @Copilot
  • 作成日時: 2026年04月24日 05:08:36(UTC)
  • マージ日時: 2026年04月29日 21:19:01(UTC)
  • ラベル: area-Tools-ILLink

概要

ILTrimの複数のTokenBasedNodeサブクラスがカスタム属性依存関係をマークしていなかったため、トリミング時にメタデータテーブル上のカスタム属性が無視されていました。ParameterNode、GenericParameterNode、GenericParameterConstraintNode、ManifestResourceNodeにCustomAttributeNode.AddDependenciesDueToCustomAttributesの呼び出しを追加し、カスタム属性と参照される型・コンストラクタの依存関係を正しく保持するように修正しました。

変更内容

  • ParameterNode.cs — GetStaticDependenciesがnullを返していたのを修正し、パラメータカスタム属性の依存関係をマーク
  • GenericParameterNode.cs — yield returnから遅延初期化されるDependencyListへ変更し、カスタム属性マーキングを統合
  • GenericParameterConstraintNode.cs — GenericParameterNodeと同パターンで制約カスタム属性マーキングを統合
  • ManifestResourceNode.cs — 依存関係収集を統合し、単一のAddDependenciesDueToCustomAttributes呼び出しと戻り値で統一、早期リターンを削除
  • ILTrimExpectedFailures.txt — 20個のテストが新たにパスし、--used-attrs-onlyフラグ未実装の5つの新規期待失敗テストを追加

パフォーマンスへの影響

yield returnから明示的なDependencyListへの変更により、不要なメモリ割り当てを回避しながらカスタム属性マーキングを統合しています。影響は最小限に設計されています。

関連Issue

#127369

その他

InterfaceImpl、StandAloneSig、TypeSpec、MethodSpec、TypeRef、AssemblyRef、MemberRef、ModuleRefは意図的に除外されました(実装が複雑または既に除外済み)。


#127355 Fix sporadic AccessViolation in compressed single-file apps on Apple Silicon

  • 作成者: @elinor-fung
  • 作成日時: 2026年04月23日 22:20:07(UTC)
  • マージ日時: 2026年04月29日 20:45:05(UTC)
  • ラベル: area-Host

概要

macOS Apple Silicon上の圧縮された自己完結型単一ファイルアプリで発生する散発的なAccessViolationExceptionを修正。問題の原因は、FlatImageLayout::LoadImageByCopyingPartsでMAP_JITメモリのRW → RWXへの保護遷移が不可靠だったため。修正では、Apple SiliconでPAGE_NOACCESSからリザーブし、各セクションを最終的な実行保護で直接コミットすることで、信頼できない遷移を回避。

変更内容

  • src/coreclr/vm/peimagelayout.cpp: HOST_OSX && HOST_ARM64環境でのメモリ保護戦略を変更。全イメージリージョンをPAGE_NOACCESSでリザーブしてから、実行セクションはPAGE_EXECUTE_READWRITE、その他はPAGE_READWRITEで各セクションをコミット。PAL_JitWriteProtect下での実行可能コンテンツのコピーを実装。
  • src/installer/tests/AppHost.Bundle.Tests/AppLaunch.cs: OSX環境でのみ実行される圧縮単一ファイルアプリの回帰テストを追加。複数の子プロセスの並行起動でイメージロード処理にストレスをかけるテストを実装。
  • src/installer/tests/Assets/Projects/HelloWorld/Program.cs: launch_selfオプション追加。5つの子プロセスを並行で生成しテストが実行される。

パフォーマンスへの影響

影響なし。メモリ保護の遷移方法の変更であり、性能特性に差異なし。

関連Issue

#123324

その他

  • 修正前: N=5の子プロセスで約74%のクラッシュ率(N≥12では約98%)
  • 修正後: N=5での50回以上の試行で0件の失敗を確認
  • 修正はApple Silicon環境のみに適用され、他のプラットフォームのコードパスは変更なし
  • 読み取り専用セクションは、書き込み権限除去トランジション(PAGE_READWRITE → PAGE_READONLY)により、元のバグに関与していないため変更なし

#127292 Add configurable EventPipe CPU sampling rate via DOTNET_EventPipeThreadSamplingRate

概要

EventPipeのCPUサンプリング間隔をDOTNET_EventPipeThreadSamplingRate環境変数で設定可能にする変更です。デフォルト1msはWASM/ブラウザ環境では速すぎるため、この設定値(ミリ秒単位)でオーバーライド可能にしました。0を設定するとプラットフォームのデフォルト値を使用します。

変更内容

  • EventPipe設定層: DOTNET_EventPipeThreadSamplingRate環境変数を新規登録し、初期化時にミリ秒からナノ秒への変換処理を追加(ep.c)
  • ランタイム実装: CoreCLR、NativeAOT、Monoの3つのランタイムでep_rt_config_value_get_sampling_rate()を実装し、各ランタイムの設定体系に従って値を読み取り
  • WASM/Blazor統合: MSBuildターゲットでWasmPerformanceInstrumentationから,interval=<ms>サフィックスを抽出してDOTNET_EventPipeThreadSamplingRateとして渡す機能を追加
  • 相互運用性修正: WebSocketの extern C宣言にC++名前マングリング対策を追加し、ds_rt_websocket_recvのバッファパラメータから不正なconst修飾を削除
  • 保守性向上: EventPipeセッション終了パスにアサーション追加、プリプロセッサガード整備

パフォーマンスへの影響

WASM/ブラウザ環境でのサンプリング頻度を低下させることで、CPU使用率を軽減します。デフォルト1msから適切な値へ変更することで過度な計測オーバーヘッドを削減可能。プロファイリングデータの密度は低下する可能性あり。

関連Issue

#126324(分割元PR)

その他

  • 内部実装変更(INTERNAL_EventPipeThreadSamplingRate登録)で公開APIへの影響はなし
  • 3つのランタイム(CoreCLR/NativeAOT/Mono)に対応した実装により、.NET全体で一貫した動作を実現
  • Copilotによる検証済み(9ファイル全て確認、3件のコメント)

#127267 Rename JitDasmWithAddress to JitDisasmWithAddress

  • 作成者: @Copilot
  • 作成日時: 2026年04月22日 08:44:45(UTC)
  • マージ日時: 2026年04月29日 08:04:40(UTC)
  • ラベル: area-CodeGen-coreclr

概要

JIT設定オプション/アクセサの名前をJitDasmWithAddressからJitDisasmWithAddressに変更し、対応する設定キー文字列も更新する。これは命名の一貫性と正確性を向上させるための変更です。

変更内容

  • src/coreclr/jit/compiler.cpp: JitDasmWithAddressをJitDisasmWithAddressに変更
  • src/coreclr/jit/jitconfigvalues.h: 設定キー文字列をJitDasmWithAddressからJitDisasmWithAddressに更新

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • 変更は内部実装レベルであり、公開APIへの直接的な影響はありません
  • JIT設定キーの変更のため、このオプションを使用している開発者は新しい名前JitDisasmWithAddressに更新する必要があります

#127220 [wasm][coreclr] Update the ConvertToInteger tests active issue

概要

WASM上のCoreClR インタープリタで double/float.ConvertToInteger<TInteger> が正しく動作するように修正。JIT動作と同じ方式でこのメソッドを intrinsic として展開し、マネージドコードの CreateSaturating へのフォールバックを回避します。これまで小さい整数型で不正な結果が返される問題が発生していました。

変更内容

  • interpconfig.cpp: TARGET_WASM で InterpMode のデフォルト値を 3 に設定し、インタープリタのみのシナリオで intrinsic 展開を有効化
  • intrinsics.cpp: インタープリタが System.Single/Double.ConvertToInteger を NI_PRIMITIVE_ConvertToInteger として認識するようにマッピング
  • compiler.cpp: 既存の変換 intrinsic 出力パスに NI_PRIMITIVE_ConvertToInteger を追加
  • SingleTests.GenericMath.cs / DoubleTests.GenericMath.cs: ConvertToIntegerTest を re-enable するため ActiveIssue 属性を削除

パフォーマンスへの影響

影響なし(修正によるパフォーマンス差異のベンチマーク結果記載なし)

関連Issue

#127220

その他

この修正はWASM環境(ブラウザ+CoreCLR)に限定されます。JITコンパイルを使用しないインタープリタのみのシナリオで、ジェネリック数学API (ConvertToInteger) の動作をJIT相当まで改善するものです。


#127148 Replace PERFSCORE_MEMORY_* macros with PerfScoreMemoryAccessKind enum class

  • 作成者: @Copilot
  • 作成日時: 2026年04月20日 11:58:12(UTC)
  • マージ日時: 2026年04月29日 08:36:50(UTC)
  • ラベル: area-CodeGen-coreclr

概要

JIT コンパイラのパフォーマンススコア計算において、マクロ定数 PERFSCORE_MEMORY_* を強く型付けされた PerfScoreMemoryAccessKind enum クラスに置き換えました。None、Read、Write、ReadWrite の enum メンバーを定義し、複数のエミッターバックエンド(ARM64、x86/x64、RISC-V、LoongArch64)でメモリアクセス種別の追跡を更新しています。

変更内容

  • 内部実装変更(公開API非影響)
    • emit.h: PerfScoreMemoryAccessKind enum クラスを追加、PERFSCORE_MEMORY_* マクロを削除、insExecutionCharacteristics フィールドが enum を保持するように更新
    • emit.cpp: パフォーマンススコア評価ロジックを enum 使用に更新
    • emitarm64.cpp: メモリ操作分類を enum に変換、getMemoryOperation の比較ロジックを調整
    • emitxarch.cpp: x86/x64 のパフォーマンススコアメモリ種別追跡を enum に変換
    • emitriscv64.cpp: RISC-V パフォーマンススコアメモリ種別割り当てを enum に変換
    • emitloongarch64.cpp: LoongArch64 パフォーマンススコアメモリ種別割り当てを enum に変換、フォーマッティング調整

パフォーマンスへの影響

影響なし。本変更は型安全性の向上とコード保守性の改善を目的とした内部リファクタリングで、デバッグ/遅延逆アセンブル パス用のパフォーマンススコア計算ロジックに関するものです。

関連Issue

なし

その他

  • 検証: CoreCLR コンパイル成功、静的コードレビューおよびセキュリティチェック(CodeQL)で問題なし
  • フォローアップ コミットはフォーマッティング のみで動作変更なし
  • このデバッグ/遅延逆アセンブル パス専用のコードには直接的なテストが存在しないため、検証はビルド成功と静的チェックに焦点

#127060 [ios-clr] Enable StackTrace tests on Apple mobile

概要

Apple mobile(iOS/tvOS)プラットフォームでStackTraceライブラリのテストを有効化するPRです。CoreCLRアプリバンドルにデバッグシンボル(.pdbファイル)を保持することで、スタックトレース情報の取得を改善し、テストスイートを実行可能にします。なお、行番号表示に関する既知の制限は#124087で追跡中です。

変更内容

  • src/tasks/AppleAppBuilder/Xcode.cs: CoreCLRランタイム向けの最適化ビルドにおいて、.pdbファイルの除外をスコープ制限(非CoreCLRランタイムのみ除外)
  • src/libraries/tests.proj: System.Diagnostics.StackTrace.Tests.csprojのApple mobile CoreCLR除外を削除してテスト実行を有効化
  • src/libraries/System.Diagnostics.StackTrace/tests/StackTraceTests.cs: ファイル情報なしのパターンマッチングをApple mobileに拡張
  • src/libraries/System.Diagnostics.StackTrace/tests/StackFrameTests.cs: skip-framesテストのApple mobileアクティブイシューを削除
  • src/libraries/System.Diagnostics.StackTrace/tests/DiagnosticMethodInfoTests.cs: オープンデリゲートバグゲーティングを調整し、Apple mobile CoreCLRのアクティブイシュー注釈を追加

パフォーマンスへの影響

影響なし

関連Issue

#124087

その他

このPRはテストインフラストラクチャと診断ライブラリの変更であり、ランタイムの公開APIや実装ロジックそのものは変更されません。デバッグシンボル保持によるアプリバンドルサイズへの影響については、提供情報に記載されていません。


#127058 [ios-clr] Enable ResourceAssemblyLoadContext fallback for Apple mobile CoreCLR

概要

Apple mobile プラットフォーム(iOS/tvOS)上の CoreCLR で、テストアセンブリが .app バンドル内のファイルとして展開される場合、ResourceAssemblyLoadContext が組み込みリソースを見つけられず失敗する問題を解決します。ResourceAssemblyLoadContext.Load に AppContext.BaseDirectory からのフォールバック読み込み機能を追加し、Apple mobile での System.Runtime.Loader.Tests テスト実行を可能にします。

変更内容

  • src/libraries/tests.proj: Apple mobile CoreCLR での System.Runtime.Loader.Tests 除外を削除、テスト実行を再有効化
  • src/libraries/System.Runtime.Loader/tests/ResourceAssemblyLoadContext.cs: GetManifestResourceStream が null の場合、ディスク上の AppContext.BaseDirectory からアセンブリを読み込むフォールバック機能を追加
  • src/libraries/System.Runtime.Loader/tests/ILLink.Descriptors.xml: 攻撃的なトリミング下で動的読み込みテストアセンブリを保持する設定を追加
  • src/libraries/System.Runtime.Loader/tests/RefEmitLoadContext/System.Runtime.Loader.RefEmitLoadContext.Tests.csproj: Apple mobile 攻撃的トリミング時にアセンブリを保持するためのターゲットを追加
  • src/libraries/System.Runtime.Loader/tests/DefaultContext/System.Runtime.Loader.DefaultContext.Tests.csproj: 同様にトリミング回避のターゲットを追加

パフォーマンスへの影響

影響なし

関連Issue

#125439

その他

  • テスト専用コンポーネント(ResourceAssemblyLoadContext)の変更であり、公開 API には影響しません
  • iOS/tvOS で既知の失敗がある動的アンロードテストには ActiveIssue ゲートを適用
  • Apple mobile デバイスでの .app バンドル展開レイアウトに対応するための設定調整です

#127033 [X64][APX] Fix a few bugs in APX implementation and improve the control knob design

概要

AMD64 APX(Advanced Performance eXtensions)実装のJITコンパイラにおける複数のエンコーディングバグ修正と、機能ゲーティング設計の改善です。IMUL命令のREX2エンコーディング修正、CMOV NDD形式の無効化、条件付きチェーニングの制御の厳格化、DIV/IDIV命令のREX2/EVEXプリフィックス対応不足による無効化を含みます。

変更内容

  • emitxarch.cpp: IMUL命令のREX2/EVEXエンコーディング修正、サイズロジック調整、レジスタエンコーディングハンドリングの改善
  • instrsxarch.h: CMOV命令からNDD機能を削除、DIV/IDIVからREX2エンコーディングを削除
  • codegenxarch.cpp: callee-save push/pop処理をPP2とPPXノブで区別、APXユニットテスト追加
  • jitconfigvalues.h: 新しいEnableApxPP2JITコンフィグノブを追加
  • optimizebools.cpp: 条件付きチェーニング最適化をcanUseApxEvexEncoding()でゲーティング
  • lowerxarch.cpp: CCMP関連の下位化を条件付きでゲーティング
  • lsraxarch.cpp: DIV/MOD命令のレジスタ候補を低位GPRセットに制限

パフォーマンスへの影響

影響なし(バグ修正と機能ゲーティングが主体。ただしDIV/IDIV無効化により、これら命令を使用するコードパスではAPX最適化が適用されない)

関連Issue

#127033

その他

  • CMOV NDD形式を無効化した理由は、元のCMOV命令とNDD形式の意味論的な相違。CTEST/CFCMOVを再導入する後続PRが計画されている
  • ConditionalChaining(DOTNET_EnableApxConditionalChaining)をDOTNET_EnableAPXノブの背後に隠蔽
  • PP2とPPXの制御ノブを分離して、より細粒度な機能制御を実現
  • DIV/IDIV無効化の理由:VM内のREX2/EVEXプリフィックス命令に対する例外処理が不足している
  • TEST ACC形式をREX2について無効化:EGPRsを使用しないため非互換

#126998 [release/10.0] [QUIC] Update MsQuic

概要

System.Net.Quicで使用するMsQuicネイティブライブラリのバージョンをrelease/10.0ブランチで更新します。MicrosoftNativeQuicMsQuicSchannelVersionを2.4.16から2.4.18にアップグレードします。

変更内容

  • eng/Versions.props: MicrosoftNativeQuicMsQuicSchannelVersionを2.4.16から2.4.18に更新(+1/-1)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • 内部で検出された変更で、顧客報告はなし
  • リグレッションなし
  • リスク度は低い(プロダクトコード変更なし、MsQuicライブラリの軽微なバージョンアップのみ)
  • 標準CIで検証済み
  • dotnet/runtime#126945のrelease/10.0対応版

#126977 Port 126929 to 10.0

概要

DOTNET_GCLargePages=1が有効な場合のGCヒープ破損問題を修正します。ラージページが有効な場合、GCはOS レベルのデコミットをスキップしていますが、メモリ内容をクリアせずにブックキーピングのみ更新していました。この結果、リージョンが再利用時にゼロ化されず、ヒープ破損が発生していました。修正は、論理的にデコミットされたメモリをクリアすることで、リージョンの適切なゼロ化を保証します。

変更内容

  • src/coreclr/gc/gcpriv.h: virtual_decommit()メソッド宣言に、オプショナルパラメータend_of_dataを追加
  • src/coreclr/gc/gc.cpp:
    • virtual_decommit()の実装を拡張し、ラージページシナリオでのメモリクリア機能を追加
    • アグレッシブGC経路からdistribute_free_regions()を通じてheap_segment_used(region)をend_of_dataパラメータとして渡し、heap_segment_committedを縮小時に古い参照を含むバイトをクリア

パフォーマンスへの影響

影響なし。修正はラージページ有効時の特定のコード路のみに限定され、ラージページが無効な通常構成では実行されません。

関連Issue

#126903

その他

  • 顧客の本番ワークロードで検証済み
  • リスク評価:低。この修正はGCLargePages=1設定にのみ影響する対象的な変更です。
  • より大規模な修正は.NET 11向けに別途実施(#127290)

#126953 [interp] Fix doubled interpreter frames in DAC/DBI stack walks

概要

DAC/DBI(Debugging Access Component/Debugging Breakpoint Interface)がインタープリタコードを指すCONTEXTからStackFrameIteratorを初期化する際に、InterpreterFrameが重複して処理される問題を修正します。ResetRegDisp関数で所有するInterpreterFrame*をCONTEXTの第1引数レジスタから読み込み、ProcessCurrentFrame実行前にm_crawl.pFrameをスキップすることで、ダブルカウントを防ぎます。

変更内容

  • src/coreclr/vm/stackwalk.cpp: ResetRegDisp関数の処理ロジック修正(+19行/-1行)
    • インタープリタコード実行時のスタックフレーム走査で、InterpreterFrameの重複処理を回避

パフォーマンスへの影響

影響なし(バグ修正による正確なスタック走査の実現)

関連Issue

#126953

その他

このバグ修正により、以下のインタープリタデバッガテストの失敗が解決されます:

  • StackWalking.NestedException
  • StackWalking.ChildParentTest

#126905 Add Type.GetNullableUnderlyingType() virtual API

概要

Type サブクラス(例:MetadataLoadContext の RoType)が Nullable<T> を正しく識別できるよう、新しい公開仮想メソッド Type.GetNullableUnderlyingType() を追加しました。Nullable.GetUnderlyingType() がこの仮想メソッドに委譲されます。Enum.GetUnderlyingType() → Type.GetEnumUnderlyingType() の既存パターンに従います。

public virtual Type? GetNullableUnderlyingType() 
{
    throw new NotSupportedException(SR.NotSupported_SubclassOverride);
}

変更内容

  • Type.cs:新しい public virtual Type? GetNullableUnderlyingType() を追加(基本実装は NotSupportedException をスロー)
  • Nullable.cs:Nullable.GetUnderlyingType(Type) を新しい仮想メソッドに委譲(ジェネリック型定義の互換性は保持)
  • ランタイム実装:
    • RuntimeType.CoreCLR.cs、RuntimeType.Mono.cs、RuntimeType.NativeAot.cs に構成型と開放型ジェネリック Nullable<> の両方に対応したオーバーライドを実装
    • NativeAOT 向け RuntimeTypeInfo.cs、NativeFormatRuntimeNamedTypeInfo.cs、RuntimeConstructedGenericTypeInfo.cs にオーバーライドを追加
  • Reflection 型ラッパー:TypeDelegator.cs、ModifiedType.cs、SignatureModifiedType.cs、SignatureConstructedGenericType.cs、SignatureType.cs、RoType.cs、RoModifiedType.cs に適切なオーバーライドを実装
  • Reflection.Emit:TypeBuilder.cs、EnumBuilder.cs、GenericTypeParameterBuilder.cs、TypeBuilderInstantiation.cs、SymbolType.cs にオーバーライド(返却値は null または適切な結果)
  • テスト:NullableTests.cs、SignatureTypes.cs、ModifiedTypeTests.cs、TypeBuilderGetNullableUnderlyingType.cs、TypeTests.Nullable.cs にテストカバレッジを追加

パフォーマンスへの影響

影響なし

関連Issue

#125388 #124216

その他

破壊的変更:BCL 外のカスタム Type サブクラスが新しい仮想メソッドをオーバーライドしないと NotSupportedException がスローされます。ドキュメント化は dotnet/docs#53407 で行われています。互換性のため、Nullable.GetUnderlyingType(Type) は引き続きジェネリック型定義 typeof(Nullable<>) に対して null を返します。


#126649 Reinstate LINQ join convenience overloads and fix the build break

概要

LINQ join convenience overloads(Join、GroupJoin、LeftJoin、RightJoin)を復活させ、同時にビルド破損を修正するPRです。以前の先制PR(#121998、#121999)で追加されたこれらのオーバーロードが#126624で削除されたため、本PRで再導入します。System.Linq.AsyncEnumerableのテストビルド破損は、ジェネリック型推論が不十分だったAsync対応のセレクタレスオーバーロード呼び出しを明示的にすることで修正されました。

変更内容

  • System.Linq: Join、GroupJoin、LeftJoin、RightJoinの便利なオーバーロード(セレクタレス版)を追加
  • System.Linq.AsyncEnumerable: 上記と同等のAsync版オーバーロードを追加。テストコードで明示的な型指定により型推論の問題を解決
  • System.Linq.Queryable: IQueryable向けのJoin、GroupJoin、LeftJoin、RightJoinのオーバーロードを追加
  • 参照アセンブリ(ref): 各ライブラリの参照定義を更新
  • テスト: 各ライブラリのテストで新しいオーバーロードをカバー(合計計870行追加)

パフォーマンスへの影響

影響なし

関連Issue

#121998 #121999 #126624

その他

本PRは既に検証済みで、clr+libsのビルド、System.Linq.AsyncEnumerable・System.Linq・System.Linq.Queryableの各テストが正常に実行されています。


#126607 Adjust breaking change workflow based on issues seen

  • 作成者: @ericstj
  • 作成日時: 2026年04月07日 15:56:24(UTC)
  • マージ日時: 2026年04月29日 23:10:23(UTC)
  • ラベル: area-skills

概要

breaking-change-docスキルのワークフロー手順とヘルパースクリプトを改善し、バージョン検出の曖昧性を低減、PRコメントの重複を削除、PR担当者への@メンション通知を追加します。

変更内容

  • SKILL.md: ワークフロー手順を明確化。ステップ1でPR担当者メタデータの収集を追加、ステップ2でバージョン検出スクリプトの結果処理とログ出力を詳細化
  • Build-IssueComment.ps1: PR コメント生成の簡素化(Issue本文の重複削除)と新しい-Assigneesパラメータ追加により、PR担当者への@メンション通知に対応。URL長診断機能も追加

パフォーマンスへの影響

影響なし

関連Issue

#126607

その他

このPRはGitHub Actionsのワークフロー改善に関するもので、ランタイムコード自体への変更ではなく、開発プロセスの自動化ツールの調整です。


#126576 [clr-interp] Add initial CoreCLR interpreter func-eval support

概要

CoreCLRインタープリタで停止しているスレッドに対するデバッガ関数評価(func-eval)サポートを初期実装します。ネイティブコンテキストハイジャッキングを避け、既存の保留中評価ハッシュテーブル(ProcessAnyPendingEvals)に評価要求をキューイングし、InterpBreakpointハンドラから実行します。これにより、インタープリタと例外発生時の評価で共有ディスパッチパスが再利用されます。

変更内容

  • debugger.cpp/debugger.h: FuncEvalSetup/DebuggerEval初期化をインタープリタ固有にし、ネイティブ専用セットアップ(実行可能ブレークポイントセグメント割り当て、SPアライメント検証、レジスタ/コンテキスト更新)をスキップ。m_evalDuringExceptionをm_evalUsesHijackに名前変更(ロジック反転)してフラグの目的を正確に表現
  • interpexec.cpp/interpexec.h: InterpThreadContext::m_pPendingFuncEvalを追加してインタープリタスレッドの評価を保存。INTOP_BREAKPOINTハンドラから合成フィルタコンテキストを使用して保留中評価を実行
  • dbginterface.h: ExecutePendingInterpreterFuncEval(Thread*)をFEATURE_INTERPRETERの下にデバッグインターフェースに追加
  • funceval.cpp、datadescriptor.inc、各フレームハンドラ: ファイルのマイナー更新

パフォーマンスへの影響

影響なし(デバッガ機能の拡張であり、ランタイム実行パフォーマンスに直接的な影響はありません)

関連Issue

#125959

その他

  • ブレークポイント以外で停止しているインタープリタスレッドに対する関数評価要求はCORDBG_E_FUNC_EVAL_BAD_START_POINTを返却
  • インタープリタ評価では直接完了パスが再利用され、ネイティブブレークポイントトラップメカニズムなしで完了が通知される
  • iOS シミュレータでローカルテスト、DiagnosticTestsで--clrinterpreterフラグ下でfunc-eval関連テスト(FuncEval.NestedFuncEvalTest、FuncEval.EscapeSecondPass)が合格確認済み
  • Copilotにより潜在的なメモリリーク(bpInfoSegmentRX未解放パス)が指摘されているため、マージ前にレビュワーによる確認が望ましい

#126360 JIT: Fully share helper-based suspension tails

概要

複数の await が共通のコンテキスト処理ロジックを持つ場合、JIT が共有ブロックへのジャンプを通じてそのロジックを完全に共有できるようにする最適化です。新しい finish-suspension ヘルパーメソッドを追加し、複数の suspension epilog を共有ブロック経由でルーティングすることで、生成コードサイズを削減します。

private static async Task Foo()
{
    await Bar();
    await Bar();

    await Bar().ConfigureAwait(false);
    await Bar().ConfigureAwait(false);
}

変更内容

  • async.cpp/async.h: shared finish-context-handling ブロック作成ロジックを実装。複数の suspension epilog を同一の finish-suspension ブロックへ統合
  • AsyncHelpers.CoreCLR.cs: FinishSuspensionWithContinuationContext と FinishSuspensionNoContinuationContext ヘルパーメソッドを追加
  • corinfo.h / jitinterface.cpp: CORINFO_ASYNC_INFO に新しいヘルパーメソッドハンドルを拡張
  • corelib.h: AsyncHelpers メソッドのバインダーエントリ追加
  • gentree.h: execution context save/restore 判定用フック追加
  • SuperPMI / CorInfo 関連: async info 構造体と managed JIT インターフェースを更新
  • ExecutionContext.cs: flow-suppressed 状態の内部インスタンスアクセッサを公開

パフォーマンスへの影響

コードサイズ削減:

  • サンプル async メソッド: 799 バイト → 725 バイト (74 バイト削減、9.3% 削減)
  • インストラクション数: 191 → 175 (削減)

NativeAOT テストバイナリ:

  • System.Linq.AsyncEnumerable.Tests: -73,728 バイト (-0.445%)
  • System.Net.Http.Functional.Tests: -128,512 バイト (-0.413%)
  • System.Text.Json.SourceGeneration.Roslyn4.4.Tests: -465,920 バイト (-0.403%)
  • その他多数のテストバイナリで 0.01~0.4% の削減

clrjit.dll はわずかに増加 (+1,024 バイト、+0.046%) ですが、全体的には大幅なコード削減を実現。

関連Issue

なし

その他

  • 互換性: 公開 API の破壊的変更なし。ExecutionContext.InstanceIsFlowSuppressed は内部用
  • ランタイム影響: JIT コード生成時の変換ロジック(内部実装)のみに影響
  • JIT/EE バージョン GUID が更新されており、JIT と EE の同期が必要

#125180 JIT: Accelerate floating->long casts on x86

概要

x86のJITコンパイラが浮動小数点型からlong/ulong型へのキャストをハードウェアアクセラレーションする機能を追加しました。AVX-512とAVX10.2を活用することで、オーバーフロー発生時以外のすべてのキャストがハードウェア命令で処理されるようになります。これまではCORINFO_HELP_DBL2LNGなどのヘルパー関数呼び出しが必要でしたが、新しい実装により関数呼び出しなしでインライン化された命令列で処理されます。

サンプルコード(double→long AVX-512):

// 従来: ヘルパー関数呼び出しによる処理
double value = 123.456;
long result = (long)value;  // CORINFO_HELP_DBL2LNG呼び出し

// 新実装: AVX-512命令によるインライン処理
// vmovsd, vcmpordsd, vcmpge_oqsd, vcvttpd2qq, vpblendmqなどで直接処理

変更内容

  • decomposelongs.cpp: AVX-512/AVX10.2を用いた浮動小数点↔long/ulongキャストのローリング/デコンポーズロジックを実装
  • flowgraph.cpp: x86で浮動小数点↔longキャスト時にAVX-512が利用可能な場合、ヘルパー関数呼び出し回避ロジックを追加
  • hwintrinsiclistxarch.h/hwintrinsicxarch.cpp: AVX-512スカラー比較マスク命令(vcmpss/vcmpsd)を新しいハードウェア組み込み関数として追加
  • gentree.cpp/lowerxarch.cpp: ベクトル定数構築をリファクタリングし、新しい組み込み関数の制約サポートを追加

パフォーマンスへの影響

従来のdouble→longキャストでは31バイトのコード(ヘルパー関数呼び出し、スタック操作含む)が生成されていましたが、新実装では53バイトのコード生成となります。ただし関数呼び出しオーバーヘッド(引数プッシュ、戻り値リターン)がなくなり、CPUキャッシュ効率が向上します。実際のパフォーマンス向上値は具体的に記載されていません。

関連Issue

#116805

その他

注記: Copilotレビューで指摘されているように、現在の実装ではx86のヘルパー判定ロジックがAVX-512のみをチェックしており、AVX10.2が有効でAVX-512が無効の環境でも不要なヘルパー呼び出しが発生する可能性があります。これは別途の修正が必要な潜在的な問題です。


目次