Pull Request on 2026年06月18日

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

注意点

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


目次

  1. #129579 Fix debug build of libraries tests
  2. #129572 Remove unneeded message printed in case of Tizen build
  3. #129569 [ci-scan] Use blocking-clean-ci-optional for JIT/GC/PGO stress pipeline KBEs
  4. #129550 Disable CustomReflectionContextExamples.AddCustomAttribute on NativeAOT via existing tracking issue
  5. #129539 Fix objRef not being stored in GetPointerData after DebuggerIPCE_ObjectData refactor
  6. #129531 Fix assembly labels on MacOS X64 to be LOCAL_LABEL
  7. #129529 Add DerivedTypes property to IsClosedTypeAttribute
  8. #129520 [cDAC] Add RuntimeFlavor to IRuntimeInfo and expand NAOT data descriptor
  9. #129514 [clr-ios] Disable Microsoft.Extensions.DependencyInjection.ExternalContainers.Tests on Apple mobile
  10. #129512 Implement StartSuspended for Windows and Resume on SafeProcessHandle
  11. #129494 [Wasm RyuJit] Add Wasm SIMD NYIs, fix PushArgs assert, fix Async/Try/SCC issue.
  12. #129479 Port System.Net.Security to OpenBSD
  13. #129473 [release/10.0] Fix ComInterfaceGenerator collision on same-named methods in disjoint cross-assembly bases
  14. #129466 [browser][coreCLR] fix resource merging
  15. #129428 Improve WebSocket exceptions to include informative messages
  16. #129411 [cDAC]: Implement GetEnCHangingFieldInfo
  17. #129402 Skip UnmanagedCallersOnlyAssociatedSourceType test on Android
  18. #129321 JIT: Fix managed return value debug info for floating-point returns
  19. #129316 Cache NativeAOT Visual Studio tool discovery
  20. #129293 [mobile] .NET 11 mobile runtime configuration updates
  21. #129278 Handle canonical types in constraints checks
  22. #129203 Fix LoaderHeap's free list growing more than expected
  23. #129189 Pre-initialize InvariantCulture such that it can be safely used when creating stack traces
  24. #129091 [cDAC] Stackwalk DacDbi APIs
  25. #127760 [clr-interp] Implement Managed Return Value support for the interpreter
  26. #127582 Fix NoopLimiter disposal in DefaultPartitionedRateLimiter Heartbeat
  27. #126720 Separate GC WKS and SVR compilation units
  28. #78746 Aging dependent handles

#129579 Fix debug build of libraries tests

概要

System.Net.Security テストプロジェクトのデバッグビルドにおいて、RuntimeInformation への参照が解決されないコンパイルエラーを修正しています。PR #129479 で導入された問題の回帰修正です。

変更内容

  • src/libraries/System.Net.Security/tests/FunctionalTests/TestConfiguration.cs
    • RuntimeInformation 型を使用するために必要な using ステートメント(またはアセンブリ参照)を追加
    • 修正前:CS0103: The name 'RuntimeInformation' does not exist in the current context エラーが発生
    • 修正後:コンパイルエラーが解決

パフォーマンスへの影響

影響なし

関連Issue

#129479(この PR で導入された回帰の原因)

その他

  • 変更範囲が最小限(1行追加)であり、テストの機能変更ではなく純粋なコンパイルエラー修正です
  • デバッグビルド環境でのテストプロジェクトのコンパイルを正常化します

#129572 Remove unneeded message printed in case of Tizen build

概要

Tizen ビルド時に CMake スクリプト(eng/native/output-toolchain-info.cmake)の出力に不要なメッセージが含まれていたため、XML 形式の出力が破損していました。このメッセージを削除することで、NativeExports.csproj の XmlPeek タスク処理が正常に動作するようになります。

変更内容

  • eng/common/cross/toolchain.cmake: 不要なメッセージ出力を削除(2行削除)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • この変更は Tizen プラットフォーム向けビルドの修正です
  • XmlPeek タスクが NullReferenceException で失敗していた根本原因は、CMake 出力がメッセージによって XML 形式として無効化されていたことです
  • ビルドロジックの堅牢性向上に関連する修正です

#129569 [ci-scan] Use blocking-clean-ci-optional for JIT/GC/PGO stress pipeline KBEs

概要

CI失敗スキャンワークフロー(ci-failure-scan)を更新し、JIT/GC/PGOストレステスト用パイプラインの18個がKBE(Known Build Error)ラベルとしてblocking-clean-ci-optionalを使用するように変更。これらのパイプラインはrequiredゲートの外で実行される任意のローリングジョブであるため、失敗時にBuild Analysisで表示されてもクリーンCIをブロックすべきではありません。

変更内容

  • ci-failure-scan.md: Step 2テーブルで18個のストレステストパイプラインをoptional-ciとしてマーク(jitstress、gcstress、pgo関連など)。新しいKBEラベル選択ルールを追加:デフォルトはblocking-clean-ci、optional-ciパイプラインではblocking-clean-ci-optionalを使用し、両方を付与しない。requiredゲート内で同じシグネチャが再発生する場合は、重要度エスカレーション例外により別個のblocking-clean-ci KBEを作成。
  • shared/create-kbe.instructions.md: KBEテンプレート作成手順を更新し、blocking-clean-ci-optionalをオプショナルパイプラインに対して許可する旨を記載。
  • ci-failure-scan.lock.yml: allowed_labels制約と生成文字列を更新し、blocking-clean-ci-optionalラベルを許可。

パフォーマンスへの影響

影響なし

関連Issue

#129564、#129568を置き換え。

その他

  • superpmi-diffs(152)は未含:PR実行のみでmainブランチでは実行されないため。
  • Fuzzlyn(149)は未追加:別個のFuzzlyn JIT分析スキルで対応。
  • ロック変更はallowed_labels制約と再コンパイル後のfrontmatter_hashのみ。プロ文は実行時インポートされるため、テーブル/ルール編集に際してロック再生成は不要。
  • blocking-clean-ci-optionalはdotnet/runtimeの既存ラベル(「オプショナルローリング実行のブロック」)。

