Pull Request on 2026年06月03日

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

注意点

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


目次

  1. #128948 Skip 32-bit time_t openssl detection on linux-bionic arm
  2. #128928 JIT: bail from optOptimizeBoolsCondBlock on GTF_UNSIGNED inputs
  3. #128926 [Wasm RyuJit] Enable codegen for wasm funclets by default
  4. #128924 JIT: remove optCanProp* short-circuit flags
  5. #128922 Have ComputeRange call into GetRangeFromAssertions for non dependent/symbolic cases
  6. #128917 Remove Swift ObjC classes from Apple crypto native shim
  7. #128916 Initialize *ppv in comhost DllGetClassObject
  8. #128915 Update branding to 9.0.18
  9. #128914 Update branding to 8.0.29
  10. #128903 [cDAC] Pack DataGenerator as analyzer asset in Abstractions nupkg
  11. #128900 Fix two union serialization defects: nullable case overload merging (#128688) and default(struct union) crash (#128834)
  12. #128893 Fix iossimulator build with XCode 26.4
  13. #128887 Delete more leftover UTF-16 code from compiler
  14. #128884 Ensure fields cannot mangle into same things as methods
  15. #128874 Change ValidateDer to iterative evaluation
  16. #128873 Remove IsCallerSPValid, standardize caller-frame validity on IsCallerContextValid, and finalize ARM AsmOffsets updates
  17. #128865 [cDAC] Implement GetManagedStoppedContext for cDAC
  18. #128864 Move PlatformDocAnalyzer to Analyzers.targets and gate behind EnablePlatformDocAnalyzer
  19. #128851 [release/10.0] Fix UnsafeAccessor signature for byref struct this
  20. #128829 [cDAC] Implement DacDbi APIs EnumerateClassFields and EnumerateInstantiationFields
  21. #128796 [release/10.0] Fix crash on calling COM interface method on a class where a derived class overriding it was created first
  22. #128794 [release/9.0-staging] Update dependencies from dotnet/icu
  23. #128745 [Browser][coreCLR] Enable EventPipe for CoreCLR
  24. #128734 Add SYSTEM_CORELIB_DIRECTORY host property for explicit CoreLib location
  25. #128706 Fix async continuation hijacking for x86 NativeAOT
  26. #128651 [Android] Handle X509ChainContext creation failures
  27. #128618 [release/9.0-staging] Update dependencies from dotnet/arcade
  28. #128558 Improve exception message when processing long SSE line
  29. #128546 [main] Update dependencies from dnceng/internal/dotnet-optimization
  30. #128481 Disable Validate.csproj build under Mono FullAOT to fix CS0246
  31. #128423 Use Virtual IPs in R2R format
  32. #128354 Implement GetIlCodeAndSig DacDbi API in cDAC
  33. #128180 Add AssociatedSourceType for conditional unmanaged exports

#128948 Skip 32-bit time_t openssl detection on linux-bionic arm

概要

Linux bionic arm環境での64ビットtime_t要件チェックを条件付きコンパイルから除外する変更です。#128826の変更によりTARGET_ANDROIDが定義されるようになったため、Android NDK API 24(32ビットtime_tのみ対応)でのビルドエラーが発生していました。linux-bionicはOpenSSL暗号ライブラリを自身でビルドしないため、当該チェックと32ビットtime_tプローブはこのプラットフォームで不要です。TARGET_ANDROIDをガード条件から除外することで、このビルドエラーを解決します。

変更内容

  • opensslshim.c, opensslshim.h, openssl.c, pal_x509.c: TARGET_LINUX && TARGET_ARMのガード条件にTARGET_ANDROIDの除外ロジックを追加し、64ビットtime_tの静的アサーションと32ビットtime_tlibsslプローブをlinux-bionicでコンパイルしない仕様に変更

パフォーマンスへの影響

影響なし

関連Issue

#128826

その他

このPRはdotnet/dotnetリポジトリのLinuxBionic_Shortstack_armビルドレグを修正します。


#128928 JIT: bail from optOptimizeBoolsCondBlock on GTF_UNSIGNED inputs

概要

JITの条件ブロック最適化(optOptimizeBoolsCondBlock)において、符号なし整数型の入力に対する不適切な最適化を防止するための修正です。(x == 0) || (x relop 0) 形式の条件ブロック対の折り畳み最適化時に、符号なし入力がある場合は最適化をスキップするようにしました。

変更内容

  • optimizebools.cpp: optOptimizeBoolsCondBlockメソッドで、符号なし(GTF_UNSIGNED)フラグが設定されている入力に対して最適化を中止する条件チェックを追加(14行追加)
  • Runtime_128895.cs: 符号なし入力での不正な最適化をカバーするテストケースを追加(112行の回帰テスト)
  • Runtime_128895.csproj: テストプロジェクトの設定ファイル追加

パフォーマンスへの影響

符号なし入力の特定ケースで最適化がスキップされるため、わずかなパフォーマンス低下の可能性がありますが、正確性が優先される修正です。

関連Issue

#128895

その他

JIT内部実装(ランタイムコンパイラ)の修正であり、公開APIへの影響はありません。既存の同様のチェック(LT,LT)/(LT,GE)折り畳み処理に合わせた対応です。


#128926 [Wasm RyuJit] Enable codegen for wasm funclets by default

概要

WebAssemblyにおけるJIT コンパイルの機能を有効化するための設定変更です。JitWasmFuncletsのデフォルト値を0から1に変更することで、funclets(例外処理関連のセカンダリエントリポイント)を含むメソッドが、遅延bailoutを経由せずにコード生成されるようになります。先行PR #128736のマージに依存します。

変更内容

  • src/coreclr/jit/jitconfigvalues.h: JitWasmFuncletsのデフォルト値を0から1に変更し、設定値0がR2R(ReadyToRun)unsupported早期bailoutをトリガーすることを明確にするコメント更新(+2/-2)

パフォーマンスへの影響

影響なし(本PR自体はデフォルト設定の変更のみで、コード生成ロジックの変更ではありません。ただし、funclets を含むメソッドのコンパイル処理の効率化が期待されます)

関連Issue

#128736

その他

  • この変更はWasmJitの内部設定(TARGET_WASM環境下)に限定されます
  • 互換性への影響はありません
  • 設定値を明示的に0に指定すれば従前の動作(early bailout)に戻すことが可能です

#128924 JIT: remove optCanProp* short-circuit flags

  • 作成者: @EgorBo
  • 作成日時: 2026年06月03日 00:07:46(UTC)
  • マージ日時: 2026年06月03日 11:53:52(UTC)
  • ラベル: area-CodeGen-coreclr

概要

