Pull Request on 2026年05月12日

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

注意点

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


目次

  1. #128099 Turn CRLF -> LF in CorInfoImpl.ReadyToRun.cs and fix a build break
  2. #128071 Fix ArgumentOutOfRangeException in Deflate64
  3. #128069 Fix runtime initialization on linux with cpu hotplug enabled
  4. #128052 Make sccache cache task non-fatal
  5. #128050 Enable sccache for linux-musl-x64 coreclr builds
  6. #128037 Arm64: Fix loads and stores for stack allocated vectors and masks
  7. #128033 Remove some dead code from impAppendStmt and impStoreStruct
  8. #128026 Use 'dotnet package download' for sccache instead of PackageDownload
  9. #128014 Delete DacDbi APIs AreGCStructuresValid and IsWinRTModule
  10. #128013 Ensure gtInitializeStoreNode consistently handles SIMD/Mask stores for all platforms
  11. #127994 [ci-scan] Skip Android DualMode IPv6 socket tests (Connection refused on ::1)
  12. #127993 [ci-scan] Skip PlatformHandlerTest_Cookies_Http2 (WinHttpException 12030)
  13. #127983 [ci-scan] Skip DnsGetHostAddresses_LocalhostSubdomainWithTrailingDot on Android (refs #127965)
  14. #127981 Special case runtime async in ThreadPool.UnsafeQueueUserWorkItem<TState>
  15. #127978 Trim DBI frame data struct
  16. #127969 Fix System.Thread namespace to System.Threading.Thread in Memory-model.md
  17. #127967 [ci-scan] Exclude Vector3Interop from GC stress via ActiveIssue (refs #127827)
  18. #127919 Apply fixes for coreclr-interp on linux-riscv64
  19. #127885 Add Webcil support to R2RDump
  20. #127753 [clr-interp] Fix debugger MethodEnter counter and INTOP_DEBUG_METHOD_ENTER assert
  21. #127662 [runtime-async] Fix timestamp instrumentation
  22. #127602 Limit metadata block size when reading TAR archives
  23. #127438 [wasm][coreclr] Enable priority1 runtime tests in outerloop
  24. #127256 Fixes some theoretical races and retentions in AsyncOperation and ManualResetValueTaskSource
  25. #127196 Update socket infinite time span test
  26. #127134 [cDAC] implement GetRuntimeNameByAddress
  27. #126904 Enable compilation of async thunks in composite mode
  28. #126351 Fix resolving of default interface methods in crossgen2
  29. #125097 [release/9.0-staging] Update dependencies from dotnet/arcade
  30. #124415 More precise ranges for casts in GetRangeFromAssertions

#128099 Turn CRLF -> LF in CorInfoImpl.ReadyToRun.cs and fix a build break

概要

CorInfoImpl.ReadyToRun.csファイルのCRLF改行をLFに統一し、#126904で導入されたビルド破壊を修正するPRです。CRLFによるチェックアウト時の不要な変更報告を防ぎます。

変更内容

  • src/coreclr/tools/aot/ILCompiler.ReadyToRun/JitInterface/CorInfoImpl.ReadyToRun.cs:6行を修正(追加6行、削除6行、計12行変更)
    • CRLFからLFへの改行コード統一

パフォーマンスへの影響

影響なし

関連Issue

#126904

その他

なし


#128071 Fix ArgumentOutOfRangeException in Deflate64

概要

Deflate64Fuzzerによる検査で発見されたArgumentOutOfRangeExceptionの修正。System.IO.Compressionライブラリの圧縮解凍処理において、不正な入力データに対する境界値チェックを改善し、エッジケースでの予期しない例外発生を防止します。

変更内容

  • InflaterManaged.cs: 圧縮データ解凍処理の境界値チェックロジック修正(+10行、-3行)
  • OutputWindow.cs: 出力ウィンドウの境界値検証を強化(+1行、-1行)
  • zip_InvalidParametersAndStrangeFiles.cs: 修正内容を検証するテストケース追加(+35行)

パフォーマンスへの影響

影響なし

関連Issue

#128071

その他

  • 本修正はDeflateeManaged/DeflateManaged圧縮ライブラリの内部実装改善であり、公開APIの変更はありません
  • ファジング(Fuzzing)テストにより発見されたエッジケースの修正であるため、通常の使用シーンではこの例外に遭遇する可能性は低い可能性があります

#128069 Fix runtime initialization on linux with cpu hotplug enabled

  • 作成者: @BrzVlad
  • 作成日時: 2026年05月12日 10:11:21(UTC)
  • マージ日時: 2026年05月12日 23:35:37(UTC)
  • ラベル: area-VM-coreclr

概要

Linux上でCPUホットプラグが有効な場合、ランタイム初期化時にsched_getaffinity用のcpu_set_tメモリ割り当てが失敗する問題を修正しました。現在のCPU数ではなく、システムで許容される最大CPU数に基づいてアフィニティマスクを適切にサイズすることで対応しています。

minipalにminipal_get_cpu_max_possible_count()ヘルパー関数を追加し、/sys/devices/system/cpu/possibleから最大可能CPU数を取得します。

変更内容

  • minipal/cpucount.h/c (新規): minipal_get_cpu_max_possible_count()ヘルパーを実装。Linuxではsysfs経由で最大CPU数を取得、フォールバックとしてsysconf(_SC_NPROCESSORS_CONF)を使用
  • minipal/CMakeLists.txt: minipal CMakeBuildにcpucount.cを追加(Unix builds)
  • CoreCLR PAL (thread.cpp, sysinfo.cpp): sysconf(_SC_NPROCESSORS_CONF)の代わりに新ヘルパーを使用してアフィニティマスク割り当て時にサイズ指定
  • NativeAOT Runtime (PalUnix.cpp): CPU数初期化時に新ヘルパーを使用
  • GC Unix初期化 (gcenv.unix.cpp): アフィニティセットサイズ指定で新ヘルパーを使用

パフォーマンスへの影響

