Pull Request on 2026年08月08日

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

注意点

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



#132028 Don't attempt to unload cdac

  • 作成者: @rcj1
  • 作成日時: 2026年08月07日 23:12:36(UTC)
  • マージ日時: 2026年08月08日 04:13:11(UTC)
  • ラベル: area-Diagnostics-cdac

概要

cDAC(NativeAOT ライブラリ)はUnix環境で安全にアンロードできないため、FreeLibraryの呼び出しを#ifndef HOST_UNIXガードで保護し、Unixプラットフォームでのアンロード試行を明示的に防止します。これは#131960の変更と連携し、実際のアンロードを防ぐ意図を明確にするものです。

変更内容

  • src/coreclr/debug/daccess/cdac.cpp: 初期化失敗時とCDAC破棄時の2箇所で、FreeLibrary呼び出しを#ifndef HOST_UNIXガードで囲み、Unix環境でのアンロード処理をスキップ

パフォーマンスへの影響

影響なし(ただし、Copilotの指摘として、初期化失敗時にモジュール参照が永続的に保持されることで、長時間稼働するプロセスでDAC インスタンスが繰り返し作成される場合、モジュール参照が蓄積される可能性あり)

関連Issue

#131960

その他

  • Copilotレビューで、Unix環境でのアンロード回避の理由を示す説明コメントの追加が提案されています。リソースリークと見なされないよう、NativeAOT ライブラリのアンロードが安全でない理由を明示するコメント追加の検討が推奨されています。
  • 本変更は内部実装(デバッグアクセスコンポーネント)の変更であり、公開APIには影響しません。

#132020 [cDAC] Fix x86 stackwalking bug

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

概要

cDAC(Common Data Access Component)のx86 GCInfo デコーダーにおけるスタックウォーキングのバグを修正しました。マネージド実装がネイティブのgc_unwind_x86.inlの動作に合わせるよう、EBP フレーム内の最外層ベースフレームポインタ計算時に、callee-saved レジスタのスピル領域を含めた完全なスタックフレームサイズを使用するようになりました。

変更内容

  • src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Contracts/Contracts/GCInfo/X86/GCInfo.cs

    • StackSize プロパティを追加し、raw スタックサイズと saved レジスタスピル領域の合計を計算
    • GetOutermostBaseFP メソッドで x86 EBP フレームの最外層ベース FP 計算時に計算済みスタックサイズを使用
  • src/native/managed/cdac/tests/DumpTests/DacDbi/DacDbiStackWalkDumpTests.cs

    • x86 ハンドラフレームのスタックウォーキング検証テストを追加(81行追加)
    • saved レジスタを含む ambient SP の計算と検証

パフォーマンスへの影響

影響なし

関連Issue

#132020

その他

  • 内部診断テスト時に発見されたバグ修正
  • Copilot による分析で、StackSize が public として公開されている点が指摘されています。テスト目的でのみ使用される場合は private/internal への変更を検討する価値があります。

#132014 JIT: rewrite Runtime_131713 without the XML serializer

概要

JIT回帰テスト Runtime_131713 を XmlSerializer の依存性を排除するように書き直したもの。XML シリアライザーの代わりに、列挙子/ボックス化パターンを直接運用する専用の再現ループを実装することで、トリミング/NativeAOT環境下での問題を回避しながら、元のバグをキャッチできることを検証しています。

変更内容

  • Runtime_131713.cs: XmlSerializer の使用を削除し、2つの CustomList<T> インスタンスを共有非ジェネリック IEnumerator 経由で列挙する Count 再現メソッドを追加。Tier-1 JITコンパイルと PGO データ取得まで実行し、複数回の反復を通じて結果の安定性を検証。
  • Runtime_131713.csproj: XmlSerializer 関連の依存関係を削除(2行削除、2行追加)。

パフォーマンスへの影響

影響なし

関連Issue

#131938

その他

本変更は NativeAOT/トリミング互換性の向上に貢献し、リフレクションベースのシリアライザーに依存しないテストパターンへの移行事例となります。


#131960 Ensure that Native AOT libraries are not unloaded

  • 作成者: @rcj1
  • 作成日時: 2026年08月06日 18:35:30(UTC)
  • マージ日時: 2026年08月08日 02:02:54(UTC)
  • ラベル: area-NativeAOT-coreclr

概要

Native AOT共有ライブラリがアンロードされるのを防ぐため、Unix PALにRTLD_NODELETEフラグを使用したモジュール固定機能を実装しました。macOSではランタイム初期化時にdlopenで追加参照を取得し、Linux ELFプラットフォームではリンカオプション-z,nodeleteを使用してアンロード不可にします。また、NativeAOT SharedLibraryスモークテストをUnixでdlclose呼び出しを行うよう更新し、アンロード試行シナリオを実際に検証するようにしました。