JIT アサーション伝播における optCanProp* 短絡フラグを削除し、状態追跡を簡略化するとともに、アサーション伝播チェックを常に有効化する変更。これによりコード複雑性を削減し、JitOptRepeat 後の陳腐なアサーションに関連する潜在的な正確性問題を修正します。

変更内容

  • src/coreclr/jit/compiler.h: optCanPropLclVar、optCanPropEqual、optCanPropNonNull、optCanPropBndsChk、optCanPropSubRange の 5 つのフラグフィールドを Compiler クラスから削除(-9 行)
  • src/coreclr/jit/assertionprop.cpp: これらのフラグの初期化・保守ロジックを削除し、アサーション伝播ヘルパー関数の対応する早期リターンガード処理を廃止(+31/-28 行)

パフォーマンスへの影響

影響なし。本変更は短絡フラグを削除することで、以前は「伝播可能」チェックが省略されていたケースでもアサーション伝播が実行されるようになりますが、スループット(TP)の実質的な向上は得られないため、フラグが廃止されました。

関連Issue

#128602

その他

本変更は JIT コンパイラの内部最適化ロジックに限定される変更で、公開 API への影響はありません。また、JitOptRepeat による複数回コンパイルあとのアサーション不正状態に関連する潜在的な正確性問題も同時に修正されています。


#128922 Have ComputeRange call into GetRangeFromAssertions for non dependent/symbolic cases

概要

JIT範囲分析の改善により、RangeCheck::ComputeRangeがGetRangeFromAssertionsをより多くのTYP_INT型の式に活用できるようにしました。整数定数の抽出を改善し、32ビット環境やより広い定数でのssize_tの切り詰めを回避します。

変更内容

  • src/coreclr/jit/valuenum.h: ValueNumStore::IsVNIntegralConstantを更新し、FitsIn<T>チェック前にint64_t経由で定数を強制変換。これによりssize_tによる不正な切り詰めを防止。
  • src/coreclr/jit/rangecheck.cpp: ComputeRangeの定数処理をIsVNIntegralConstantで統一し、従属/シンボリック式でない残りのTYP_INT型の式をGetRangeFromAssertionsを通してルーティング。小型/キャスト型ベースのフォールバック処理を削除。

パフォーマンスへの影響

JIT範囲分析の精度が向上することで、範囲チェック最適化がより多くのケースで機能し、コード生成効率が改善される可能性があります。具体的なベンチマーク結果は提供されていません。

関連Issue

#128906(より複雑なTYP_LONG処理を含まない簡潔化版)

その他

なし


#128917 Remove Swift ObjC classes from Apple crypto native shim

  • 作成者: @vcsjones
  • 作成日時: 2026年06月02日 19:48:20(UTC)
  • マージ日時: 2026年06月03日 12:56:12(UTC)
  • ラベル: area-System.Security

概要

Apple暗号ネイティブシムのSwiftクラスベースの不透明ハンドルをポインタベースのSwift値型に置き換え、複数のコピー読み込み時のObjCクラス重複登録を防止します。また、将来のSwiftバインディングでローカル定義のSwift ObjCクラスメタデータを導入しないよう検証するビルド後スクリプト(verify-no-swift-objc-classes.sh)を追加します。

変更内容

  • pal_swiftbindings.swift: final classでラップされた不透明ハンドルを、UnsafeMutablePointer<T>に格納されたSwift値型に置き換え。これによりプロセスグローバルなSwift ObjCクラスメタデータの生成を排除
  • verify-no-swift-objc-classes.sh: ビルド成果物のバイナリ/アーカイブ内のSwift ObjCクラス定義を検査する新規検証スクリプト
  • CMakeLists.txt: 共有および静的ライブラリのビルド後ステップに検証スクリプトを統合

パフォーマンスへの影響

影響なし

関連Issue

#128867

その他

この変更は内部実装(ネイティブ暗号ライブラリ)の修正であり、公開APIへの影響はありません。プロセスグローバルなObjCクラス登録の重複を防ぐことで、ライブラリの複数読み込みシナリオでの問題を解決します。ビルド検証スクリプトにより、同様の問題の再発を防止する自動チェック機構も確立されます。


#128916 Initialize *ppv in comhost DllGetClassObject

  • 作成者: @Copilot
  • 作成日時: 2026年06月02日 18:32:25(UTC)
  • マージ日時: 2026年06月03日 21:38:42(UTC)
  • ラベル: area-Host

概要

DllGetClassObjectのCOM契約違反を修正するPRです。失敗パス(CLSID未検索、get_com_delegate失敗)でHRESULTを返す際に*ppv出力パラメータが初期化されていない問題を解決します。関数エントリで*ppv = nullptrを初期化し、ppv == nullptrの場合はE_POINTERを返すガード処理を追加しています。

変更内容

  • src/native/corehost/comhost/comhost.cpp (+6/-0)
    • DllGetClassObject関数開始時にppvのnullptrチェックを追加
    • すべての失敗パスより前に*ppvをnullptrで初期化
    • COM規約の準拠:出力パラメータは常に初期化する必要がある

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

このは変更はcomhost(COM相互運用機能)の内部実装に対するもので、COM呼び出し元との契約を正しく遵守するための修正です。破壊的変更ではありません。


#128915 Update branding to 9.0.18

概要

.NET 9のサービシング版における製品バージョンを9.0.17から9.0.18へアップデートするブランディング変更です。ビルドシステム全体で使用されるバージョン番号を統一します。

変更内容

  • eng/Versions.props: <ProductVersion>を9.0.17から9.0.18へ、<PatchVersion>を17から18へ変更
  • これに伴い、PackageVersionNet8などの派生バージョンプロパティも連動して更新されます

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

この変更はブランディング/バージョン管理の更新であり、機能追加やバグ修正は含まれません。製品バージョンとファイルバージョンの整合性を確保するメンテナンス作業です。


#128914 Update branding to 8.0.29

概要

.NET 8.0のバージョンメタデータを8.0.28から8.0.29へ更新するパッチリリース用のブランディング変更です。

変更内容

  • eng/Versions.props: <ProductVersion>を8.0.28から8.0.29へ更新、<PatchVersion>を28から29へ更新(4行の変更)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

なし


#128903 [cDAC] Pack DataGenerator as analyzer asset in Abstractions nupkg

概要

cDAC データ生成器(Microsoft.Diagnostics.DataContractReader.DataGenerator)を Abstractions NuGetパッケージのアナライザーアセットとしてパックし、ダウンストリームコンシューマーが PackageReference 経由で自動的に生成器を取得できるようにします。これまでのリポジトリ内 ProjectReference は不要になります。