懸念点: minipal_get_cpu_max_possible_count()はスレッド生成時(ThreadEntry内)で呼び出されるため、Linuxではsysfsファイルのopen/parseが毎回発生します。スレッドプール・タイマーなど頻繁なスレッド生成時に追加のsyscall/I/Oが発生する可能性があります。

改善提案: 最大CPU数をキャッシュすることで後続呼び出しをロード操作のみにすることを検討(pthread_onceまたはbenign raceで実装可能)

関連Issue

#128069

その他

  • 修正内容は内部実装(ランタイム初期化コード)への変更であり、公開APIへの影響はなし
  • Linux CPUホットプラグ有効時の初期化失敗を解決することで、ランタイムの堅牢性が向上

#128052 Make sccache cache task non-fatal

概要

Azure Pipelines の Cache@2 タスクがディスク容量不足でキャッシュアップロード時に失敗する問題を対応します。sccache キャッシュはパフォーマンス最適化のため、失敗時にビルド全体が失敗しないように continueOnError: true を設定して、エラーを警告に変更します。

変更内容

  • eng/pipelines/coreclr/templates/setup-sccache.yml: Cache@2 "Sccache cache" タスクに continueOnError: true を追加してタスクを非致命的化
  • キャッシュキーと復元キーに osSubgroup を組み込み
  • Linux _musl レグに対応
  • SCCACHE_CACHE_SIZE を sccache 設定ステップで設定
  • eng/pipelines/coreclr/templates/sccache-stats.yml: 更新された _musl ゲーティングに合わせて統計情報収集の対象を調整

パフォーマンスへの影響

影響なし。本変更はキャッシュ操作の失敗時の動作を制御するもので、成功時のパフォーマンスには影響しません。

関連Issue

#128051

その他

本 PR は Copilot によるアシスタンスで作成されました。


#128050 Enable sccache for linux-musl-x64 coreclr builds

概要

linux-musl-x64 coreclr buildにおいてsccacheコンパイラキャッシングを有効化するCI設定変更。linux-x64での実績(約9分/leg短縮、ヒット率97.59%)と同等の高速化を目指す。sccacheはmusl/glibc両対応の静的リンク済みバイナリであり、キャッシュキーにosSubgroupを含めることでmusl/glibc間のキャッシュ分離を実現。

変更内容

  • setup-sccache.yml: sccache有効化条件をosSubgroup == '_musl'を含むよう拡張;キャッシュキーにosSubgroupを追加してmusl/glibc キャッシュの分離を確保;SCCACHE_CACHE_SIZE=3.5G制限を追加
  • sccache-stats.yml: 上記と同様に条件を拡張

パフォーマンスへの影響

linux-x64での実績に基づき、linux-musl-x64ビルドでも同等の改善を見込む:

  • ビルド時間短縮: 約9分/leg(gross savings)
  • キャッシュヒット率: 定常状態で97.59%
  • キャッシュ上限: 3.5G(無制限成長を防止)

関連Issue

#128048

その他

  • sccacheバイナリはstatic-pie形式でリンクされており、glibcとmuslの両環境で動作確認済み
  • osSubgroupが空の非-muslビルドでは既存キャッシュが引き続き利用可能(後方互換性を維持)
  • sccacheパッケージはすべてのLinux CI buildでruntime-prereqs.proj経由で既にダウンロード済み

#128037 Arm64: Fix loads and stores for stack allocated vectors and masks

概要

ARM64でスタックに割り当てられたベクトルとマスクのロード/ストア命令生成時に、アドレッシングがスタックポインタベースの場合に失敗していた問題を修正しました。フレームポインタベースのアドレッシングのみを想定していたアサーションを削除し、コードジェネレーションで適切なレジスタを選択するように改善しました。

変更内容

  • src/coreclr/jit/emitarm64.cpp: アドレッシングモードの検証ロジックを修正。フレームポインタベース限定のアサーションを削除し、スタックポインタベースのアドレッシングにも対応。ロード/ストア命令生成時に正しいレジスタ(FP/SP)を選択できるようにコードを調整(変更行数: +6/-8)。

パフォーマンスへの影響

影響なし

関連Issue

#127955 #125491

その他

ARM64ランタイムのJITコンパイラ内部実装の修正です。スタックポインタベースのアドレッシングが有効なシナリオでのJIT生成コード品質向上につながります。


#128033 Remove some dead code from impAppendStmt and impStoreStruct

概要

CoreCLR JITインポートロジックの未完成なクリーンアップ。impAppendStmtとimpStoreStruct関数から、戻りバッファ(retbuf)処理に関連する到達不可能/デッドコードを削除します。これは#105023からの残件対応です。

変更内容

  • importer.cpp:
    • impAppendStmt: 到達不可能な分岐を削除し、既存のHasRetBuffer()不変式をアサートする形に簡潔化
    • impStoreStruct: デッドなローカル変数と条件判定を削除し、挿入される引数を無条件にWellKnownArg::RetBufferとしてタグ付けする(実際にはすでにそのように動作していた)

パフォーマンスへの影響

影響なし(デッドコード削除のため、実行パスの変化なし)

関連Issue

#105023からの継続対応

その他

なし


#128026 Use 'dotnet package download' for sccache instead of PackageDownload

概要

CoreCLR ビルドパイプラインの sccache NuGet パッケージ取得方法を変更します。MSBuild の PackageDownload アイテムから明示的な dotnet package download コマンドへの移行により、パイプライン設定をより自己完結させ、MSBuild restore フェーズへの依存を排除します。

変更内容

  • src/coreclr/runtime-prereqs.proj: sccache の PackageDownload アイテムを削除
  • src/coreclr/build-runtime.sh: NuGet からの sccache に対する chmod ループを削除(7行削除)
  • eng/pipelines/coreclr/templates/setup-sccache.yml: dotnet package download の明示的呼び出しを追加し、Linux x64 ビルドで PATH と環境変数を設定(5行追加、5行削除)

パフォーマンスへの影響

