Pull Request on 2026年03月04日

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

注意点

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


目次

  1. #125171 Disable System.Net.Http.Functional.Tests on Android CoreCLR
  2. #125170 Disable ProxySetViaEnvironmentVariable_DefaultProxyCredentialsUsed on macOS
  3. #125165 Use a platform-neutral name for Microsoft.DiaSymReader.Native
  4. #125142 Remove dead Windows 7 conditions and inline CheckKeyConsistency in PfxFormatTests
  5. #125123 Fix locating files in GetCommonSourceFiles
  6. #125100 More flowgraph cleanup
  7. #125093 Ignore PhiArgs without matching actual preds
  8. #125088 Add initial cross-build support for OpenBSD
  9. #125080 Fix native AOT test failures in System.Reflection.Context tests
  10. #125056 Improve range analysis for checked bounds in GlobalAP
  11. #125028 JIT: Lower aggressiveRefCnt minimum threshold for CSE promotion
  12. #124977 Fix JIT assert resolving to C runtime assert after jitshared introduction
  13. #124966 docs: document that ServiceProvider.Dispose() throws for async-only disposables, recommend DisposeAsync()
  14. #124835 [release/10.0] Fix LoadExactInterfaceMap for sub-interfaces with complex type arguments under special marker parents
  15. #124804 Add AVX512 BMM API
  16. #124674 Add cDAC tests and implementation for GetGenerationTable and GetFinalizationFillPointers
  17. #124558 Add tests for Volatile.ReadBarrier and Volatile.WriteBarrier
  18. #124421 Update copilot testing instructions
  19. #124410 Add a regression test to validate sample profiling events
  20. #124331 Detect circular dependencies in factory-based service registrations at runtime
  21. #123819 New function pointer APIs
  22. #123360 Align HttpListener.GetContext() exception across platforms for Stop/Abort/Close

#125171 Disable System.Net.Http.Functional.Tests on Android CoreCLR

  • 作成者: @matouskozak
  • 作成日時: 2026年03月04日 09:17:43(UTC)
  • マージ日時: 2026年03月04日 13:58:04(UTC)
  • ラベル: area-System.Net.Http os-android

概要

Android環境でのCoreClr実行時にSystem.Net.Http.Functional.Testsテストスイートを無効化するPull Requestです。dotnet/runtime#124526の完全な調査が完了するまでの暫定的な対応として、アセンブリレベルのActiveIssue属性を追加してテストをスキップします。

変更内容

  • src/libraries/System.Net.Http/tests/FunctionalTests/AssemblyInfo.cs
    • [assembly: ActiveIssue(..., TestPlatforms.Android, ..., TestRuntimes.CoreCLR)]属性を追加
    • Android上のCoreClr環境でこのテストアセンブリが実行されるのを防ぐ

パフォーマンスへの影響

影響なし(テスト無効化のため、テスト実行時間の短縮が見込まれます)

関連Issue

dotnet/runtime#124526(調査中の既知の問題)

その他

この変更は暫定的な対応であり、#124526の完全な調査と解決後に再度有効化される予定です。Android環境でのSystem.Net.Http機能に関する問題が確認されているため、該当する環境でのテスト実行をスキップしています。


#125170 Disable ProxySetViaEnvironmentVariable_DefaultProxyCredentialsUsed on macOS

  • 作成者: @rzikm
  • 作成日時: 2026年03月04日 09:13:19(UTC)
  • マージ日時: 2026年03月04日 14:42:03(UTC)
  • ラベル: Servicing-approved area-System.Net.Http

概要

macOS 14 でテスト ProxySetViaEnvironmentVariable_DefaultProxyCredentialsUsed がクラッシュ(SIGABRT、終了コード 134)する問題に対応。Apple の GSS フレームワーク内の二重解放バグにより、SPNEGO/Negotiate 認証コンテキストのクリーンアップ時にクラッシュするため、macOS でこのテストをスキップするよう修正。

[SkipOnPlatform(TestPlatforms.OSX)]  // 追加された属性
public void ProxySetViaEnvironmentVariable_DefaultProxyCredentialsUsed()
{
    // テストコード...
}

変更内容

  • ファイル: src/libraries/Common/tests/System/Net/Http/HttpClientHandlerTest.DefaultProxyCredentials.cs
    • ProxySetViaEnvironmentVariable_DefaultProxyCredentialsUsed テストメソッドに [SkipOnPlatform(TestPlatforms.OSX)] 属性を追加
    • 変更行数: +1/-0

パフォーマンスへの影響

影響なし

関連Issue

  • #125150(このPRが修正する問題)
  • #97966、#71463(同じ underlying macOS GSS バグ)
  • #122423(macOS ビルドイメージ更新に伴う CI 失敗の原因)

その他

  • 重要度: このテスト失敗は Apple の GSS フレームワーク内の既知バグ(_gss_scram_release_cred の二重解放)が原因
  • スコープ: .NET 8 限定の変更。.NET 9+ ではマネージド NTLM/SPNEGO 実装が使用されているため、このバグの影響を受けない
  • 顧客への影響: なし(テスト専用の変更で、プロダクトコード修正なし)
  • リスク: 低(既知の外部バグをスキップするシンプルな属性追加のみ)