変更内容

  • ジェネレータの移動: Microsoft.Diagnostics.DataContractReader.DataGenerator/ を gen/ ディレクトリに移動。Directory.Build.props が gen/ 下のプロジェクトを自動検出し、IsGeneratorProject=true を設定します。
  • Abstractionsへの統合: Abstractions.csproj で <ProjectReference ... ReferenceOutputAssembly="false" PackAsAnalyzer="true" /> により、生成器DLLが transport nupkg の analyzers/dotnet/cs/ に配置されます。
  • ジェネレータの修正:
    1. LayoutPair/TypeNameResolver の発行ゲート:GetTypeByMetadataName が null チェックで、メタデータに存在するがアクセス不可な内部型を抑制していた問題を、IsSymbolAccessibleWithin チェックに変更。これにより外部コンシューマーが独自の内部コピーを生成します。
    2. クロスアセンブリ重複時の対応:単数形 GetTypeByMetadataName が null を返す問題を、複数形 GetTypesByMetadataName + Any(accessible) に切り替え。
  • プロジェクト参照の更新: Contracts.csproj と DataGeneratorTests.csproj の参照パスを新しい場所に更新。
  • 冗長な設定削除: ジェネレータ csproj の IsSourceProject=false と EnforceExtendedAnalyzerRules=true を削除。

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • リポジトリ内 cDAC ビルドと DataGeneratorTests は引き続き ProjectReference OutputItemType="Analyzer" でジェネレータを使用します(動作変更なし)。
  • 修正は外部 PackageReference コンシューマーにのみ影響します。リポジトリ内ビルドは InternalsVisibleTo により既存通り動作します。
  • Abstractions nupkg に analyzers/dotnet/cs/Microsoft.Diagnostics.DataContractReader.DataGenerator.dll が含まれます。

#128900 Fix two union serialization defects: nullable case overload merging (#128688) and default(struct union) crash (#128834)

概要

System.Text.Jsonのunion型シリアライゼーションの2つの欠陥を修正します:

  1. 値型のFoo(T)とFoo(T?)コンストラクタオーバーロードが混在する場合、メタデータ層がそれらを単一のnullableケースに統合していた問題を、両方のオーバーロードを別々のUnionCaseSpecとして保持するように修正。これによりnew Foo((int)42)が正しくtypeof(int)と判定され、nullableオーバーロードへの正しなディスパッチが実現します。

  2. default(struct union)の状態でのシリアライゼーションが例外をスローしていた問題を修正。JSONnullとして正しくシリアライズされ、ラウンドトリップが成功するようにしました。

変更内容

  • JsonSourceGenerator.Parser.cs / Emitter.cs:Nullable<T>の正規化を廃止し、IsSwitchArmフラグを導入してパターンマッチングの重複を防止。すべての生成されたdeconstructorにnull =>アームを追加。
  • UnionCaseSpec.cs:IsSwitchArmプロパティを追加して、各CaseTypeグループの正規スイッチアームをマーク。
  • DefaultJsonTypeInfoResolver.Union.cs:リフレクションベースのunionメタデータ発見とdeconstructor/constructorのnullセマンティクスを更新。nullペイロードを適切にnullableケースにディスパッチ。
  • JsonUnionConverter.cs:JSONnullの読み取り時、nullableケースが存在しない場合はdefault(TUnion)を返すように変更。
  • UnionTests.cs:default(union)のシリアライゼーション、nullルーティング、異なるTvsT?ケースメタデータに関する8つの新規テストを追加。フルラウンドトリップテストをカバー。

パフォーマンスへの影響

影響なし。

関連Issue

#128688、#128834

その他

  • コンストラクタデリゲートの契約は変更なし:非nullableなunionに対してtypeInfo.UnionConstructor!(typeof(int), null)を呼び出すと、引き続きUnionDoesNotAcceptNullをスローします。
  • C#コンパイラのCS8655に準拠:value switchでのnull状態の扱いが一貫化されました。
  • 4つのSystem.Text.Jsonテストスイート(リフレクション、ソース生成Roslyn 4.4 × 2、Roslyn 3.11)のすべてでテスト完了。

#128893 Fix iossimulator build with XCode 26.4

概要

XCode 26.4でClang 21がバンドルされるようになり、新しい警告フラグ(-Wimplicit-int-enum-castと-Wimplicit-void-ptr-cast)が追加されました。これらの警告がビルドエラーとして検出されるため、iOS Simulator向けのネイティブコード(Objective-C/C)に明示的なキャスト処理を追加してビルドエラーを解決しています。

変更内容

  • pal_calendarData.m: 型不一致の暗黙的キャストを修正(1箇所)
  • pal_collation.m: ポインタキャストの明示化を実施(14箇所)
  • pal_x509_ios.c: 型不一致の暗黙的キャストを修正(2箇所)

すべて内部ネイティブ実装(System.Globalization.Native、System.Security.Cryptography.Native.Apple)に関わる変更で、公開APIには影響ありません。

パフォーマンスへの影響

影響なし

関連Issue

#128893

その他

  • iOS Simulatorのビルド互換性の維持が目的
  • XCode 16.4以上での環境におけるCI/ローカルビルドの成功を確保します

#128887 Delete more leftover UTF-16 code from compiler

概要

NativeAOT コンパイラの名前マングリング機能から UTF-16 中心のコード経路を削除し、Utf8String ベースの実装に移行するリファクタリング。文字列リテラルマングリング API を Utf8String を返すように変更し、孤立した UTF-16 サロゲート文字の正しい処理を検証する煙テストを追加。

変更内容

  • NameMangler.cs: GetMangledStringName(string) の戻り値を Utf8String に変更(公開 API の内部実装変更)
  • NativeAotNameMangler.cs: 文字列リテラルマングリングキャッシュを Utf8String ベースに移行し、UTF-16 ヘルパーメソッドを削除。UTF-8 エンコーディングに U+FFFD 置換文字を含むリテラルの特殊ケースハッシング処理を追加
  • NodeFactory.cs: UTF-8 文字列シンボルネーミングを新しい Utf8String 戻り値 API に対応
  • テスト: MiscTests を追加し、孤立したサロゲートを含む文字列リテラルが単一の char コードユニットとして保持されることを検証

パフォーマンスへの影響

影響なし(リファクタリングと機能検証のみ)

関連Issue

なし

その他

懸念事項: NativeAotNameMangler.cs での UTF-16 ハッシング処理変更により、ビッグエンディアン環境で異なるマングル名が生成される可能性があります。大エンディアンビルドが引き続きサポートされている場合、リトルエンディアン順序を保証する調整が必要。


#128884 Ensure fields cannot mangle into same things as methods

概要