#129550 Disable CustomReflectionContextExamples.AddCustomAttribute on NativeAOT via existing tracking issue

  • 作成者: @Copilot
  • 作成日時: 2026年06月18日 00:00:43(UTC)
  • マージ日時: 2026年06月18日 05:35:56(UTC)
  • ラベル: area-System.Reflection

概要

System.Reflection.ContextテストスイートのCustomReflectionContextExamples.AddCustomAttributeテストにNativeAOT環境でのみ適用される[ActiveIssue]属性を追加しました。既存の追跡Issue#73356を利用して、NativeAOT固有の問題を抑制しつつ、非NativeAOT環境での動作は変わりません。

変更内容

  • src/libraries/System.Reflection.Context/tests/CustomReflectionContext.Examples.cs
    • CustomReflectionContextExamples.AddCustomAttribute()メソッドに[ActiveIssue]属性を追加
    • NativeAOT環境(PlatformDetection.IsNativeAot)でのみ無視される設定
    • 既存のパターン(Issue#73356)を再利用
[Fact]
[ActiveIssue("https://github.com/dotnet/runtime/issues/73356", typeof(PlatformDetection), nameof(PlatformDetection.IsNativeAot))]
public static void AddCustomAttribute()

パフォーマンスへの影響

影響なし

関連Issue

#73356、#129550

その他

  • 変更はNativeAOT環境専用の既存パターンに準拠
  • テストスコープは単一テストに限定
  • 非NativeAOT環境での動作変化なし

#129539 Fix objRef not being stored in GetPointerData after DebuggerIPCE_ObjectData refactor

概要

デバッガーのCordbReferenceValue::GetPointerDataメソッドにおいて、ローカルキャッシュ(localValue)からオブジェクト参照を読み込んだ後、それをm_info.objRefに書き戻していなかった問題を修正しました。この不具合により、Span<T>などの値型のデバッガー可視化が失敗していました。

変更内容

  • src/coreclr/debug/di/divalue.cpp: CordbReferenceValue::GetPointerData内のローカルコピーパスで、localValueから読み込んだポインターを一時的なvoid*変数に格納した後、PTR_TO_CORDB_ADDRESSを使ってm_info.objRefに書き戻す処理を追加(+2/-1)

パフォーマンスへの影響

影響なし

関連Issue

#129539

その他

この修正はランタイムのデバッガーインターフェース(内部実装)に対する変更です。byref型やポインター型を含む値型がGetPointerDataパスを通る場合のデバッガー動作の正確性に影響します。


#129531 Fix assembly labels on MacOS X64 to be LOCAL_LABEL

  • 作成者: @davidwrighton
  • 作成日時: 2026年06月17日 17:42:21(UTC)
  • マージ日時: 2026年06月18日 02:58:36(UTC)
  • ラベル: area-VM-coreclr

概要

macOS X64環境において、アセンブリのラベルをLOCAL_LABELに修正することで、リンカーによる関数の不正な分割を防止し、正しい動作を確保する変更です。ラベルを適切に指定しないとリンカーが関数を不正に細分化してしまい、予期しない動作につながるため、この修正が必要です。

変更内容

  • src/coreclr/vm/amd64/Context.S: ラベル定義をLOCAL_LABELに修正(8箇所)
  • src/coreclr/vm/amd64/virtualcallstubamd64.S: ラベル定義をLOCAL_LABELに修正(9箇所)

パフォーマンスへの影響

影響なし(リンカーの処理動作を正規化し、関数分割による予期しない最適化を防ぐため、安定性向上が目的)

関連Issue

#129531

その他

本変更はmacOS X64プラットフォーム専用の修正で、x86-64アーキテクチャのコアCLRランタイムコード(コンテキスト処理と仮想呼び出しスタブ)に影響します。リンカーの動作を制御する内部実装の修正であり、公開APIへの影響はありません。


#129529 Add DerivedTypes property to IsClosedTypeAttribute

  • 作成者: @Copilot
  • 作成日時: 2026年06月17日 15:39:40(UTC)
  • マージ日時: 2026年06月18日 13:18:52(UTC)
  • ラベル: area-System.Reflection

概要

IsClosedTypeAttribute に DerivedTypes プロパティを追加し、リフレクションベースのコンポーネントが TypeDef テーブルをスキャンせずに閉じられた型の派生型を検出できるようにします(API レビュー #129009 で承認済み)。

var attr = new IsClosedTypeAttribute();
attr.DerivedTypes;          // Type.EmptyTypes (デフォルト)

attr.DerivedTypes = [typeof(Dog), typeof(Cat)];
attr.DerivedTypes = null;   // Type.EmptyTypes に正規化される

変更内容

  • IsClosedTypeAttribute: public Type[] DerivedTypes { get; set; } プロパティを追加。デフォルトは Type.EmptyTypes で初期化、null は Type.EmptyTypes に正規化されるため、null を返すことはない(ライブラリ内部実装)
  • 参照アセンブリ (System.Runtime.cs): 新規プロパティを公開 API サーフェスに追加(公開 API)
  • テスト (AttributesTests.cs): デフォルトの空配列、値の設定、null 正規化動作をカバーするテストを追加

パフォーマンスへの影響

影響なし

関連Issue

#129009

その他

なし


#129520 [cDAC] Add RuntimeFlavor to IRuntimeInfo and expand NAOT data descriptor

概要

cDAC(Compact Data Access Contract)の IRuntimeInfo コントラクトを拡張し、ターゲットランタイムの「flavor」(CoreCLR/NativeAOT)を識別する新しい GetRuntimeFlavor() API を追加しました。CoreCLR と NativeAOT の両方のデータディスクリプタを更新し、ランタイム情報の一貫した公開を実現します。

変更内容

  • 公開API追加:RuntimeInfoRuntimeFlavor 列挙型(Unknown、Coreclr、NativeAot)と IRuntimeInfo.GetRuntimeFlavor() を追加(Microsoft.Diagnostics.DataContractReader.Abstractions/Contracts/IRuntimeInfo.cs)
  • 実装変更:RuntimeInfo_1 をクラスベースに変更し、値のキャッシング機能と Flush() による無効化を実装(RuntimeInfo_1.cs)
  • CoreCLR対応:RuntimeFlavor グローバル文字列("Coreclr")を datadescriptor に追加
  • NativeAOT対応:
    • RuntimeInfo c1 コントラクトを登録
    • OperatingSystem、Architecture、RuntimeFlavor("NativeAot")、RID、RecommendedReaderVersion グローバルを公開
    • CMake駆動の configure.h.in を追加(CLR_DOTNET_RID に基づく RID マクロ生成)
  • テスト追加:列挙値の検証、キャッシング動作、グローバル不在時の挙動、CoreCLR ダンプでの flavor 確認を含む 106 行のユニットテストと 12 行のダンプテストを追加
  • ドキュメント更新:RuntimeInfo.md を更新

パフォーマンスへの影響

影響なし。キャッシング機能により、同一値の反復アクセス時は単一読み込みで済みます。

関連Issue

なし

その他

  • 互換性への影響:既存の NativeAOT デバッグ実行可能ファイルは、新しいグローバルを取得するため再発行が必要です(データディスクリプタはAOT実行可能ファイルに静的に埋め込まれるため)
  • RuntimeInfo_1 は内部実装の変更で、公開APIではありません
  • ビルド検証済み:CoreCLR と NativeAOT のリリースビルド、cDAC ユニットテスト(2527 合格、0 失敗)

#129514 [clr-ios] Disable Microsoft.Extensions.DependencyInjection.ExternalContainers.Tests on Apple mobile

概要

Apple モバイル/AOT な Helix テスト実行環境において、Microsoft.Extensions.DependencyInjection.ExternalContainers.Tests が aggressive trimming により反射機能が削除されるため、テストケースが発見されず(Tests run: 0)実行がクラッシュとして報告されるのを防ぐため、このテストプロジェクトをテスト対象から除外します。

変更内容

  • src/libraries/tests.proj: AOT/Apple-mobile Helix 除外リストに Microsoft.Extensions.DependencyInjection.ExternalContainers.Tests.csproj を追加

パフォーマンスへの影響

影響なし

関連Issue

#129359

その他

このプロジェクトは既に除外されている同様のテストプロジェクト DI.Tests と同じ理由での除外となります。Aggressive trimming による反射ベースの第三者製 DI コンテナの削除が根本原因であり、テスト検出機構の制限によるものです。


#129512 Implement StartSuspended for Windows and Resume on SafeProcessHandle

概要

ProcessStartInfo.StartSuspended プロパティと SafeProcessHandle.Resume() メソッドを Windows に実装しました。プロセスを中断状態で起動し、後で再開できます。

ProcessStartInfo startInfo = new("myapp.exe") { StartSuspended = true };
using SafeProcessHandle handle = SafeProcessHandle.Start(startInfo);
// プロセスは作成されるがメインスレッドは中断状態
handle.Resume(); // ResumeThread経由でメインスレッドを再開
ProcessExitStatus status = handle.WaitForExit();

変更内容

  • ProcessStartInfo.cs: StartSuspended 自動プロパティ([SupportedOSPlatform("windows")])を追加。StartSuspended + UseShellExecute の組み合わせでは InvalidOperationException をスロー
  • SafeProcessHandle.Windows.cs: プロセス作成時に CREATE_SUSPENDED フラグを使用。PROCESS_INFORMATION から取得したメインスレッドハンドルを _mainThreadHandle に保存。Resume() は Interlocked.Exchange でスレッドセーフに ResumeThread を呼び出してハンドルをクローズ。ReleaseHandle() で未再開時のハンドルクローズに対応
  • SafeProcessHandle.Unix.cs: ResumeCore() が PlatformNotSupportedException をスロー
  • SafeProcessHandle.cs: 公開 Resume() API エントリーポイントを追加
  • Strings.resx: 互換性エラーと無効な再開用途のリソース文字列を追加
  • StartSuspendedTests.cs: 中断→再開→終了フロー、ProcessId 有効性、二重再開エラー、非中断状態での再開エラー、パイプリダイレクション等のテスト (204行)
  • ref/System.Diagnostics.Process.cs: 新 API を ref アセンブリに反映

パフォーマンスへの影響

影響なし

関連Issue

#94127

その他

  • Windows のみサポート: StartSuspended は非Windows では無視され、Resume() は非Windows で PlatformNotSupportedException をスロー
  • 制限事項: KillOnParentExit + StartSuspended の組み合わせではジョブオブジェクト割り当て後、再開をスキップ
  • スレッドセーフ: Interlocked.Exchange を使用した単一使用フロー設計で、二重呼び出しは検出・エラーとなる

#129494 [Wasm RyuJit] Add Wasm SIMD NYIs, fix PushArgs assert, fix Async/Try/SCC issue.

概要

Wasm RyuJITバックエンド向けの複数の修正を含むPRです。SIMD16ローカル変数/フィールド読み込みをWasm SIMD NYI(Not Yet Implemented)として報告し、R2Rコンパイル時に対応メソッドをスキップできるようにします。また、固定レジスタセットを持たないターゲット(Wasm)でのretbufコール引数の仮定を緩和し、非同期try領域のSCC書き換え処理を改善します。

変更内容

  • layout.h: 16バイトレイアウトをWasm上でTYP_SIMD16レジスタ型として報告しないよう修正
  • codegenwasm.cpp: SIMD16ローカル変数/フィールド読み込み、間接ローカル読み込み、レジスタロード時のWasm SIMD NYIガード追加(レジスタ候補ローカルは未対応)
  • flowgraph.cpp: 複数エントリのtry領域に対するSCC発見を支援するための一時的エッジ追加、コメント誤字修正
  • codegencommon.cpp: HAS_FIXED_REGISTER_SET==0(Wasm)時にretbuf引数が常にPUTARGノードであると仮定しない対応

パフォーマンスへの影響

影響なし(コンパイラ最適化ロジックの修正で、コンパイル時の処理フロー改善)

関連Issue

なし

その他

本変更はWasm特有の制限に対応するもので、他のターゲット(x86/x64/ARM)には影響を与えません。NYI報告により、Wasm環境でのR2Rコンパイル時に非サポートメソッドを適切に識別できるようになります。


#129479 Port System.Net.Security to OpenBSD

概要

System.Net.SecurityライブラリをOpenBSDプラットフォームに対応させるPull Requestです。プラットフォーム固有の条件分岐を追加し、OpenBSD環境でのSecurity機能の動作をサポートします。

変更内容

  • eng/versioning.targets: OpenBSD対応に関連するバージョニング設定を追加
  • System.Net.Security.csproj: プロジェクトファイルのプラットフォーム条件更新(+1/-1)
  • NegotiateAuthenticationPal.ManagedSpnego.cs: ManagedSpnego認証ロジックにOpenBSD対応コードを追加(+12/-1)
  • LocalAppContextSwitches.cs: OpenBSD環境向けのアプリケーションコンテキストスイッチを新規追加(+5行)
  • TestConfiguration.cs: テスト設定のプラットフォーム条件を更新

パフォーマンスへの影響

影響なし

関連Issue

#124911

その他

このPRは既存のIssue #124911への貢献です。変更は主にOpenBSDプラットフォームの条件分岐追加であり、既存プラットフォームへの破壊的変更は含まれていません。


#129473 [release/10.0] Fix ComInterfaceGenerator collision on same-named methods in disjoint cross-assembly bases

概要

クロスアセンブリの[GeneratedComInterface]継承で、異なる外部基底インターフェースが同じ名前のメソッドを持つ場合、ComMethodInfo辞書キーの衝突によりCS8785エラーが発生する問題を修正します。生成時に外部定義メソッドの識別子にExternalSymbolIdを組み込むことで、キー衝突を回避します。

変更内容

  • ComMethodInfo.cs: 外部定義メソッドのレコード等値性とハッシュにExternalSymbolId(ドキュメント コメントIDまたは完全修飾名フォールバック)を含める(ジェネレータ内部のみ)
  • ISameNameMethodsDifferentAssembly.cs: 同じ名前のMyMethodを持つ外部基底インターフェースを追加し、クロスアセンブリ衝突シナリオを再現
  • IDerivedFromExternalSameName.cs: 新しい外部基底を継承するテスト用派生インターフェースを追加
  • CrossAssemblyInheritanceTests.cs: 両方の不連続基底と単一基底のパスをカバーする回帰テストを追加

パフォーマンスへの影響

影響なし

関連Issue

#122708

その他

  • 対象範囲: .NET 10 release/10.0向けのサービス対応可能な修正
  • 互換性: 破壊的変更なし。変更はジェネレータ内部の処理に限定され、公開API、生成ソースコントラクト、ランタイム動作に影響しない
  • リスク評価: 低。修正は外部定義メソッドのキー識別に限定された外科的変更
  • テスト: CS8785エラーの再現確認、回帰テスト追加、ComInterfaceGenerator.Testsスイート全体で合格

#129466 [browser][coreCLR] fix resource merging

概要

WebAssemblyローダーの設定マージロジックにおけるバグを修正。mergeResourcesで明示的に列挙されていないリソースフィールド(例:libraryInitializers)がマージ時に失われていた問題を解決。新しい実装では、明示的な処理が不要なフィールドも含めてすべてのリソースプロパティが保持されるようになります。

変更内容

  • src/native/libs/Common/JavaScript/loader/config.ts

    • mergeResourcesを再実装。マージ結果をsourceオブジェクトに構築してからObject.assignでtargetにコピーする方式に変更。これによりlibraryInitializersなど特別なマージ処理が不要なフィールドが確実に保持される
    • satelliteResourcesのマージで、targetとsourceの両方に存在するキーの合集合をループ処理するように更新
  • src/mono/wasm/testassets/WasmBasicTestApp/App/wwwroot/main.js

    • テスト出力にresources.libraryInitializers.lengthを追加
  • src/mono/wasm/Wasm.Build.Tests/LibraryInitializerTests.cs

    • InvokeLibraryInitializersApiテストでresources.libraryInitializers.length=1が出力されることをAssert.Containsで検証

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

この修正は内部実装(ランタイムローダー)のバグ修正であり、公開APIの変更ではありません。libraryInitializersを使用するWebAssemblyアプリケーションの挙動に直結する重要な修正です。


#129428 Improve WebSocket exceptions to include informative messages

  • 作成者: @Copilot
  • 作成日時: 2026年06月15日 15:25:24(UTC)
  • マージ日時: 2026年06月18日 13:34:31(UTC)
  • ラベル: area-System.Net

概要

WebSocket例外の診断品質を向上させるPRです。無効なUTF-8テキストメッセージ受信、不正なクローズステータスコード/説明などのエラーケースで、単なる「Aborted state」というジェネリックなメッセージではなく、シナリオ固有の情報的なエラーメッセージを含むWebSocketExceptionをスローするようになりました。

従来の動作:

System.Net.WebSockets.WebSocketException (0x80004005): An exception caused the WebSocket to enter the Aborted state. Please see the InnerException, if present, for more details.

(InnerExceptionなし)

変更内容

  • ManagedWebSocket.cs:受信/クローズエラーパスに明示的なリソースベースのエラーメッセージを追加。無効UTF-8ペイロードや不正なクローズペイロード時の診断情報を改善
  • Strings.resx:新しいローカライズ可能なリソース文字列を追加(無効UTF-8テキストペイロード、プロトコル違反、無効クローズステータスコード、無効クローズ説明のUTF-8エラー)
  • WebSocketReceiveErrorMessageTests.cs:新規テストファイル。不正なフレームを合成し、例外メッセージとInnerExceptionを検証
  • WebSocketUtf8Tests.cs:既存UTF-8検証テストで新しい無効UTF-8例外メッセージをアサート

パフォーマンスへの影響

影響なし

関連Issue

#129192

その他

このPRはSystem.Net.WebSocketsライブラリのパブリックAPIの例外メッセージ改善です。既存の破壊的変更はなく、エラー診断の利便性を向上させるものです。


#129411 [cDAC]: Implement GetEnCHangingFieldInfo

  • 作成者: @rcj1
  • 作成日時: 2026年06月15日 06:02:18(UTC)
  • マージ日時: 2026年06月18日 03:29:40(UTC)
  • ラベル: area-Diagnostics-coreclr

概要

cDACのEdit-and-Continue(EnC)サポートを拡張し、GetEnCHangingFieldInfo機能を完全に実装するPRです。新しいIRuntimeMutableTypeSystem APIを通じて、EnC追加フィールドのストレージロケーション(静的フィールド・インスタンスフィールド)の特定と、フィールド修正の必要性判定をサポートします。

新しいAPI:

bool DoesEnCFieldDescNeedFixup(TargetPointer encFieldDescPointer);
TargetPointer GetEnCStaticFieldDataAddress(TargetPointer encFieldDescPointer);
TargetPointer GetEnCInstanceFieldAddress(TargetPointer objectAddress, TargetPointer encFieldDescPointer);

変更内容

  • cDAC契約層(IRuntimeMutableTypeSystem): EnCフィールド情報解析用の3つの新規ヘルパーメソッドを実装
  • cDAC データモデル: EnC関連構造体の新規データ型追加(EnCFieldDesc, EnCSyncBlockInfo, EnCAddedField, EnCAddedStaticField, EditAndContinueHelperObject)およびSyncBlock.EnCInfoポインタ読み込み対応
  • 管理型DAC実装(DacDbiImpl): GetEnCHangingFieldInfoを新規cDAC契約を用いて完全実装、レガシー実装との比較検証対応
  • ネイティブ側DAC/DBI: GetEnCHangingFieldInfoシグネチャからpfStatic出力パラメータを削除し、代わりにFieldData.m_fFldIsStaticを使用
  • ランタイムメタデータ: syncblk.hでm_pEnCInfoオフセットをcDACに公開、encee.hでcdac_data<>マクロ経由でEnC構造体メンバーへアクセス
  • ユニットテスト: DoesEnCFieldDescNeedFixupとGetEnCStaticFieldDataAddressの新規テスト追加
  • ドキュメント: RuntimeMutableTypeSystem契約の設計ドキュメント更新(91行追加)

パフォーマンスへの影響

影響なし

関連Issue

#129411

その他

  • API互換性: ネイティブDAC/DBI側のIDacDbiInterface::GetEnCHangingFieldInfoシグネチャが変更される破壊的変更だが、これは内部実装向けAPIであるため外部への影響はなし
  • エラーコード: 新規エラーコードCORDBG_E_ENC_HANGING_FIELDを追加
  • 実装範囲: 全変更はFEATURE_METADATA_UPDATERフィーチャー配下であり、EnC機能を持つビルドのみに影響

#129402 Skip UnmanagedCallersOnlyAssociatedSourceType test on Android

概要

NativeAOT Smoke TestsのAndroidプラットフォーム対応改善。UnmanagedCallersOnlyAssociatedSourceTypeテストがAndroid環境で失敗するため、プラットフォーム固有の早期終了処理を追加し、追跡中の問題へのリンクを含めました。

変更内容

  • src/tests/nativeaot/SmokeTests/TrimmingBehaviors/UnmanagedCallersOnlyAssociatedSourceType.cs
    • Run()メソッドにAndroid環境での早期終了処理を追加(+4行)
    • トラッキング対象の問題へのリンクを含む

パフォーマンスへの影響

影響なし(テスト実行時の条件分岐追加のみ)

関連Issue

なし(PR内での具体的なIssue番号の記載なし)

その他

本変更はテストのスキップ処理であり、プロダクションコードへの変更ではありません。Android環境での既知の問題をワークアラウンドとして対応しています。


#129321 JIT: Fix managed return value debug info for floating-point returns

概要

PR #128479で導入された管理対象戻り値のネイティブ変数エミッションにおいて、浮動小数点戻り値の場合にstoreVariableInRegisters(REG_FLOATRET, REG_NA)を使用していたが、これは整数レジスタを示すVLT_REGを設定してしまい、デバッガが整数レジスタでの読み込みに失敗する問題を修正します。

修正内容として、VLT_REG_FPを使用し0ベースのFPレジスタインデックス(REG_FLOATRET - REG_FP_FIRST)をエンコードすることで、デバッガのVLT_REG_FPハンドラが正しくREGISTER_AMD64_XMM0を加算してCorDebugRegisterに変換できるようにしました。

変更内容

  • src/coreclr/jit/scopeinfo.cpp: 非x86ターゲットでの浮動小数点戻り値に対して、VLT_REG_FPを使用し、0ベースのFPレジスタインデックスでエンコード(+28/-10)
  • src/coreclr/jit/codegencommon.cpp: VLT_REG_FPエンコーディング期待値に関するコメント追加(+20/-4)
  • src/coreclr/jit/ee_il_dll.cpp: 関連するデバッグ情報処理の調整(+4/-1)

パフォーマンスへの影響

影響なし

関連Issue

#128479

その他

Visual Studioでのテスト中に検出された問題です。この修正により、デバッガは浮動小数点型(float, double等)の戻り値を正しくXMM0レジスタから読み込めるようになります。


#129316 Cache NativeAOT Visual Studio tool discovery

概要

Windows NativeAOT ビルド統合で Visual Studio 検出をキャッシュ化する変更。vswhere.exe を使用して Visual Studio インストール路とバージョンを検証し、vcvarsall.bat の出力(ツールディレクトリと LIB パス)をキャッシュして、再ビルド時の再検出を回避する。

変更内容

  • Microsoft.NETCore.Native.Windows.targets: findvcvarsall.bat の呼び出しを vswhere.exe ベースの検出に置き換え。VS インストール路とバージョン取得後、キャッシュファイル(findvcvarsall.$(_targetArchitecture).txt)を $(NativeIntermediateOutputPath) に生成。パス/バージョンが一致する場合はキャッシュを再利用。
  • findvcvarsall.bat: 削除(ロジックが .targets ファイルに統合)

パフォーマンスへの影響

初回ビルドで vswhere.exe 呼び出しによる検出が発生するが、以降のビルドではキャッシュファイルの存在確認(VS パス/バージョン一致時)で不要な再検出を回避し、ビルド時間を短縮。キャッシュはアーキテクチャ別に管理される。

関連Issue

#129265

その他

NativeAOT ビルド インフラの内部実装変更で、公開 API への影響なし。Windows 環境でのビルド統合のみに関連。


#129293 [mobile] .NET 11 mobile runtime configuration updates

概要

.NET 11移行に伴う、モバイルランタイムのCI設定更新です。MonoのAndroid/iOS/tvOSモバイルテストレグをランタイムCI パイプラインから削除し、WebAssembly MonoおよびCoreClR/NativeAOTのモバイルレグは維持されます。また、SDK検証用に一時的にglobal.jsonをプレビューSDKにピンし、NuGet.configにgeneral-testingフィードを追加しています。

変更内容

  • NuGet.config: general-testingパッケージソースを追加(一時的な検証用)
  • global.json: SDK/ツーリングを11.0.100-preview.6.26310.106にピン(一時的な検証用)
  • eng/pipelines/runtime.yml: Monoモバイルライブラリテストレグを削除、MonoAOTOffsetsからモバイルプラットフォームを削除(browser_wasmとwasi_wasmは維持)
  • eng/pipelines/extra-platforms/: Android/iOS/tvOS/MacCatalystのMonoライブラリテストレグを削除
  • eng/pipelines/performance/perf-build.yml: mono_arm64_androidとmono_arm64_iosビルドタイプを完全削除(パラメータも含む)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • 重要: NuGet.configのgeneral-testingフィード追加は一時的な検証ピンです。本来のプロダクション利用ではない旨をコメントで明記することが推奨されています(マージ時に誤って有効のままにならないよう注意が必要)
  • 検証方法: dotnet/performance#5240と併せて実施、ランタイムとランタイム-エクストラプラットフォームパイプラインのパス検証済み
  • ランタイム側への影響: 内部CI設定のみで、公開APIや言語仕様への変更なし
  • WebAssemblyモバイル、デスクトップMonoはこの変更の影響を受けません

#129278 Handle canonical types in constraints checks

概要

正規型(canonical types)である__Canonと__UniversalCanonをジェネリック制約チェック時に正しく処理するため、キャスティングロジックと制約検証ロジックを更新しました。本変更により、NativeAOT/CoreCLRの共有TypeSystemが制約チェック時に__Canonを適切に扱え、リフレクションによるジェネリック型のインスタンス化がAOT/トリミング下で正しく保持されるようになります。

変更内容

  • CastingHelper.cs: キャスティングロジックをハンドラベースに再構成し、canonical型対応の新メソッドCanCastToWithCanonを追加。__Canonを単なるclass __Canon : objectとして扱う従来ロジックと、「参照型だが実際の型キャスト可否は不明」として扱う新ロジックの両立を実現
  • CastingHelper.Canon.cs/NonCanon.cs: canonical型対応/非対応の具体的なキャスティング実装を分離
  • TypeSystemConstraintsHelpers.cs: 制約チェックをcanonical対応ロジックCanCastToWithCanonに変更し、型引数に対する適切な検証を実施
  • TypeSystemConstraintsHelpers.Canon.cs/NonCanon.cs: canonical固有の制約検証ロジックを分離実装
  • HandleCallAction.cs: MakeGenericTypeのデータフロー解析で制約チェック前に型のインスタンス化を正規化
  • テスト: canonical型の制約検証テスト(ConstraintsValidationTest.cs)とNativeAOTトリミング動作確認テスト(Dataflow.cs)を追加

パフォーマンスへの影響

影響なし

関連Issue

#126604

その他

本変更は先行コミットのrevert of the revertと新しいcanonical対応ロジックの実装から構成されます。キャスティング検証がcanonical対応と非対応に分岐することで、CoreCLR VMのキャスティング挙動との互換性を保ちながら、ジェネリック制約検証の精度を向上させています。


#129203 Fix LoaderHeap's free list growing more than expected

概要

LoaderHeapの空きリスト(free list)が予期以上に増大し、スレッド競合により複数の冗長なメモリブロックがリストに追加されることで、線形スキャンが非常に遅くなる問題を修正します。サイズ別にバケット化された空きリスト構造を導入し、小さなブロックはO(1)で再利用、大きなブロックのみ線形スキャンするよう改善しました。

パフォーマンス改善実績:

  • 実行時間:91.2秒 → 3.9秒(約95%削減)
  • メモリ使用量はほぼ同等(114.1MB → 117.5MB)

変更内容

  • src/coreclr/utilcode/loaderheap.cpp: バケット初期化、バケット対応の割り当て・挿入ロジック、オーバーフロー走査時の警告ログ、デバッグ用ダンプ・検証機能をバケット横断対応に更新
  • src/coreclr/utilcode/loaderheap_shared.h: LoaderHeapFreeBlock APIから明示的なヘッドポインタパラメータを削除、ヒープが内部的にバケットを選択
  • src/coreclr/inc/loaderheap.h: UnlockedLoaderHeapにバケット/オーバーフロー空きリスト関連フィールドと定数を追加

パフォーマンスへの影響

  • 大幅な改善: 複数スレッドが同時にジェネリック型をインスタンス化する負荷の高いシナリオで、実行時間が95%削減
  • メモリ消費: ほぼ影響なし(97.5%~103%範囲)
  • 改善メカニズム: 32個のサイズバケット(ポインタサイズ単位)により、一般的な小さなブロックの割り当てはO(1)で完了、オーバーフロー(大きなブロック)のみ線形スキャン対象

関連Issue

#129203

その他

  • ランタイムの内部実装(UnlockedLoaderHeap)の最適化であり、公開APIへの影響なし
  • スレッド競合によるバックアウトシナリオで複数ブロックが空きリストに蓄積される問題を根本的に解決するのではなく、空きリストの検索効率を劇的に向上させるアプローチ

#129189 Pre-initialize InvariantCulture such that it can be safely used when creating stack traces

  • 作成者: @eduardo-vp
  • 作成日時: 2026年06月09日 20:19:53(UTC)
  • マージ日時: 2026年06月18日 04:13:10(UTC)
  • ラベル: area-VM-coreclr

概要

スタックトレース生成時にメモリ不足下でCultureInfo.InvariantCultureが未初期化のまま使用されることによるアサーション失敗を修正します。AppDomain起動時にCultureInfoクラス初期化子を事前実行し、スタックトレース生成パスが安全にInvariantCultureにアクセスできるようにします。

変更内容

  • corhost.cpp: AppDomain::SetupSharedStatics()内でCheckRunClassInitThrowing()経由でCultureInfoクラス初期化を強制実行(+4行)
  • jithelpers.cpp: 関連コードの削除(-4行)
  • methodtable.cpp: 初期化ロジック追加(+1行)
  • CultureData.cs: 初期化処理の最適化(+18/-13行)

パフォーマンスへの影響

AppDomain起動時にCultureInfoの事前初期化が行われるため、起動時間に若干の影響がある可能性があります。ただし、スタックトレース生成時の例外処理を回避することで、エラー発生時のパフォーマンスは向上します。

関連Issue

#129159

その他

メモリ不足時のスタックトレース生成は重要なデバッグシナリオです。この修正により、メモリプレッシャー下でも確実にスタックトレースが生成できるようになります。チェックビルドでのアサーション失敗を予防する設計改善です。


#129091 [cDAC] Stackwalk DacDbi APIs

  • 作成者: @rcj1
  • 作成日時: 2026年06月07日 05:26:39(UTC)
  • マージ日時: 2026年06月18日 13:55:51(UTC)
  • ラベル: area-Diagnostics-cdac

概要

cDAC(Compact Data Access)のスタックウォーク機能とデバッガー契約を拡張し、ランタイムのhijack-stub検出と recovery機能を追加します。CreateStackWalkの新しいオーバーロード、HRESULT ベースのエラー報告を備えた呼び出し側提供バッファでのコンテキスト取得、および対応する DacDbi スタックウォーク API(作成・削除・設定・取得・アンワインド・チェック)を実装します。

変更内容

  • IStackWalk/IDebugger 抽象化: IsRuntimeUnwindableStub API追加、CreateStackWalkのシード・コンテキスト対応オーバーロード、GetContextをHRESULT返却+16バイトアライン済み呼び出し側バッファに変更、RetrieveHijackedContext追加
  • StackWalk_1.cs: 165行追加。シード・コンテキスト対応、hijacked-context recovery、HRESULT・バッファベースGetContext、OS コンテキスト取得のためのアライン済みスクラッチ使用
  • Debugger_1.cs: 32行追加。hijack 範囲テーブルスキャンによるIsRuntimeUnwindableStub実装
  • DacDbiImpl.cs: 303行追加。cDAC StackWalk/Debugger契約を用いた DacDbi スタックウォーク API(CreateStackWalk、DeleteStackWalk、SetStackWalkCurrentStackFrame、GetStackWalkCurrentStackFrame、UnwindStackWalkFrame)実装
  • StackWalkHandleData.cs: 54行追加。cDAC バックアップスタックウォーク用マネージド ハンドル状態
  • Target.cs: TryGetThreadContextの戻り値をboolからint(HRESULT)に変更(API契約変更)
  • データ型追加: MemoryRange型記述子、Debugger のRgHijackFunctionフィールド、MaxHijackFunctionsグローバル定数
  • ネイティブ側: datadescriptor.inc、debugger.h、memoryrange.h で cDAC 公開対応、rsstackwalk.cpp で エンド・オブ・スタック時のコンテキスト取得最適化
  • ドキュメント更新: StackWalk.md、Debugger.md で新 API 使用方法と hijack テーブルグローバル記述

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

互換性への影響: Target.TryGetThreadContextの戻り値がboolからHRESULT (int)に変更されており、このメソッドを呼び出している外部コードは対応が必要です。cDAC公開 API(IStackWalk.GetContext)も呼び出し側提供バッファでの 16 バイトアライメント要件が追加されます。テストは内部スタックウォーキングテストに加え、アンワインド後のコンテキストを byte 単位で検証することで確認済みです。


#127760 [clr-interp] Implement Managed Return Value support for the interpreter

概要

インタープリタで解釈されるメソッドのManaged Return Value (MRV)サポートを実装し、デバッガがメソッド実行からのステップ処理時に戻り値を表示できるようにします。インタープリタが戻り値を変数ホームスロットに保存することで、デバッガが他の変数ホームと同様にジェネリックに読み出せる仕組みです。

変更内容

  • src/coreclr/interpreter/compiler.h: ネイティブマップ容量追跡機能を追加し、インタープリタが発行するデバッグ境界情報の拡張に対応
  • src/coreclr/interpreter/compiler.cpp: IL/ネイティブマッピング情報を拡張し、呼び出し命令マーカー(CALL_INSTRUCTION)をエミットして各IL呼び出しサイトを識別可能に

パフォーマンスへの影響

影響なし

関連Issue

#128479

その他

既知の問題: レビュー過程で重大性の高い正確性問題が発見されました。compiler.cppの新しいCALL_INSTRUCTIONタグ付けが、コンパイラが挿入したヘルパー呼び出し(例:EmitPushLdvirtftnで発行されるヘルパー)にも適用されるため、単一のIL呼び出しサイトに対して複数のオフセットが報告される可能性があります。このうち1つはユーザー呼び出しの戻り値ではなく、ヘルパー関数のポインタ結果に対応していることが問題です。

テスト実施: DOTNET_InterpMode=3環境下で全MRVデバッガテストをChecked CoreCLRに対して実行し、以下のテストスイート全てがパス確認済み(実装前のテスト報告であり、上記の問題発見後の状態は不明): MRV.TestArrays、TestAsyncMethods、TestClasses、TestComplexGenerics、TestEnums、TestGenerics、TestMisc、TestNativeCalls、TestPointers、TestPrimitiveTypes、TestReflectionWithAbstractMethod、TestRefs、TestStructs


#127582 Fix NoopLimiter disposal in DefaultPartitionedRateLimiter Heartbeat

  • 作成者: @Copilot
  • 作成日時: 2026年04月29日 20:47:05(UTC)
  • マージ日時: 2026年06月18日 21:42:17(UTC)
  • ラベル: area-System.Threading

概要

DefaultPartitionedRateLimiterのNoopLimiterパーティション(IdleDurationが常にnullを返す)がHeartbeatタイマーで適切に破棄されていなかった問題を修正します。LimiterEntryラッパーを導入して最後のアクセス時刻を追跡し、IdleDurationがnullでも経過時間に基づいて未使用パーティションを削除できるようにしました。

変更内容

  • DefaultPartitionedRateLimiter.cs: LimiterEntryラッパークラスを追加し、各RateLimiterインスタンスにLastAccessTimestampを関連付け。Acquire/WaitAsync呼び出し時に更新。GetIdleDuration(LimiterEntry)ヘルパーメソッドを追加し、NoopLimiterの場合は最後のアクセスからの経過時間をフォールバック値として使用。Heartbeat削除チェックでis TimeSpan idleDuration && idleDuration > s_idleTimeLimitパターンを適用。32ビットプラットフォーム対応としてVolatile.Read/Volatile.Writeで64ビットタイムスタンプをアクセス。

  • RateLimiterHelper.cs: 新しいGetElapsedTime(long)オーバーロードを追加し、呼び出し元での.GetValueOrDefault()を回避。

  • PartitionedRateLimiterTests.cs: NoopLimiterがHeartbeatで削除されることを検証するテストと、IdleDuration == nullの他の非NoopLimiterパーティションが活動中は削除されないことを確認するテストを追加。

パフォーマンスへの影響

影響なし。最後のアクセス時刻追跡はメモリオーバーヘッド最小限(パーティションあたり8バイト)。既存の削除ロジックを強化するものであり、アクティブパーティションへのアクセスパスには変更なし。

関連Issue

#127582

その他

なし


#126720 Separate GC WKS and SVR compilation units

  • 作成者: @janvorli
  • 作成日時: 2026年04月09日 16:52:59(UTC)
  • マージ日時: 2026年06月18日 00:07:35(UTC)
  • ラベル: area-GC-coreclr

概要

GCのビルドシステムをリファクタリングし、従来のwrapperファイルモデル(gcwks.cpp/gcsvr.cppおよびgceewks.cpp/gceesvr.cpp)から脱却しました。代わりに共有GC実装ソースを直接WKS/SVRの個別コンパイル単位として構築するよう変更します。新しい共有コンパイルコンテキストヘッダgcinternal.hを導入し、GC、VM、NativeAOT、GCサンプルのビルド構成を更新しました。

変更内容

  • gcinternal.h (新規): 共有GCコンパイルコンテキストヘッダ。クロス翻訳単位の宣言と複数のGCソースファイルで必要なインラインヘルパーを一元化
  • wrapper ファイル削除: gcsvr.cpp、gcwks.cpp、gceesvr.cpp、gceewks.cppを廃止
  • GCソースファイル: gc.cpp、gcee.cppおよび関連ファイル(allocation.cpp、background.cpp、card_table.cppなど)をgcinternal.hをインクルードし、SERVER_GCマクロに基づいてWKS/SVR名前空間でラップするよう更新
  • CMakeビルド構成: CoreCLR VM、スタンドアロンGC、NativeAOT、GCサンプルのビルドプロセスを更新し、WKS/SVRオブジェクトライブラリとして生成されたGCソースを直接コンパイル
  • ヘッダ名変更: gc_common.hからgcinternal.hにリネーム(命名混同を回避)

パフォーマンスへの影響

影響なし(バイナリサイズはほぼ変化なし)。clrgc.dllとclrgcexp.dllは約1.5KB増加、coreclr.dllは約1.5KB削減。リンカー/コンパイラのホット/コールドコード最適化判定の若干の相違による変化のため、実質的な性能差なし。

関連Issue

なし

その他

このリファクタリングはビルドシステムの内部実装を改善するもので、公開APIに破壊的変更はありません。複数翻訳単位で必要なインラインヘルパーは共有ヘッダに移動、ローカル専用ヘルパーは所有する.cppファイルに戻すことで、不要な定義を共有ヘッダから排除しています。


#78746 Aging dependent handles

  • 作成者: @VSadov
  • 作成日時: 2022年11月23日 05:36:05(UTC)
  • マージ日時: 2026年06月18日 11:58:15(UTC)
  • ラベル: area-GC-coreclr

概要

Dependent Handlesのエージング機能を実装し、ガベージコレクション(GC)のパフォーマンスを改善します。従来、Dependent Handlesは世代管理(aging)されず常にGen 0に留まるため、毎回のGCで不要に訪問されていました。本変更により、Dependent Handlesが世代の昇格(aging)とリジュベネーション(若返り)に対応します。これにより、特に古い世代(tenured)のオブジェクトを参照するDependentHandlesの場合、GCのオーバーヘッドが削減されます。

変更内容

  • src/coreclr/gc/handletablescan.cpp: Dependent Handlesのエージング処理を追加実装(+23/-1)
  • src/coreclr/gc/objecthandle.cpp: Dependent Handlesのリジュベネーション処理を追加実装(+2/-1)

パフォーマンスへの影響

改善: Dependent Handlesが世代管理されることで、tenured objectsを参照する場合にGC訪問頻度が削減され、GCオーバーヘッドが低下します。

関連Issue

#78746

その他

なし


目次