Pull Request on 2026年08月03日

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

注意点

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



#131763 Make custom IData initializers lazy

概要

cDAC(Common Data Access Component)の IData カスタム初期化方式を、単一の eager OnInit フックから名前付きの遅延初期化メソッド([CustomInit] 属性経由)へリファクタリングしました。プロパティへのアクセス時にのみ初期化ロジックが実行され、結果がメモ化されます。これにより、不要な初期化処理を回避し、パフォーマンスを改善します。

// 従来の方式(削除)
public void OnInit() { /* 全プロパティの初期化ロジック */ }

// 新方式(追加)
[CustomInit(nameof(InitializeProperty))]
public required string Property { get; init; }

private string InitializeProperty() { /* 当該プロパティのみの初期化ロジック */ }

変更内容

コア機能変更:

  • CdacAttributes.cs: 新しい [CustomInit] 属性を公開APIとして追加
  • Parser.cs, Model.cs, Emitter.cs: ジェネレータが [CustomInit] を解析し、遅延メモ化ゲッターを生成するよう対応
  • UsageWalker.cs, CdacAttributeMatcher.cs: 使用分析ツール(CdacUsageGraph)が初期化メソッドを依存関係として認識し、メソッド本体も走査

IData実装の変換(20+ ファイル):

  • 既存の OnInit 実装を名前付きメソッドに分割(Thread, UnwindInfo, TypeDesc, SyncBlock, RCW, Bucket等)
  • オプションフィールドの遅延読み取り対応
  • TableRW にディスクリプタのみの型を追加(メタデータテーブルインデックス時のサイズ計算用)

ドキュメント・テスト:

  • IData.md: 仕様書を更新([CustomInit] による遅延初期化を説明)
  • データコントラクト設計ドキュメント再生成(プロパティレベルの遅延読み取りを反映)
  • ジェネレータテスト: 46パス、使用分析テスト: 86パス、統合テスト: 3207パス(16スキップ)

パフォーマンスへの影響

影響なし(理論的な改善はあるが、定量的ベンチマークは提供されていない)

改善ポイント:

  • 実際に使用されるプロパティのみ初期化ロジックが実行される
  • 不要な計算(ポインタ追跡、バッファ読み込み、レジスタマップ構築等)の遅延実行
  • メモ化により、同じプロパティへの重複アクセスで計算を回避

関連Issue

#131763