NativeAOTの名前マングラー(難読化されたアセンブリ向け)において、フィールドとメソッドが同じマングル名に衝突する問題を修正しました。サニタイズされた難読化名(例:"\u0003\u000e" → "__")がフィールドとメソッド間で重複するのを防ぐため、フィールド名の区切り文字を"__"から"__field__"に変更しました。

変更内容

  • src/coreclr/tools/Common/Compiler/NativeAotNameMangler.cs
    • ComputeMangledFieldNameメソッドにおいて、型プレフィックスとフィールド名の区切り文字を"__"から"__field__"に変更
    • 型単位の名前重複排除ループと単一フィールドパスの両箇所で適用

パフォーマンスへの影響

影響なし

関連Issue

#127646

その他

この変更はNativeAOTランタイムのコンパイラツール(内部実装)に対する修正です。フィールドとメソッドの名前空間を分離することで、マングル後のシンボル名の一意性を確保します。


#128874 Change ValidateDer to iterative evaluation

  • 作成者: @bartonjs
  • 作成日時: 2026年06月02日 00:44:31(UTC)
  • マージ日時: 2026年06月03日 03:47:50(UTC)
  • ラベル: area-System.Security

概要

DER検証ロジックを再帰的な実装から反復的な実装に変更し、深くネストされたASN.1値によるStackOverflowExceptionを防止します。明示的なスタック/キューを使用した反復走査により、構造化値の検証時に予期しないスタックオーバーフローが発生しなくなります。

変更内容

  • Helpers.cs: ValidateDerメソッドを反復的な検証処理に変更。従来の再帰呼び出しから明示的なスタック/キュー機構を使用したループベースの実装に置き換え、深くネストされた構造化値でも安全に処理可能に
  • CertificateRequestApiTests.cs: OtherRequestAttributesを用いて非常に深くネストされたDER構造の検証テストを追加(有効なケースと意図的に無効化されたケースの両方をカバー)

パフォーマンスへの影響

メモリオーバーヘッド: 反復処理用の明示的なスタック/キュー構造が追加されるため、わずかなメモリ使用量の増加が予想されます。 実行速度: 通常のDER検証では大きな変化なし。深くネストされた値を扱う際、再帰呼び出しのオーバーヘッドが削減される可能性があります。

関連Issue

なし

その他

この変更は無効な値の検出タイミングが変わる可能性がありますが、エラー報告の内容には影響しないとのこと。X.509証明書リクエスト処理(CertificateRequest)における深いネスト構造への耐性向上が目的です。


#128873 Remove IsCallerSPValid, standardize caller-frame validity on IsCallerContextValid, and finalize ARM AsmOffsets updates

  • 作成者: @Copilot
  • 作成日時: 2026年06月01日 23:27:52(UTC)
  • マージ日時: 2026年06月03日 02:16:55(UTC)
  • ラベル: area-VM-coreclr

概要

レガシーな例外処理(EH)時代の遺物である IsCallerSPValid フラグを削除し、呼び出し元フレームの妥当性チェックを IsCallerContextValid に統一します。これにより、セマンティクスの乖離を排除し、コード全体で一貫した文脈ベースの妥当性判定を実現します。

変更内容

  • AsmOffsets.cs: ARM アーキテクチャのアセンブリオフセット定義を更新(18行変更)
  • regdisp.h: IsCallerSPValid フラグ定義を削除(3行削除)
  • 複数の VM コンポーネント削除:
    • debugger.cpp、cgenamd64.cpp、stubs.cpp(ARM/ARM64/LoongArch64/RISC-V)、eetwain.cpp、excep.cpp、stackwalk.cpp、wasm/helpers.cpp から IsCallerSPValid の使用を削除
    • 削除行数の合計は約41行

パフォーマンスへの影響

影響なし。本変更はレガシーフラグの削除による内部実装の整理であり、ランタイムのパフォーマンス特性に直接的な影響はありません。

関連Issue

なし

その他

本変更は内部実装の整理です。IsCallerSPValid は EH(例外処理)時代の遺物として評価されており、公開 API には影響しません。複数アーキテクチャ(AMD64/x86/ARM/ARM64/LoongArch64/RISC-V)にまたがる一貫性の改善となります。


#128865 [cDAC] Implement GetManagedStoppedContext for cDAC

  • 作成者: @barosiak
  • 作成日時: 2026年06月01日 21:11:58(UTC)
  • マージ日時: 2026年06月03日 16:14:15(UTC)
  • ラベル: area-Diagnostics-cdac

概要

cDAC (Common Data Access Component) の DBI レイヤーに GetManagedStoppedContext を実装し、ネイティブ DAC のロジックをマネージド実装に移植しました。また、Thread データディスクリプタに InteropDebuggingHijacked フィールドを追加し、テストとモックインフラストラクチャを拡張しています。