#125165 Use a platform-neutral name for Microsoft.DiaSymReader.Native

  • 作成者: @MichalStrehovsky
  • 作成日時: 2026年03月04日 02:49:06(UTC)
  • マージ日時: 2026年03月04日 10:36:59(UTC)
  • ラベル: area-crossgen2-coreclr

概要

Microsoft.DiaSymReader.Native DLLの命名方式をプラットフォーム非依存の名前に変更するPRです。従来の Microsoft.DiaSymReader.Native.(x86|x64|arm64).dll という形式から、プラットフォーム別のサフィックスを削除することで、dotnet/dotnetのリブートストラッピングビルド時にランタイムパック内の同名DLLとの衝突問題を解決します。

変更内容

  • src/coreclr/scripts/superpmi_collect_setup.py (+1): SuperPMI収集スクリプトの更新
  • src/coreclr/tools/aot/ILCompiler.Diagnostics/PdbWriter.cs (-20): PdbWriter内の不要な20行分のコード削除
  • src/coreclr/tools/aot/crossgen2/crossgen2.props (+3/-2): CrossGen2プロパティファイルの更新(DLL命名規則の変更反映)
  • src/coreclr/tools/r2rdump/Program.cs (+17): R2RDump プログラムの17行追加(新しい命名方式への対応)

パフォーマンスへの影響

影響なし

関連Issue

https://github.com/dotnet/dotnet/pull/5155#issuecomment-3989895314

その他

この変更は破壊的変更ではなく、内部実装の命名規則の統一化です。DiaSymReader.Nativeはネイティブシンボルリーダーで、AOT コンパイラ(CrossGen2)やPDB生成、R2Rダンプツール等の診断機能で使用されます。プラットフォーム別のサフィックスを削除することで、ビルドシステムの複雑性を軽減し、リパッケージング時の名前衝突を防ぎます。


#125142 Remove dead Windows 7 conditions and inline CheckKeyConsistency in PfxFormatTests

  • 作成者: @Copilot
  • 作成日時: 2026年03月03日 18:12:07(UTC)
  • マージ日時: 2026年03月04日 14:55:33(UTC)
  • ラベル: area-System.Security test-enhancement

概要

PfxFormatTests.cs内の到達不可能なWindows 7向け条件分岐を削除するコード整理です。OperatingSystem.IsWindows() && !PlatformDetection.IsWindowsという常に偽となる条件ガードを廃止し、中間変数followupを排除してCheckKeyConsistencyを直接ReadMultiPfxに渡すようにしました。

変更内容

  • ファイル: src/libraries/System.Security.Cryptography/tests/X509Certificates/PfxFormatTests.cs
    • 死んだコード(到達不可能なifブロック)2箇所を削除
    • Windows 7に関連するコメントブロックを削除
    • 中間変数Action<X509Certificate2> followupを廃止
    • CheckKeyConsistencyを直接ReadMultiPfx呼び出しに渡すように変更
    • 変更行数: +3/-33行

パフォーマンスへの影響

影響なし。この変更はテストコードの整理であり、実行時のパフォーマンスへの影響はありません。

関連Issue

なし

その他

この変更は破壊的変更ではなく、テストコードの品質改善です。不要な中間変数と到達不可能な条件分岐を削除することで、コードの可読性と保守性が向上しています。Windows 7のサポート終了に伴うレガシーコード削減の一環と考えられます。


#125123 Fix locating files in GetCommonSourceFiles

  • 作成者: @mrvoorhe
  • 作成日時: 2026年03月03日 14:50:57(UTC)
  • マージ日時: 2026年03月04日 23:24:00(UTC)
  • ラベル: linkable-framework community-contribution area-Tools-ILLink

概要

ILLink テストフレームワークの GetCommonSourceFiles メソッドが、設定可能な _testCase.RootCasesDirectory に依存していた問題を修正しました。Unity など外部プロジェクトが異なるテストケースディレクトリを使用する場合に、ファイル解決に失敗する問題を解決しています。修正により、既知のテストフレームワークディレクトリから相対パスを計算するようになり、GetCommonSourceFiles をメソッドにしました。

変更内容

  • TestCaseCompilationMetadataProvider.cs: GetCommonSourceFiles の実装を変更。設定可能な RootCasesDirectory ではなく、既知のテストフレームワークディレクトリからの相対パスを使用するように修正
  • PathUtilities.cs: GetMonoLinkerTestsDirectory ヘルパーメソッドを追加(AppContext.GetData パターンを採用)
  • Mono.Linker.Tests.csproj: 関連するプロジェクト設定を更新

パフォーマンスへの影響

影響なし

関連Issue

#125123

その他

  • GetCommonSourceFiles をメソッドに変更することで、将来 Unity など他のプロジェクトでオーバーライド可能にしています
  • 初期実装では [CallerFilePath] を検討しましたが、CI環境での動作問題のため、AppContext.GetData パターンを採用しました
  • この変更により、テストケースディレクトリの構成が ILLink 以外のプロジェクトに存在する場合でも、正しくファイル解決が行われるようになります

#125100 More flowgraph cleanup

  • 作成者: @AndyAyersMS
  • 作成日時: 2026年03月03日 02:29:27(UTC)
  • マージ日時: 2026年03月04日 22:21:17(UTC)
  • ラベル: area-CodeGen-coreclr

概要

このPull Requestは、.NET RuntimeのJIT(Just-In-Time)コンパイラのフローグラフ関連コード(fg*.cppファイル群)をクリーンアップするものです。主な変更は、すべてのメソッドにヘッダーコメントを追加し、式のコンテキスト以外の/* */形式のコメントを削除して、コードの可読性と保守性を向上させることを目的としています。

