Pull Request on 2026年04月21日

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

注意点

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


目次

  1. #127227 Mark Continuation field accessors as AggressiveInlining
  2. #127219 JIT: Remove doesMethodHavePartialCompilationPatchpoints
  3. #127206 Fix map/virtual.cpp on OpenBSD
  4. #127205 Fix exception/seh.cpp on OpenBSD
  5. #127204 Fix flaky CounterSampleCalculator_ElapsedTime test
  6. #127198 [main] Source code updates from dotnet/dotnet
  7. #127191 [cDAC] Implement GetCompilerFlags for cDAC
  8. #127188 Fix System.TypeLoadException in NukedBit.NRepo global tool
  9. #127185 [Wasm RyuJit] Fix: Move implReadyToRunUnsupported() call for funclets before wasm codegen
  10. #127177 [wasm][coreclr] Fix native relinking
  11. #127176 Disable the new S.DS.Protocols local tests on Mono
  12. #127173 Remove duplicate ProcessorArchitecture.MSIL branch in AssemblyNameParser
  13. #127163 [browser] fix MetadataUpdaterSupport default value
  14. #127158 JIT: Disallow using float callee saves in x64 functions with patchpoints
  15. #127146 Handle canonical types in casting logic
  16. #127140 [mobile] Fix SocketBlockingModeTransitionTests on Android
  17. #127115 [cDAC] refactor ObjectHandle IData
  18. #127113 cDAC: Remove ad-hoc StrategyBasedComWrappers instantiation
  19. #127104 [cDAC] Implement ClrDataMethodDefinition APIs
  20. #127102 Centralize RuntimeVersions list in DumpTestBase
  21. #127093 Throw CryptographicException instead of NullReferenceException when URI attribute is missing in EncryptedXml
  22. #127089 Fix NativeAOT: pass package satellite assemblies to ILC and remove them from publish output
  23. #127063 [ios-clr] Remove stale ActiveIssue attributes for tests passing on Apple mobile CoreCLR
  24. #127036 Force MetaDataGetDispenser to be linked into singlefilehost
  25. #127035 [cDAC] Implement IsDiagnosticsHiddenOrLCGMethod for cDAC
  26. #126996 Enable 12 browser/CoreCLR library test suites
  27. #126992 ILTrim: Preserve property/event metadata when accessor methods are kept
  28. #126949 Replace CoreCLR SList with NativeAOT-style design
  29. #126934 [release/10.0] Source code updates from dotnet/dotnet
  30. #126907 JIT: refine SSA info in ambiguously threaded blocks
  31. #126880 JIT: Restore arm64, LA64 and RISCV64 OSR callee saves from tier0 frame
  32. #126878 Fix ConfigurationBinder suppressor to only suppress intercepted calls
  33. #126863 Enable trim/AOT analyzers on libraries tests
  34. #126847 Update DNNEVersion to 2.1.1
  35. #126774 [cDAC] Implement simple DacDbi APIs with Loader contract
  36. #126768 [naot] [Runtime async] Support for covariant override of Task -> Task<T>
  37. #126653 Use the paths feature in global.json to point to our local .NET SDK.
  38. #126613 Convert Mono.Linker.Tests from MSTest to xUnit
  39. #126596 Add logic to muxer to invoke AOT-ed SDK
  40. #126509 P/Invokes backed by transient IL
  41. #126407 [browser] Don't copy framework assets to output during build
  42. #125917 Fix ObjectToIdCache.RemoveAt() backward-shift deletion bug (fixes intermittent DCS_MyPersonSurrogate_Stress failure)
  43. #125129 Implement cDAC TraverseLoaderHeap via Loader contract
  44. #123040 Fix trimming analyzer missing diagnostics for method calls in field access expressions

#127227 Mark Continuation field accessors as AggressiveInlining

概要

Continuationクラスの小規模なフィールドアクセッサメソッドに[MethodImpl(MethodImplOptions.AggressiveInlining)]属性を追加し、JITインライニング判定を改善するPRです。Unsafe操作を含む intrinsic-heavy なコードは見た目は大きく見えますが、実際には数命令しか展開されないため、明示的にアグレッシブインライニング対象とすることで、ホットパスでのパフォーマンスを向上させます。

変更内容

src/coreclr/System.Private.CoreLib/src/System/Runtime/CompilerServices/AsyncHelpers.CoreCLR.cs

  • Continuation.GetContinuationContext()に[MethodImpl(MethodImplOptions.AggressiveInlining)]を追加
  • Continuation.HasException()に[MethodImpl(MethodImplOptions.AggressiveInlining)]を追加
  • Continuation.GetResultStorageOrNull()に[MethodImpl(MethodImplOptions.AggressiveInlining)]を追加

パフォーマンスへの影響

改善見込み。async/await パターンのホットパスにおいて、continuation フィールドアクセッサのインライニング化により、関数呼び出しのオーバーヘッドを削減します。具体的なベンチマーク数値は提供されていません。

関連Issue

なし

その他

Copilot のコメントで、同じパターンのSetExceptionメソッドもアグレッシブインライニング対象にすべき可能性が指摘されています。このメソッドも continuation フィールドアクセッサとして、ホットパスで呼ばれる可能性があるため、今後の改善として検討の価値があります。


#127219 JIT: Remove doesMethodHavePartialCompilationPatchpoints

概要

JITコンパイラのパッチポイント関連コードをリファクタリング。doesMethodHavePartialCompilationPatchpointsメソッドを削除し、その機能をdoesMethodHavePatchpointsに統合。また、BBF_PATCHPOINTフラグをBBF_OSR_PATCHPOINTに改名してOSR(On-Stack Replacement)パッチポイント専用であることを明確化。

変更内容

  • compiler.h: doesMethodHavePartialCompilationPatchpointsメソッドを削除(11行削除)
  • compiler.hpp: doesMethodHavePatchpointsの実装を更新、両パッチポイント条件を統合
  • block.h/block.cpp: BBF_PATCHPOINTフラグをBBF_OSR_PATCHPOINTに改名
  • importer.cpp, patchpoint.cpp他: BBF_PATCHPOINT参照をBBF_OSR_PATCHPOINTに置き換え
  • fgbasic.cpp, lsra.cpp, lclvars.cpp: パッチポイント関連チェックを更新

パフォーマンスへの影響

影響なし(リファクタリングのみ)

関連Issue

なし

その他

作成者のコメントより、従来のコードではいくつかの箇所でdoesMethodHavePartialCompilationPatchpointsのチェックが漏れていたバグが存在していた。本変更により、パッチポイント判定の一元化と命名の明確化を実現し、将来のメンテナンス性を向上させている。内部実装(JITコンパイラ)の変更であり、公開APIへの影響はなし。


#127206 Fix map/virtual.cpp on OpenBSD

概要

OpenBSD環境でのメモリリソース制限の取得を修正しました。OpenBSDがRLIMIT_ASを持たないため、代わりにRLIMIT_DATAを使用するよう変更しました。また、ファイル内の不要なホワイトスペースをクリーンアップしました。

変更内容

  • src/coreclr/pal/src/map/virtual.cpp: OpenBSD対応としてリソース制限定数をRLIMIT_ASからRLIMIT_DATAに変更。ホワイトスペースの修正(+7行/-2行)

パフォーマンスへの影響

影響なし

関連Issue

#124911

その他

OpenBSD環境でのPAL(Platform Abstraction Layer)レイヤーのメモリ仮想アドレス管理機能に関わる修正です。


#127205 Fix exception/seh.cpp on OpenBSD

概要

OpenBSD環境でのCoreClrの例外処理(exception/seh.cpp)に関連する問題を修正します。#124911に関連した改善となります。

変更内容

  • src/coreclr/pal/src/exception/seh.cpp: 例外処理の実装を修正(+2行/-6行)

パフォーマンスへの影響

影響なし

関連Issue

#124911

その他

なし


#127204 Fix flaky CounterSampleCalculator_ElapsedTime test

概要

CounterSampleCalculator_ElapsedTime テストの不安定性を修正しました。このテストは QPC(クエリ パフォーマンス カウンター)と DateTime.Now(システムクロック)という異なるクロックソースで経過時間を比較していたため、CI 環境の負荷下で 0.3s のトレランスを超える誤差が発生し、稀に失敗していました(0.01%の頻度)。修正により、両方の測定に Stopwatch を使用して同じクロックソース(QPC)を共有するようにしました。

変更内容

  • src/libraries/System.Diagnostics.PerformanceCounter/tests/CounterSampleCalculatorTests.cs
    • DateTime.Now ベースの経過時間測定を Stopwatch ベースの計算に置き換え
    • 不要な using ディレクティブを削除
    • テスト内で期待値の計算に Stopwatch を使用するよう更新

パフォーマンスへの影響

テストコードの変更であり、製品コードへの影響なし。テスト実行の安定性が向上し、フレーク率が低減されることが期待されます。

関連Issue

なし

その他

  • .NET Framework との互換性の考慮から、Stopwatch.GetElapsedTime() は使用せず Stopwatch インスタンスベースの測定に統一
  • Copilot CLI の支援を受けて作成されたPR

#127198 [main] Source code updates from dotnet/dotnet

概要