変更内容

  • DacDbiImpl.cs: GetManagedStoppedContext メソッドをマネージド cDAC に実装(#if DEBUG でレガシー検証付き)
  • Thread データディスクリプタ: InteropDebuggingHijacked フィールドをネイティブ・マネージド定義および ドキュメントに追加
  • StackWalk コントラクト: GetManagedStoppedContext 実装に必要なロジック追加(75行追加)
  • モックインフラ: MockDescriptors.Frame.cs を新規作成し、ResumableFrame とリダイレクトされたスレッドフレームのモック機構を実装
  • テスト拡張: DacDbiImplTests.cs に全コードパスをカバーするテスト(98行追加)、既存テスト更新

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • マネージド cDAC への機能移植プロジェクトの一部
  • デバッグビルドでレガシー実装との互換性検証を実施
  • 内部 API の変更(DBI レイヤーの実装詳細)

#128864 Move PlatformDocAnalyzer to Analyzers.targets and gate behind EnablePlatformDocAnalyzer

概要

PlatformDocAnalyzerをコンパイルビルド設定の構成スコープの適用範囲を変更するPRです。eng/generators.targetsからeng/Analyzers.targetsへ移動し、EnablePlatformDocAnalyzerプロパティで制御可能にしました。デフォルトではsrc/librariesソースプロジェクトで有効になります。これにより、アナライザーは明示的にオプトインしない限りライブラリプロジェクトに限定されます。

変更内容

  • eng/Analyzers.targets: PlatformDocAnalyzerのProjectReferenceと.propsインポートを追加し、EnablePlatformDocAnalyzerプロパティでゲート制御(+12行)
  • eng/generators.targets: PlatformDocAnalyzerのwiring設定を削除(-11行)
  • src/libraries/Directory.Build.props: src/librariesソースプロジェクトに対してEnablePlatformDocAnalyzerをデフォルト有効に設定(+2行)
  • .slnxファイル(200+ファイル): 各ライブラリのソリューションファイルを再生成し、PlatformDocAnalyzerプロジェクトを/gen/フォルダに追加

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

この変更は内部ビルド設定の組織化です。公開APIへの影響はなく、ビルドツールチェーンの構造的改善です。EnablePlatformDocAnalyzer=falseを設定することで、個別プロジェクトではアナライザーを無効化できます。


#128851 [release/10.0] Fix UnsafeAccessor signature for byref struct this

概要

UnsafeAccessorで参照型のbyref structを扱う際の署名検証ロジックの修正です。ジェネリック型パラメータを含むbyref struct型に対するUnsafeAccessor呼び出しがアクセス違反を引き起こしていた問題を解決します。.NET 11で既に修正されていますが、.NET 10へのバックポートです。

サンプルコード(修正前はAccessor<string>.M(ref sString)でアクセス違反が発生):

using System.Runtime.CompilerServices;

S<int> sInt32 = new();
Accessor<int>.M(ref sInt32);
Console.WriteLine("Int32 okay");

S<string> sString = new();
Accessor<string>.M(ref sString); // 修正後は正常に動作
Console.WriteLine("string okay");

public struct S<T>
{
    private void M() { }
}

public static class Accessor<T>
{
    [UnsafeAccessor(UnsafeAccessorKind.Method, Name = "M")]
    public static extern void M(ref S<T> s);
}

変更内容

  • src/coreclr/vm/unsafeaccessors.cpp:UnsafeAccessor署名検証時にジェネリック型パラメータを含むbyref struct型の比較ロジックを修正
  • src/coreclr/vm/genericdict.cpp:ジェネリック辞書のシグネチャ処理を調整
  • src/tests/baseservices/compilerservices/UnsafeAccessors/UnsafeAccessorsTests.Generics.cs:ジェネリック型パラメータを含むbyref structに対するUnsafeAccessor呼び出しのテストケースを追加

パフォーマンスへの影響

影響なし

関連Issue

その他

  • 本修正は.NET 11で既に適用されているもので、.NET 10への遅れたバックポートです
  • 潜在的な不具合としてジェネリック対応時に発見されました
  • リスク評価:低(.NET 11で長期間検証済み、社内外で複数の顧客報告あり)
  • 互換性への影響なし

#128829 [cDAC] Implement DacDbi APIs EnumerateClassFields and EnumerateInstantiationFields

概要

DacDbi APIをEnumerateClassFieldsとEnumerateInstantiationFieldsのコールバックベース実装に置き換え、Edit and Continue (EnC)対応のcDAC IEditAndContinue コントラクトを追加する変更です。フィールド列挙APIをコールバック駆動に変更し、EnC機能向けの新しいランタイムタイプシステムAPIを公開しています。

変更内容

  • DacDbi API変更(破壊的変更):IDacDbiInterface::GetClassInfo/GetInstantiationFieldInfoをコールバックベースのEnumerateClassFields/EnumerateInstantiationFieldsに置き換え
  • FieldData構造体の拡張:m_fldInstanceOffsetをULONG64に、m_pFldStaticAddressをCORDB_ADDRESSに拡張
  • 新規cDAC IEditAndContinueコントラクト:EnumerateAddedFieldDescs(TypeHandle)APIを実装し、EnC追加フィールドを列挙可能に
  • RuntimeTypeSystemAPI拡張:GetNumInstanceFieldBytes()、IsFieldDescRVA()、IsFieldDescEnCNew()を新規公開
  • データクラス追加:EnCEEClassData、EnCAddedFieldElement、UnorderedArrayBase、Module.EnCClassListをcDACに追加
  • リファクタリング:rsclass.cpp/rstype.cppをCallbackAccumulator<FieldData>で駆動するように修正
  • ソースジェネレーター対応:nullable FieldAddressプロパティ対応を追加

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • 本変更は表面的には「ファイルローカルなヘルパーのリファクタリング」と説明されていますが、実際にはDacDbiプロトコルのコールバックベース化、新しいEnCコントラクト実装、およびサポート用データ記述子の大規模な着地を含みます
  • DacDbiインターフェースの変更は既存のデバッガクライアントに対して破壊的変更となる可能性があります
  • cDAC側はネイティブコード側と連携するEnC機能の基盤として機能します

#128796 [release/10.0] Fix crash on calling COM interface method on a class where a derived class overriding it was created first

概要

.NET 9で導入された遅延的なエントリポイント割り当て(#101580)による回帰を修正します。COM インターフェースを実装する基底クラスと、そのメソッドをオーバーライドする派生クラスが共有の ComMethodTable を持つ場合、派生クラスが先に作成されると、共有の ComMethodTable がレイアウトされる際に基底クラスの仮想テーブル スロットが復元されず、NULL スロット経由のディスパッチでクラッシュしていました。修正により、ComMethodTable のレイアウト時に親の MethodTable チェーンを走査し、基底クラスのスロットを確実に復元します。

変更内容

  • src/coreclr/vm/comcallablewrapper.cpp: ComMethodTable::LayOutInterfaceMethodTable で仮想クラスメソッドをインターフェース スロットにバインドする際、親チェーンを走査して各親の GetRestoredSlot(slot) を呼び出し、基底クラスのスロットを復元
  • src/tests/Interop/COM/VirtualMethodOverride/VirtualMethodOverrideTest.cs: 派生クラスと基底クラスの両方の呼び出し順序をカバーする新しいCOM相互運用テストを追加(120行追加)
  • src/tests/Interop/COM/VirtualMethodOverride/VirtualMethodOverrideTest.csproj: テストプロジェクト設定を追加(10行追加)

パフォーマンスへの影響

影響なし

関連Issue

#127512、#101580

その他

  • 回帰は .NET 9 の #101580 で導入されました
  • .NET 11 ではディスパッチ方式が大きく異なるため、本修正は release/10.0 に直接適用されています
  • リスク評価: Low
  • 顧客が報告した問題で、自動テストと最小限の再現例でテスト済み

#128794 [release/9.0-staging] Update dependencies from dotnet/icu

概要

dotnet/icu リポジトリの依存関係を更新するための自動化されたPull Request。Microsoft.NETCore.Runtime.ICU.Transport パッケージをバージョン 9.0.0-rtm.26261.1 から 9.0.0-rtm.26278.1 に更新しました。

変更内容

  • eng/Version.Details.xml: バージョン詳細とコミットハッシュを更新(2行追加、2行削除)
  • eng/Versions.props: バージョン プロパティを更新(1行追加、1行削除)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

このPull Requestは dotnet-maestro[bot] によって自動生成された依存関係更新です。release/9.0-staging ブランチを対象としています。


#128745 [Browser][coreCLR] Enable EventPipe for CoreCLR

概要

このPRはBrowser WASM上のシングルスレッド環境でCoreClrのEventPipeジニスティクスインフラストラクチャを有効にします。EventPipeを使用して、パフォーマンストレーシングとイベントログ機能をBrowser環境で利用できるようにするための実装です。.wasmファイルサイズの増加が予想されます。

変更内容

ビルド構成の変更:

  • WAsmのFeaturePerfTracing=falseオーバーライドを削除し、EventPipeを有効化
  • clrfeatures.cmakeを更新して、FEATURE_PERFTRACING_DISABLE_THREADSが設定されている場合にFEATURE_PERFTRACINGを有効化
  • 複数のCMakeLists.txtでPERFTRACING_DISABLE_THREADS定義をEventPipeコンポーネント全体に伝播

EventPipeランタイム実装(ep-rt-coreclr.h):

  • シングルスレッド環境向けの待機イベント、スレッド作成、ジョブキューイングのスタブを追加
  • ep_rt_queue_jobはHOST_BROWSER向けにジョブコールバックをインライン実行し、必要に応じてSystemJS_DiagnosticServerQueueJob経由で再スケジュール

イベント/ETW適応:

  • Browser/WASI向けにLTTng/XplatEventLogger参照を生成コードから削除(genEventing.py、eventtrace.cpp)
  • EventPipeのみのプロバイダーコールバック実装を追加(genEventPipe.py)
  • 管理側のコールバック用リバースサンク実装を追加(callhelpers-reverse.cpp)

GC診断処理:

  • Browser環境でForceGCを非同期化し、SystemJS_DiagnosticServerQueueJob経由で次のイベントループターンにデファー(eventtrace_gcheap.cpp)
  • DiagGCEndを修正してGCヒープウォーク有効化(gcenv.ee.cpp)

ビルド統合:

  • EnableDiagnostics=true時に自動的にネイティブリリンク有効化(BrowserWasmApp.CoreCLR.targets)

テスト調整:

  • Browser向けテストからEventPipeListenerとTraceEvent/DiagnosticsClient NuGetパッケージを除外
  • #if !TARGET_BROWSERガードを追加

パフォーマンスへの影響

  • .wasmファイルサイズの増加が予想される(EventPipeコード追加による)
  • Browser環境でのシングルスレッド実装により、ジョブキューイングはインライン実行されるため、スレッドコンテキストスイッチのオーバーヘッドなし
  • GC診断(ForceGC)は非同期デファーされるため、診断サーバーコールバック中のメインスレッドブロッキングなし

関連Issue

#126324(このPRが分割元となったプルリクエスト)

その他

  • このPRはより小規模なコードレビュー向けに大きな変更から分割されたもの
  • CPU サンプリング計測とユニットテストは別途PR予定
  • Browser環境でのシングルスレッド制約により、スレッド作成

#128734 Add SYSTEM_CORELIB_DIRECTORY host property for explicit CoreLib location

  • 作成者: @elinor-fung
  • 作成日時: 2026年05月28日 23:22:14(UTC)
  • マージ日時: 2026年06月03日 19:14:51(UTC)
  • ラベル: area-Host

概要

SYSTEM_CORELIB_DIRECTORYという新しいホスト向けランタイムプロパティを追加しました。このプロパティにより、ホストはSystem.Private.CoreLib.dllの明示的な配置ディレクトリをランタイムに指定できます。PR #128278でTPA走査フォールバックが削除されたことで、iOSなどのモバイルプラットフォームでcoreclrとSystem.Private.CoreLib.dllが同じ場所に配置されていないシナリオが破損したため、この明示的で オプトインの契約を提供することで解決します。

変更内容

  • host_runtime_contract.h: 新しいSYSTEM_CORELIB_DIRECTORYホストプロパティを定義
  • assemblybindercommon.cpp: ホスト提供のCoreLibディレクトリを使用してシステムアセンブリバインディングロジックを更新。プロパティが設定されている場合、指定ディレクトリからのロードに失敗するとスタートアップが失敗し、単一ファイルバンドル抽出フォールバックはスキップ
  • corerun.cpp: -p/--propertyパラメータをホストランタイムコントラクトコールバック経由で公開
  • SystemCoreLibDirectory.csproj/cs: テストプロジェクトを追加し、ホストプロパティの検証とCoreLibコピープリコマンドを実装
  • host-runtime-information.md: 新しいランタイムプロパティのドキュメント追加

パフォーマンスへの影響

影響なし

関連Issue

#128278で削除されたTPA走査フォールバックによって破損したシナリオを解決

その他

  • プロパティは権威的なオーバーライドとして扱われます。設定されている場合、フォールバック検索は実行されません。空の値は設定されていないものとして扱われます
  • ホスト提供のアセンブリプローブ拡張機能(バンドルプローブ、外部アセンブリプローブ)は最初に実行され、オンディスク検索とバンドル抽出フォールバックのみがこのプロパティに置き換わります
  • GitHub Copilot支援で作成されました

#128706 Fix async continuation hijacking for x86 NativeAOT

概要

x86 NativeAOT環境におけるasync継続のhijacking時のGC参照報告の問題を修正。async関数をhijackする際、ECXレジスタの保存・復元は実装されていましたが、そのレジスタがGC参照を含むかどうかを判定するGC情報報告が欠落していました。x86では他プラットフォームと異なり、GC情報をコールサイトで報告する必要があるため、この修正により適切なGC root報告が可能になります。

変更内容

  • GC情報メタデータ拡張: x86のGC情報エンコード/デコードにasyncフラグを追加(gcinfotypes.h, gcdecoder.cpp)
  • JIT側の対応: JITが生成するGC情報にx86向けのasync状態メタデータを含める(gcencode.cpp)
  • NativeAOT Runtime側の対応:
    • 復号化されたasyncフラグをx86 unwind headerに反映(gc_unwind_x86.inl)
    • StackFrameIteratorでhijackedされたasync継続の位置を追跡(StackFrameIterator.cpp/h)
    • thread.cpp内のroot scanning時にhijackedされたasync継続を報告
  • CoreCLR側の対応: code-manager経由でasync hijack情報を利用(eetwain.cpp, threadsuspend.cpp)
  • Ready-to-Run形式対応: x86用GC情報復号化ツールを更新(InfoHdr.cs、ReadyToRunMethod.cs)
  • Transition Frameフラグ追加: x86版にECX-is-GC-refフラグを追加(rhbinder.h)

パフォーマンスへの影響

影響なし(バグ修正で既存コードの機能性向上)

関連Issue

#128624 #127900 前提PR: #123084

その他

本修正はx86プラットフォーム固有の問題。他プラットフォーム(x64など)ではコールサイトのreturn address instructionでGC情報が自然に報告されるため、このような特別な処理は不要。


#128651 [Android] Handle X509ChainContext creation failures

概要

AndroidでX.509チェーン構築時にX509ChainContextの初期化失敗が起因するネイティブアボート問題を修正します。実装エラーにより、管理コードが無効なX509ChainContext*をネイティブメソッドに渡しプロセス終了していましたが、本修正により初期化失敗時に管理側でCryptographicExceptionをスローしフェイルセーフになります。

変更内容

  • pal_x509chain.c: ネイティブX509ChainContext作成時のJNI例外チェックを強化し、errorListのpre-creation処理を変更。グローバル参照作成失敗時に部分的なコンテキストを破棄するようにしました。
  • ChainPal.Android.cs: 管理側で返されたチェーンコンテキストハンドルを即座に検証し、無効な場合(null含む)にCryptographicExceptionをスローするようにしました。
  • Interop.X509Chain.cs: ネイティブ相互運用ラッパーにコンテキスト検証ロジックを追加。
  • Strings.resx: 管理側例外用のローカライズされたエラーメッセージリソースを追加。

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • 回帰テストは含まれていません。理由として、信頼できるエラー発生条件はAndroidプラットフォーム/プロバイダー状態に依存しているため、テストフック追加は脆弱で代表性を持たないと判断されました。
  • 本修正はプロセス終了(ネイティブアボート)を防止し、適切な管理例外での失敗処理に改めるセキュリティと信頼性の向上です。

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

概要

dotnet/arcadeリポジトリの依存パッケージを更新するPull Request。 ビルドツール、SDKタスク、テストユーティリティなど、複数のアーケード関連パッケージが一括で新しいベータ版に更新されました。

変更内容

  • eng/Version.Details.xml: Microsoft.DotNet.Arcade.Sdkを含む19個のパッケージを9.0.0-beta.26261.1から9.0.0-beta.26301.4へ更新
  • eng/Version.Details.xml: Microsoft.DotNet.XUnitAssertおよびMicrosoft.DotNet.XUnitConsoleRunnerを2.9.0-beta.26261.1から2.9.0-beta.26301.4へ更新
  • eng/Versions.props: バージョン定義ファイルの更新
  • global.json: グローバル設定ファイルの更新

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • このPRは自動依存性更新(dotnet-maestro[bot]による)
  • ビルド対象: dotnet/arcadeの2026年6月1日ビルド
  • 影響範囲は内部ビルドシステムとテストユーティリティ

#128558 Improve exception message when processing long SSE line

  • 作成者: @mrek-msft
  • 作成日時: 2026年05月25日 14:18:45(UTC)
  • マージ日時: 2026年06月03日 09:12:42(UTC)
  • ラベル: area-System.Net

概要

Server-Sent Events (SSE) パーサーで、改行のない極端に長い行を処理する際の無制限バッファ増長を防ぐため、64 MiBの最大行長制限を導入しました。この制限を超えた場合、専用の例外メッセージを含むInvalidDataExceptionをスローするようになります。

変更内容

  • SseParser_1.cs: MaxLineLength定数(64 MiB)を追加し、行バッファ成長時にこの制限を超える場合にInvalidDataExceptionをスロー
  • Strings.resx: 新しい例外メッセージ用のInvalidDataException_LineExceededMaxLengthリソース文字列を追加
  • SseParserTests.cs: 最大行長制限の超過時の動作を検証するテストケースを追加(81行)

パフォーマンスへの影響

メモリ使用量が制限されることで、悪意のある入力やパーサーの不具合による無制限のメモリ消費を防止します。正常な運用下では機能に影響はありません。

関連Issue

#128558

その他

この変更は内部実装の改善で、公開APIに変更はありません。SSEパーサーの堅牢性とセキュリティが向上します。


#128546 [main] Update dependencies from dnceng/internal/dotnet-optimization

概要

dotnet-optimization リポジトリからの依存関係を更新するPull Requestです。MIBC(Machine Intelligence Based Compiler)ランタイムファイルとPGO(Profile Guided Optimization)CoreCLRコンポーネントを複数のプラットフォーム(Linux ARM64/x64、Windows NT ARM64/x64/x86)向けに更新しています。バージョンは 1.0.0-prerelease.26180.1 から 1.0.0-prerelease.26276.2 に更新されました。

変更内容

  • eng/Version.Details.props: 10行追加、6行削除(計16行)
  • eng/Version.Details.xml: 12行追加、12行削除(計24行)

更新対象:

  • optimization.linux-arm64.MIBC.Runtime
  • optimization.linux-x64.MIBC.Runtime
  • optimization.windows_nt-arm64.MIBC.Runtime
  • optimization.windows_nt-x64.MIBC.Runtime
  • optimization.windows_nt-x86.MIBC.Runtime
  • optimization.PGO.CoreCLR

パフォーマンスへの影響

MIBC およびPGOの更新のため、ランタイムコンパイルおよび実行時パフォーマンスの最適化に関連する可能性がありますが、具体的なベンチマーク結果は提供されていません。

関連Issue

なし

その他

このPull Requestは自動依存関係更新ツール(dotnet-maestro)によって作成されました。Maestroの購読ID: d3a5b203-1393-4534-5b62-08d8d8feb47e


#128481 Disable Validate.csproj build under Mono FullAOT to fix CS0246

  • 作成者: @Copilot
  • 作成日時: 2026年05月22日 13:34:21(UTC)
  • マージ日時: 2026年06月03日 08:09:53(UTC)
  • ラベル: area-Codegen-AOT-mono

概要

AllSubsets_Mono_MiniFullAot_RuntimeTestsビルドレグの破損を修正するPRです。InvalidCSharp.ilprojがMonoAOT非互換でビルドから除外される一方、依存するValidate.csprojが同様にゲートされていなかったため、CS0246エラーが発生していました。Validate.csprojに<MonoAotIncompatible>true</MonoAotIncompatible>を追加し、ビルド時のゲートと既存のランタイム時[ActiveIssue]ゲートを整合させます。

変更内容

  • src/tests/Loader/classloader/generics/ByRefLike/Validate.csproj: <MonoAotIncompatible>true</MonoAotIncompatible>を追加(#90427参照)。同一ディレクトリの兄弟プロジェクトValidateNegative.csprojと同様のゲート方式を適用。

パフォーマンスへの影響

影響なし。Validate.csのテストメソッドは既に[ActiveIssue("...90427", ..., IsMonoMINIFULLAOT)]とIsMonoFULLAOTでゲートされており、Mono FullAOT環境では実行時にスキップされていたため、FullAOTテストカバレッジの喪失はありません。

関連Issue

#90427

その他

なし


#128423 Use Virtual IPs in R2R format

概要

WASMのReadyToRun形式をメモリアドレスベースからバーチャルIP(仮想命令ポインタ)ベースのアドレッシングに変更し、それに対応するR2RDumpの更新を行います。RUNTIME_FUNCTION テーブルのBeginAddressフィールドがバーチャルIPとIsFuncletフラグをエンコードし、テーブル末尾に最小関数テーブルインデックスを追加する形式変更が含まれます。

変更内容

ランタイム層(VM):

  • ExecutionManager/ReadyToRunInfoにWASMバーチャルIP範囲および関数テーブルインデックス範囲の登録機構を追加
  • WASM RUNTIME_FUNCTIONフォーマット変更:BeginAddressが仮想IP(bit 30:0)とIsFuncletフラグ(bit 31)をエンコード、テーブル末尾に0xFFFFFFFFセンチネル+最小関数テーブルインデックスを付加
  • UnwindInfoフォーマット拡張:フレームサイズ(ULEB128)と仮想IPカウント/2(ULEB128)をエンコード
  • WASM遷移フレーム処理の実装(仮想IPベースのSP/戻り値アドレスロジック)

コンパイラ・ツール層:

  • RuntimeFunctionsTableNodeでWASM向けに仮想IPインデックスとfuncletビットをエンコード、セントネルとmin関数テーブルインデックスを出力
  • ExceptionInfoLookupTableNodeでWASM向けに仮想IP値を使用
  • WebcilImageReaderでWasm32マシンタイプを認識
  • UnwindInfo.cs(新規)でWASM unwindブロブパーサをツール側に追加

R2RDump:

  • WASMマシンタイプ認識と表示ロジック
  • WASM RUNTIME_FUNCTION解析時にbit 31(funcletフラグ)をマスク
  • 仮想IP→テーブルインデックス→グローバル関数インデックス→コードセクションインデックスの変換ロジック実装
  • アクティブ(flags0)およびパッシブ(flags1) WASMエレメントセグメント対応

ドキュメント:

  • readytorun-format.mdにWASM固有のRUNTIME_FUNCTION/UnwindInfo/セントネルエントリ仕様を追加

パフォーマンスへの影響

影響なし(形式変更であり、パフォーマンス関連の変更ではない)

関連Issue

なし

その他

既知の制限事項:

  • GCDecoderはWASM向けにまだ正しく対応していない(別途PRで対応予定)
  • DwarfHelper.csのReadSLEB128にバウンズチェック不足の指摘あり(低信頼度)
  • DelayLoadMethodCallThunksセクションはWASMでは出力されない

#128354 Implement GetIlCodeAndSig DacDbi API in cDAC

  • 作成者: @Copilot
  • 作成日時: 2026年05月19日 02:11:03(UTC)
  • マージ日時: 2026年06月03日 04:50:07(UTC)
  • ラベル: area-Diagnostics-cdac

概要

ネイティブDAC から管理型cDAC へ GetILCodeAndSig DacDbi エントリーポイントを移植します。このAPIは、メソッドのILコード(アドレス/サイズ)とそのローカル変数シグネチャトークンを返します。これまでのE_NOTIMPLフォールバックを、メタデータ/ローダーベースのIL検索とシグネチャトークン抽出で置き換えます。

変更内容

  • HeaderReaderHelpers.cs: ILヘッダサイズとコードサイズをデコードするヘルパー関数を追加
  • DacDbiImpl.cs: cDAC版GetILCodeAndSigの実装を追加(メタデータ検証、MethodDesc マッピング、ILヘッダ解析を含む)
  • EcmaMetadataUtils.cs: mdtSignatureメタデータトークン型を追加
  • CorDbHResults.cs: CORDBG_E_FUNCTION_NOT_IL HRESULT定数を追加

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

実装上の懸念事項: Copilotレビューから以下の潜在的問題が指摘されています:

  1. ローカル変数シグネチャトークン初期化: pLocalSigTokenがmdtSignature型マスク(0x11000000)で初期化されています。ネイティブDAC はmdSignatureNil(0)で初期化し、ローカル変数が存在する場合のみ設定するため、ローカルのないメソッドでは無効なトークンが返される可能性があります。

  2. トークン型検証: functionTokenがMethodDefトークンであることを検証していません。他のDacDbiImplメソッドは明示的にトークン型を検証しており、この不一致はネイティブDAC との動作乖離につながる可能性があります。

  3. テストカバレッジ不足: 成功パス、非IL メソッド、ローカルなしメソッドなど、新しい実装の動作を検証するユニット/統合テストがありません。


#128180 Add AssociatedSourceType for conditional unmanaged exports

  • 作成者: @Copilot
  • 作成日時: 2026年05月14日 05:19:12(UTC)
  • マージ日時: 2026年06月03日 10:40:26(UTC)
  • ラベル: area-NativeAOT-coreclr

概要

UnmanagedCallersOnlyAttributeに新しい公開プロパティAssociatedSourceTypeを追加し、NativeAOTにおいてアンマネージドエクスポートを条件付きで生成できるようにします。これにより、関連ソース型がトリミング時に存続する場合のみネイティブエントリーポイントが保持・エクスポートされます。

[UnmanagedCallersOnly(
    EntryPoint = "MyObjectProxy_MyMethod",
    AssociatedSourceType = typeof(MyObject))]
static void MyMethod(IntPtr handle) { }

変更内容

  • 公開API:CoreLib および ref assembly にUnmanagedCallersOnlyAttribute.AssociatedSourceTypeを追加(Runtime.Base属性コピーは変更なし)
  • NativeAOT rooting:アンマネージドエントリーポイントのrooting をアセンブリごとのUnmanagedEntryPointsNodeに移行し、通常のエクスポートは無条件でroot、関連エクスポートはランタイム構成可能なAssociatedSourceTypeに基づいて条件付きでroot
  • 共有ロジック:ランタイム構成可能なトリミング対象依存関係ロジックをRuntimeConstructableTypeDependenciesに抽出し、アンマネージドエントリーポイントrooting と外部型マップ処理の両方で再利用
  • エクスポート生成:生成されたエクスポートファイルをコンパイル済みメソッドボディに限定し、トリミングされた関連エクスポートがネイティブリンカに渡されないようにフィルター
  • テスト:無条件エクスポート、保持された関連エクスポート、トリミングされた関連エクスポート、動的ロード可能なジェネリック関連ソース型など、複数のトリミング動作に関するカバレッジを追加

パフォーマンスへの影響

影響なし

関連Issue

#127634

その他

  • 実装はNativeAOTコンパイラの内部処理に限定され、破壊的変更なし
  • ジェネリック型や配列型を含む動的構成可能なソース型にも対応
  • トリミング動作の煙テストで複数のシナリオをカバー

目次