変更内容

  • fgbasic.cpp: 527行の変更(+309/-218)- フローグラフの基本操作メソッドにコメント追加、コメント形式の整理
  • fgdiagnostic.cpp: 263行の変更(+182/-81)- 診断機能メソッドのコメント整理
  • fgopt.cpp: 225行の変更(+114/-111)- 最適化メソッドのコメント整理
  • fgstmt.cpp: 95行の変更(+77/-18)- ステートメント処理メソッドのコメント整理
  • fginline.cpp: 60行の変更(+40/-20)- インライン化処理のコメント整理
  • fgprofile.cpp: 38行の変更(+38/-0)- プロファイル関連メソッドにコメント追加
  • fgprofilesynthesis.cppfgehopt.cppfgwasm.cpp: 軽微な変更

パフォーマンスへの影響

影響なし。この変更はコード品質の改善に関するもので、コンパイル時の動作や生成されるILコードに変更はありません。

関連Issue

なし

その他

  • Copilotによるレビューで新たなコメントが生成されなかったことから、コード変更の質が高いと判断されています
  • これはコードメンテナンスとドキュメンテーション標準化を目的とした継続的なクリーンアップ活動の一環です

#125093 Ignore PhiArgs without matching actual preds

  • 作成者: @EgorBo
  • 作成日時: 2026年03月03日 01:41:09(UTC)
  • マージ日時: 2026年03月04日 19:18:58(UTC)
  • ラベル: area-CodeGen-coreclr

概要

JITコンパイラのアサーション伝播処理で、実際のプレデセッサが存在しないPhiArguments(Phi関数の引数)を無視するように修正しました。これにより、制御フローグラフの不整合によるコンパイルエラーを解決します。

変更内容

  • src/coreclr/jit/assertionprop.cpp: PhiArgの妥当性チェック処理を追加。実際のプレデセッサが存在しないPhiArgをスキップするロジックを実装
  • src/coreclr/jit/compiler.hpp: アサーション伝播関連のヘッダー定義を拡張(27行の追加)
  • src/tests/JIT/Regression/JitBlue/Runtime_124507/Runtime_124507.cs: 回帰テストケースを追加。問題を再現するテストコードを実装
  • src/tests/JIT/Regression/Regression_ro_2.csproj: テストプロジェクト設定を更新

パフォーマンスへの影響

影響なし。本修正はコンパイル時の正確性向上を目的とした修正であり、生成されるコードのパフォーマンスには影響を与えません。

関連Issue

Issue #124507(dotnet/runtime)

その他

本修正は制御フローグラフの最適化過程で発生する不整合問題を対処するもので、特定の制御フロー構造におけるJITコンパイルの安定性を向上させます。


#125088 Add initial cross-build support for OpenBSD

  • 作成者: @am11
  • 作成日時: 2026年03月03日 00:07:47(UTC)
  • マージ日時: 2026年03月04日 16:21:59(UTC)
  • ラベル: area-Infrastructure os-openbsd

概要

OpenBSD への初期クロスビルド対応を追加するPRです。ビルドシステムの構成ファイルと CMake ツールチェーンを更新し、OpenBSD を新しいターゲットプラットフォームとして認識・サポートするための基盤を整備しました。ランタイム識別子(RID)の定義、rootfs ビルドスクリプト、プラットフォーム固有の構成が追加されています。

変更内容

  • ビルド識別子定義: OSArch.propsRuntimeIdentifier.props でOpenBSD用のOS/アーキテクチャマッピングを追加
  • クロスビルド環境構築: eng/common/cross/build-rootfs.sh に OpenBSD rootfs ビルドスクリプト(52行追加)を実装
  • CMakeツールチェーン更新: toolchain.cmakeconfigurecompiler.cmaketryrun.cmake で OpenBSD 対応のコンパイラ設定と実行テストを追加
  • PAL(Platform Abstraction Layer)対応: src/coreclr/pal/src/ の CMake 構成ファイルを更新し、OpenBSD プラットフォーム固有の処理を追加
  • ランタイムプラットフォーム定義: PortableRuntimeIdentifierGraph.json に OpenBSD RID を17行追加
  • ネイティブホスト構成: corehost/apphost/static/configure.cmakenative/libs/configure.cmake で OpenBSD ビルド対応を統合

パフォーマンスへの影響

影響なし

関連Issue

#124911 - OpenBSD サポート関連

その他