影響なし。ビルドフローの整理であり、実行時のパフォーマンスには変化なし。

関連Issue

なし

その他

この変更により、NuGet パッケージからのバイナリに対する実行権限の復元ロジックが不要になります。パイプラインテンプレート内で明示的に chmod を行うため、ビルドスクリプト側の回避策を削除できます。


#128014 Delete DacDbi APIs AreGCStructuresValid and IsWinRTModule

概要

DAC/DBI インターフェースから使用されていない2つのメソッド AreGCStructuresValid と IsWinRTModule を削除します。両メソッドは単純な定数値を返すのみで、実装価値がなく、呼び出し箇所も最小限であるため削除対象としました。

変更内容

  • ネイティブ DAC/DBI: IDacDbiInterface IDL定義からメソッドを削除し、C++ ヘッダと実装ファイルから宣言と実装を削除
  • 管理対象コード: cDAC レガシー相互運用の COM インターフェース定義と実装から対応するメソッドを削除
  • ヒープ列挙ロジック: CordbProcess::EnumerateHeap から AreGCStructuresValid チェックを削除し、常にヒープ列挙子を構築するよう簡略化
  • テスト: AreGCStructuresValid と IsWinRTModule に関連するダンプテストを削除

パフォーマンスへの影響

影響なし(削除されるメソッドは定数値を返すのみで、呼び出し箇所は必要最小限。むしろ不要な分岐判定が削除される)

関連Issue

なし

その他

  • 破壊的変更: IDacDbiInterface COM インターフェースから2つのメソッドを削除(ただしデバッガ内部インターフェースのため、外部への影響は限定的)
  • 削除対象メソッドは以下の通り:
    • AreGCStructuresValid: 常に TRUE を返していた
    • IsWinRTModule: 常に FALSE を返していていた

#128013 Ensure gtInitializeStoreNode consistently handles SIMD/Mask stores for all platforms

概要

Compiler::gtInitializeStoreNodeメソッドが、SIMD/Maskローカルストア操作をすべてのプラットフォームで一貫して処理するように改善されました。これまではx86でのみ特別な処理が行われており、x64ではマスクストアが意図通りに処理されていませんでした。

変更内容

  • src/coreclr/jit/gentree.cpp: x86専用の条件分岐を削除し、すべてのプラットフォーム共通の処理に統一
    • varTypeIsSIMDOrMask(store)を使用してSIMD/マスクストアを検出
    • ストアノード/格納値に対してSetOpLclRelatedToSIMDIntrinsicを一貫して適用
    • 既存のretbuf-call除外ロジックは保持

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

JIT(Just-In-Time)コンパイラの内部実装(gentree.cpp)の変更であり、公開APIには影響しません。この修正により、x64でのマスクストア最適化がx86と同等に機能することが期待されます。


#127994 [ci-scan] Skip Android DualMode IPv6 socket tests (Connection refused on ::1)

概要

Android エミュレータが IPv6 ループバック(::1)に対応していないため、DualMode IPv6 ソケットテストが失敗する問題に対応したテスト修正です。[ActiveIssue] 属性を追加して、Android プラットフォームでのテスト実行をスキップします。

変更内容

  • DualModeSocketTest.cs: DualModeConnectToHostString、DualModeConnectToDnsEndPoint、DualModeConnectAsync の3つのテストクラスに [ActiveIssue("...127986", TestPlatforms.Android)] 属性を追加
  • SocketAsyncEventArgsTest.cs: Connect_Parallel_FailsOver テストに [ActiveIssue("...127986", TestPlatforms.Android)] 属性を追加

パフォーマンスへの影響

影響なし

関連Issue

その他

  • このPRは CI自動スキャンワークフロー(CI Outer-Loop Failure Scanner)により自動生成されました
  • Android arm64 デバイステスト(runtime-extra-platforms)で繰り返し発生していた失敗に対応
  • テストをスキップするのみで、根本的な修正ではなく、Android エミュレータの IPv6 ループバック対応待ちです

#127993 [ci-scan] Skip PlatformHandlerTest_Cookies_Http2 (WinHttpException 12030)

概要