変更内容

  • src/coreclr/nativeaot/Runtime/unix/PalUnix.cpp: PalGetModuleHandleFromPointer内でモジュール固定時にdlopen(..., RTLD_LAZY | RTLD_NOLOAD)を呼び出し、macOS上でモジュール参照をプロセス生涯にわたって保持(内部実装の変更)
  • src/coreclr/nativeaot/BuildIntegration/Microsoft.NETCore.Native.Unix.targets: Linux ELFプラットフォームで共有ライブラリに対し-Wl,-z,nodeleteリンカオプションを追加(ビルド設定)
  • src/coreclr/nativeaot/Runtime/Pal.h, src/coreclr/nativeaot/Runtime/startup.cpp, src/coreclr/nativeaot/Runtime/windows/PalMinWin.cpp, src/coreclr/nativeaot/Bootstrap/main.cpp: PalGetModuleHandleFromPointerシグネチャ変更に伴う更新(pinModuleパラメータ追加)
  • src/tests/nativeaot/SmokeTests/SharedLibrary/SharedLibrary.cpp: Unix環境でdlcloseを呼び出すよう修正

パフォーマンスへの影響

影響なし

関連Issue

#64629

その他

  • プラットフォーム別動作: macOSではRTLD_NOLOADによる参照取得、Linux glibc・musl以外のELFプラットフォームではリンカオプションで実現。musl libcはライブラリアンロードをサポートしていないため、このフラグを設定しても効果がない点に注意
  • 互換性: 内部実装の変更であり、公開APIには影響なし
  • テストの限界: スモークテストはdlclose呼び出し後もモジュールが実際に保持されていることを検証していない可能性あり(レビュー指摘)

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

概要

dotnet-optimization リポジトリから最適化関連の依存関係を更新するPRです。MIBC(Multiple Input Bytecode)ランタイムプロファイルデータとPGO(Profile-Guided Optimization)CoreCLRの最新ビルドに更新されています。これらは .NET ランタイムのパフォーマンス最適化に使用されます。

変更内容

  • eng/Version.Details.props: バージョン情報の更新(+6/-6行)
  • eng/Version.Details.xml: 依存関係バージョン詳細の更新(+12/-12行)
    • 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
    • バージョン: 1.0.0-prerelease.26318.1 → 1.0.0-prerelease.26403.1
  • src/coreclr/pgosupport.cmake: PGO関連ビルド設定の微調整(+3/-2行)

パフォーマンスへの影響

最新のMIBCプロファイルデータとPGO最適化の適用により、ランタイムのパフォーマンスが向上する可能性があります。具体的な改善率に関する情報は提供されていません。

関連Issue

なし

その他

  • 自動依存関係更新PR(dotnet-maestro[bot]による)
  • ビルド日時:2026年8月3日 UTC
  • マルチプラットフォーム対応(Linux ARM64/x64、Windows NT ARM64/x64/x86)

#131894 Remove the fallback binder from PEAssembly and AssemblySpec

概要

CoreCLRのアセンブリバインディングで曖昧だった「fallback binder」の概念を廃止し、動的アセンブリ(ref-emit)とAssemblySpecのバインダー所有関係を明確化するリファクタリング。バインダーの意図を「初期バインダー」(GetInitialBinder())と「実際にバインドされたバインダー」(GetBinder())に区別しました。

変更内容

  • peassembly.h/.cpp: GetFallbackBinder()を削除し、動的アセンブリのバインダーがload contextから直接取得されることを明確化
  • assemblyspec.hpp/.cpp: m_pFallbackBinderとm_fPreferFallbackBinderをm_pExplicitBinderに統一し、明示的に指定されたバインダーを表現
  • assemblyspec.cpp: GetBinderFromParentAssembly()をGetInitialBinder()に改名し、バインド開始時のバインダーを意味するよう明確化
  • assemblyspec.hpp: m_pAppDomainフィールドを削除し、必要な場所で現在のドメインを使用するよう変更
  • assemblynative.cpp: SetExplicitBinder()で明示的バインダーを設定
  • appdomain.cpp: 新しいBindシグネチャに対応

パフォーマンスへの影響

影響なし(内部実装の整理による変更)

関連Issue

なし

その他

  • 内部実装の変更であり、公開APIには影響しません
  • Copilotの指摘で行末の混合改行(CR文字)の問題と、いくつかのコメントの正確性に関する指摘がありますが、本体ロジックには影響しません

#131876 Stabilize configuration polling reload tests

概要

PollingFileChangeTokenがファイルの上書き検出時にタイムスタンプの変更に依存するため、高速なテスト書き込みで前回のタイムスタンプが保持され変更が検出されない問題を修正します。アクティブポーリング使用時に、上書き前に区別可能なタイムスタンプまで待機し、各上書きでタイムスタンプが確実に変更されることを保証します。

変更内容

  • src/libraries/Microsoft.Extensions.Configuration/tests/FunctionalTests/ConfigurationTests.cs
    • ポーリング認識ヘルパー WriteFilesForReload を追加し、PhysicalFileProvider.UseActivePolling 使用時に書き込み前に待機
    • ヘルパー内でタイムスタンプの変更をアサート
    • 上書きベースのリロードテストを新ヘルパーで更新
    • dotnet/runtime#42036参照の残存 ActiveIssue 属性を削除