dotnet/dotnetリポジトリからの定期的なコードフロー更新PRです。主に依存パッケージのバージョン更新とそれに伴う設定ファイルの変更が含まれます。

変更内容

  • eng/Version.Details.props, eng/Version.Details.xml: 複数の依存パッケージのバージョン情報を更新
  • eng/Versions.props, global.json: ビルドおよびツールチェーンのバージョン設定を更新

更新された主要パッケージ:

  • Microsoft.CodeAnalysis関連(5.7.0-1.26210.111 → 5.7.0-1.26211.102)
  • Microsoft.DotNet.*ツールチェーン全般(11.0.0-beta.26210.111 → 11.0.0-beta.26211.102)
  • NETCore関連(11.0.0-preview.4.26210.111 → 11.0.0-preview.4.26211.102)
  • NuGet.* パッケージ(7.6.0-rc.21111 → 7.6.0-rc.21202)
  • System.CommandLine(3.0.0-preview.4.26210.111 → 3.0.0-preview.4.26211.102)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • このPRは自動生成されたコードフロー更新(dotnet-maestro[bot]による)で、dotnet/dotnet、dotnet/command-line-api、dotnet/efcore、dotnet/roslynの各リポジトリの最新ソースを統合します
  • ビルド日時: 2026年4月20日 4:55:58 AM UTC
  • 関連コミット差分: 5bed449...36afe73

#127191 [cDAC] Implement GetCompilerFlags for cDAC

概要

cDAC(Contracts Data Access Component)のDacDbiImplにGetCompilerFlagsメソッドを実装しました。ILoader.GetFlagsを使用してキャッシュされた結果ビット(JitOptimizationDisabled、EditAndContinue)を読み取り、ネイティブDACの動作と一致させます。

変更内容

  • DacDbiImpl.cs - GetCompilerFlagsメソッドを新規実装(36行追加)
  • Loader_1.cs - ModuleFlags_1にJitOptimizationDisabledフラグを追加し、GetFlags()マッピングを拡張(6行追加、3行削除)
  • LoaderTests.cs - フラグの全組み合わせとプロファイラーオーバーライドシナリオをカバーする20個のテストケースを追加

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

このPRはcDAC内部の診断機能(デバッガー・プロファイラー関連)の実装であり、公開APIの変更ではありません。ネイティブDAC実装との互換性を維持するための変更です。


#127188 Fix System.TypeLoadException in NukedBit.NRepo global tool

概要

.NET 11上でMicrosoft.Extensions.Hosting v2.2.0.0など古いIHostBuilder実装を読み込む際に発生するTypeLoadExceptionを修正します。v3.0で追加されたUseServiceProviderFactory(Func<HostBuilderContext, IServiceProviderFactory<TContainerBuilder>>)オーバーロードが古いアセンブリに存在しないため、型ローダーが実装の不完全性を検出していました。

変更内容

  • src/IHostBuilder.cs — #if NETガードの下に新しいメソッドオーバーロード用のDefault Interface Method (DIM)を追加。null チェック(ArgumentNullException.ThrowIfNull)と未実装時のNotSupportedExceptionをスロー。参照アセンブリは従来通り抽象署名を保持(新規コンパイル時に実装を強制)。
  • HostBuilderContextTests.cs — #if NET配下に3つのテストを追加:DIM フォールバック時のNotSupportedException、null factoryでのArgumentNullException、非Func オーバーロードの動作確認。
  • Microsoft.Extensions.Hosting.Abstractions.Tests.csproj — テストプロジェクト参照をref アセンブリをスキップするよう変更し、DIM本体をテスト可能に。

パフォーマンスへの影響

影響なし

関連Issue

#126994

その他