本PRは eng/common ディレクトリの上流PR(dotnet/arcade#16561)をミラーしています。OpenBSD クロスビルドのための基盤整備であり、ランタイム実装の変更ではなく、ビルドシステム層での対応となっています。


#125080 Fix native AOT test failures in System.Reflection.Context tests

  • 作成者: @Copilot
  • 作成日時: 2026年03月02日 22:17:19(UTC)
  • マージ日時: 2026年03月04日 22:10:10(UTC)
  • ラベル: area-System.Reflection

概要

PR #123026で追加されたSystem.Reflection.Contextテストの native AOT 互換性を修正しました。Native AOT 環境で非対応のリフレクション API を呼び出すテストに対して、[ConditionalFact]属性とPlatformDetection述語を使用して条件付きスキップを適用しています。メソッドボディ、メタデータトークン、native AOT非対応 API などのカテゴリごとに適切なガードを適用しました。

変更内容

System.Reflection.Context テストファイル(全16ファイル)

  • メソッドボディ関連: GetMethodBody()GetILAsByteArray()ExceptionHandlingClauses などを使用するテストにIsMethodBodySupportedガードを適用

    • MethodBodyTestsExceptionHandlingClauseTestsLocalVariableInfoTestsクラス全体に[ConditionalClass]を適用
  • メタデータトークン関連: MetadataTokenResolveField/Method/Type/Memberを使用するテストにIsMetadataTokenSupportedガードを適用

    • 複数のテストクラスで個別にガード(CustomConstructorInfoTests、CustomModuleTests など)
  • Native AOT 非対応 API: Module.IsResource()EventInfo.GetOtherMethods()GetEnumValues()など にIsNotNativeAotガードを適用

  • プラットフォーム分岐アサーション: 一部テストは skip ではなく、native AOT での例外動作をアサート

    • GetReferencedAssembliesGetSatelliteAssemblyPlatformNotSupportedExceptionを検証
    • GetModuleModule.Name"<Unknown>"を返すことを検証
  • 既知の制限事項: GetInterfaceMap()関連テストに[ActiveIssue(dotnet/runtime#89157)]を適用

パフォーマンスへの影響

影響なし

このPRはテストのスキップロジックを追加するのみであり、ランタイムパフォーマンスや実装に影響を与えません。

関連Issue

  • dotnet/runtime#123026(テスト追加PRの参照)
  • dotnet/runtime#89157(GetInterfaceMap()の native AOT 制限)

その他

  • 変更はテストのみで、プロダクションコードには影響なし
  • Native AOT CI パイプラインでの失敗を完全に解決
  • 既に native AOT で動作していたテスト(MethodHandleFieldHandleTypeHandleなど)は[Fact]のままで変更なし
  • Copilot 自動生成による PR で、複数レビュアーによる確認を経ている

#125056 Improve range analysis for checked bounds in GlobalAP

  • 作成者: @EgorBo
  • 作成日時: 2026年03月02日 14:28:02(UTC)
  • マージ日時: 2026年03月04日 13:51:34(UTC)
  • ラベル: area-CodeGen-coreclr

概要

JITのグローバル解析(GlobalAP)における範囲解析を改善するPull Requestです。チェック付きの境界条件に対して、より精密な範囲情報を推論できるようにしました。例えば、if ((uint)i < span.Length) のブロック内では、i の有効範囲が [0..int.MaxValue-1] であることを正確に認識できるようになります。

変更内容

  • src/coreclr/jit/rangecheck.cpp
    • 範囲解析ロジックを強化(+34行)
    • チェック付き境界条件の範囲推論精度を向上
    • キャスト操作を含む条件式の範囲を正確に追跡

パフォーマンスへの影響

コンパイル時間への影響は限定的と考えられます。範囲解析の精度向上により、以下のような改善が期待されます:

  • 不要なバウンズチェック削除の増加
  • より多くのループ最適化が可能
  • 実行時パフォーマンス向上(バウンズチェック削減による)

関連Issue

なし

その他

本変更は Azure DevOps のビルド結果で複数の差分(diffs)が検出されており、機能テストにより実装効果が確認されています。


#125028 JIT: Lower aggressiveRefCnt minimum threshold for CSE promotion

  • 作成者: @Copilot
  • 作成日時: 2026年03月01日 20:23:02(UTC)
  • マージ日時: 2026年03月04日 13:51:21(UTC)
  • ラベル: area-CodeGen-coreclr

概要

JIT コンパイラの CSE (Common Subexpression Elimination) プロモーション戦略において、aggressiveRefCnt の最小値の閾値を BB_UNITY_WEIGHT * 2 (200) から BB_UNITY_WEIGHT / 2 (50) に引き下げました。これにより、レジスタ圧力が低いメソッド(追跡対象の整数ローカル変数が少ないメソッド)でも、より積極的な CSE の最適化が適用され、有益な共通部分式除去が促進されます。

変更内容

  • src/coreclr/jit/optcse.cpp:
    • CSE_Heuristic::Initialize() メソッド内で aggressiveRefCnt の最小フロア値を 200 から 50 に変更
    • 変更に対応する説明コメントを更新

パフォーマンスへの影響

潜在的な正の影響:

  • レジスタ圧力が低いメソッドでの CSE 最適化の範囲が拡大
  • 不要な副式計算の削減により、実行時性能向上の可能性

懸念事項:

  • より多くの CSE が昇格することで、コード生成の複雑度が増加する可能性
  • 特定のメソッドでコンパイル時間が増加する可能性

具体的なベンチマーク結果は Pull Request に記載されていません。

関連Issue

なし

その他

  • Copilot コーディングエージェントにより提案された変更
  • Azure Pipelines のビルド結果が参照可能(buildId: 1315302)

#124977 Fix JIT assert resolving to C runtime assert after jitshared introduction

  • 作成者: @Copilot
  • 作成日時: 2026年02月27日 15:55:42(UTC)
  • マージ日時: 2026年03月04日 10:33:14(UTC)
  • ラベル: area-CodeGen-coreclr

概要

PR #123830で導入されたjitshared/ディレクトリの後、JITおよびインタープリタコード内のassertマクロが意図せずC言語ランタイムのassertに解決され、カスタムハンドラのassertAbortの代わりにダイアログポップアップを表示していた問題を修正します。新しい共有ヘッダjitassert.hを導入し、JITとインタープリタ間で統一されたassert定義を提供します。

変更内容

ファイル 変更内容
jitshared/jitassert.h 新規作成。assertAbortの宣言とassertマクロの定義。DEBUG時はassertAbortにマップ、リリース時は((void)0)に展開
jitshared/jitshared.h jitassert.hをインクルード追加。jitshared経由の全ファイルで正しいassertを自動提供
jitshared/histogram.h jitassert.hを直接インクルード。インタープリタビルド対応
jitshared/histogram.cpp #include <cassert>を削除
jitshared/arenaallocator.h #include <assert.h>を削除
jitshared/compallocator.h #include <assert.h>を削除

パフォーマンスへの影響

影響なし。本修正はマクロの定義順序の問題を解決するもので、アサーション失敗時のハンドラ切り替えのみを対象としています。

関連Issue

  • dotnet/runtime#124954
  • dotnet/runtime#123830(根本原因となったPR)

その他

根本原因:host.hで定義されたassert → assertAbortマッピングが、jitshared内の直接的な<assert.h>/<cassert>インクルードにより上書きされていました。新しいjitassert.hを単一の情報源として確立することで、ヘッダインクルード順序に依存しない堅牢な仕組みになります。


#124966 docs: document that ServiceProvider.Dispose() throws for async-only disposables, recommend DisposeAsync()

  • 作成者: @Copilot
  • 作成日時: 2026年02月27日 13:49:03(UTC)
  • マージ日時: 2026年03月04日 12:58:20(UTC)
  • ラベル: area-Extensions-DependencyInjection

概要

ServiceProvider.Dispose() が async-only disposables(IAsyncDisposable のみを実装するサービス)を含む場合に InvalidOperationException をスローすることをドキュメント化しました。従来は /// <inheritdoc /> で曖昧だったため、開発者が予期しない例外に遭遇するリスクがありました。本変更により、同期破棄時の制限を明示し、DisposeAsync() の使用を推奨するようになります。

変更内容

  • ServiceProvider.Dispose()/// <inheritdoc /> を削除し、async-only disposable が存在する場合に InvalidOperationException をスローすることと、代わりに DisposeAsync() を使用すべきことを明示したXMLコメントを追加
  • ServiceProvider.DisposeAsync()IDisposableIAsyncDisposable の両方を実装するサービスを適切に処理することをドキュメント化

パフォーマンスへの影響

影響なし。本変更はドキュメント追加のみで、ランタイム動作の変更はありません。

関連Issue

  • dotnet/runtime#123620(参照)
  • DI スコープの async-only disposable ハンドリングに関する設計議論に基づく

その他

重要な設計決定AsyncServiceScope.csIServiceScope.cs は変更されていません。スロー動作は ServiceProvider の実装固有であり、インターフェースコントラクトの一部ではないためです。

推奨パターン(使用側の対応):

// 推奨:async-only disposable を含む可能性がある場合は await using を使用
await using (var scope = serviceProvider.CreateAsyncScope())
{
    // 処理
}

// または
using var scope = serviceProvider.CreateScope();
try
{
    // 処理
}
finally
{
    await scope.DisposeAsync();
}

#124835 [release/10.0] Fix LoadExactInterfaceMap for sub-interfaces with complex type arguments under special marker parents

  • 作成者: @github-actions[bot]
  • 作成日時: 2026年02月25日 00:47:57(UTC)
  • マージ日時: 2026年03月04日 01:05:23(UTC)
  • ラベル: Servicing-approved area-TypeSystem-coreclr

概要

サブインターフェース複雑な型引数を持つ場合の LoadExactInterfaceMap の読み込み問題を修正しました。PR #123254 の修正では対応しきれなかったケースをカバーする特殊ケース処理を追加しており、ジェネリック型定義の完全読み込みおよび部分読み込みインターフェースマップの比較が重要です。

変更内容

  • src/coreclr/vm/methodtablebuilder.cpp

    • LoadExactInterfaceMap 関連の特殊ケース処理を拡張(+45/-13)
    • 複雑な型引数を持つサブインターフェースの型読み込み処理を改善
  • src/tests/Loader/classloader/regressions/GitHub_124369/

    • VB.NETベースの包括的なリグレッション テストスイートを追加(GitHub #124369対応)
    • ジェネリック型定義のインターフェースマップ比較を含む複数のテストケースを実装

パフォーマンスへの影響

影響なし。本修正は型読み込みロジックの特殊ケース処理の充実であり、パフォーマンス特性に変化はありません。

関連Issue

  • GitHub #124835(本PR)
  • GitHub #124684(オリジナルPR)
  • GitHub #123254(初期修正)
  • GitHub #124369(報告されたリグレッション)
  • PR #120712(問題導入)
  • PR #123520(初期緩和修正)

その他

  • リスク評価: 低。PR #123520 で追加された新しいコードパスの特殊ケースをさらに拡張するもの
  • 検証済み: 本修正は顧客による実環境でのホットフィックスビルド検証済み
  • .NET 10以降向けのバックポートのため、PR対象ブランチは release/10.0 です

#124804 Add AVX512 BMM API

  • 作成者: @alexcovington
  • 作成日時: 2026年02月24日 17:27:23(UTC)
  • マージ日時: 2026年03月04日 00:51:46(UTC)
  • ラベル: area-CodeGen-coreclr community-contribution

概要

AVX512 BMM(Bit Matrix Multiply)APIを.NETランタイムに新規実装します。Avx512BmmクラスをSystem.Runtime.Intrinsics.X86に追加し、ビット反転(ReverseBits)と16×16ビット行列乗算(BitMultiplyMatrix16x16WithOrReduction/WithXorReduction)の操作をVector128/256/512サイズで提供します。これらはAVX512 BMM命令セットをサポートするプロセッサで高速に実行されます。

// 例:ビット反転
Vector512<byte> result = Avx512Bmm.ReverseBits(input);

// 例:16×16ビット行列乗算(OR還元)
Vector512<ushort> result = Avx512Bmm.BitMultiplyMatrix16x16WithOrReduction(addend, left, right);

変更内容

  • 公開API追加System.Runtime.Intrinsics.X86.Avx512Bmmクラスを新規実装(マネージドコード + PlatformNotSupported版)
  • JIT対応:AVX512 BMM命令エンコーディング(vbitrevvbmacor16x16x16vbmacxor16x16x16)をemitxarch.cppに追加
  • 命令セット認識corinfoinstructionset.hにAvx512Bmmを追加、CPUID検出ロジックを実装
  • テスト追加:ハンドライテストとジェネレーテッドテストを含む複数のテストプロジェクトを追加
  • ランタイムサポート:CPUフィーチャー検出(cpufeatures.c)とReady-to-Run互換性対応

パフォーマンスへの影響

改善点

  • アセンブリ出力から、単一命令で複雑なビット操作を実現しています(例:vbitrevで1命令、従来のループベース実装と比較して劇的な高速化)
  • 16×16ビット行列乗算もvbmacor16x16x16/vbmacxor16x16x16単一命令で完結(25~37バイトのコンパクトなコード生成)
  • マスキング対応により、不要な計算をスキップ可能(ゼロマスキング例で初期化削減)

懸念点:なし。公開APIのため互換性は完全に保たれ、非サポート環境ではIsSupportedがfalseで安全にフォールバック可能

関連Issue

#123898

その他

  • 互換性:破壊的変更なし。IsSupportedプロパティで機能検出が可能
  • プラットフォーム対応:x64プロセッサのAVX512 BMM対応品のみで利用可能。それ以外は例外を発生するPlatformNotSupported版を使用
  • エンコーディング検証:アセンブリダンプより、Vector128/256/512すべてのサイズで正しい命令生成が確認済み

#124674 Add cDAC tests and implementation for GetGenerationTable and GetFinalizationFillPointers

  • 作成者: @noahfalk
  • 作成日時: 2026年02月20日 20:43:22(UTC)
  • マージ日時: 2026年03月04日 13:27:17(UTC)
  • ラベル: area-Diagnostics-coreclr

概要

ISOSDacInterface8の4つのメソッド(GetGenerationTable、GetGenerationTableSvr、GetFinalizationFillPointers、GetFinalizationFillPointersSvr)をcDAC SOSDacImplに実装しました。テストインフラとして、TestPlaceholderTarget.Builderという流暢なビルダーパターンを導入し、GCHeapBuilder経由でGCモックデータを設定できるようにしました。同時に、Unix環境でのライブラリロード、HRESULT変数シャドーイング、Release/Debugビルドでのスタックウォーク不具合など、複数の既存の問題を修正しました。

変更内容

  • SOSDacImpl実装: ISOSDacInterface8の4つのメソッドを実装(GetGenerationTable関連、GetFinalizationFillPointers関連)
  • テストインフラ: TestPlaceholderTarget.Builder、GCHeapBuilder、TestContractRegistryを追加
  • テストケース: GCTests.cs(3契約レベル、x4アーキテクチャ=12テスト)、SOSDacInterface8Tests.cs(6個のSOSDacImplレベル、x4アーキテクチャ=24テスト)
  • ドキュメント: cdac/, Legacy/, tests/ ディレクトリにREADME.md を追加
  • バグ修正:
    • Unix上でのcDAC library loading修正(PAL_GetPalHostModule)
    • request.cpp内8つのSOSDacInterface APIのHRESULT変数シャドーイング修正
    • Release buildでのスタックウォーク不進行修正(ClrDataStackWalk.Next)
    • Debug assertion failures修正(GetAppDomainName、GetObjectData、EnumMethodInstanceByAddressでVirtualReadException処理)

パフォーマンスへの影響

影響なし。本PRは主にGC診断APIの実装とテストインフラの拡充が目的です。変更はデータ取得の正確性向上に寄与しますが、ランタイムパフォーマンスへの直接的な影響はありません。

関連Issue

  • #124692
  • #124693
  • #124694
  • #124695

その他

  • Unix(Linux)環境でのSOS テスト実行がこれまで十分にテストされていなかったことが明らかになりました
  • Release/Debug両方のビルド構成でテスト実行可能になりました
  • README.md追加により、cDACプロジェクトの保守性が向上します

#124558 Add tests for Volatile.ReadBarrier and Volatile.WriteBarrier

  • 作成者: @Copilot
  • 作成日時: 2026年02月18日 14:58:49(UTC)
  • マージ日時: 2026年03月04日 22:09:48(UTC)
  • ラベル: area-System.Threading

概要

.NET 10で導入されたVolatile.ReadBarrier()Volatile.WriteBarrier()メソッドにテストカバレッジを追加するPRです。これらのメソッドはWebAssemblyで実装されておらず、スタックオーバーフロー例外を引き起こしていました(PR #124538で修正済み)。本PRでは、これらのメソッドが正常に動作することを確保するための包括的なテストを追加します。

変更内容

  • VolatileTests.cs (新規追加): Volatile.ReadBarrierVolatile.WriteBarrierのテストを追加

    • スモークテスト:基本的な呼び出し動作の確認
    • 機能統合テスト:Volatile.Read/Writeと組み合わせたバリアの動作検証
    • リフレクション呼び出しテスト:動的呼び出し経由での動作確認
  • System.Threading.Tests.csproj: 新規テストファイルを含める

パフォーマンスへの影響

影響なし(テスト追加のみ)

関連Issue

  • Issue #124477 (WebAssemblyでのVolatile intrinsics未実装)
  • PR #124538 (実装の修正)

その他

本PRはテストのみの変更です。実装修正はPR #124538で既に完了しています。初版でクロススレッドテストが含まれていましたが、Task.RunSpinOnceが既にバリアを含むため、このテストはReadBarrier/WriteBarrierの動作検証として有効ではないとして削除されています。


#124421 Update copilot testing instructions

  • 作成者: @noahfalk
  • 作成日時: 2026年02月14日 14:18:37(UTC)
  • マージ日時: 2026年03月04日 14:16:27(UTC)
  • ラベル: area-Infrastructure

概要

このPRは、.NET runtimeのCopilot AI アシスタントを使用したテスト作成時のガイダンスを改善するものです。リグレッションテスト作成中にエージェント(Copilot)が遭遇した問題を解決するため、Copilot向けの指示を更新し、EventPipeトレーシング関連のテストドキュメントを充実させています。

変更内容

  • .github/copilot-instructions.md (+48/-2)

    • Copilotテスト作成指示の改善
    • エージェントが遭遇した問題点への対応ガイダンスを追加
  • src/tests/tracing/eventpipe/README.md (新規追加、+103)

    • EventPipeトレーシングテストの新規ドキュメント
    • テスト作成に関する詳細なガイダンスと説明を記載

パフォーマンスへの影響

影響なし (本変更はドキュメント・ガイダンス資料の更新であり、コード実装に関する変更ではありません)

関連Issue

なし

その他

このPRはCI/CDパイプラインにおけるCopilotエージェントの効率性向上を目的としています。テスト自動生成時にAIエージェントがより正確に動作するための指示改善が行われており、開発者がリグレッションテストを作成する際のナレッジベース整備という位置づけと考えられます。


#124410 Add a regression test to validate sample profiling events

  • 作成者: @noahfalk
  • 作成日時: 2026年02月13日 23:32:26(UTC)
  • マージ日時: 2026年03月04日 02:57:57(UTC)
  • ラベル: area-Tracing-coreclr

概要

.NET 9で発生したSampleProfilerのリグレッションに対する検証テストを追加するPRです。ThreadSampleイベントがマネージドコード実行中に正しくSampleType="Managed"(値2)を報告することを確認するテストです。以前は誤って"External"(値1)が報告されていました。

変更内容

  • SampleProfilerSampleType.csproj: 新しいテストプロジェクトの設定ファイル(GCStressIncompatible、JitOptimizationSensitiveマーク付き)
  • SampleProfilerSampleType.cs: ThreadSampleイベントのSampleTypeフィールドを検証するリグレッションテスト(123行追加)
    • マネージド作業を実行するスレッドをスピンさせ、少なくとも一部のサンプルがManaged型として正しくマークされていることを確認

パフォーマンスへの影響

影響なし(テストコード追加のみ)

関連Issue

https://github.com/dotnet/runtime/pull/124019 の後続対応

その他

  • EventPipe検証テストの既存パターンに従って実装
  • リポジトリ内の同様なトレーシングテストと同じ構造を採用
  • Copilot reviewerによるコード指摘なし

#124331 Detect circular dependencies in factory-based service registrations at runtime

  • 作成者: @Copilot
  • 作成日時: 2026年02月12日 09:53:46(UTC)
  • マージ日時: 2026年03月04日 23:34:05(UTC)
  • ラベル: area-Extensions-DependencyInjection

概要

ファクトリ関数を使用したサービス登録時の循環依存関係によるデッドロック(issue #88390)を修正するPull Requestです。CallSiteRuntimeResolverに再入検出機構を実装し、同じロックの再帰的な獲得を防ぐため、循環依存を検出時に例外をスローするようにしました。

// 修正前:デッドロックが発生
services.ConfigureOptions<ConfigureApplicationInsightsServiceOptions>();
services.AddApplicationInsightsTelemetry();

// 修正後:循環依存検出時に InvalidOperationException をスロー

変更内容

  • CallSiteRuntimeResolver.cs: [ThreadStatic] HashSet<ServiceCallSite>を追加して、現在のスレッドで解決中の呼び出しサイトを追跡し、循環依存を検出
  • Microsoft.Extensions.DependencyInjection.csproj: CoreLibのReferenceEqualityComparerを参照追加
  • CircularDependencyTests.cs: ファクトリベースの循環依存テストを追加(解決時の検出とValidateOnBuildでの検出不可を記録)
  • テスト用Fakeクラス: FactoryCircularDependencyAFactoryCircularDependencyBを追加

パフォーマンスへの影響

影響なし。本修正は循環依存検出時にのみ例外をスローするため、正常なサービス解決フローに対するパフォーマンス低下は発生しません。スレッドローカル変数を使用するため、マルチスレッド環境での干渉もありません。

関連Issue

  • #88390 - ApplicationInsightsServiceOptions設定時のデッドロック

その他

  • 設計上、循環依存検出はValidateOnBuildではなく実行時に行われます
  • ReferenceEqualityComparerはCoreLibの共有実装を活用し、型安全性とコード品質を確保
  • スレッドセーフな実装により、並行解決時の干渉がない
  • 既存のSR.CircularDependencyExceptionリソース文字列を利用した明確なエラーメッセージ

#123819 New function pointer APIs

  • 作成者: @jgh07
  • 作成日時: 2026年01月30日 22:34:50(UTC)
  • マージ日時: 2026年03月04日 01:18:43(UTC)
  • ラベル: area-System.Reflection community-contribution

概要

MakeFunctionPointerType という新しい関数ポインタAPI が CoreCLR に実装されました。これにより、リフレクションと動的IL生成を通じて関数ポインタ型をプログラムで生成および操作できるようになります。この機能実装は Issue #75348 に対応するものです。

変更内容

CoreCLR関連

  • RuntimeType.CoreCLR.cs: MakeFunctionPointerType メソッドの実装(20行追加)
  • RuntimeHandles.cs: 関数ポインタ型生成用のハンドル関連メソッド追加(23行追加)
  • runtimehandles.cpp/h: ネイティブ側の関数ポインタ型生成ロジック実装

リフレクション・Emit API

  • Type.cs: パブリックAPI として MakeFunctionPointerType メソッド追加(149行追加)
  • SignatureFunctionPointerType.cs: 新規作成、関数ポインタシグネチャ型の表現(93行)
  • SignatureModifiedType.cs: 新規作成、修飾された型の表現(61行)
  • SignatureHelper.cs: 関数ポインタシグネチャサポート追加(98行追加、11行削除)

IL生成サポート

  • ILGenerator.cs/ILGeneratorImpl.cs: 関数ポインタ型の Emit サポート
  • ModuleBuilderImpl.cs: 関数ポインタ型定義機能追加(26行追加)
  • TypeBuilder.cs/EnumBuilder.cs: 関数ポインタ型生成メソッドサポート

テスト・リソース

  • Emit4Tests.cs: 関数ポインタAPI の包括的なテスト追加(117行)
  • Strings.resx: エラーメッセージ定義追加

パフォーマンスへの影響

影響なし。リフレクション・IL生成時の新しいAPIであり、既存の実行時パフォーマンスへの直接的な影響はありません。

関連Issue

Issue #75348(本PRが実装対応)

その他

  • Mono実装は別途対応予定
  • NativeAOT対応も含まれています
  • 公開API として追加されるため、将来のバージョンで安定性が保証されます

#123360 Align HttpListener.GetContext() exception across platforms for Stop/Abort/Close

  • 作成者: @Copilot
  • 作成日時: 2026年01月19日 19:12:10(UTC)
  • マージ日時: 2026年03月04日 13:10:02(UTC)
  • ラベル: area-System.Net

概要

HttpListener.GetContext()Stop()Abort()Close()後に呼び出した際、WindowsではHttpListenerExceptionErrorCode = 995: SocketError.OperationAborted)が発生していましたが、LinuxではErrorCode = 500: HttpStatusCode.InternalServerErrorが発生していました。このPRはLinuxの動作をWindowsに統一し、クロスプラットフォーム対応コードの一貫性を確保します。

変更内容

  • ListenerAsyncResult.Managed.cs

    • ObjectDisposedExceptionキャッチ時のエラーコードをHttpStatusCode.InternalServerErrorからSocketError.OperationAborted(995)に変更
    • using System.Net.Sockets;ディレクティブを追加
  • HttpListenerTests.cs

    • 新規テストメソッドGetContext_TerminationMethodCalled_ThrowsHttpListenerExceptionWithOperationAbortedを追加
    • xUnitの[Theory][InlineData]を用いて、Stop/Abort/Close全てのシナリオで同じエラーコード(995)が発生することを検証
    • TaskCompletionSourceを使用してレース条件を回避

パフォーマンスへの影響

影響なし。例外経路の動作統一のため、パフォーマンスに関連する変更はありません。

関連Issue

#123344(System.Net.HttpListener.GetContext()のLinux/Windowsでの例外動作の統一)

その他

  • 修正は同期的なGetContext()呼び出しにのみ適用され、BeginGetContext/EndGetContext(非同期API)には影響しません(_inGetフラグで制御)
  • 全てのプラットフォーム(Linux、Windows)で一貫した動作が実現され、クロスプラットフォームコードの堅牢性が向上
// 修正後の動作(全プラットフォーム統一)
var listener = new HttpListener();
listener.Start();
var task = Task.Run(() => listener.GetContext());
listener.Stop();

try { task.Wait(); }
catch (AggregateException ex) when (ex.InnerException is HttpListenerException hle)
{
    // Linuxも含めて、全プラットフォームで995を返すように統一
    Assert.Equal((int)SocketError.OperationAborted, hle.ErrorCode);
}

目次