パフォーマンスへの影響

テスト実行時にアクティブポーリング時は意図的な遅延が導入されますが、これはテスト安定性確保のためです。本番コードへの影響はありません。

関連Issue

#131805、#42036

その他

  • エンドツーエンドテストは PhysicalFileProvider を通じて維持
  • プラットフォーム固有のポーリング機構に対応したテスト改善

#131700 Fix haiku and illumos x64 builds

概要

Haiku と illumos/SunOS x64 プラットフォームでのビルド失敗を修正するプラットフォーム固有の調整を実施しました。主な変更は、アトミック操作の使用方法、ヘッダー/フィーチャーガード、およびクラッシュレポート機能の検出に関するものです。

変更内容

  • minipal/ospagesize.c: Haiku + clang 環境でのページサイズキャッシング時にクラング固有のアトミック操作 __c11_atomic_* を使用
  • pal_networkstatistics.c: sys/sysctl.h がないプラットフォーム向けにルート/sysctl ベースの実装をコンパイル時に制御
  • pal.unix.c: /proc/self/maps 走査をランタイム構築の sscanf フォーマットに変更し、DT_* フォールバック値を追加
  • pal.h: _X マクロの SunOS との名前衝突を回避するため、PAL_X を導入し、生成設定インクルード後に _X を再定義
  • gentree.cpp: SunOS GCC 警告を抑制 (CanAssignFrom の局所読み込み高速パス)
  • crashreport/: CMake 設定時フィーチャー検出を追加し、config.h を生成。ヘッダーインクルードをフィーチャーマクロで制御

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • マクロ命名で _X を PAL_X に統一することで 1400 行以上の変更が発生するため、現在の対応方針(インクルード後の再定義)を採用
  • Copilot によるレビュー指摘: pal.unix.c の snprintf(fmt, ...) は /proc/self/maps 走査ループ内で毎回実行されていますが、ループ前に移動することでパフォーマンス最適化の余地あり

#131624 Add dataflow support for deconstruction assignments

概要

ILLink Roslyn Analyzerのデータフロー分析にIDeconstructionAssignmentOperationのサポートを追加します。これにより、分解代入(deconstruction assignments)を通じて流れる値に対してRequiresUnreferencedCodeおよびDynamicallyAccessedMembersの診断が正しく適用されるようになります。修正前は、分解代入やforeachループ内の分解を含むデータフロー経路が暗黙的にスキップされていました。

変更内容

  • LocalDataFlowVisitor.cs: VisitDeconstructionAssignmentメソッドを実装し、タプル要素の処理、複数の分解ターゲット形式(ローカル変数、フィールド、プロパティ、パラメータ、破棄、配列要素、インデクサー)のサポート、C#の評価順序の保持(ソース値評価前にターゲット位置を評価)、フロー取得されたターゲットレシーバーとインデックス引数の保留、[DoesNotReturn]属性付きDeconstructor呼び出しの到達不可処理を追加
  • LocalStateLattice.cs: キャプチャされたターゲット値を追跡するためのCapturedTargetKey、CapturedTargetValue<TValue>、CapturedTargetValueLatticeの新規型を追加
  • TrimAnalysisVisitor.cs: タプル型ソースのタプル要素値モデリングを実装
  • ConstructedTypesDataFlow.cs: 複数の分解ソース/ターゲット形式、評価順序、フロー取得、拡張メソッドレシーバー、ユーザー定義変換、[DoesNotReturn]メソッド(直接・ネスト)に関する回帰テストを追加
  • ILTrimExpectedFailures.txt: DeconstructFieldTargetとDeconstructUserDefinedConversionをILTrimの既知の制限として登録
  • 新しいテストケースファイル: DeconstructFieldTarget.cs、DeconstructUserDefinedConversion.cs、ExtensionMembersDataFlow.csを追加

パフォーマンスへの影響

影響なし

関連Issue

#123767

その他

  • Roslyn Analyzerへの公開API拡張: CapturedTargetKey、CapturedTargetValue<TValue>、CapturedTargetValueLattice<TValue, TValueLattice>が公開型として導入されています。これらが内部実装専用の場合は非公開化の検討が必要です。
  • ILTrim制限: DeconstructFieldTargetは静的フィールド書き込みのデータフロー追跡に関する既存のギャップを、DeconstructUserDefinedConversionはユーザー定義変換演算子の戻り値追跡に関する既存のギャップをそれぞれ暴露します。IL系ツール(Linker、ILTrim)とNativeAOTは[DoesNotReturn]属性を到達可能性契約として扱わないため、これらのケースでは保守的に警告を報告します。
  • テストカバレッジ: ILLink.RoslynAnalyzer.Tests、Mono.Linker.Tests、ILCompiler.Trimming.Tests、ILTrim.Testsの全データフロースイートでパス確認済み。

目次