その他

  • 破壊的変更なし: 既存の OnInit メソッドは段階的に置き換え。新属性は opt-in。
  • 内部実装の変更: cDAC関連の内部コンポーネント(Contracts/Data型、ジェネレータ)のみに影響。公開APIは [CustomInit] 属性追加のみ。
  • 依存関係追跡の強化: メソッドレベルの [DataDescriptorDependency] と `[UsesDataDescriptorTypeSize]

#131761 [cDAC] Fix bug in exception contract

  • 作成者: @rcj1
  • 作成日時: 2026年08月03日 18:09:49(UTC)
  • マージ日時: 2026年08月03日 22:22:09(UTC)
  • ラベル: area-Diagnostics-cdac

概要

cDAC(Compact Data Access Contract)のExceptionコントラクトにおいて、x64ターゲットでのスタックフレーム列挙時に初フレームのIP(命令ポインタ)補正バグを修正します。ランタイムが既にIPを調整していない場合、初フレームのIPをx64のみで1減じる処理を追加しました。内部診断テスト中に発見されたバグ修正です。

変更内容

  • Exception_1.cs: StackTraceElementFlagsでゲートされた条件付きの初フレームIP補正ロジックを実装。x64かつSTEF_IP_ADJUSTEDおよびSTEF_CONTINUATIONフラグが未設定の場合、IPを1デクリメント
  • ExceptionTests.cs: テストにRuntimeInfoモック機能を追加し、x64補正動作に対応した期待値を更新
  • clrex.h: cDAC依存性のあるStackTraceElementFlags値に注釈を追加
  • Exception.md: コントラクト仕様書を更新し、新しい依存関係・定数・IP調整アルゴリズムを記述

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

潜在的な懸念事項(Copilotの指摘):

  • IP値が0の非調整フレームに対してデクリメント実行時、ulong.MaxValueへのアンダーフローが発生する可能性あり。debugdebugger.cppではランタイムが一部フレームでIP=0を生成する場合があると記載されているため、デクリメント前のガード処理検討が推奨されます
  • 単体テストがSTEF_IP_ADJUSTEDおよびSTEF_CONTINUATIONフラグ設定時のスキップ動作をカバーしていない可能性があります

#131731 JIT: Treat the indicator variable as transition-preserved

概要

OSR(On-Stack Replacement)およびEnC(Edit and Continue)関数における非同期の「resumed?」インジケータローカル変数の処理を改善しました。インジケータを他の遷移保持状態と同様に扱い、安定したスタックスロットを保持領域に割り当て、OSRパッチポイント情報を通じてティア0フレームオフセットを通信するようにしました。これにより、OSRでのインジケータ再計算の必要性が排除され、EnCでの状態保持がより一貫性を持つようになります。

変更内容

  • async.cpp: lvaResumedIndicatorをポインタサイズ(TYP_I_IMPL)として作成し、OSR固有の継続引数からの再計算を削除
  • lclvars.cpp: インジケータローカルを非同期保持領域の一部としてスタック割り当てし、以降のオフセット割り当てパスから除外
  • compiler.h/cpp: lvaResumedIndicatorを他の非同期保持ローカルと並行させ、OSR用のパッチポイント情報経由でティア0フレームオフセットを記録・消費
  • patchpointinfo.h: 新しいresumed-indicatorオフセットフィールドとアクセッサを追加
  • codegenxarch.cpp, codegenarmarch.cpp, codegenarm64.cpp, codegenarm.cpp: EnC保持領域サイズの検証アサーション内でindicatorアカウンティングを追加
  • jiteeversionguid.h: バージョンGUID更新

パフォーマンスへの影響

影響なし。これはコード生成および状態管理の改善で、ランタイム性能特性には変化がありません。

関連Issue

なし

その他

  • Copilotレビューで1件の指摘あり:async.cpp:380において、lvaResumedIndicatorがTYP_I_IMPL型であるため、TYP_INTでのローカルノード作成はDEBUGビルドでアサート失敗につながる可能性があり、TYP_I_IMPLとして読み込んでからTYP_INTにキャストすべき。
  • コメント精度の問題:lclvars.cpp:5864のコメント「8バイト割り当て」はプラットフォーム非依存な記述(TARGET_POINTER_SIZEを明記)に改善推奨。

#131727 Configure Server GC for NativeAOT regression test

  • 作成者: @kkokosa
  • 作成日時: 2026年08月03日 08:18:22(UTC)
  • マージ日時: 2026年08月03日 21:31:03(UTC)
  • ラベル: area-GC-coreclr

概要

NativeAOT環境でServer GC回帰テストが正しく実行されるよう、プロジェクト設定を修正しました。NativeAOTではGC実装がリンク時に選択されるため、ServerGarbageCollectionプロパティを設定する必要があります。

変更内容

  • GetTotalAllocatedBytesServerGC.csproj: ServerGarbageCollectionをtrueに設定し、NativeAOT環境でServer GCをリンクされるよう構成を変更(+2行)

パフォーマンスへの影響

影響なし

関連Issue

#131669

その他

  • PR #131069で追加されたServer GC回帰テストの設定修正
  • NativeAOTではランタイム環境変数でのGC選択ができないため、コンパイル時設定が必要(内部実装の修正)
  • GitHub Copilot assist機能を使用して作成されたPR

#131724 [cDAC] Fix bug in GC contract

  • 作成者: @rcj1
  • 作成日時: 2026年08月03日 04:31:47(UTC)
  • マージ日時: 2026年08月03日 07:11:16(UTC)
  • ラベル: area-Diagnostics-cdac

概要

GC cDAC契約のフラッシュ動作に関するバグを修正するPRです。GC_1.FlushメソッドのシグネチャをIContract.Flush(FlushScope)インターフェースに準拠させることで、Target.Flush(...)呼び出し時にGC契約キャッシュが正しくクリアされるようにしました。内部診断テスト中に発見されました。

変更内容

  • src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Contracts/Contracts/GC/GC_1.cs
    • GC_1.Flush()のシグネチャをFlush(FlushScope scope)に変更
    • キャッシュされたアロケーションコンテキストデータ(_allocContexts)が標準的なフラッシュパスを通じてクリアされるよう修正

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • cDAC(Common Data Access Contract)の診断機構に関連する変更
  • 契約レジストリドリブンのフラッシュ処理の一部として、GC契約のキャッシュ無効化がより確実に実装される

#131708 [release/10.0] Fix GC hole when method return is hijacked for GC suspension

概要

.NET 10でのリグレッションであるGC hole(未追跡オブジェクト参照)を修正します。非x86アーキテクチャで、メソッド戻り値がGC中断用にhijackされる際、呼び出し元がCallDescrWorkerInternal(手書きアセンブリで GC情報なし)である場合に、戻り値レジスタのobjectrefが追跡・更新されない問題を解決します。

変更内容

  • src/coreclr/vm/threadsuspend.cpp: Thread::HijackThread関数にガード条件を追加。非x86環境でhijack対象アドレスがCallDescrWorkerInternalの場合、hijackを実行しない早期終了を実装(+15行)。

パフォーマンスへの影響

影響なし。本修正はhijackのスキップ(最適化の除外)のため、GC中断メカニズムの別経路が使用されます。スレッドはマネージドコードから外れ、preemptiveモード遷移で中断が完了するため、パフォーマンス低下やハング懸念はありません。

関連Issue

#131267
#129714(main での本修正)
#110799(リグレッション原因)

その他

重要度: 高。実機での間欠的SIGSEGV、ヒープ破損、アサーション失敗が報告されており、GC負荷下でのLINQ Expression/Moqコンパイル時に現象化します。

対象:

  • Call_RetOBJECTREF呼び出しサイト(release/10.0で33箇所)
  • リフレクション呼び出し経路(MethodBaseInvoker.InterpretedInvoke_Method → CallDescrWorkerInternal)

テスト結果:

  • パッチ未適用build: 8実行中6回失敗(Object::ValidateInner/GetMethodTableアサーション)
  • パッチ適用build: 8実行中0回失敗、約79kイテレーション正常動作
  • 10.0.9、11.0.0-preview.6で同症状確認、mainでは既に修正済み

リスク: 低。15行限定変更、非x86のみガード。既にmainで約4ヶ月運用実績あり。


#131705 [wasm] Bump chrome for testing - linux: 151.0.7922.71, windows: 151.0.7922.72, mac: 151.0.7922.72

概要

WebAssembly(WASM)テストの実行に使用するChromiumバージョンを151.0.7922系に更新するプロパティファイルの変更です。プラットフォーム別に異なるバージョンが指定されています。

変更内容

  • eng/testing/BrowserVersions.props: Chromiumテスト用バージョンプロパティを更新
    • Linux: 151.0.7922.71
    • Windows: 151.0.7922.72
    • macOS: 151.0.7922.72

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • GitHub Actionsによる自動更新PRです
  • テスト環境のブラウザ依存性更新のみで、ランタイムやコンパイラロジックへの影響はありません

#131684 Emit a resolvable type name for Runtime Async continuations in GC heap dumps

概要

Runtime Async continuationの型情報がGCヒープダンプで解決不可能になる問題を修正します。メタデータレスの継続型はTypeHandle::UpCastTypeIfNeeded()を使用してベース型(System.Runtime.CompilerServices.Continuation)として出力することで、dotnet-gcdumpなどのEventPipeリーダーが正しい型名を表示できるようにします。

検証結果:

  • 修正前: 128個の継続オブジェクトがType(0x02000000)と表示
  • 修正後: System.Runtime.CompilerServices.Continuationとして正しく表示

変更内容

  • src/coreclr/vm/eventtrace_bulktype.cpp: GCHeapDump BulkTypeイベントの出力時に、メタデータレスRuntimeAsync継続型のModuleID、TypeNameID、型名をUpCastTypeIfNeeded()を使用してベース型として出力。オブジェクトごとのTypeIDは実際の派生MethodTableとして保持。
  • src/tests/tracing/eventpipe/gcdump_runtimeasync/gcdump_runtimeasync.cs: サスペンド状態のRuntimeAsync継続を生成し、GCヒープスナップショットをキャプチャしてBulkType型名が空でなく継続型が表示されることを検証する新規テスト。
  • src/tests/tracing/eventpipe/gcdump_runtimeasync/gcdump_runtimeasync.csproj: runtime-async=onフィーチャーフラグとDOTNET_RuntimeAsync=1環境変数を設定するテストプロジェクト。

パフォーマンスへの影響

影響なし

関連Issue

#120800

その他

Checked buildsにおいてMethodTable::GetModule()のIsContinuationWithoutMetadata()アサーションを回避します。


#131663 Support enum values in substitution XML

概要

ILLink(トリマー)とNativeAOT(ILCompiler)間でのEnum値を含む置換XML定義の一貫性を向上させるPRです。ILLinkで数値文字列をEnum基本型として解析可能にし、NativeAOTではint型基本のEnumにメンバー名による置換を対応させます。両方でテストカバレッジを追加しています。

変更内容

  • ProcessLinkerXmlBase.cs: ILLinkのEnum置換パーサを拡張し、数値文字列をEnum基本型として解析するフォールバック処理を追加(Int32基本型に限定)
  • BodySubstitutionParser.cs: NativeAOTのint基本型Enumにメンバー名解析機能を追加し、メンバーの定数値に解決
  • EnumSubstitutions.xml: フィールドとスタブメソッド向けのEnum置換テストケース(メンバー名と数値値に対応)
  • EnumSubstitutions.cs: 置換されたEnumのスタブメソッドIL検証を含むテストケース追加
  • TestSuites.cs: NativeAOT置換テストスイートで新規テストケースを有効化
  • ILTrimExpectedFailures.txt: 予期される失敗に1エントリ追加

パフォーマンスへの影響

影響なし

関連Issue

#131601

その他

  • 既知の制限事項: Copilotの指摘により、ProcessLinkerXmlBase.csの数値解析フォールバックはInt32型のみに限定されています。byte/short/long/uint等の基本型を持つEnumでは数値置換が機能しない可能性があります。
  • テスト検証の未解決点: EnumSubstitutions.csの期待ILシーケンスについて、UnreachableBlocksOptimizerによる置換フィールド読み込みの最適化(ldsfldからldc.i4への書き換え)への対応が必要との指摘があります。
  • GitHub Copilotの支援を受けて作成されたPRです。

#131648 Fix comments for compression area

概要

圧縮関連ライブラリおよびTar形式ライブラリ内のコメント記述を修正するPRです。コードロジックの変更ではなく、ドキュメンテーション品質の向上を目的とした変更です。

変更内容

  • System.Formats.Tar: GnuSparseStream.csでコメント表現を修正(4行追加、5行削除)
  • System.Formats.Tar: TarHeader.Write.csでコメント修正(1行追加、1行削除)
  • System.IO.Compression.Brotli: BrotliEncoderOperation.csでコメント修正(1行追加、1行削除)
  • System.IO.Compression: ZipBlocks.Async.csでコメント修正(1行追加、1行削除)
  • System.IO.Compression: ZipBlocks.csでコメント修正(1行追加、1行削除)

パフォーマンスへの影響

影響なし(コメント修正のみ)

関連Issue

#131648

その他

なし


#131642 Remove calli target tagging from CoreCLR interop stubs

  • 作成者: @Copilot
  • 作成日時: 2026年07月31日 12:56:37(UTC)
  • マージ日時: 2026年08月03日 20:54:10(UTC)
  • ラベル: area-VM-coreclr

概要

CoreCLRのinteropスタブで使用されていたcalliターゲットのビットタグ付けエンコーディング((target << 1) | 1)を削除しました。MethodDescとアンマネージドターゲットハンドルが、ビットタグに依存せず実際のストレージセマンティクスに従うように変更されました。

変更内容

  • アセンブリスタブ(amd64, arm64, loongarch64, riscv64): calliターゲットタグ付けロジックを削除
  • JIT層(compiler.h, lower.cpp): ターゲットエンコーディング処理の削除と簡潔化
  • ランタイム(dllimport.cpp, stubhelpers.cpp): マーシャリング要求の判定ロジックをビットタグに依存しない方式に変更
  • フレーム構造体(frames.h): TransitionFrameと関連構造体の定義を変更(20行追加/21行削除)
  • CDAC(Contracts for Debugger ABI Compatibility): スタックウォークのフレームハンドリング実装を更新

パフォーマンスへの影響

影響なし

関連Issue

#131606

その他

なし


#131637 [android] Skip internal arm device test sends

概要

内部CI(Continuous Integration)パイプラインでAndroid arm/arm64のテストペイロードをHelixに送信しないようにする変更です。ビルド自体は引き続き実行されますが、内部環境にはAndroidデバイスキューがなく、x86_64エミュレータキューでは実行できないため、テスト送信をスキップします。公開CI環境とAndroid x64エミュレータテストは影響を受けません。

変更内容

  • eng/pipelines/runtime.yml: Helix "Send to Helix"条件を追加し、内部パイプラインではAndroid x64アーキテクチャのみテストペイロードを送信するよう制限。インラインコメントで条件の理由を文書化。公開パイプラインはすべてのAndroidアーキテクチャに対してテストペイロード送信を継続。

パフォーマンスへの影響

影響なし

関連Issue

#130852

その他

  • 検証済み: 内部ビルド3035781でandroid-arm/arm64は正常にビルドされ、Helixへの送信がスキップ。android-x64はビルドとHelix送信が成功。
  • 検証済み: 公開ビルド1534565ですべてのAndroidアーキテクチャでビルドとHelix送信が成功。

#131587 Fix interpreter TraceCall GC mode

概要

インタープリタのReverse P/Invoke(UnmanagedCallersOnly)エントリーパスで、デバッガーのTraceCallフックを協調的GCスコープ内で実行するように修正しました。これにより、JIT Reverse P/Invokeヘルパーの順序と一致させ、Checked runtimeで契約違反エラーが発生する問題を解決しています。

変更内容

  • src/coreclr/vm/prestub.cpp:
    • DebuggerTraceCallブロックをGCX_MAYBE_COOP(...)が確立された後に移動(MODE_COOPERATIVEな実行コンテキストに統一)
    • 非ネストなコンテキストでの実行となるため、unmanagedCallersOnlyガードを明示的に追加
    • プロファイラーコールバックはプリエンプティブモード内に留める(MODE_PREEMPTIVEな契約を満たすため)

パフォーマンスへの影響

影響なし

関連Issue

#122421(修正のきっかけとなったPR)

その他

このバグは、マネージドデバッガーがTraceCallを有効にするとChecked runtime環境で契約失敗が発生していました。修正により、デバッガーフックがプリエンプティブモードから協調的GCモードに正しく遷移するようになります。


#131583 Mark InteropServices.ObjectiveC APIs as available on all Apple platforms.

概要

.NET 11以降で全Apple プラットフォームでサポートされるようになったSystem.Runtime.InteropServices.ObjectiveC APIに対し、プラットフォーム属性を更新してサポート範囲を反映させます。macOSに限定されていたObjectiveCMarshalとObjectiveCTrackedTypeAttributeに、iOS、tvOS、Mac Catalyst向けの[SupportedOSPlatform]属性を追加します。

変更内容

  • ObjectiveCTrackedTypeAttribute.cs: iOS、tvOS、Mac Catalyst対応を示す[SupportedOSPlatform]属性を追加
  • ObjectiveCMarshal.cs: 同上の属性を追加
  • ObjectiveCMarshal.PlatformNotSupported.cs: 同上の属性を追加
  • System.Runtime.InteropServices.cs (参照アセンブリ): API契約を更新して全Apple プラットフォームのサポートを明示

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

これは公開API(参照アセンブリレベル)の属性更新であり、実装やランタイム動作への変更を伴いません。開発者向けのツール(IDE、アナライザー)が、これらのAPIが全Apple プラットフォームで利用可能であることを正しく認識できるようになります。


#131575 Fix NetworkInterface list on Windows

  • 作成者: @wfurt
  • 作成日時: 2026年07月30日 08:45:36(UTC)
  • マージ日時: 2026年08月03日 13:06:30(UTC)
  • ラベル: area-System.Net

概要

Windows上でのネットワークインターフェース列挙の動作を調整しました。.NET 9で導入されたGAA_FLAG_INCLUDE_ALL_INTERFACESフラグにより、トンネリングやVPN用の隠されたインターフェースが大量に列挙されるようになり、アプリケーションの動作に悪影響(特にGetIsNetworkAvailableの破損)を引き起こしていました。

本修正では、従来の「有用な」インターフェースリスト(.NET 8相当)を第1パスで取得し、その後で追加のNDISインターフェースをOperationalStatus.Unknownとして追加することで、互換性を維持しつつ問題を解決します。

変更内容

  • src/libraries/System.Net.NetworkInformation/src/System/Net/NetworkInformation/SystemNetworkInterface.cs
    • GetLegacyAdapterGuids()メソッドを新規追加:従来のGetAdaptersAddresses呼び出し(IncludeAllInterfacesフラグなし)でアダプターGUIDを収集
    • 第2パスで取得したアダプターのうち、従来のセットに含まれないものをOperationalStatus.Unknownにマーク
    • SystemNetworkInterface構築時にレガシーGUIDセットを使用してOperationalStatusの判定を制御

パフォーマンスへの影響

GetAdaptersAddressesを2度呼び出すため、若干のパフォーマンスオーバーヘッドが発生する可能性があります。ただし具体的なベンチマーク数値は提供されていません。

関連Issue

その他

  • 本修正によりGetIsNetworkAvailableが即座に修正されます(OperationalStatus.Upのインターフェースのみを確認するため)
  • ユーザーはOperationalStatus.Unknownをフィルタリングすることで、.NET 8相当のレガシーインターフェースリストを簡単に取得できます
  • disabled インターフェース表示の機能は保持されますが、ステータスが100%正確ではない点に注意が必要です

#131455 Fix configuration binder dropping collection items with null constructor parameters

概要

.NET 10で導入された回帰バグを修正します。コレクション内のポジショナルレコード(コンストラクタパラメータを持つレコード)にnull値を持つ設定をバインドしようとすると、該当エントリが無言で削除されていました。PR #116677によるnull値の取り扱い変更が根本原因で、BindParameterがnullを「バインド値がない」と誤釈するため例外が発生し、BindArrayの例外処理により削除されていました。

変更内容

  • ConfigurationBinder.cs(リフレクションベースバインダー): BindParameterのnullチェックをpropertyBindingPoint.Value is null && !propertyBindingPoint.HasNewValueに変更し、「明示的にnullがバインドされた」と「値がバインドされていない」を区別
  • CoreBindingHelpers.cs(ソースジェネレータ): AssignFromSectionValue型でパラメータがnull許容の場合、null値をthrowする代わりに単純代入を生成
  • テストコード: ポジショナルレコードのコレクションでnull値をバインドする回帰テストと対応するテスト型を追加

パフォーマンスへの影響

影響なし

関連Issue

#131269、#116677

その他

Copilotのレビューで、生成されたソースコードのベースラインテスト(DefaultConstructorParameters.generated.txt等)の更新が必要との指摘がありました。テストクラスではnull非許容型に対してnullを既定値とするパラメータに関する警告への対応が課題として記載されています。


#131340 Implement CLRDataMethodInstance APIs in cDAC

  • 作成者: @Copilot
  • 作成日時: 2026年07月24日 18:18:43(UTC)
  • マージ日時: 2026年08月03日 20:47:41(UTC)
  • ラベル: area-Diagnostics-cdac

概要

cDAC(Component Data Access Contract)を使用して CLRDataMethodInstance の GetDefinition と GetAddressRangesByILOffset APIを実装しました。メソッド定義のメタデータ解決とILオフセットから native address ranges の生成を行い、レガシー DAC との互換性を維持しています。

変更内容

  • ClrDataMethodInstance.cs: GetDefinition(メタデータトークンと定義モジュールの解決)と GetAddressRangesByILOffset(debug-info から native ranges を生成)を実装。レガシーフォールバックと DEBUG ビルドでの HRESULT 検証を保持
  • IXCLRData.cs: IL オフセットのマーカー値を表す CLRDataILOffsetMarker enum を追加(public)
  • StackWalkDumpTests.cs: メタデータ解決、address ranges マッチング、missing IL offset に対するダンプテストを追加

パフォーマンスへの影響

影響なし

関連Issue

#131340

その他

  • 公開API追加: CLRDataILOffsetMarker enum が public として追加されています。実装の詳細のみの場合は internal への変更の検討が必要です
  • 潜在的な問題(Copilot指摘):
    • GetILAddressMap で例外発生時に mapNeeded out パラメータが初期化されない可能性
    • DEBUG ビルドで フォールバック時の HRESULT 検証が不正な値で実行される可能性
    • テストでモジュール/スコープ解決の検証が不完全

#131304 Make test file watchers more resilient

概要

Microsoft.Extensions.Configurationの機能テストにおけるファイルウォッチャーの安定性を向上させるPR。特にLinux/コンテナ化/ストレス環境でのテスト失敗を減らすことを目的として、ファイル変更再読込動作を検証するテストをより堅牢にしています。

変更内容

  • ConfigurationTests.cs: ワンショットのファイル書き込み + WaitForChangeポーリングを、期待される再読込が観測されるまで各リトライでファイル書き込みを再適用する新しいWaitForReloadヘルパーメソッドに置き換え
  • 同ファイル: 相対パス変更トークンテストをTaskCompletionSourceシグナルを使用する実装に更新し、ChangeToken.OnChangeサブスクリプションのディスポーズを追加
  • 同ファイル: 複数の[ActiveIssue]属性でスキップされていたリロードテストを再度有効化し、待機ロジックをより寛容に改善
  • プロジェクトファイル・テストデータ: テストファイル構成を簡潔化

パフォーマンスへの影響

影響なし

関連Issue

#126726

その他

このPRは、Microsoft.Extensions.ConfigurationのIChangeTokenベースのファイルウォッチャー機能テストの信頼性を高めることで、CI環境でのテスト失敗頻度低減を狙った改善です。テスト実装のみの変更で、ランタイムやパブリックAPIに対する影響はありません。


#130730 [cDAC] Hide module lookup map layout details

概要

cDAC(Contracts Data Access Component)のモジュールルックアップマップアクセスをリファクタリングし、ネイティブルックアップマップレイアウトの詳細を消費者コードに公開しないようにします。ModuleLookupTablesレコードを廃止し、代わりにモジュール+種類ベースのルックアップ操作をLoaderコントラクト内に集約することで、APIの抽象化レベルを向上させます。

変更内容

  • ILoader インターフェース: ModuleLookupTablesをModuleLookupMapKindに置き換え、ルックアップマップベースアクセス、要素ルックアップ、列挙用の新しいAPIを追加
  • Loader_1 コントラクト: マップ選択、トラバーサル、フラグマスキング、メタデータトークン構築ロジックを集約し、セマンティック操作を提供
  • 消費者の移行: DacDbi、SOS、署名、コードバージョン、メタデータ、テストコンシューマー(20ファイル)をすべて新APIに対応
  • ドキュメント更新: Loader、ManagedTypeSource、CodeVersionsコントラクト仕様を新API仕様に更新

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • 検証: dotnet buildおよびユニットテスト2697パス、関連テスト579パス
  • これはGitHub Copilotの支援で生成されたPR
  • 変更は内部実装の詳細隠蔽であり、公開APIの破壊的変更ではなく、診断インフラストラクチャ(cDAC)の保守性向上が目的

#130664 Fix TransactionManager DefaultTimeout/MaximumTimeout setter race condition

概要

TransactionManager.DefaultTimeout および MaximumTimeout のセッターに競合状態が存在していた問題を修正しました。ゲッターが LazyInitializer.EnsureInitialized でロックを取得する一方、セッターが Interlocked.Exchange と平文の書き込みを使用していたため、別スレッドのゲッターが新しい値を上書きする可能性がありました。すべての処理をロック下で実行することで状態の一貫性を確保し、競合状態を排除しました。

変更内容

  • TransactionManager.cs: DefaultTimeout および MaximumTimeout の getter/setter の実装を変更。すべての読み書き操作を s_classSyncObject ロック下で実行するように統一。
  • 設定ファイル削除: .NET Framework の設定システムの遺産である以下の設定ファイルを削除
    • ConfigurationStrings.cs
    • DefaultSettingsSection.cs
    • MachineSettingsSection.cs
    • System.Transactions.Local.csproj 内の設定参照

パフォーマンスへの影響

DefaultTimeout/MaximumTimeout のプロパティアクセス時はロック取得が必要となるため、競合状態が高い環境ではわずかなオーバーヘッドが生じる可能性があります。ただし、これらのプロパティは通常、アプリケーション起動時に設定されるため、実運用への影響は最小限と考えられます。

関連Issue

#105124

その他

なし


#128776 Fix custom-attribute generic argument dataflow in the trimmer

概要

カスタム属性のジェネリック引数に対するデータフロー分析を修正し、new()制約を持つジェネリック属性がそのジェネリック引数のパラメータレスコンストラクタを確実に保持するようにしました。また、トリマーがIL2091を出力する際のNullReferenceException を防ぐため、null安全性を強化しました。

変更内容

  • MarkStep.cs: ProcessGenericArgumentDataFlowをRequiresGenericArgumentDataFlowでガード保護し、ジェネリック引数分析が必要な場合のみ実行されるようにしました
  • DiagnosticUtilities.cs / MemberReferenceExtensions.cs: GetGenericParameterDeclaringMemberDisplayNameとGetNamespaceDisplayNameにnull安全性を追加し、孤立したジェネリックパラメータ(resolveできない宣言型/メソッドを持つカスタム属性のジェネリック引数)処理時のNRE を防止
  • GenericArgumentDataFlow.cs: ILTrim.Coreでのジェネリック引数データフロー処理の最適化
  • CustomAttributeNode.cs: トークンベースの依存関係分析でカスタム属性のジェネリック引数データフロー処理を実装
  • テスト: GenericAttributesDataFlow.il(C#で表現不可能なシナリオ)を追加し、注釈なしジェネリック引数がIL2091警告を出力(クラッシュなし)することを検証

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

既知の制限: アノテーション済みジェネリック引数に対する警告の抑制は実装されていません。カスタム属性のジェネリック引数は孤立した位置指定ジェネリックパラメータ(!0、DeclaringType/DeclaringMethod/Owner すべてnull)としてエンコードされるため、FlowAnnotations.GetGenericParameterAnnotationはNoneを返し、アノテーション済み/未済の引数は同じ警告を出します。アノテーション済みケースの抑制には位置指定ジェネリックパラメータを属性の対象型に対して解決する必要があり、このPRの範囲外です。


目次