Windows x64 環境で WinHttpException : Error 12030(接続異常終了)により失敗する PlatformHandlerTest_Cookies_Http2 テストをスキップするための [ActiveIssue] 属性をクラスレベルで追加します。この変更により、関連する既知の問題(#126867)が解決されるまでの間、CI 失敗を抑止します。

変更内容

  • src/libraries/System.Net.Http.WinHttpHandler/tests/FunctionalTests/PlatformHandlerTest.cs
    • PlatformHandlerTest_Cookies_Http2 クラスに [ActiveIssue("https://github.com/dotnet/runtime/issues/126867", typeof(PlatformDetection), nameof(PlatformDetection.IsWindows), nameof(PlatformDetection.IsX64Process))] 属性を追加
    • Windows x64 環境限定でテストをスキップ

パフォーマンスへの影響

影響なし

関連Issue

#126867

その他

  • この PR は CI の自動スキャンワークフローにより自動生成されました
  • 失敗の詳細:
    • WinHttpException : Error 12030(WINHTTP_CALLBACK_STATUS_REQUEST_ERROR)
    • runtime-nativeaot-outerloop ビルド(Windows x64 NativeAOT SizeOpt)および通常の WinHttpHandler outerloop ビルドで発生
  • テストのスキップはプラットフォーム条件(Windows かつ x64)により制限されており、他の環境への影響はありません

#127983 [ci-scan] Skip DnsGetHostAddresses_LocalhostSubdomainWithTrailingDot on Android (refs #127965)

概要

Android エミュレータの DNS リゾルバの動作差により、DnsGetHostAddresses_LocalhostSubdomainWithTrailingDot_ReturnsLoopback テストが失敗するため、このテストを Android プラットフォーム向けに [ActiveIssue] アノテーションで抑制します。Android の DNS リゾルバが .localhost サブドメイン クエリ(foo.localhost.、bar.test.localhost. など)に対してループバック アドレスの代わりにリンクローカルおよびグローバルルーティング可能な IPv6 アドレスを返す為、これはプラットフォーム動作差であり .NET の製品バグではありません。

変更内容

  • src/libraries/System.Net.NameResolution/tests/FunctionalTests/GetHostAddressesTest.cs
    • DnsGetHostAddresses_LocalhostSubdomainWithTrailingDot_ReturnsLoopback テストに [ActiveIssue] アノテーション(Android プラットフォーム指定)を追加

パフォーマンスへの影響

影響なし

関連Issue

#127965

その他

  • テスト失敗の原因:Android DNS リゾルバが RFC 6761 §6.3 に準拠せず、localhost サブドメインのクエリに対してループバック アドレス(::1)ではなく link-local IPv6 アドレス(例:fe80::cc6b:b5ff:fe9c:4dde%30)を返す
  • 複数の Android 構成で確認:arm64/x64 の Mono/CoreCLR(Windows 11 Amd64 Android Open)
  • これは ci-scan による自動修正 PR(テスト インフラ改善)

#127981 Special case runtime async in ThreadPool.UnsafeQueueUserWorkItem<TState>

概要

ThreadPool.UnsafeQueueUserWorkItem<TState>に対してruntime asyncの特殊化ケースを追加し、IValueTaskSource.OnCompletedに渡された継続をスレッドプールに転送する際にワークアイテムの追加割り当てを避けるための最適化を実装しました。これによりASP.NET platform-jsonプラットフォームにおいてasync1とruntime asyncの間のRPSギャップを削減します。

変更内容

  • ThreadPoolWorkQueue.cs: runtime async継続をディスパッチするための新しい既知コールバック(s_dispatchRuntimeAsyncContinuationsCallback)を追加し、UnsafeQueueUserWorkItem<TState>に特殊化ケースを実装してタスク状態を直接キューイングするように対応
  • AsyncHelpers.CoreCLR.cs: runtime async ValueTaskSourceNotifier.OnCompletedの配線を新しいThreadPoolコールバックを使用するよう更新し、従来の型ごとのコールバックを削除
  • AsyncTaskMethodBuilderT.cs: 軽微な変更(1行の追加/削除)
  • Task.cs: 軽微な変更(6行の追加/5行の削除)

パフォーマンスへの影響

メモリ割り当て削減によるパフォーマンス向上が期待されます。ASP.NET platform-jsonプラットフォームにおいてasync1とruntime asyncの間のRPSギャップを削減するのが目的です。ただし、具体的なベンチマーク結果や改善数値は提供されていません。

関連Issue

#127973

その他

Copilotのレビュー時に、ExecuteDirectlyメソッドのコメントについて、RuntimeAsyncTask<T>が新しいThreadPool特殊化ケースを通じてタスクとしてキューイングされる場合、threadPoolThreadがnullでない可能性があり、コメント文の表現を改善する検討が提案されています。


#127978 Trim DBI frame data struct

  • 作成者: @rcj1
  • 作成日時: 2026年05月08日 23:04:56(UTC)
  • マージ日時: 2026年05月12日 13:22:15(UTC)
  • ラベル: area-Diagnostics-coreclr

概要

CoreCLR デバッグスタックウォーク経路から未使用の CHAIN_ENTER_MANAGED チェーン機構と関連フィールドを削除するクリーンアップです。IPC スタックウォークフレームデータから chain ペイロードと quicklyUnwound フィールドを除去し、シムスタックウォークロジックを簡素化しました。

変更内容

  • dbgipcevents.h: DebuggerIPCE_STRData から stackwalk chain ペイロード(enum 値と union メンバー)を削除
  • frameinfo.h/cpp: quickUnwind フィールドと enter-managed チェーン初期化ロジックを削除
  • debugger.cpp, controller.cpp: enter-managed チェーン関連の特殊処理を削除
  • shimstackwalk.cpp: CHAIN_ENTER_MANAGED チェーン注入を廃止し、managed context トラッキングを調整
  • rsthread.cpp, rsstackwalk.cpp: chain 理由パラメータと quickly unwound フラグの削除
  • cordbregisterset.cpp (i386/amd64): quickly-unwind ベースのレジスタ可用性ゲートを削除

パフォーマンスへの影響

影響なし(内部デバッグ機構のクリーンアップであり、ランタイムのパフォーマンス特性は変わらない)

関連Issue

なし

その他

  • 内部実装のクリーンアップであり、公開 API への影響なし
  • デバッガーの IPC プロトコルを簡素化することで、メンテナンス性を向上

#127969 Fix System.Thread namespace to System.Threading.Thread in Memory-model.md

  • 作成者: @Copilot
  • 作成日時: 2026年05月08日 19:35:52(UTC)
  • マージ日時: 2026年05月12日 16:11:15(UTC)
  • ラベル: area-System.Threading

概要

docs/design/specs/Memory-model.md内の不正確な名前空間参照を修正するドキュメント修正です。System.Threadの誤記を正しいSystem.Threading.Threadに修正しました。

具体的には以下の3つのAPI参照を修正:

  • System.Thread.VolatileRead → System.Threading.Thread.VolatileRead
  • System.Thread.VolatileWrite → System.Threading.Thread.VolatileWrite
  • System.Thread.MemoryBarrier → System.Threading.Thread.MemoryBarrier

変更内容

  • docs/design/specs/Memory-model.md: 3行の修正(追加3行、削除3行)
    • Thread関連メモリフェンス/Volatile操作APIの完全修飾名をSystem.Threading.Threadに修正

パフォーマンスへの影響

影響なし(ドキュメント修正のため)

関連Issue

なし

その他

  • このPRはGitHub Copilotにより作成されました
  • ドキュメントの正確性向上を目的とした修正で、実装コードへの影響はありません

#127967 [ci-scan] Exclude Vector3Interop from GC stress via ActiveIssue (refs #127827)

概要

Vector3InteropテストがGCStress=0xC(マーク・フェーズおよび圧縮ストレス)+ JitStress=2 + TieredCompilation=0の組み合わせで動作中に、PALシグナルハンドラでネイティブSIGSEGV(終了コード22)クラッシュが発生するため、[ActiveIssue]属性を使用してテストをスキップする修正です。関連Issue #127827の解決後に属性を削除できるよう設計されています。

変更内容

  • src/tests/JIT/SIMD/Vector3Interop.cs: TestEntryPointメソッドに[ActiveIssue(typeof(CoreClrConfigurationDetection), nameof(CoreClrConfigurationDetection.IsGCStressC), issue: 127827)]属性を追加し、IsGCStressCが真の場合にテストをスキップ

パフォーマンスへの影響

影響なし(テストスキップの対象は特定のストレス設定のみ)

関連Issue

#127827

その他

  • 修正はcsprojレベルの<GCStressIncompatible>フラグではなく、テストレベルの[ActiveIssue]属性を使用することで、基盤となるバグが修正された際に属性を削除することで簡単にスキップを解除可能
  • クラッシュはP/InvokeインターオップとVector3の相互作用がGC圧縮中に発生。テストは非ストレス設定(outerloop、R2R等)では全て正常に動作
  • linux-x64、osx-arm64、linux-arm64、windows-x86の計4プラットフォームで確認済み
  • KBE検証確認済み:Issue #127827が同一テスト(Vector3Interop_r)を記述し、クラッシュシグネチャとプラットフォーム・アーキテクチャスコープが一致

#127919 Apply fixes for coreclr-interp on linux-riscv64

概要

linux-riscv64 プラットフォームのインタプリタテスト実行時に発生していた問題を修正するPRです。clang-21のデフォルト設定変更に対応し、RISC-V命令セット拡張を明示的に制限するとともに、プロログオフセット計算の符号エラーと不適切なアサーションを修正しました。

変更内容

  • eng/native/configurecompiler.cmake: clang-21でのRISC-V命令セット拡張のデフォルト変更に対応し、ランタイムバイナリのベースライン(rv64gc)を明示的に指定するコンパイラフラグを追加
  • src/coreclr/vm/riscv64/asmhelpers.S: プロログオフセット計算の符号エラーを修正(負号を削除)
  • src/coreclr/vm/callstubgenerator.cpp: RISC-V/LoongArchの戻り値分類パスにおいて、AMD64固有で不適用なアサーションを削除

パフォーマンスへの影響

影響なし

関連Issue

#127860

その他

本修正によりlinux-riscv64でのTestCallingConvention2Revを含むインタプリタ呼び出し規約テストが実行可能になります。clang-21がRISC-V Vector拡張(RVV)をデフォルトで有効化することに起因するSIGILLエラーが、ベースライン指定により解決されます。


#127885 Add Webcil support to R2RDump

概要

R2RDump ツールに Webcil (WebAssembly-wrapped .NET assemblies) ファイルの読み込みと解析機能を追加します。同時に WebAssembly バイトコード完全ディスアセンブラ (WasmDisassembler) を実装し、メタデータ抽象化を改善して PE ファイルに依存しないセクション読み込みに対応しました。

変更内容

  • WebcilImageReader.cs (新規): Webcil および WASM ラップド Webcil ファイルを解析し、メタデータ/セクション/関数ボディを公開する新規リーダー (669 行)
  • WasmDisassembler.cs (新規): MVP 命令セット、SIMD (0xFD prefix)、例外処理 (try_table)、バルクメモリ/テーブル操作 (0xFC prefix)、GC/構造体/配列命令 (0xFB prefix) をカバーする WebAssembly バイトコードディスアセンブラ (1022 行)
  • IAssemblyMetadata.cs: ImageReader プロパティを廃止し、新規メソッド GetSectionData(int rva) を追加 (セクションデータ取得の抽象化)
  • ReadyToRunReader.cs: Webcil イメージの自動検出と WebcilImageReader を CompositeReader として使用
  • ReadyToRunMethod.cs: ローカルシグネチャ デコードを GetSectionData + MethodBodyBlock.Create へ切り替え
  • ManifestAssemblyMetadata.cs / StandaloneAssemblyMetadata.cs: GetSectionData 実装追加
  • TextDumper.cs: Webcil 入力に対して WASM 特有のディスアセンブリおよびメタデータ (パラメータ/ローカル/結果型) 出力機能追加
  • DumpModel.cs / Program.cs: Webcil 検出と OperatingSystem.Unknown への対応

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • 本 PR は GitHub Copilot の支援を受けて作成されました
  • 内部実装/ツール層への変更です (R2RDump と ILCompiler.Reflection.ReadyToRun ライブラリの拡張)
  • IAssemblyMetadata インターフェイスの変更は公開 API ではありませんが、このインターフェイスを実装するメタデータ実装クラスはすべて更新されています

#127753 [clr-interp] Fix debugger MethodEnter counter and INTOP_DEBUG_METHOD_ENTER assert

概要

CLRインタープリタのデバッガ統合における2つのアサーション失敗を修正しました。DispatchMethodEnterでのコントローラーカウント処理とインタープリタのINTOP_DEBUG_METHOD_ENTER命令の検証を改善し、スレッドアフィニティなMethodEnterコントローラーやデバッガブレークポイント設定時のテスト失敗を解決します。

変更内容

  • src/coreclr/debug/ee/controller.cpp: DispatchMethodEnter内のカウント処理をスレッド固有フィルター外に移動。これにより、MethodEnterが有効なすべてのコントローラーがg_cTotalMethodEnterに正しくカウントされるようになります(スレッドアフィニティの有無に関わらず)。
  • src/coreclr/vm/interpexec.cpp: INTOP_DEBUG_METHOD_ENTERのアサーション条件を更新。シーケンスポイントの命令がINTOP_DEBUG_SEQ_POINTまたはINTOP_BREAKPOINT(デバッガにより上書きされた場合)のいずれでも有効として認識します。

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

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

  • JMC.jmcChange
  • JMC.jmcDelegates
  • JMC.jmcFunceval
  • Async.AsyncStepInto

#127662 [runtime-async] Fix timestamp instrumentation

  • 作成者: @rcj1
  • 作成日時: 2026年05月01日 20:13:33(UTC)
  • マージ日時: 2026年05月12日 17:14:43(UTC)
  • ラベル: area-Diagnostics-coreclr

概要

runtime-async非同期デバッガーのタイムスタンプ計測を修正し、新たに作成されたcontinuation チェーンが、現在実行中のcontinuationのタイムスタンプを継承せず、中断時に新しいタイムスタンプを取得するようにしました。これにより、async チェーン内のすべてのタイムスタンプが同じになる問題を解決しています。

変更内容

  • AsyncHelpers.CoreCLR.cs: HandleSuspended/InstrumentedHandleSuspendedを簡潔化し、中断されたチェーンヘッド(sentinel のNext)に基づいて常に新しいタイムスタンプを付与するよう修正。follow-up continuation キューイング時の不要なタイムスタンプ伝播ロジックを削除
  • Task.cs: タイムスタンプソースを指定するオーバーロード Task.TryAddRuntimeAsyncContinuationChainTimestamps(Continuation chain, Continuation timestampSource) を削除し、「古い」タイムスタンプが新たに割り当てられたcontinuation ノードに伝播されないようにした
  • RuntimeAsyncTests.cs: タイムスタンプ計測の動作を検証する64行のテスト追加

パフォーマンスへの影響

改善あり。ベンチマーク結果:

  • 新版:387.4 ms
  • 旧版:404.2 ms
  • 改善率:約4.2%の高速化(タイムスタンプ伝播ロジック削減による効果)

関連Issue

#127662

その他

この変更は内部実装(runtime-async非同期デバッガー)の修正で、公開APIへの影響はありません。continuation チェーンのタイムスタンプが正確に中断時刻を反映するようになり、デバッガーの可視化精度が向上します。


#127602 Limit metadata block size when reading TAR archives

概要

TAR アーカイブ読み込み時のセキュリティを強化するため、PAX拡張属性ブロックおよびGNU LongPath/LongLink データセクションの最大サイズを1MBに制限します。これにより、不正形式のアーカイブからの過度なメモリ割り当てやDoS攻撃を軽減します。

変更内容

  • TarHeader.cs: MaxMetadataBlockSize 定数(1MB)を追加し、メタデータブロックサイズの上限を定義
  • TarHeader.Read.cs: ValidateSize() メソッドにメタデータブロック読み込み時の最大サイズチェックを実装
  • テスト: 同期・非同期の両方のTarReader GetNextEntry テストに、メタデータサイズ制限に関するテストケース(計131行)を追加

パフォーマンスへの影響

影響なし。サイズ検証はメタデータバッファ割り当て前に実行されるため、パフォーマンス低下はなく、むしろ悪意あるアーカイブによるリソース枯渇を防止します。

関連Issue

なし

その他

Copilot レビュアーからは、例外メッセージの改善に関する提案がありました:

  • 現在は InvalidOperationException を使用していますが、他の検証エラーとの一貫性のため InvalidDataException の使用を検討する価値があります
  • エラーメッセージが1MBの制限を明示せず、実際のサイズも表示していないため、アーカイブの不具合診断時の可読性向上が望まれます

#127438 [wasm][coreclr] Enable priority1 runtime tests in outerloop

概要

WebAssemblyのbrowser_wasmプラットフォームにおいて、CoreCLR outerloop CI での Priority1 ランタイムテスト実行を有効化します。マルチスレッド機能を持たないブラウザ環境やインタープリタの制限により失敗するテストを条件付きスキップまたは除外して、テストを安定化させます。

現在の成果:

  • Pri0: 3,998件(3,638合格)
  • Pri1: 14,085件(13,679合格、406スキップ)

変更内容

  • CI パイプライン(eng/pipelines/coreclr/ci.yml): browser_wasm checked ビルドと outerloop テスト実行ジョブを追加
  • テストガード: マルチスレッド依存テスト(VolatileTest系、RefStructWithSpan)を ConditionalFact(PlatformDetection.IsMultithreadingSupported) で条件付き実行に変更
  • ブラウザ固有の除外: 複数の呼び出し規約テスト(VT/callconv/*.il)とLoader/tailcallテストにActiveIssue属性を追加してブラウザでスキップ
  • プロジェクト参照: VolatileTest と CoreMangLib プロジェクトに TestLibrary 参照を追加(PlatformDetection 利用のため)
  • ライブビルドアーティファクト(eng/liveBuilds.targets): ブラウザ CoreCLR ホストアーティファクト(libBrowserHost.a、dotnet.native.*)をランタイムファイルセットに追加

パフォーマンスへの影響

影響なし。テスト環境対応による変更であり、ランタイム性能への直接的な影響はありません。

関連Issue

#127426

その他

このPRは outerloop テスト結果を赤くしていますが、作成者によると outerloop の赤状態は PRをブロックせず、他プラットフォームも全て green ではないため、このPRは既知の失敗を解決する必要はないと判断されています。


#127256 Fixes some theoretical races and retentions in AsyncOperation and ManualResetValueTaskSource

  • 作成者: @VSadov
  • 作成日時: 2026年04月22日 01:08:07(UTC)
  • マージ日時: 2026年05月12日 13:04:09(UTC)
  • ラベル: area-System.Threading

概要

AsyncOperationとManualResetValueTaskSourceCore<TResult>の完了シグナリングメカニズムを改善し、理論的なレース条件を排除して保持されるオブジェクト参照を削減します。完了検出をセンチネル値ベースに統一し、キャプチャしたコンテキストと状態をより早期にクリアすることで、メモリリークやオブジェクト参照の長期保持を防止します。

変更内容

  • src/libraries/System.Threading.Channels/src/System/Threading/Channels/AsyncOperation.cs

    • 完了検出を_completedフラグからセンチネル値(s_completedSentinel)の volatile read に変更
    • OnCompletedレース処理パスを改善し、キャプチャしたコンテキスト/状態をより早期にクリア
    • プール化された非同期操作向けのClearRetainedStateフックを追加して不要な参照を削減
  • src/libraries/System.Private.CoreLib/src/System/Threading/Tasks/Sources/ManualResetValueTaskSourceCore.cs

    • _completedフラグを削除し、センチネルベースの完了検出に統一
    • OnCompletedとSignalCompletionをリファクタリングして新しい完了モデルに対応
    • 両クラス間の実装をより相似させ、保持状態を最小化

パフォーマンスへの影響

  • プール化された非同期操作のメモリ保持期間を短縮(継続実行後、コンテナが再利用されるまでの間、不要なオブジェクト参照を保持しなくなる)
  • メモリリークの可能性を削減(例:アプリケーション内でさらなるアクティビティがない場合、最後に使用した接続の非破棄)
  • キャプチャされたコンテキストの参照をより早期に解放

関連Issue

#127234 #126735

その他

  • ARM64での完了アサーション失敗を修正(メモリオーダリング問題)
  • レビュー時にセンチネル値をセットする際のメモリ可視性について懸念が指摘されています。プレーン書き込みではなく、release操作(Volatile.WriteまたはInterlocked.Exchange)を使用することで、他のスレッドが完了を観測した際に_error/結果への先行書き込みが確実に見えるようにする必要があります。

#127196 Update socket infinite time span test

概要

Android プラットフォームでの TCP 接続失敗に起因するテストの不安定性を解決するため、SelectPoll_InfiniteTimeSpan_Ok テストを UDP ソケットを使用するように変更しました。テストの目的である "infinite timeout" 引数の妥当性検証は保持したままです。

変更内容

  • src/libraries/System.Net.Sockets/tests/FunctionalTests/ArgumentValidationTests.cs
    • TCP リスナー/クライアントセットアップを単一の UDP ソケットに置き換え
    • Socket.Select/Socket.Poll に対する Timeout.InfiniteTimeSpan と -1 タイムアウト引数の検証に焦点を絞った簡潔なテスト実装に変更

パフォーマンスへの影響

影響なし(テストの安定性改善が目的)

関連Issue

#122493、#121717

その他

このテストは System.Net.Sockets ライブラリの引数検証テストであり、公開API (Socket.Select/Socket.Poll) の仕様検証です。変更は内部テスト実装のみで、API そのものに影響はありません。


#127134 [cDAC] implement GetRuntimeNameByAddress

  • 作成者: @rcj1
  • 作成日時: 2026年04月20日 05:49:01(UTC)
  • マージ日時: 2026年05月12日 17:35:33(UTC)
  • ラベル: area-Diagnostics-cdac

概要

このPRはcDAC(Component Data Access Contract)を介してIXCLRDataProcess::GetRuntimeNameByAddressを実装し、スタブの種類分類(StubKind)と名前解決機能を追加します。スタブ(CallCountingStub、VSD_DispatchStubなど)にアノテーションを付与し、Precodeスタブの解決にも対応します。

変更内容

ExecutionManagerコントラクト関連:

  • GetStubKindAPIとStubKind列挙型を追加(IExecutionManager.cs)
  • EEJitManagerおよびReadyToRunJitManagerでスタブ種別の分類ロジックを実装
  • RangeSection.RangeListおよびCodeRangeMapRangeListデータモデルを導入

PrecodeStubsコントラクト関連:

  • GetCandidateEntryPoints列挙APIを追加してPrecodeスタブ名解決に対応

SOSDacImpl実装:

  • GetRuntimeNameByAddressを実装し、cDACコントラクトを使用してCLRスタブ名をフォーマット

ネイティブ側(コア):

  • datadescriptor.incにRangeSection.RangeList、CodeRangeMapRangeList型記述子、新規ヘルパーグローバルを追加
  • loaderallocator.hppとcodeman.hでcdac_data<>マクロを使用した公開

テスト・ドキュメント:

  • ExecutionManagerTests.csでスタブ種別分類テストを追加
  • MockDescriptors.ExecutionManager.csにmockRangeListおよびCodeRangeMapRangeListサポートを追加
  • ExecutionManager.md、PrecodeStubs.mdで新APIとデータ記述子を文書化

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • 既存のdaccess.cppのCLRStubアドレスフォーマットを固定幅16進数に調整
  • Copilotレビュー時にGetStubCodeBlockKindStringでSTUB_CODE_BLOCK_DYNAMICHELPER、STUB_CODE_BLOCK_FIXUPPRECODE、STUB_CODE_BLOCK_STUBPRECODEの明示的な処理が不足している可能性が指摘されています
  • このPRは既存のIXCLRDataProcessインターフェース実装を拡張するため、破壊的変更なし

#126904 Enable compilation of async thunks in composite mode

概要

Composite BuildモードでのReadyToRun(R2R)コンパイル時に、非同期サンク(async thunks)とレジューメーション スタブのコンパイルを有効化します。問題は、Composite Imageの型を参照するMutableModuleトークンを発行していたが、MutableModuleトークンがCoreLib以外を参照することが明示的にブロックされていたこと。解決策として、ExternalReferenceTokenManagerを使用して必要なトークンをMutableModuleに追加し、ILStubとしてサンク(thunk)をコンパイルします。ジェネリック メソッドの署名発出時の問題も修正しており、インスタンス化情報がストリップされた場合に所有型を強制的にエンコードするようになりました。

変更内容

  • MutableModule.cs: 非同期トークン作成用のエスケープハッチを追加し、Mutable Moduleの参照発行を制御
  • ExternalReferenceTokenManager.cs (新規): IL メソッド本体を走査して、MutableModuleにトークンを作成するロジック
  • CorInfoImpl.ReadyToRun.cs: HandleToModuleTokenでインスタンス化ストリップを追跡し、MethodWithTokenの所有型強制機能を追加
  • ReadyToRunILProvider.cs: 非同期固有のクロスモジュール トークン ラッピングパスを削除し、ロジックを簡略化
  • ReadyToRunCodegenCompilation.cs: 非同期サンク/スタブの参照エンティティがコンパイル前にMutableModuleでトークンを持つことを確認
  • MethodWithToken: コンストラクタの署名を更新し、複数の呼び出し箇所を対応
  • テストケース追加: RuntimeAsyncおよびCrossModuleInlining関連のテストを拡充

パフォーマンスへの影響

影響なし

関連Issue

#125337

その他

  • 内部実装の変更(コンパイラのJIT Interface層と AOT ReadyToRun コンパイラ)
  • 公開APIへの影響なし
  • Copilotレビュアーから指摘された懸念点: CreateCrossModuleInlineableTokensForILBodyでAsyncMethodVariant処理の簡略化により、ラッパーILのOwningMethodがバリアント キーと一致しない可能性があり、トークン解決が破壊される可能性

#126351 Fix resolving of default interface methods in crossgen2

  • 作成者: @BrzVlad
  • 作成日時: 2026年03月31日 11:41:54(UTC)
  • マージ日時: 2026年05月12日 05:14:55(UTC)
  • ラベル: area-ReadyToRun

概要

crossgen2での静的仮想インターフェイスメソッド呼び出し時に、制約付き型での実装解決に失敗した場合、デフォルトインターフェイスメソッド(DIM)の実装をインターフェイス上で検索するフォールバック処理を追加しました。これにより、Perf_DateTimeCultureInfo.ToStringテストで約25倍の高速化が実現されています。

変更内容

  • CorInfoImpl.ReadyToRun.cs: 静的仮想呼び出しの解決ロジックを修正。制約付き型での実装検索に失敗した場合、実装されたインターフェイス上のDIMを検索するフォールバック処理を追加(+25/-10)
  • jitinterface.cpp: JITインターフェイス側で同様のDIM解決フォールバック処理を実装(+24/-12)
  • SignatureBuilder.cs: シグネチャ生成ロジックの調整(+5/-5)
  • ReadyToRunSymbolNodeFactory.cs: シンボルノード生成ロジックの軽微な修正(+5/-4)

パフォーマンスへの影響

改善あり。Perf_DateTimeCultureInfo.ToStringテストにおいて約25倍の高速化を達成しました。インタープリタフォールバックのみの環境での実行性能が大幅に向上しています。

関連Issue

#126351

その他

本修正はデバッグアサーションも緩和しており、静的DIMが対象の場合、所有型がインターフェイスである解決済みターゲットを許容するようになりました。これはAOT(Ahead-of-Time)コンパイルの動的ディスパッチ処理の改善です。


#125097 [release/9.0-staging] Update dependencies from dotnet/arcade

概要

dotnet/arcadeリポジトリの依存関係を更新するPull Requestです。release/9.0ブランチのビルド20260511.1に基づいて、19個のarcadeツール・SDK関連パッケージとXUnitアサーション関連パッケージを更新しています。

変更内容

  • eng/Version.Details.xml: バージョン詳細情報の更新(43行追加、43行削除)
  • eng/Versions.props: バージョンプロパティの更新(16行追加、16行削除)
  • global.json: グローバルJSONのバージョン設定更新(5行追加、5行削除)

更新パッケージ:

  • Microsoft.SourceBuild.Intermediate.arcade、Microsoft.DotNet.Arcade.Sdk、Microsoft.DotNet.Build.Tasks系(Archives、Feed、Installers、Packaging、TargetFramework、Templating、Workloads)
  • Microsoft.DotNet.CodeAnalysis、Microsoft.DotNet.GenAPI、Microsoft.DotNet.GenFacades、Microsoft.DotNet.Helix.Sdk、Microsoft.DotNet.PackageTesting、Microsoft.DotNet.RemoteExecutor、Microsoft.DotNet.SharedFramework.Sdk、Microsoft.DotNet.VersionTools.Tasks、Microsoft.DotNet.XliffTasks、Microsoft.DotNet.XUnitExtensions
  • Microsoft.DotNet.XUnitAssert、Microsoft.DotNet.XUnitConsoleRunner

バージョン範囲:9.0.0系は9.0.0-beta.26123.3から9.0.0-beta.26261.1へ、2.9.0系は2.9.0-beta.26123.3から2.9.0-beta.26261.1へ更新。

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

自動マージリクエストであり、dotnet-maestro[bot]によって作成されたMaestroの依存関係更新PRです。変更内容はバージョンメタデータの更新のみで、ランタイムやコンパイラの機能変更を含みません。


#124415 More precise ranges for casts in GetRangeFromAssertions

  • 作成者: @EgorBo
  • 作成日時: 2026年02月14日 01:24:49(UTC)
  • マージ日時: 2026年05月12日 12:33:26(UTC)
  • ラベル: area-CodeGen-coreclr

概要

JITの範囲チェック最適化パスにおいて、キャスト操作を通じたより正確な範囲伝播を実現するための改善です。GetRangeFromAssertions内でのキャスト処理をより正確にし、GetRangeFromTypeにTYP_INTサポートを追加することで、範囲解析の精度を向上させています。

変更内容

  • src/coreclr/jit/assertionprop.cpp: GetRangeFromAssertions内でキャスト元の型チェックをgenActualTypeを使用した方式に変更し、小さい型に対するVN型ベースの早期範囲調整を追加
  • src/coreclr/jit/rangecheck.cpp: GetRangeFromTypeにTYP_INTケースを追加し、不明な値ではなくint32の完全な範囲を返すように改善

パフォーマンスへの影響

影響なし(ただし、より正確な範囲解析により、JITが最適化の判定精度を向上させ、生成されるコードの品質が改善される可能性があります)

関連Issue

なし

その他

  • 変更内容にはVN正規化により機能しない可能性のあるデッドコードが含まれている旨がCopilotにより指摘されています
  • この変更はJIT内部実装(コンパイラレベル)の改善であり、公開APIへの影響はありません

目次