この修正は.NET/.NET Coreランタイムのみ対象(#if NET)で、.NET Standard/.NET Frameworkは影響を受けません。DIMs(Default Interface Methods)は.NET 8以降で完全サポートされるため、古い実装との互換性を維持しながら新しいインターフェース要件を段階的に導入できます。HostBuilderやHostApplicationBuilderなどの最新実装は明示的にオーバーライドしており、DIMs のフォールバックは影響を受けません。


#127185 [Wasm RyuJit] Fix: Move implReadyToRunUnsupported() call for funclets before wasm codegen

概要

Wasm RyuJitにおけるReadyToRun(R2R)コンパイルのバグを修正します。最適化コンパイル時にEH(例外処理)を含むメソッドがインライン化され、ホスト側にリロケーションが記録された後、funcletが原因でベイルアウトし、その後のminopts再コンパイルが成功する際に古いリロケーション情報が残される問題を解決します。

funcletベースのimplReadyToRunUnsupported()呼び出しをコード生成前に移動させることで、このような不整合な状態の発生を防ぎます。

変更内容

  • src/coreclr/jit/codegencommon.cpp: implReadyToRunUnsupported()チェックを、コード生成・エミッション作業が開始される前に移動(最適化-minopts再コンパイルのエッジケースについてのコメント拡張含む)

パフォーマンスへの影響

影響なし。このPRは不正な状態を早期に検出することで、後続の処理で発生していたスタレ(古い)リロケーション問題を回避します。

関連Issue

なし

その他

このバグの本質は、最初の最適化コンパイルが部分的に成功(リロケーション記録まで進む)した後にbailoutされるが、ホスト側のリロケーション情報はそのまま残され、その後のminopts再コンパイル成功時に矛盾が生じることです。早期バイルアウトにより、このような不整合な中間状態を完全に回避できます。


#127177 [wasm][coreclr] Fix native relinking

概要

WebAssemblyにおけるネイティブリリンクパイプラインの修正。PR #126901で導入されたリリンク生成ソースがWASM固有のcallhelperを適切にアクセスできるようにするため、TERMINATE_R2R_STACK_WALK定義をWASM専用ヘッダに移動し、必要なヘルパーマクロ(NOINLINEなど)をインクルードパスに追加しました。

変更内容

  • vm/callhelpers.h: TERMINATE_R2R_STACK_WALKのローカル定義を削除し、WASM構成下でWASM用callhelpersヘッダをインクルード
  • vm/wasm/callhelpers.hpp: TERMINATE_R2R_STACK_WALK定義をリリンク生成thunksおよびWASMヘルパーが参照するヘッダに移動
  • vm/wasm/callhelpers-interp-to-managed.cpp: ポータブルエントリーポイント呼び出しヘルパー向けにminipal/utils.hをインクルード(NOINLINEマクロ提供)
  • WasmAppBuilder/coreclr/InterpToNativeGenerator.cs: 生成されたソースへのインクルード追加

パフォーマンスへの影響

影響なし

関連Issue

#126901(変更を導入したPR) #90458(ビルド分析で隠蔽されていた問題)

その他

なし


#127176 Disable the new S.DS.Protocols local tests on Mono

概要

System.DirectoryServices.Protocols のローカルテストがMono環境で間欠的に失敗する問題に対応するため、当該テストをMono上では無効化し、CoreCLRのみで実行するように制限しました。リソース枯渇が原因と推定されています。

変更内容

  • DirectoryServicesProtocolsTests_Local テストクラスに ActiveIssue 属性を追加し、Mono環境でのテスト実行をスキップするよう設定
  • 関連Issue #127070 を参照して無効化

パフォーマンスへの影響

影響なし(テストの実行環境制限のため、ランタイムパフォーマンスへの直接的な影響はありません)

関連Issue

#127070

その他

なし


#127173 Remove duplicate ProcessorArchitecture.MSIL branch in AssemblyNameParser

概要

AssemblyNameParser.TryParseProcessorArchitectureのswitch式に存在する重複したmsilアームを削除します。第2のアームは到達不可能なデッドコードであり、第1のアームが常にマッチするため、削除しても動作に変化はありません。

変更内容

  • src/libraries/Common/src/System/Reflection/AssemblyNameParser.cs: 到達不可能な重複msilアームを削除(1行削除)

パフォーマンスへの影響

影響なし。デッドコード削除のみで、実行パスは変わりません。

関連Issue

#127172

その他

なし


#127163 [browser] fix MetadataUpdaterSupport default value

概要

Browser (WebAssembly) の Debug ビルドにおいて、MetadataUpdaterSupport のデフォルト値が誤ってfalseに設定されていた問題を修正します。トリミング有効時(PublishTrimmed=true)に、Debug ビルドではメタデータ更新のサポートをデフォルトで有効に保つよう条件を変更します。

変更内容

  • src/tools/illink/src/ILLink.Tasks/build/Microsoft.NET.ILLink.targets: MetadataUpdaterSupport のデフォルト値設定ロジックを修正。Debug ビルド($(Configuration) == Debug)では MetadataUpdaterSupport=false を強制しないように条件を限定。

パフォーマンスへの影響

影響なし

関連Issue

dotnet/aspnetcore#66325

その他

  • この変更は ILLink MSBuild ターゲット設定の修正であり、コンパイラやランタイムの挙動変更ではなく、ビルド構成の動作調整です
  • Browser/WebAssembly プラットフォームの Debug シナリオでメタデータ更新機能の利用可能性を確保するための修正

#127158 JIT: Disallow using float callee saves in x64 functions with patchpoints

概要

x64 JITコンパイラのレジスタアロケータを更新し、パッチポイントを含むメソッドではフローティングポイントカリー保存レジスタの割り当てを禁止します。OSRメソッドではこれらのレジスタが復元されないため、将来のアンワインダーなしの遷移に対応するための変更です。パッチポイントはTier0メソッドにのみ出現するため、パフォーマンスへの影響は限定的です。

変更内容

  • src/coreclr/jit/lsra.cpp: AMD64対象のLinearScan初期化処理にて、メソッドがパッチポイント(部分コンパイルパッチポイントを含む)を含む場合、利用可能なfloat/doubleレジスタセットからRBM_FLT_CALLEE_SAVEDをマスクアウト

パフォーマンスへの影響

パッチポイントはTier0メソッドに限定されるため、全体的なパフォーマンスへの影響は限定的。フローティングポイントカリー保存レジスタの使用制限によるコード生成への影響の詳細なベンチマークは提供されていません。

関連Issue

なし

その他

この変更はOSR(On-Stack Replacement)遷移セマンティクスの改善に向けた準備です。現在のアンワインダーに依存した実装から、将来的にアンワインダーを使用しない遷移方式への移行に備えた変更となります。


#127146 Handle canonical types in casting logic

概要

NativeAOT コンパイラにおいて、MakeGenericType のデータフロー分析時に正規型(__Canon / __UniversalCanon)を用いた制約検証を正しく処理するように修正します。従来は正規型を通常のジェネリック制約として扱っていたため、制約チェックで不正と判定され、不要にコンパイルがスキップされていました。正規型をワイルドカード的に扱うことで、有効なジェネリック生成を適切にルート化・コンパイルできるようになります。

変更内容

  • Dataflow 分析: HandleCallAction.cs で MakeGenericType 呼び出しのインスタンス化ジェネリック型を制約検証前に正規化
  • 制約検証ロジック: TypeSystemConstraintsHelpers.cs を部分クラス化し、TypeSystemConstraintsHelpers.Canon.cs で正規型対応の特殊制約・型制約チェックを実装
  • キャスティングロジック: CastingHelper.cs を拡張し、CastingHelper.Canon.cs で正規型マッチングをインターフェース・分散・基底チェーンに統合
  • テスト: ConstraintsValidationTest.cs に正規型制約シナリオの包括的なテストスイートを追加、Dataflow.cs に制約付き MakeGenericType のスモークテストを追加
  • プロジェクト設定: TypeSystem ビルドと TypeLoader に正規型対応ヘルパーを組み込み

パフォーマンスへの影響

影響なし(機能修正のため)

関連Issue

#126604

その他

  • 内部実装の変更で、公開 API への影響はありません
  • NativeAOT コンパイラ(ILC)のジェネリック制約処理に関連するコンポーネント向けの修正です

#127140 [mobile] Fix SocketBlockingModeTransitionTests on Android

概要

AndroidプラットフォームでのSocketBlockingModeTransitionTestsの失敗を修正します。Androidでは、TCP Fast Open(TFO)を使用したsendtoシステムコールが、単一操作で接続と送信の両方を完了できるため、非同期完了時でもソケットがブロッキングモードのままになります。このプラットフォーム固有の動作に対応するため、既存のApple platform対応に加えてAndroidを条件に追加します。

変更内容

  • src/libraries/System.Net.Sockets/tests/FunctionalTests/Connect.Unix.cs
    • SocketBlockingModeTransitionTests.ConnectAsync_WithBuffer_Succeedsテストの条件判定を修正
    • プラットフォーム判定条件にPlatformDetection.IsAndroidを追加
    • Android固有のTFO動作(単一syscallでconnect/send完了)がソケットをブロッキングモードのままにする仕様に対応

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • この変更はテスト専用であり、ランタイムやライブラリの公開API・内部実装には影響なし
  • Android(x64及び他のAndroidアーキテクチャ)、iOS、tvOS、MacCatalystで同じ動作を示す
  • Linuxではこの変更の影響を受けず、従来通りcompletedAsyncが真の場合は非ブロッキングソケットを期待
  • GitHub Copilotによりruntime-extra-platformsパイプラインのCI失敗を分析して自動生成されたPR

#127115 [cDAC] refactor ObjectHandle IData

  • 作成者: @rcj1
  • 作成日時: 2026年04月19日 04:55:45(UTC)
  • マージ日時: 2026年04月21日 04:43:46(UTC)
  • ラベル: area-Diagnostics-cdac

概要

cDAC(Common Data Access Contract)の ObjectHandle IData 型をリファクタリングしました。従来は ObjectHandle フィールドのアドレスではなく、そのアドレスフィールドの値を期待していたため、読み込み時に余分なポインタ読み取りが必要でした。本変更により、ObjectHandle コンストラクタパラメータが OBJECTHANDLE フィールドのアドレスになり、他の IData と一貫性を持つようになりました。これにより ObjectHandle フィールドを強型で宣言でき、ReadDataField<ObjectHandle> を直接使用できます。

変更内容

  • DataType.cs: GCHandle から ObjectHandle へ列挙型メンバーをリネーム(パブリックAPI変更)
  • ObjectHandle.cs: コンストラクタロジック変更により、入力をフィールドアドレスとして解釈し、内部でポインタ逆参照を実行
  • 複数のデータモデル/コントラクト(Thread、SyncBlock、LoaderAllocator、InflightTLSData、ExceptionInfo、AssemblyBinder): ReadDataField<ObjectHandle> での読み込みに統一し、プロパティ型を強型化
  • 複数のコントラクト実装(Thread_1、RuntimeTypeSystem_1、Loader_1、Exception_1、ConditionalWeakTable_1、ComWrappers_1): 新しい ObjectHandle 表現に対応するロジック調整(.Handle、.Object プロパティアクセス)
  • datadescriptor.inc: OBJECTHANDLE フィールドの型宣言を TYPE(ObjectHandle) に更新
  • テスト: 型・フィールド期待値を DataType.ObjectHandle に更新

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

本変更は cDAC の内部実装フローの改善です。DataType.ObjectHandle へのリネームは、診断ツールが利用する cDAC の公開API層にあたるため、既存の診断ツールが DataType.GCHandle に依存している場合は互換性に注意が必要です。


#127113 cDAC: Remove ad-hoc StrategyBasedComWrappers instantiation

概要

cDAC(Common Data Access)における COM相互運用性を改善するPR。StrategyBasedComWrappersの ad-hoc なインスタンス化を削除し、プロセス全体で単一のシングルトンインスタンスを共有するよう統一。また、ClrDataAppDomain.IsSameObjectのバグ(常にS_FALSEを返していた)を修正。

変更内容

ClrDataAppDomain.cs (バグ修正)

  • IsSameObjectメソッド内のStrategyBasedComWrappersインスタンス化を削除
  • ComWrappers.TryGetObject(nint, out object?)を使用してCCW(COM Callable Wrapper)を正しく元の管理オブジェクトにアンラップ
  • nullチェック追加により、identity比較が正常に機能するように修正

Entrypoints.cs (クリーンアップ)

  • CreateSosInterface、CreateDacDbiInterface、CLRDataCreateInstanceImplの3つのエントリポイント関数から、呼び出しごとのインスタンス化を削除
  • ComInterfaceMarshaller<T>を使用した呼び出しに置き換え(内部的にはStrategyBasedComWrappers.DefaultMarshallingInstanceを使用)

パフォーマンスへの影響

メモリ効率が向上。エントリポイント関数が呼び出されるたびにインスタンス化されていたStrategyBasedComWrappersオブジェクトの生成が削除され、プロセス全体で単一のシングルトンを使用するため、GCプレッシャーと割り当てオーバーヘッドが削減。キャッシュの一貫性も向上。

関連Issue

なし

その他

  • Copilotによる静的解析で、CreateDacDbiInterface内の例外処理に関する警告あり:ComInterfaceMarshaller<IDacDbiInterface>.ConvertToManagedが失敗した場合、[UnmanagedCallersOnly]コンテキストでプロセスが終了する可能性がある。Marshal.QueryInterfaceによる事前検証またはtry/catchラッパーの追加が推奨されている。
  • 1691個のcDAC単体テストが全てパス
  • dumptestはフルランタイムビルドが必要なため検証されず(変更範囲はCOM相互運用層に限定)

#127104 [cDAC] Implement ClrDataMethodDefinition APIs

概要

cDAC(Common Data Access Component)の管理レイヤーで IXCLRDataMethodDefinition インターフェースの5つのAPI(GetName、HasClassOrMethodInstantiation、StartEnumInstances、EnumInstance、EndEnumInstances)を実装しました。ネイティブDAC相当の動作をcDACコントラクトを活用して実現し、レガシーDAC互換性検証とメタデータフォールバック機能を備えています。SetCodeNotificationのみ実装が保留されています。

変更内容

  • ClrDataMethodDefinition.cs: メソッド名取得(TypeNameBuilder使用、メタデータフォールバック対応)、ジェネリック・クラス実装化判定、メソッドインスタンス列挙機能を追加。DEBUG時の相互検証ブロック付き
  • SOSDacImpl.IXCLRDataProcess.cs: StartEnumMethodInstancesByAddressの呼び出しハンドル管理を改善。cDAC列挙作成失敗時にレガシーハンドルを確実にクリーンアップ(finallyブロック内)
  • LegacyFallbackHelper.cs: 新たに実装されたAPIをレガシーフォールバック許可リストから削除(SetCodeNotificationは継続許可)
  • IXCLRDataMethodDefinitionDumpTests.cs: ダンプベース統合テストを追加(名前取得、ジェネリック判定、列挙ライフサイクル検証)

パフォーマンスへの影響

影響なし。既存の SOSDacImpl.EnumMethodInstances 基盤を再利用し、メモリ・実行速度の最適化にはメタデータフォールバックが活用されています。

関連Issue

なし

その他

  • 全1638個の既存cDACテストが合格
  • 2回のレビューサイクル完了(初期レビュー+詳細行単位パリティ監査)
  • GitHub Copilot補助で生成
  • 内部実装の変更で、公開APIの破壊的変更なし

#127102 Centralize RuntimeVersions list in DumpTestBase

  • 作成者: @Copilot
  • 作成日時: 2026年04月18日 01:00:21(UTC)
  • マージ日時: 2026年04月21日 12:21:26(UTC)
  • ラベル: area-Diagnostics-cdac

概要

dump-based cDAC統合テストにおいて、複数の場所に重複していたランタイムバージョンリスト("local"と"net10.0")を一元管理するためにリファクタリング。private static readonly string[] RuntimeVersionsフィールドを追加し、TestConfigurationsとGetDumpSource()の両メソッドで共用することで、新しいランタイムバージョンの追加時に編集が必要な箇所を1ヶ所に統一。

変更内容

  • src/native/managed/cdac/tests/DumpTests/DumpTestBase.cs
    • private static readonly string[] RuntimeVersions = ["local", "net10.0"]フィールドを新規追加
    • TestConfigurationsメソッド内の個別のif (!IsVersionSkipped("local")) / if (!IsVersionSkipped("net10.0"))分岐をforeach (var version in RuntimeVersions)ループに置換
    • GetDumpSource()メソッド内のインラインのnew[] { "local", "net10.0" }配列をRuntimeVersionsフィールド参照に置換

パフォーマンスへの影響

影響なし(テスト補助コードの構造改善のみ)

関連Issue

なし

その他

このリファクタリングは内部テスト実装の改善であり、公開APIへの影響はありません。今後のランタイムバージョン追加が容易になります。


#127093 Throw CryptographicException instead of NullReferenceException when URI attribute is missing in EncryptedXml

  • 作成者: @Copilot
  • 作成日時: 2026年04月17日 21:26:18(UTC)
  • マージ日時: 2026年04月21日 16:11:42(UTC)
  • ラベル: area-System.Security

概要

EncryptedXml.DecryptDocument()処理時にKeyInfo/RetrievalMethod要素のURI属性が欠落している場合、不適切なNullReferenceExceptionが発生していた問題を修正。Utils.ExtractIdFromLocalUriに null/empty チェックを追加し、適切なCryptographicExceptionをスロー(エラーメッセージ: SR.Cryptography_Xml_UriRequired)するように変更しました。

修正前の動作:

var doc = new XmlDocument { XmlResolver = null };
doc.LoadXml("<root><EncryptedData xmlns='http://www.w3.org/2001/04/xmlenc#'>" +
    "<KeyInfo xmlns='http://www.w3.org/2000/09/xmldsig#'><RetrievalMethod/></KeyInfo>" +
    "<CipherData><CipherValue>AA==</CipherValue></CipherData></EncryptedData></root>");
new EncryptedXml(doc).DecryptDocument(); // NullReferenceException が発生

変更内容

  • Utils.cs: ExtractIdFromLocalUriメソッドの冒頭に null/empty チェックを追加。uriパラメータが null または空文字列の場合、CryptographicExceptionをスロー。
  • EncryptedXmlTests.cs: DecryptDocumentがURI属性なしの<RetrievalMethod/>要素に対してCryptographicExceptionをスローすることを検証する回帰テストを追加。

パフォーマンスへの影響

影響なし

関連Issue

#127093

その他

互換性に関する注記:

  • 破壊的変更: NullReferenceExceptionからCryptographicExceptionへの例外型の変更。不正なXML入力に対してより適切な例外がスローされるようになるため、呼び出し側の例外処理がNullReferenceExceptionに依存していた場合は影響を受ける可能性がある(ただし通常はありません)。
  • 内部実装の改善: 暗号化API のベストプラクティスとして、NullReferenceExceptionではなくCryptographicExceptionを使用することで、エラーハンドリングがより明確になります。
  • 注記: エラーメッセージSR.Cryptography_Xml_UriRequiredは元来CipherReference要素向けのため、RetrievalMethodなど他のコンテキストから呼ばれた場合、メッセージが若干誤解を招く可能性があります。

#127089 Fix NativeAOT: pass package satellite assemblies to ILC and remove them from publish output

  • 作成者: @Copilot
  • 作成日時: 2026年04月17日 18:14:48(UTC)
  • マージ日時: 2026年04月21日 19:19:37(UTC)
  • ラベル: area-NativeAOT-coreclr

概要

NativeAOT publish時にNuGetパッケージのサテライトアセンブリ(リソースDLL)が公開ディレクトリに漏出し、ILCへの--satellite:引数渡しに失敗する問題を修正。SDKがAssetType='resources'条件でサテライトをResolvedFileToPublishに配置していたが、タスク側がPostprocessAssembly=trueメタデータを条件としていたため、サテライト分類ロジックが死コード化していたのが根本原因。

変更内容

  • Microsoft.NETCore.Native.Publish.targets

    • IlcSatelliteAssemblyの定義を修正:AssetType='resources'条件でパッケージサテライトを追加(既存のIntermediateSatelliteAssembliesWithTargetPathに加えて)
    • ResolvedFileToPublishから削除するアイテムを@(IntermediateSatelliteAssembliesWithTargetPath)から@(IlcSatelliteAssembly)に変更し、パッケージ・プロジェクト両方のサテライトを公開出力から除外
  • ComputeManagedAssembliesToCompileToNative.cs

    • 実行されない死コードを削除:SatelliteAssemblies [Output]プロパティ、PE読み取りによる文化分類ロジック、PostprocessAssemblyガード、不要なSystem.Reflection.Metadata/PortableExecutableの参照(約45行削除)

パフォーマンスへの影響

影響なし

関連Issue

#111514(回帰の原因) #124192(プロジェクト独自のサテライトの部分修正)

その他

  • 互換性への影響:破壊的変更なし。MSBuild側の変更は純粋に追加的であり、削除ロジックはより広いサテライト集合を対象とする
  • リグレッション:PR #111514で回帰。PR #124192でプロジェクト独自のサテライトは部分修正されたがパッケージ側は未対応
  • テスト:単一ファイルネイティブバイナリ(System.CommandLine 2.0.6依存、プロジェクトとパッケージのリソース混在)で検証済み。ILCは全言語の--satellite:引数を受け取り、ランタイムは両側の多言語リソース(es/de/ja)を正常に解決可能
  • 関連SDK PR:https://github.com/dotnet/sdk/pull/53971 でテスト追加予定

#127063 [ios-clr] Remove stale ActiveIssue attributes for tests passing on Apple mobile CoreCLR

概要

Apple mobile CoreCLR(iOS/tvOS/watchOS)上で正常に動作するテストから、ActiveIssue属性を削除するクリーンアップを実施。これらの属性は、プラットフォーム固有の既知の問題を記録していましたが、テストが実際には合格しているため、属性が不要になりました。同時にtests.proj内の関連する除外設定も削除されています。

変更内容

  • System.Collections/BitArray_CtorTests.cs: ActiveIssue属性1件を削除
  • System.Diagnostics.FileVersionInfo/FileVersionInfoTest.cs: プラットフォーム固有の属性調整(+1/-0)
  • System.Numerics.Tensors/TensorPrimitives.Generic.cs: ActiveIssue属性1件を削除
  • System.Globalization.Calendars.Tests/CalendarTests.cs: ActiveIssue属性1件を削除
  • tests.proj: テスト除外設定3件を削除、1件追加(ネット-2)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

このPRは、Apple mobile プラットフォーム向けのテスト属性メンテナンスの一環です。テストが実際に合格していることを検証した上でのActiveIssue属性削除であり、テスト信頼性の向上に貢献します。


#127036 Force MetaDataGetDispenser to be linked into singlefilehost

  • 作成者: @elinor-fung
  • 作成日時: 2026年04月16日 22:39:21(UTC)
  • マージ日時: 2026年04月21日 18:37:19(UTC)
  • ラベル: area-Host

概要

.NET 10で静的ライブラリのデッドコード削除により失われたMetaDataGetDispenserエクスポートをsinglefilehostで強制的に保持するための修正。Unix/macOSではリンカフラグを追加し、Windowsでは既存の.defファイル設定を活用。エクスポートが存在することを検証するリグレッションテストも追加します。

変更内容

  • src/native/corehost/apphost/static/CMakeLists.txt: Unix/macOS向けに、MetaDataGetDispenserをcoreclr_staticから強制的にsinglefilehostにリンクするLinkerフラグを追加(+18行)
  • src/installer/tests/AppHost.Bundle.Tests/StaticHost.cs: NativeLibraryを使用してsinglefilehostのエクスポート(MetaDataGetDispenserなど)が存在することを検証するテストを追加(+53行)

パフォーマンスへの影響

影響なし

関連Issue

#126634

その他

  • .NET 10へのバックポート予定
  • Windows環境では.defファイルで既に対応済み。本修正はUnix/macOS固有
  • テストはWindowsではNativeLibrary、非Windows環境ではnmコマンドで異なる方法によりエクスポート検証を実施

#127035 [cDAC] Implement IsDiagnosticsHiddenOrLCGMethod for cDAC

概要

cDAC(コンテナー化されたDAC)に IsDiagnosticsHiddenOrLCGMethod を実装しました。新しく IRuntimeTypeSystem.IsDiagnosticsHidden コントラクトAPIを追加し、IL-stub、wrapper-stub、非同期サンク(async-thunk)メソッドの検出をサポートします。これにより、ネイティブVMとの完全な機能パリティが達成されます。

変更内容

  • IRuntimeTypeSystem.cs / RuntimeTypeSystem_1.cs - IsDiagnosticsHidden コントラクトメソッドを追加、IsILStub、IsAsyncThunkMethod、IsWrapperStubの各チェックを実装
  • DacDbiImpl.cs - IsDiagnosticsHiddenOrLCGMethod をcDACの RuntimeTypeSystem コントラクトを使用して実装(DEBUG時はレガシーDACとの比較チェックを含む)
  • AsyncMethodData.cs - AsyncMethodDataフラグを読み取るための新規データリーダー
  • MethodDescOptionalSlots.cs - async方法データのオプショナルスロット対応(HasAsyncMethodData、GetAddressOfAsyncMethodData、AsyncMethodDataOffset)
  • MethodDescFlags_1.cs - サンク方法検出用のAsyncMethodFlagsenum追加
  • datadescriptor.inc / method.hpp - AsyncMethodData.Flagsフィールドをランタイムデータディスクリプタで公開
  • dacdbiinterface.h - DynamicMethodTypeエヌム値へのcDAC依存関係をドキュメント化
  • RuntimeTypeSystem.md - IsDiagnosticsHiddenの記載に対応する設計ドキュメント更新
  • MethodDescTests.cs - アーキテクチャ横断的なIsDiagnosticsHiddenとIsDynamicMethodテスト追加

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

本変更はcDAC(マネージドコード化されたDAC)の診断機能強化であり、非同期メソッドのスタンブ検出ロジックをマネージド層で実装することで、デバッガーやプロファイラーが隠されたメソッドを正確に識別できるようになります。複数のアーキテクチャにわたるテストカバレッジが追加されています。


#126996 Enable 12 browser/CoreCLR library test suites

概要

browser-wasm + CoreCLR(インタプリタ)環境での12のライブラリテストスイートを有効化するPRです。スイート全体の除外ではなく、個別の失敗テストに[ActiveIssue]属性を付与することで、75,272個のテストの実行を実現します。これにより、テストカバレッジの拡大とプラットフォーム固有の問題の可視化が図られています。

変更内容

  • src/libraries/tests.proj: browser-wasm/CoreCLRブロックから12スイートの除外設定を削除
  • 25テストファイル: 約50個の失敗テストに[ActiveIssue(#123011)]または[ConditionalFact]属性を追加
  • 失敗カテゴリ: GCファイナライザースレッド非対応、System.Runtime.Serialization.Formatters欠落、COMインターオップ非対応、WASM SIMD(インタプリタ)、スレッド制限、動的ディスパッチインタプリタバグ、Roslyn生成器インフラ

有効化されたスイート:System.Collections(33,603)、System.Collections.Concurrent(2,245)、System.Data.Common(11,699)、System.Runtime.Intrinsics(12,944)、System.Runtime.InteropServices(2,322)、System.Dynamic.Runtime(2,899)、System.Runtime.Extensions(8,158)等

パフォーマンスへの影響

影響なし。本変更はテスト実行のスコープ拡大であり、ランタイムパフォーマンスへの影響はありません。

関連Issue

#123011

その他

  • 本PRはAI/Copilot生成されたものです
  • スイート単位の除外から個別テストの除外へアプローチを変更することで、プラットフォーム固有の制限をより詳細に把握できるようになります
  • バイナリフォーマッタ非対応環境では、シリアライゼーション関連テストをIsBinaryFormatterSupportedで条件付きゲート化しています

#126992 ILTrim: Preserve property/event metadata when accessor methods are kept

  • 作成者: @Copilot
  • 作成日時: 2026年04月16日 09:24:56(UTC)
  • マージ日時: 2026年04月21日 09:44:46(UTC)
  • ラベル: area-Tools-ILLink

概要

ILTrim(IL トリミング ツール)のメタデータ保持ロジックを改善し、アクセサーメソッドが到達可能な場合、プロパティおよびイベントのメタデータ行を保持するようにしました。同時に、型が削除されたときの PropertyMap/EventMap テーブル関連付けの誤りを修正しています。これにより ILLink の既存動作との整合性が向上します。

変更内容

  • MethodDefinitionNode.cs: SpecialName メソッドが保持される場合、プロパティ/イベント逆参照依存関係を追加し、所有メタデータ行が保持されるようにしました(ILLink の TryGetProperty/TryGetEvent → MarkProperty/MarkEvent ロジックと同等)
  • PropertyDefinitionNode.cs: プロパティ依存関係からアクセサーメソッドの強制ルート化を削除。WriteInternal では Marked されたアクセサーの MethodSemantics のみ生成。未使用の using System.Diagnostics ディレクティブを削除
  • EventDefinitionNode.cs: イベントが全アクセサー(add/remove/raise)をルートすることを明確化するコメント追加
  • TypeDefinitionNode.cs: AddTypeDefinition を AddPropertyMap/AddEventMap の前に移動し、入力ハンドルの代わりに出力ハンドルを使用。"tehy" タイプミスを修正
  • ILTrimExpectedFailures.txt: 新たに合格するようになった 22 個のテストケースを削除(合格数は 286 から 308 に増加)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • マージ競合を解決し、本 PR の accessor 逆参照ロジックと #126991 で追加された delegate BeginInvoke/EndInvoke ペア追跡の両方を保持しました
  • 内部実装(ILTrim コア)の変更であり、公開 API への影響はありません

#126949 Replace CoreCLR SList with NativeAOT-style design

  • 作成者: @max-charlamb
  • 作成日時: 2026年04月15日 15:59:53(UTC)
  • マージ日時: 2026年04月21日 15:37:07(UTC)
  • ラベル: area-VM-coreclr

概要

CoreCLRの旧来のセンチネルベースのSList実装をNativeAOTスタイルの設計に統一するもの。センチネルノードを廃止し、空リストはNULLで表現し、traits-based next-pointerアクセスに変更。CoreCLRとNativeAOTで共有のsrc/coreclr/inc/slist.hを用いる統一実装となる。

// Mode制御による柔軟な操作許可
template <typename T> using SList = SList<T, SListTraits<T, SListMode::Thin>>;      // デフォルト: 頭操作のみ
template <typename T> using SListTail = SList<T, SListTraits<T, SListMode::Tail>>;  // tail追跡対応

変更内容

  • src/coreclr/inc/slist.h: traits-based設計へ刷新。SListTraits<T, Mode>で操作制御、ポインタ-ツー-ポインタイテレータ(Begin()/End())、非intrusive用SListElem<T>ラッパー、条件付きtail保存を追加
  • NativeAOT統一: src/coreclr/nativeaot/Runtime/slist.hを共有ヘッダへのリダイレクトに変更。lock-freeInsertHeadInterlocked削除、slist.inl削除、メソッド名を統一API(InsertHead/RemoveHead/Begin/End)に更新
  • コンシューマー移行: CacheLine、Thread、CallCountingManager、ConnectionCookie等はSLink m_Linkからm_pNext(PTR_*/DPTR(*)型)に変更。DAC/cDAC記述子更新で直接オブジェクト指し
  • DAC/cDAC変更: SyncBlock_1.cs、Thread_1.csでSLinkオフセット減算を削除。datadescriptor.incでSLink型定義削除、ThreadStore.FirstThreadLinkをTYPE(SLink)からT_POINTERに変更

パフォーマンスへの影響

影響なし。内部構造の統一であり、操作複雑度は変わらず。lock-freeInsertHeadInterlocked削除はNativeAOT呼び出し箇所がシングルスレッド環境であるため。

関連Issue

なし

その他

  • Copilot指摘: SyncBlock::m_pNextがコンストラクタで初期化されていない可能性があり、DAC/cDAC走行時に不正な値を参照するリスク。コンストラクタ初期化リストでm_pNext = NULL初期化の確認推奨
  • FindAndRemove()等メソッド名は保持され、既存コード互換性維持

#126934 [release/10.0] Source code updates from dotnet/dotnet

概要

VMR(Virtual Mono Repository)のdotnet/dotnetからのコードフロー更新PR。ビルド20260414.6に基づく複数の依存パッケージのバージョン更新とソースコード同期を含みます。

変更内容

  • NuGet.config: NuGetソース設定の更新
  • eng/Version.Details.props: ビルドバージョンメタデータの更新
  • eng/Version.Details.xml: 依存パッケージのバージョン詳細更新
  • global.json: グローバルプロジェクト設定の更新

主な依存パッケージ更新(5.0.0-2.26213.115 → 5.0.0-2.26214.106):

  • Microsoft.CodeAnalysis系(CodeAnalysis、Analyzers、CSharp)
  • Microsoft.Net.Compilers.Toolset

その他の主要パッケージ更新:

  • Microsoft.DotNet.Arcade.Sdk(10.0.0-beta.26213.115 → 10.0.0-beta.26214.106)
  • NuGet.Frameworks/Packaging/ProjectModel/Versioning(7.0.2-rc.21415 → 7.0.2-rc.21506)
  • System.Text.Json、System.Reflection.Metadataは10.0.7のまま

関連リポジトリの変更:

  • dotnet/aspnetcore、dotnet/windowsdesktop、dotnet/winformsの同期更新を含む

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • 作成日時: 2026年4月15日 3:12:38 UTC
  • コミットハッシュ: 19557b9ae31e93f4f7a8ffbe89a66e04c25dbb91
  • ブランチ: release/10.0.1xx
  • これはdotnet-maestro[bot]による自動コードフロー更新です

#126907 JIT: refine SSA info in ambiguously threaded blocks

概要

部分的にジャンプスレッディングされたブロックにおいて、残っているすべての前置ブロックが同じSSA定義をPHIにもたらす場合、PHI定義を削除し、そのブロック内のPHI使用に対するSSA/VN情報を更新します。特に、曖昧な前置ブロックが1つだけ残る場合に有効です。

変更内容

  • redundantbranchopts.cpp: 部分的にスレッディング後、曖昧な前置ブロックが単一のSSA定義に収束した場合、冗長なPHI定義を削除し、PHI使用のSSA/VN書き換えを実装(+134行)
  • assertionprop.cpp: 値が非負であると証明されている場合、負の定数との==/!=比較を折り畳む機能を追加
  • JumpThreadPhi.cs: 改善されたコード生成を検証するためのディスアセンブリチェック期待値を追加

パフォーマンスへの影響

改善点:冗長なPHI操作の削除により、不要なレジスタ割り当てと機械命令が削減される可能性があります。アサーション伝播の拡張により、負の定数との比較がより多く折り畳まれ、分岐命令が減少します。

影響なし:これらの最適化は既存コード生成に対して負のパフォーマンス影響をもたらすことはないと考えられます。

関連Issue

#126703

その他

なし


#126880 JIT: Restore arm64, LA64 and RISCV64 OSR callee saves from tier0 frame

概要

ARM64、LoongArch64、RISCV64のOn-Stack Replacement (OSR)機能を改善し、Tier0関数で保存されたCallee-Saveレジスタの値をOSR関数のプロローグで復元する仕様に変更しました。これにより、Tier0からOSRへの遷移時にスタックアンワインドが不要になり、単純なジャンプで実行できるようになります。目標はASP.NETベンチマークで報告されている#120865の修正です。また、AltJitが生成したパッチポイント情報のVM保存サポートも追加しました。

変更内容

  • パッチポイント情報の拡張(patchpointinfo.h, compiler.cpp):Tier0のCallee-Save情報を記録・利用可能に
  • ARM64プロローグ/エピローグの更新(codegenarm64.cpp):継承されたCallee-Saveの二重保存を回避し、Tier0フレームから復元
  • 共通プロローグ処理(codegencommon.cpp):ARM64、LoongArch64、RISCV64のOSR対応、"phantom prolog"の統一的な処理
  • 他アーキテクチャの対応(codegenxarch.cpp, codegenwasm.cpp, codegenarm.cpp):genPushCalleeSavedRegistersシグネチャを統一
  • SuperPMI対応(methodcontext.cpp, jitinterface.cpp):AltJit出力のパッチポイント情報追跡とレプレイ時の古いコレクション対応
  • VM層の変更(jithelpers.cpp, method.cpp/hpp):パッチポイント情報の永続化

パフォーマンスへの影響

Tier0からOSRへの遷移がアンワインド処理を必要としなくなるため、遷移オーバーヘッドが削減されます。ホットパス(ループ内のOSR実行)でのパフォーマンス向上が期待されます。具体的なベンチマーク数値は提供されていません。

関連Issue

#120865

その他

  • ARM64 arm64.cppのgenRestoreReg()において、負のオフセットをFP基準で使用する場合、デバッグビルドでのアサーション失敗の可能性が指摘されています(エミッタは符号付きsimm9オフセットをサポート)
  • codegencommon.cppの終端コメント(#endif // TARGET_ARM64)が条件文と不一致で、更新が必要な箇所があります

#126878 Fix ConfigurationBinder suppressor to only suppress intercepted calls

概要

ConfigurationBinder ソースジェネレータの診断サプレッサーを修正し、IL2026/IL3050 AOT警告を正確に処理します。2つの問題に対応しています:

  1. メソッド引数として渡される呼び出し(例:Some.Method(c.Get<MyOptions>()))で、FindNodeが正しいノードを特定するようgetInnermostNodeForTie: trueを追加
  2. サプレッサーが生成された[InterceptsLocation]属性をスキャンし、実際に インターセプトされた呼び出しサイトのみを抑制するよう変更(#96643への対応)

変更内容

  • ConfigurationBindingGenerator.Suppressor.cs: サプレッサーロジックを拡張し、生成済みのBindingExtensions.g.csから[InterceptsLocation]属性を抽出して、インターセプト対象の呼び出しのみ警告を抑制。v0(ファイル/行/列)およびv1(エンコード済みデータ)の両方のインターセプタ形式に対応
  • GeneratorTests.cs: DynamicallyAccessedMembersAnalyzerを実行する新しい回帰テストを追加(Suppressor_SuppressesWarnings_WhenBindingCallIsMethodArgument、Suppressor_SuppressesWarnings_ForSimpleBindingCall)
  • GeneratorTests.Helpers.cs: 抑制された診断とインターセプト位置が一致することを検証するVerifySuppressedCallsMatchInterceptedCallsヘルパーを統合
  • テストプロジェクト: ILLink Roslyn アナライザーへのプロジェクト参照を追加

パフォーマンスへの影響

影響なし

関連Issue

#94544 #96643

その他

このPRはGitHub Copilotの支援により作成されました。修正は防御的多層防御(defense-in-depth)アプローチとして、既に#110086で意図せず修正されている問題についても対応しています。


#126863 Enable trim/AOT analyzers on libraries tests

概要

Trim/AOT解析器をライブラリテストプロジェクトでデフォルトで有効化し、既存の警告が存在するプロジェクトに対しては一時的にオプトアウト設定を追加する変更です。これは #126862 への対応です。現在、Trimで19,858件、AOTで12,728件の警告が報告されています(重複カウント含む)。

変更内容

  • src/libraries/Directory.Build.props: テストプロジェクト(IsTestProject)に対してEnableTrimAnalyzerとEnableAotAnalyzerをデフォルトで有効化
  • テストプロジェクト群(157ファイル): 既存の警告が多いプロジェクトに対し、Issue番号を記載した上でEnableTrimAnalyzer/EnableAotAnalyzerをfalseに設定

特に警告が多いプロジェクト例:

  • System.Dynamic.Runtime.Tests: 3,853件(Trim)/3,852件(AOT)
  • System.Text.Json.Tests: 2,953件(Trim)/2,910件(AOT)
  • System.Data.Common.Tests: 1,103件(Trim)/428件(AOT)

パフォーマンスへの影響

影響なし

関連Issue

#126862

その他

  • 本PRは段階的なアプローチであり、すべてのテストプロジェクトをTrim/AOT対応にするための第一段階です
  • オプトアウトされたプロジェクトには対応するIssue番号がコメントで記載されており、将来の修正時に参照可能です
  • コンパイラとランタイムのビルドは変更されていません(テストプロジェクト設定のみ)

#126847 Update DNNEVersion to 2.1.1

概要

DNNE (Do Not Name Exports) NuGetパッケージの依存関係をバージョン2.0.5から2.1.1に更新するPull Requestです。この更新により、DNNE 2.1.0で対応されたARM64ビルド失敗の修正(#126673)を取り込みます。

変更内容

  • eng/Versions.props: DNNEVersionを2.0.5から2.1.1に更新
  • src/libraries/System.Runtime.InteropServices/tests/TestAssets/SharedTypes/DNNE.cs: 14行削除(不要なコード削除と思われる)
  • src/libraries/tests.proj: 6行削除(テスト資産の設定簡潔化)

パフォーマンスへの影響

影響なし

関連Issue

#126673

その他

なし


#126774 [cDAC] Implement simple DacDbi APIs with Loader contract

  • 作成者: @rcj1
  • 作成日時: 2026年04月10日 22:47:53(UTC)
  • マージ日時: 2026年04月21日 04:42:37(UTC)
  • ラベル: area-Diagnostics-cdac

概要

cDAC(Compact Data Access Contract)を通じて、DacDbi APIのGetModuleDataおよびIsModuleMappedを実装しました。ILoaderコントラクトを拡張して、DomainAssembly↔Moduleのナビゲーションと"is mapped"クエリをサポートします。これにより、デバッガがモジュールに関する詳細情報を取得できるようになります。

変更内容

  • DacDbiImpl.cs: GetModuleData、GetModuleForDomainAssembly、GetDomainAssemblyFromModule、IsModuleMappedなどの新規API実装。ILoaderコントラクト経由で実装され、DEBUG時には従来のDACとの交差検証を行う
  • ILoader.cs / Loader_1.cs: GetModuleForDomainAssembly、GetDomainAssemblyFromModule、IsModuleMappedをLoaderコントラクトに追加。Module.DomainAssemblyフィールドのサポート追加
  • Module.cs: Module データモデルにDomainAssemblyフィールドのパース機能を追加
  • IDacDbiInterface.cs: IsModuleMappedの出力パラメータ型をBOOL*に修正、enumeration callbackを関数ポインタ型に更新
  • datadescriptor.inc / ceeload.h: Module.DomainAssemblyオフセット定義をcDACに公開
  • MockDescriptors.Loader.cs / LoaderTests.cs: Mockディスクリプタおよびユニットテスト(GetModuleForDomainAssembly、GetDomainAssemblyFromModule向け)を拡張
  • DacDbiLoaderDumpTests.cs: 新しいDacDbi Loader API向けダンプテストを追加

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • レビューコメントでTryGetLoadedImageContentsメソッドの潜在的な問題が指摘されています:LoadedImageLayoutがnullの場合の処理の欠落により、アドレス0での読み込みが試みられる可能性があります
  • cDACベースのデバッガ実装への段階的な移行の一部です

#126768 [naot] [Runtime async] Support for covariant override of Task -> Task<T>

概要

Native AOT環境で、基底メソッドがTaskを返し派生メソッドがTask<T>を返す共変戻り値型のオーバーライドをサポートするための実装です。CoreCLRランタイムの非同期処理修正(#125900)をNative AOTの型システムに統合し、戻り値を破棄する非同期サンク(ReturnDroppingAsyncThunk)を導入して仮想/インターフェースメソッド解決に組み込みます。

変更内容

  • AsyncThunks関連: ReturnDroppingAsyncThunk型を導入し、IL生成でTを返す非同期バリアントを呼び出しつつ結果を破棄するサンク実装を追加(AsyncMethodVariant.cs、AsyncThunks.cs)
  • メソッド解決: 非同期スロットがvoid戻り値だが解決されたオーバーライドがT戻り値の場合、戻り値破棄サンクを選択するロジックを追加(CompilerTypeSystemContext.Async.cs)
  • メタデータ/マングリング: 非同期メソッドバリアント用のマングリングプレフィックス対応とランタイム定数を追加(AsyncMethodVariant.Mangling.cs、RuntimeConstants.cs)
  • 型ローダー実装: Native AOT実行時の型ローダーとメソッド記述子にサンク処理を組み込む(複数のTypeLoader関連ファイル)
  • テスト: 共変戻り値テストプロジェクトをNative AOT対応に再有効化(covariant-returns.csproj、covariant-returns.cs)

パフォーマンスへの影響

影響なし。共変戻り値オーバーライド使用時に追加のサンク呼び出しが1階層入る構造ですが、従来のメソッド呼び出し最適化の対象となり、パフォーマンス試験結果は示されていません。

関連Issue

#126685

その他

この実装は#125900のCoreCLR処理をNative AOTコンパイラ型システムに対応させたもので、内部実装(IL生成、仮想メソッド解決、メタデータ生成)の変更であり、公開APIへの影響はありません。Native AOTでの非同期メソッドの共変オーバーライド対応を完成させるための基盤整備です。


#126653 Use the paths feature in global.json to point to our local .NET SDK.

概要

global.jsonのsdk.paths機能を利用して、ローカルの.NET SDK(.dotnet/ディレクトリ)をSDK解決時に優先させるように設定を更新しました。C# Dev Kitなどのエディタ体験の向上と、ランタイムリポジトリでの開発効率の改善が目的です。ホストSDKへのフォールバックも保持されています。

変更内容

  • global.json: sdk.pathsに.dotnetを最優先で設定し、次にホストSDK($host$)にフォールバック。SDKが見つからない場合のカスタムエラーメッセージも追加
  • WorkloadTesting.Core.targets: ワークロード構築タスクにおけるSDKパス設定の更新
  • 各BuildTestBase.cs: Blazor WASM、WASI、および汎用ワークロード構築テストにおけるSDK環境変数設定の調整(6ファイル)
  • InstallWorkloadFromArtifacts.cs: ワークロード導入タスクにおけるSDKパス処理の更新

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

このPull Requestは、global.jsonのpaths機能を活用することで、開発者が意図的にセットアップした環境のSDKを確実に使用できるようにする設定変更です。破壊的変更ではなく、既存のSDKセットアップには影響を与えません。


#126613 Convert Mono.Linker.Tests from MSTest to xUnit

概要

Mono.Linker.Tests(illink内の最後のMSTestプロジェクト)をxUnitに変換し、dotnet/runtimeの他のテストインフラストラクチャと統一します。プロジェクト設定、テスト属性、アサーション、動的スキップ機構をMSTestからxUnitに移行しました。

変更内容

  • プロジェクト設定: Mono.Linker.Tests.csprojで<TestRunnerName>MSTest</TestRunnerName>を削除、Microsoft.DotNet.XUnitExtensionsを明示的に追加
  • テスト属性変換:
    • [TestClass] → 削除、[TestMethod] → [Fact]
    • [DataRow] → [InlineData]、[DynamicData] → [MemberData]
    • [TestInitialize] → コンストラクタに変更
  • 動的スキップ機構: MSTestのAssert.InconclusiveをxUnitのSkipTestExceptionに置き換え。テストスイートは[ConditionalTheory]を使用し、実行時スキップに対応
  • アサーション変換: Assert.AreEqual → Assert.Equal、Assert.IsTrue/IsFalse → Assert.True/False、Assert.IsNull/IsNotNull → Assert.Null/NotNull(一部はAssert.True(x is not null, $"...")に変更して診断情報を保持)
  • テストデータ構造: TestDatabase.csで戻り値をIEnumerable<TestDataRow<TestCase>> → IEnumerable<object[]>に変更
  • アサーション品質向上: ResultChecker.csで詳細なエラーメッセージを含むアサーションに改善(例:Assert.True(missingInLinked.Count == 0, ...)で欠落した型情報を含める)
  • MSTest固有設定削除: AssemblyInfo.csの並列実行設定と[DoNotParallelize]属性を削除

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • テスト実行結果: 0 Failed、1125 Passed、31 Skipped
  • ビルド: エラー0、警告0
  • [SkipOnTargetFramework]属性を使用した宣言的スキップにより、CI基盤_withoutCategories=failingで自動除外される仕組みに対応
  • xUnitのアサーションメソッドはカスタムメッセージをサポートしないため、一部のAssert.NotNull呼び出しで診断メッセージが失われた(既知のトレードオフ)

#126596 Add logic to muxer to invoke AOT-ed SDK

  • 作成者: @elinor-fung
  • 作成日時: 2026年04月07日 02:18:20(UTC)
  • マージ日時: 2026年04月21日 18:02:58(UTC)
  • ラベル: area-Host

概要

muxerにAOT(Ahead-of-Time)コンパイルされたSDKをネイティブで呼び出すロジックを追加しました。解決されたSDKディレクトリにdotnet-aot共有ライブラリが存在する場合、muxerはそれをロードしてdotnet_executeエントリポイントを呼び出します。AOTライブラリがない場合や期待されるエントリポイントがない場合は、既存のマネージドSDKパスにフォールバックします。

変更内容

  • fx_muxer.cpp: fx_muxer_t::handle_cliにtry_invoke_aot_sdkヘルパー関数を追加。解決されたSDKディレクトリからdotnet-aotをロードし、dotnet_executeエントリポイントを呼び出す処理を実装。AOTライブラリが利用不可の場合は既存のdotnet.dllパスにフォールバック
  • mockaotsdk/mockaotsdk.cpp: dotnet_executeエントリポイントを実装し、受け取った引数を検証するテスト用ネイティブライブラリを追加
  • SDKLookup.cs: muxerがAOT SDKに正しい引数で委譲することを検証するDispatchToAotSdkテストを追加
  • ドキュメント: 機能設計ドキュメントを更新
  • ビルド設定: CMakeLists.txtにテストライブラリの構成を追加

パフォーマンスへの影響

影響なし(条件分岐の追加のみ。AOTライブラリが存在しない通常の使用シナリオではオーバーヘッドなし)

関連Issue

#126171

その他

  • この変更はホスト層(ネイティブmuxer)に限定される内部実装であり、公開APIへの影響なし
  • AOTライブラリがない場合の安全なフォールバック機構が実装されており、既存の動作との互換性を保持

#126509 P/Invokes backed by transient IL

  • 作成者: @jkoritzinsky
  • 作成日時: 2026年04月03日 16:42:29(UTC)
  • マージ日時: 2026年04月21日 00:07:46(UTC)
  • ラベル: area-VM-coreclr

概要

非可変長引数(non-varargs)P/Invokeの実装方式を、IL stubから一時的IL(transient IL)に変更します。この変更により、P/Invoke毎のDynamicMethodDesc 1個を削除し、ポータブルエントリポイント向けのインタープリター回避策とSwift関連の対応を削除します。P/Invokeメソッドはティアード・コンパイルの対象外のままです。

変更内容

  • P/Invoke実行モデルの切り替え: 非可変長引数P/Invokeを一時的ILベースで実装し、prestub/code-prep経路を調整(prestub.cpp, dllimport.cpp)
  • EH句追跡の再設計: EH句追跡所有権をILCodeStreamからILStubLinkerに移行し、複数ILCodeStreamにまたがるtry/finallyおよびtry/catch構造をサポート(stubgen.h, stubgen.cpp)
  • IL stub resolver対応: FinalizeILStubにCORJIT_FLAGSパラメータを追加し、呼び出し側で柔軟にJITフラグを設定可能に(ilstubresolver.h, ilstubresolver.cpp)
  • JIT処理更新: P/Invokeをネイティブコード保有の可能性がある処理として扱い、ティアード・コンパイル対象から明示的に除外(method.cpp, jitinterface.cpp)
  • 可変長引数P/Invoke: 従来のIL stubベースのままで、新しいP/Invoke target解決APIを利用(dllimport.cpp)
  • ロック順序調整: ILStubGenロック順序メタデータを更新(CrstTypes.def)

パフォーマンスへの影響

メモリ使用量削減: P/Invoke毎のDynamicMethodDesc 1個削除により、メモリオーバーヘッドが軽減される。 インタープリター向け回避策削除により、コード複雑性が低下し保守性が向上。 ティアード・コンパイル非対応のため、P/Invoke実行性能の段階的最適化は引き続き実現されません。

関連Issue

#124579(本PRで revert)

その他

  • 本変更は非破壊的なランタイム内部実装変更です。公開APIへの影響はありません。
  • P/Invokeはまだティアード・コンパイルおよびReJIT対象外のままです。
  • Swiftエラーレジスタ伝播向けのインタープリター対応が簡略化されます。

#126407 [browser] Don't copy framework assets to output during build

概要

WebAssemblyアプリケーション構築時にフレームワークアセット(.wasm、.jsファイル等)をbin/wwwroot/_framework/にコピーすることを廃止します。dotnet runは静的Webアセットミドルウェアを使用してobj/などのソースロケーションからファイルを直接提供するため、物理的なコピーは不要です。変更により、ビルド出力の_framework/ディレクトリが約178ファイルから2ファイルに削減されます。

変更内容

  • Microsoft.NET.Sdk.WebAssembly.Browser.targets: 3つのDefineStaticWebAssets呼び出しでCopyToOutputDirectoryをPreserveNewestからNeverに変更

    • Webcil変換アセット(Computed source type)の.wasmファイル
    • フレームワークアセット(Framework source type)のdotnet.js、dotnet.native.wasm等
    • マテリアライズされたフレームワークアセット(obj/fx/の平成プロジェクト内コピー)
  • テストファイル更新: Blazor WASM関連テストを修正し、ビルド検証とアセット所在確認ロジックを強化

パフォーマンスへの影響

ビルド出力サイズが大幅に削減:bin/wwwroot/_framework/ディレクトリが約178ファイルから2ファイル(ホットリロードモジュール+別コードパスのdotnet.js)に削減されます。ただし、dotnet runの実行時パフォーマンスへの影響はなし(静的Webアセットミドルウェアがソースロケーションから直接供給)。

関連Issue

なし

その他

  • 互換性考慮: CopyToPublishDirectoryは既にNeverであるため、公開プロセスは影響を受けません。
  • Blazor WASM ホスト型シナリオへの影響: サーバープロジェクトがクライアントフレームワークファイルを提供する場合の検証が必要です。前述のPreserveNewest設定はこのシナリオ向けに追加されていました。
  • dotnet/sdk への下流影響: Microsoft.NET.Sdk.BlazorWebAssembly.TestsのStaticWebAssetsBaselines/*.Build.*.jsonファイル内の約1,940のビルドベースラインがフレームワークアセット所在をbin\Debugからobj/等の中間ロケーションに更新する必要があります(アプリケーション出力と参照プロジェクトはbin/に留まる)。

#125917 Fix ObjectToIdCache.RemoveAt() backward-shift deletion bug (fixes intermittent DCS_MyPersonSurrogate_Stress failure)

  • 作成者: @Copilot
  • 作成日時: 2026年03月22日 05:18:46(UTC)
  • マージ日時: 2026年04月21日 19:08:50(UTC)
  • ラベル: area-Serialization

概要

ObjectToIdCache.RemoveAt()の後方シフト削除アルゴリズムに、線形探査時の要素移動判定バグを修正。ラップアラウンドした探査チェーン内で削除時に空きスロットを埋めるべき要素が移動されず、次のシリアル化で同じオブジェクトが新しいIDを取得し、IsReference=trueラウンドトリップが破綻するバグを解決します。

変更内容

  • ObjectToIdCache.cs:

    • m_isWrapped[]配列を削除(2016年の不完全な修正)
    • Knuth標準アルゴリズム(TAOCP §6.4 Algorithm R)に基づいた要素移動判定ロジックに変更:空きスロットlastVacantPositionが要素の探査チェーン内にあるかを円形バッファとして判定
    • FindElement()のシグネチャからisWrapped出力パラメータを削除
    • 未使用のusingディレクティブ(System.Collections、System.Collections.Generic)を削除
  • DataContractSerializerStressTests.cs:

    • 新規テストDCS_SurrogateSharedReferences_RoundTripsを理論値テストとして追加(サイズ3、10、50、500)
    • 共有オブジェクト参照グラフのシリアル化・デシリアル化ラウンドトリップを検証
    • Assert.Sameで参照同一性を確認し、IsReference=trueラウンドトリップの正確性を検証

パフォーマンスへの影響

影響なし

関連Issue

#35066

その他

このバグは、ラップアラウンドした探査チェーン内で早い位置のスロットが削除された場合に発生。m_isWrappedでは要素の挿入時のラップ状態のみ追跡しており、到達経路がラップしている場合を見落としていました。修正により、標準的な後方シフト削除アルゴリズムを採用し、より堅牢な実装になります。


#125129 Implement cDAC TraverseLoaderHeap via Loader contract

  • 作成者: @Copilot
  • 作成日時: 2026年03月03日 17:00:12(UTC)
  • マージ日時: 2026年04月21日 20:38:45(UTC)
  • ラベル: area-Diagnostics-cdac

概要

cDAC(Compact Data Access Contract)フレームワークに ISOSDacInterface13::TraverseLoaderHeap を実装します。Loader コントラクト経由でローダーヒープをトラバースするための新しいデータ型とAPI を追加し、SOS デバッガがコントラクト層からヒープブロックを列挙できるようになります。

変更内容

  • cDAC型の追加: LoaderHeap、ExplicitControlLoaderHeap、LoaderHeapBlock の ネイティブ/マネージ型を追加
  • ILoader コントラクト拡張: LoaderHeapKind dispatch と新しいローダーヒープトラバーサルAPI を ILoader インターフェースに追加
  • SOSDacImpl実装: TraverseLoaderHeap (kind指定あり/なし) を ILoader API を使用して実装。COM インターフェースのコールバック署名を型安全なアンマネージド関数ポインタに更新
  • テスト追加: 通常/明示的制御ローダーヒープのトラバーサルユニットテストを追加
  • ドキュメント更新: Loader コントラクト設計ドキュメントに新APIとディスクリプタを記載

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • 破壊的変更なし。内部実装と公開APIの拡張のみ
  • GC.md に軽微な修正(スペリングの訂正)を含む
  • ユニットテストコードにおいて、allocator.Allocate が自動的にビルダーにフラグメントを登録するため、重複登録を避けるべき点が指摘されています

#123040 Fix trimming analyzer missing diagnostics for method calls in field access expressions

概要

Trimming Analyzerがフィールドアクセス式内のメソッド呼び出しに対する診断を報告していない問題を修正しました。例えば、type.GetInterfaceMap(@interface).TargetMethodsはIL2072警告を出さないのに対し、type.GetInterfaceMap(@interface)は正しく警告を出していました。根本原因はTrimAnalysisVisitor.VisitFieldReferenceがフィールドの実例操作をフィールド処理前に訪問していなかったことです。修正により、プロパティ参照やイベント参照と同じ方式で実例を訪問するようになります。

変更内容

  • TrimAnalysisVisitor.cs: VisitFieldReference()の開始時にVisit(fieldRef.Instance, state);を追加し、フィールド実例として使用されるメソッド呼び出しが適切に分析されるようにしました
  • LocalDataFlowVisitor.cs: ProcessSingleTargetAssignmentでフィールド読み取りと書き込みの両方がメソッド呼び出しを分析するように、IFieldReferenceOperationの実例訪問を追加しました
  • GetInterfaceDataFlow.cs: GetInterfaceMapシナリオの包括的なテストケースを追加(直接呼び出し、フィールドアクセス、ネストされたフィールドアクセスパターンに対応)
  • FieldDataFlow.cs: AccessReturnedInstanceFieldテストの期待警告を更新し、Analyzer/Trimmer/NativeAoT全体で一貫した警告報告を確保

パフォーマンスへの影響

影響なし

関連Issue

#108114、dotnet/linker#2832

その他

低リスク変更です。フィールド参照分析に限定された修正で、メソッド呼び出しがその戻り値の使用方法に関わらず分析されることを保証し、すべてのツール間での動作一貫性を確保します。


目次